@zentity/fhevm-contracts 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  {
2
- "address": "0x66E8cE76ad06f3e5bFfbD23d9c889FCC95DcE35A",
2
+ "address": "0xB74A51FCf5881c3505d902b53AD229430f7BFFeB",
3
3
  "abi": [
4
4
  {
5
5
  "inputs": [
@@ -493,30 +493,30 @@
493
493
  "type": "function"
494
494
  }
495
495
  ],
496
- "transactionHash": "0xe3e06455e590a2e556c5bb24c7c11e2dae1a325549fdbbf30b10dab4f590e18e",
496
+ "transactionHash": "0x4b35bfbf96d353fd4b615ec8aadd3a85e154bf1684852a69b49d28e4d703ecb4",
497
497
  "receipt": {
498
498
  "to": null,
499
499
  "from": "0x15CedFBe8aC7A1BC24e5a4AE8a9263EDBBdCa7e4",
500
- "contractAddress": "0x66E8cE76ad06f3e5bFfbD23d9c889FCC95DcE35A",
501
- "transactionIndex": 46,
500
+ "contractAddress": "0xB74A51FCf5881c3505d902b53AD229430f7BFFeB",
501
+ "transactionIndex": 78,
502
502
  "gasUsed": "1411383",
503
503
  "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
504
- "blockHash": "0x86e627448a9c66d98fd2bbc9b28ee96e363c751b690b65f962adcbc151b540c0",
505
- "transactionHash": "0xe3e06455e590a2e556c5bb24c7c11e2dae1a325549fdbbf30b10dab4f590e18e",
504
+ "blockHash": "0x161cb291715174d97b3b8438cca5cb93eeae33532efb250b4a403367b4fc593f",
505
+ "transactionHash": "0x4b35bfbf96d353fd4b615ec8aadd3a85e154bf1684852a69b49d28e4d703ecb4",
506
506
  "logs": [],
507
- "blockNumber": 9878762,
508
- "cumulativeGasUsed": "11347323",
507
+ "blockNumber": 9913148,
508
+ "cumulativeGasUsed": "19510925",
509
509
  "status": 1,
510
510
  "byzantium": true
511
511
  },
512
- "args": ["Zentity Token", "ZTY", "0x21c528B3C08D9Fc53b902C1Ee90a55ACa285dfe4"],
512
+ "args": ["Zentity Token", "ZTY", "0x99FA766A8e9e782361e694104657513290D2D645"],
513
513
  "numDeployments": 1,
514
- "solcInputHash": "93d280ff0d4e798a18947a9ed6015031",
515
- "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"checker\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ComplianceCheckerNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TotalSupplyOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedCiphertext\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZamaProtocolUnsupported\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newChecker\",\"type\":\"address\"}],\"name\":\"ComplianceCheckerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"currentOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"euint64\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"externalEuint64\",\"name\":\"encryptedAmount\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"inputProof\",\"type\":\"bytes\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"euint64\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"complianceChecker\",\"outputs\":[{\"internalType\":\"contract IComplianceChecker\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confidentialProtocolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"checker\",\"type\":\"address\"}],\"name\":\"setComplianceChecker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"externalEuint64\",\"name\":\"encryptedAmount\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"inputProof\",\"type\":\"bytes\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"euint64\",\"name\":\"amount\",\"type\":\"bytes32\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"externalEuint64\",\"name\":\"encryptedAmount\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"inputProof\",\"type\":\"bytes\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Zentity\",\"custom:category\":\"token\",\"custom:concept\":\"FHE.select() for branch-free compliant transfers\",\"custom:difficulty\":\"advanced This contract implements a compliant token with encrypted balances. Transfers only succeed if both parties pass compliance checks, but failures are handled silently (transfer of 0) to prevent information leakage. Key patterns demonstrated: 1. FHE.select() for branch-free conditional logic 2. Combining multiple encrypted conditions with FHE.and() 3. Encrypted balance management 4. No-revert compliance (privacy-preserving failure handling) 5. Integration with external compliance checker\",\"details\":\"Part of zentity-fhevm-contracts - Builder Track\",\"events\":{\"Approval(address,address)\":{\"params\":{\"owner\":\"Address of the token owner\",\"spender\":\"Address authorized to spend\"}},\"ComplianceCheckerUpdated(address)\":{\"params\":{\"newChecker\":\"Address of the new compliance checker\"}},\"Mint(address,uint256)\":{\"params\":{\"amount\":\"Number of tokens minted\",\"to\":\"Address receiving the minted tokens\"}},\"OwnershipTransferStarted(address,address)\":{\"params\":{\"currentOwner\":\"Current owner address\",\"pendingOwner\":\"Address that can accept ownership\"}},\"OwnershipTransferred(address,address)\":{\"params\":{\"newOwner\":\"New owner address\",\"previousOwner\":\"Previous owner address\"}},\"Transfer(address,address)\":{\"params\":{\"from\":\"Address tokens are transferred from\",\"to\":\"Address tokens are transferred to\"}}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"account\":\"Owner address\",\"spender\":\"Spender address\"},\"returns\":{\"_0\":\"Encrypted allowance\"}},\"approve(address,bytes32,bytes)\":{\"params\":{\"encryptedAmount\":\"Encrypted allowance amount\",\"inputProof\":\"Proof for encrypted input\",\"spender\":\"Address to approve\"},\"returns\":{\"success\":\"Always true\"}},\"balanceOf(address)\":{\"params\":{\"account\":\"Address to query\"},\"returns\":{\"_0\":\"Encrypted balance\"}},\"constructor\":{\"params\":{\"checker\":\"Address of the compliance checker contract\",\"tokenName\":\"Token name\",\"tokenSymbol\":\"Token symbol\"}},\"decimals()\":{\"returns\":{\"_0\":\"Token decimals\"}},\"mint(address,uint256)\":{\"details\":\"Only owner can mint. Compliance is NOT checked on mint.\",\"params\":{\"amount\":\"Amount to mint (plaintext)\",\"to\":\"Recipient address\"}},\"setComplianceChecker(address)\":{\"params\":{\"checker\":\"Address of the compliance checker\"}},\"transfer(address,bytes32)\":{\"params\":{\"amount\":\"Encrypted amount\",\"to\":\"Recipient\"},\"returns\":{\"success\":\"Always true\"}},\"transfer(address,bytes32,bytes)\":{\"details\":\"Branch-free transfer with compliance checks\",\"params\":{\"encryptedAmount\":\"Encrypted amount to transfer\",\"inputProof\":\"Proof for encrypted input\",\"to\":\"Recipient address\"},\"returns\":{\"success\":\"Always returns true (actual transfer amount may be 0) Key insight: We never revert on failed compliance. Instead: - If compliant: transfer the requested amount - If not compliant: transfer 0 (no state change, no info leak)\"}},\"transferFrom(address,address,bytes32,bytes)\":{\"params\":{\"encryptedAmount\":\"Encrypted amount\",\"from\":\"Source address\",\"inputProof\":\"Proof for encrypted input\",\"to\":\"Destination address\"},\"returns\":{\"success\":\"Always true\"}},\"transferOwnership(address)\":{\"params\":{\"newOwner\":\"Address that can accept ownership\"}}},\"title\":\"CompliantERC20\",\"version\":1},\"userdoc\":{\"errors\":{\"ComplianceCheckerNotSet()\":[{\"notice\":\"Thrown when compliance checker is required but not set\"}],\"InvalidOwner()\":[{\"notice\":\"Thrown when new owner is the zero address\"}],\"OnlyOwner()\":[{\"notice\":\"Thrown when caller is not the contract owner\"}],\"OnlyPendingOwner()\":[{\"notice\":\"Thrown when caller is not the pending owner\"}],\"TotalSupplyOverflow()\":[{\"notice\":\"Thrown when mint amount would exceed uint64 accounting bounds\"}],\"UnauthorizedCiphertext()\":[{\"notice\":\"Thrown when caller supplies an unauthorized ciphertext handle\"}],\"ZamaProtocolUnsupported()\":[{\"notice\":\"Returned if the Zama protocol is not supported on the current chain\"}]},\"events\":{\"Approval(address,address)\":{\"notice\":\"Emitted when spending allowance is set\"},\"ComplianceCheckerUpdated(address)\":{\"notice\":\"Emitted when the compliance checker contract is updated\"},\"Mint(address,uint256)\":{\"notice\":\"Emitted when new tokens are minted\"},\"OwnershipTransferStarted(address,address)\":{\"notice\":\"Emitted when ownership transfer is initiated\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Emitted when ownership transfer is completed\"},\"Transfer(address,address)\":{\"notice\":\"Emitted on token transfers (indexed for efficient filtering)\"}},\"kind\":\"user\",\"methods\":{\"DECIMALS()\":{\"notice\":\"Token decimals\"},\"acceptOwnership()\":{\"notice\":\"Accept ownership transfer\"},\"allowance(address,address)\":{\"notice\":\"Get encrypted allowance\"},\"approve(address,bytes32,bytes)\":{\"notice\":\"Approve spender to transfer tokens\"},\"balanceOf(address)\":{\"notice\":\"Get encrypted balance\"},\"complianceChecker()\":{\"notice\":\"Compliance checker interface (can be ComplianceRules or custom)\"},\"constructor\":{\"notice\":\"Initialize the token\"},\"decimals()\":{\"notice\":\"Get decimals\"},\"mint(address,uint256)\":{\"notice\":\"Mint tokens to an address\"},\"name()\":{\"notice\":\"Token name\"},\"owner()\":{\"notice\":\"Owner/admin\"},\"pendingOwner()\":{\"notice\":\"Pending owner for two-step ownership transfer\"},\"setComplianceChecker(address)\":{\"notice\":\"Set the compliance checker contract\"},\"symbol()\":{\"notice\":\"Token symbol\"},\"totalSupply()\":{\"notice\":\"Total supply (public for transparency)\"},\"transfer(address,bytes32)\":{\"notice\":\"Transfer with euint64 amount (for approved callers)\"},\"transfer(address,bytes32,bytes)\":{\"notice\":\"Transfer tokens with encrypted amount\"},\"transferFrom(address,address,bytes32,bytes)\":{\"notice\":\"Transfer from another account (requires approval)\"},\"transferOwnership(address)\":{\"notice\":\"Initiate transfer of contract ownership\"}},\"notice\":\"ERC20-like token with encrypted balances and compliance checks\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/tokens/CompliantERC20.sol\":\"CompliantERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@fhevm/solidity/config/ZamaConfig.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport {FHE} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\nimport {CoprocessorConfig} from \\\"@fhevm/solidity/lib/Impl.sol\\\";\\n\\n/**\\n * @title ZamaConfig.\\n * @notice This library returns the FHEVM config for different networks\\n * with the contract addresses for (1) ACL, (2) CoprocessorAddress, (3) KMSVerifier,\\n * which are deployed & maintained by Zama.\\n */\\nlibrary ZamaConfig {\\n /// @notice Returned if the Zama protocol is not supported on the current chain\\n error ZamaProtocolUnsupported();\\n\\n function getEthereumCoprocessorConfig() internal view returns (CoprocessorConfig memory config) {\\n if (block.chainid == 1) {\\n config = _getEthereumConfig();\\n } else if (block.chainid == 11155111) {\\n config = _getSepoliaConfig();\\n } else if (block.chainid == 31337) {\\n config = _getLocalConfig();\\n } else {\\n revert ZamaProtocolUnsupported();\\n }\\n }\\n\\n function getConfidentialProtocolId() internal view returns (uint256) {\\n if (block.chainid == 1) {\\n return _getEthereumProtocolId();\\n } else if (block.chainid == 11155111) {\\n return _getSepoliaProtocolId();\\n } else if (block.chainid == 31337) {\\n return _getLocalProtocolId();\\n }\\n return 0;\\n }\\n\\n /// @dev chainid == 1\\n function _getEthereumProtocolId() private pure returns (uint256) {\\n // Zama Ethereum protocol id is '1'\\n return 1;\\n }\\n\\n /// @dev chainid == 1\\n function _getEthereumConfig() private pure returns (CoprocessorConfig memory) {\\n // The addresses below are placeholders and should be replaced with actual addresses\\n // once deployed on the Ethereum mainnet.\\n return\\n CoprocessorConfig({ACLAddress: address(0), CoprocessorAddress: address(0), KMSVerifierAddress: address(0)});\\n }\\n\\n /// @dev chainid == 11155111\\n function _getSepoliaProtocolId() private pure returns (uint256) {\\n // Zama Ethereum Sepolia protocol id is '10000 + Zama Ethereum protocol id'\\n return 10001;\\n }\\n\\n /// @dev chainid == 11155111\\n function _getSepoliaConfig() private pure returns (CoprocessorConfig memory) {\\n return\\n CoprocessorConfig({\\n ACLAddress: 0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D,\\n CoprocessorAddress: 0x92C920834Ec8941d2C77D188936E1f7A6f49c127,\\n KMSVerifierAddress: 0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A\\n });\\n }\\n\\n /// @dev chainid == 31337\\n function _getLocalProtocolId() private pure returns (uint256) {\\n return type(uint256).max;\\n }\\n\\n function _getLocalConfig() private pure returns (CoprocessorConfig memory) {\\n return\\n CoprocessorConfig({\\n ACLAddress: 0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D,\\n CoprocessorAddress: 0x92C920834Ec8941d2C77D188936E1f7A6f49c127,\\n KMSVerifierAddress: 0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A\\n });\\n }\\n}\\n\\n/**\\n * @title ZamaEthereumConfig.\\n * @dev This contract can be inherited by a contract wishing to use the FHEVM contracts provided by Zama\\n * on the Ethereum (mainnet) network (chainId = 1) or Sepolia (testnet) network (chainId = 11155111).\\n * Other providers may offer similar contracts deployed at different addresses.\\n * If you wish to use them, you should rely on the instructions from these providers.\\n */\\nabstract contract ZamaEthereumConfig {\\n constructor() {\\n FHE.setCoprocessor(ZamaConfig.getEthereumCoprocessorConfig());\\n }\\n\\n function confidentialProtocolId() public view returns (uint256) {\\n return ZamaConfig.getConfidentialProtocolId();\\n }\\n}\\n\",\"keccak256\":\"0xa6e5421fb2a631825a980896055598620b5959bd1f5222031d95515fc1eb2a99\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/FHE.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport \\\"./Impl.sol\\\";\\nimport {FheType} from \\\"./FheType.sol\\\";\\n\\nimport \\\"encrypted-types/EncryptedTypes.sol\\\";\\n\\n/**\\n * @title IKMSVerifier\\n * @notice This interface contains the only function required from KMSVerifier.\\n */\\ninterface IKMSVerifier {\\n function verifyDecryptionEIP712KMSSignatures(\\n bytes32[] memory handlesList,\\n bytes memory decryptedResult,\\n bytes memory decryptionProof\\n ) external returns (bool);\\n}\\n\\n/**\\n * @title FHE\\n * @notice This library is the interaction point for all smart contract developers\\n * that interact with the FHEVM protocol.\\n */\\nlibrary FHE {\\n /// @notice Returned if the returned KMS signatures are not valid.\\n error InvalidKMSSignatures();\\n\\n /// @notice This event is emitted when public decryption has been successfully verified.\\n event PublicDecryptionVerified(bytes32[] handlesList, bytes abiEncodedCleartexts);\\n\\n /**\\n * @notice Sets the coprocessor addresses.\\n * @param coprocessorConfig Coprocessor config struct that contains contract addresses.\\n */\\n function setCoprocessor(CoprocessorConfig memory coprocessorConfig) internal {\\n Impl.setCoprocessor(coprocessorConfig);\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(ebool v) internal pure returns (bool) {\\n return ebool.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint8 v) internal pure returns (bool) {\\n return euint8.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint16 v) internal pure returns (bool) {\\n return euint16.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint32 v) internal pure returns (bool) {\\n return euint32.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint64 v) internal pure returns (bool) {\\n return euint64.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint128 v) internal pure returns (bool) {\\n return euint128.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(eaddress v) internal pure returns (bool) {\\n return eaddress.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint256 v) internal pure returns (bool) {\\n return euint256.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Evaluates and(ebool a, ebool b) and returns the result.\\n */\\n function and(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(ebool a, ebool b) and returns the result.\\n */\\n function or(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(ebool a, ebool b) and returns the result.\\n */\\n function xor(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(ebool a, ebool b) and returns the result.\\n */\\n function eq(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(ebool a, ebool b) and returns the result.\\n */\\n function ne(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint8 b) and returns the result.\\n */\\n function add(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint8 b) and returns the result.\\n */\\n function sub(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint8 b) and returns the result.\\n */\\n function mul(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint8 b) and returns the result.\\n */\\n function and(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint8 b) and returns the result.\\n */\\n function or(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint8 b) and returns the result.\\n */\\n function xor(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint8 b) and returns the result.\\n */\\n function eq(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint8 b) and returns the result.\\n */\\n function ne(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint8 b) and returns the result.\\n */\\n function ge(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint8 b) and returns the result.\\n */\\n function gt(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint8 b) and returns the result.\\n */\\n function le(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint8 b) and returns the result.\\n */\\n function lt(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint8 b) and returns the result.\\n */\\n function min(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint8 b) and returns the result.\\n */\\n function max(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint16 b) and returns the result.\\n */\\n function add(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint16 b) and returns the result.\\n */\\n function sub(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint16 b) and returns the result.\\n */\\n function mul(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint16 b) and returns the result.\\n */\\n function and(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint16 b) and returns the result.\\n */\\n function or(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint16 b) and returns the result.\\n */\\n function xor(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint16 b) and returns the result.\\n */\\n function eq(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint16 b) and returns the result.\\n */\\n function ne(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint16 b) and returns the result.\\n */\\n function ge(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint16 b) and returns the result.\\n */\\n function gt(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint16 b) and returns the result.\\n */\\n function le(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint16 b) and returns the result.\\n */\\n function lt(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint16 b) and returns the result.\\n */\\n function min(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint16 b) and returns the result.\\n */\\n function max(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint32 b) and returns the result.\\n */\\n function add(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint32 b) and returns the result.\\n */\\n function sub(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint32 b) and returns the result.\\n */\\n function mul(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint32 b) and returns the result.\\n */\\n function and(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint32 b) and returns the result.\\n */\\n function or(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint32 b) and returns the result.\\n */\\n function xor(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint32 b) and returns the result.\\n */\\n function eq(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint32 b) and returns the result.\\n */\\n function ne(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint32 b) and returns the result.\\n */\\n function ge(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint32 b) and returns the result.\\n */\\n function gt(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint32 b) and returns the result.\\n */\\n function le(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint32 b) and returns the result.\\n */\\n function lt(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint32 b) and returns the result.\\n */\\n function min(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint32 b) and returns the result.\\n */\\n function max(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint64 b) and returns the result.\\n */\\n function add(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint64 b) and returns the result.\\n */\\n function sub(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint64 b) and returns the result.\\n */\\n function mul(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint64 b) and returns the result.\\n */\\n function and(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint64 b) and returns the result.\\n */\\n function or(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint64 b) and returns the result.\\n */\\n function xor(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint64 b) and returns the result.\\n */\\n function eq(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint64 b) and returns the result.\\n */\\n function ne(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint64 b) and returns the result.\\n */\\n function ge(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint64 b) and returns the result.\\n */\\n function gt(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint64 b) and returns the result.\\n */\\n function le(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint64 b) and returns the result.\\n */\\n function lt(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint64 b) and returns the result.\\n */\\n function min(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint64 b) and returns the result.\\n */\\n function max(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint128 b) and returns the result.\\n */\\n function add(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint128 b) and returns the result.\\n */\\n function sub(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint128 b) and returns the result.\\n */\\n function mul(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint128 b) and returns the result.\\n */\\n function and(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint128 b) and returns the result.\\n */\\n function or(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint128 b) and returns the result.\\n */\\n function xor(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint128 b) and returns the result.\\n */\\n function eq(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint128 b) and returns the result.\\n */\\n function ne(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint128 b) and returns the result.\\n */\\n function ge(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint128 b) and returns the result.\\n */\\n function gt(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint128 b) and returns the result.\\n */\\n function le(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint128 b) and returns the result.\\n */\\n function lt(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint128 b) and returns the result.\\n */\\n function min(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint128 b) and returns the result.\\n */\\n function max(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint256 b) and returns the result.\\n */\\n function and(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint256 b) and returns the result.\\n */\\n function or(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint256 b) and returns the result.\\n */\\n function xor(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint256 b) and returns the result.\\n */\\n function eq(euint8 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint256 b) and returns the result.\\n */\\n function ne(euint8 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint8 b) and returns the result.\\n */\\n function add(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint8 b) and returns the result.\\n */\\n function sub(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint8 b) and returns the result.\\n */\\n function mul(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint8 b) and returns the result.\\n */\\n function and(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint8 b) and returns the result.\\n */\\n function or(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint8 b) and returns the result.\\n */\\n function xor(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint8 b) and returns the result.\\n */\\n function eq(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint8 b) and returns the result.\\n */\\n function ne(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint8 b) and returns the result.\\n */\\n function ge(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint8 b) and returns the result.\\n */\\n function gt(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint8 b) and returns the result.\\n */\\n function le(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint8 b) and returns the result.\\n */\\n function lt(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint8 b) and returns the result.\\n */\\n function min(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint8 b) and returns the result.\\n */\\n function max(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint16 b) and returns the result.\\n */\\n function add(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint16 b) and returns the result.\\n */\\n function sub(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint16 b) and returns the result.\\n */\\n function mul(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint16 b) and returns the result.\\n */\\n function and(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint16 b) and returns the result.\\n */\\n function or(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint16 b) and returns the result.\\n */\\n function xor(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint16 b) and returns the result.\\n */\\n function eq(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint16 b) and returns the result.\\n */\\n function ne(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint16 b) and returns the result.\\n */\\n function ge(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint16 b) and returns the result.\\n */\\n function gt(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint16 b) and returns the result.\\n */\\n function le(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint16 b) and returns the result.\\n */\\n function lt(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint16 b) and returns the result.\\n */\\n function min(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint16 b) and returns the result.\\n */\\n function max(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint32 b) and returns the result.\\n */\\n function add(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint32 b) and returns the result.\\n */\\n function sub(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint32 b) and returns the result.\\n */\\n function mul(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint32 b) and returns the result.\\n */\\n function and(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint32 b) and returns the result.\\n */\\n function or(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint32 b) and returns the result.\\n */\\n function xor(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint32 b) and returns the result.\\n */\\n function eq(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint32 b) and returns the result.\\n */\\n function ne(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint32 b) and returns the result.\\n */\\n function ge(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint32 b) and returns the result.\\n */\\n function gt(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint32 b) and returns the result.\\n */\\n function le(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint32 b) and returns the result.\\n */\\n function lt(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint32 b) and returns the result.\\n */\\n function min(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint32 b) and returns the result.\\n */\\n function max(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint64 b) and returns the result.\\n */\\n function add(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint64 b) and returns the result.\\n */\\n function sub(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint64 b) and returns the result.\\n */\\n function mul(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint64 b) and returns the result.\\n */\\n function and(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint64 b) and returns the result.\\n */\\n function or(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint64 b) and returns the result.\\n */\\n function xor(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint64 b) and returns the result.\\n */\\n function eq(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint64 b) and returns the result.\\n */\\n function ne(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint64 b) and returns the result.\\n */\\n function ge(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint64 b) and returns the result.\\n */\\n function gt(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint64 b) and returns the result.\\n */\\n function le(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint64 b) and returns the result.\\n */\\n function lt(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint64 b) and returns the result.\\n */\\n function min(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint64 b) and returns the result.\\n */\\n function max(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint128 b) and returns the result.\\n */\\n function add(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint128 b) and returns the result.\\n */\\n function sub(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint128 b) and returns the result.\\n */\\n function mul(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint128 b) and returns the result.\\n */\\n function and(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint128 b) and returns the result.\\n */\\n function or(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint128 b) and returns the result.\\n */\\n function xor(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint128 b) and returns the result.\\n */\\n function eq(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint128 b) and returns the result.\\n */\\n function ne(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint128 b) and returns the result.\\n */\\n function ge(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint128 b) and returns the result.\\n */\\n function gt(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint128 b) and returns the result.\\n */\\n function le(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint128 b) and returns the result.\\n */\\n function lt(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint128 b) and returns the result.\\n */\\n function min(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint128 b) and returns the result.\\n */\\n function max(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint256 b) and returns the result.\\n */\\n function and(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint256 b) and returns the result.\\n */\\n function or(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint256 b) and returns the result.\\n */\\n function xor(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint256 b) and returns the result.\\n */\\n function eq(euint16 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint256 b) and returns the result.\\n */\\n function ne(euint16 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint8 b) and returns the result.\\n */\\n function add(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint8 b) and returns the result.\\n */\\n function sub(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint8 b) and returns the result.\\n */\\n function mul(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint8 b) and returns the result.\\n */\\n function and(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint8 b) and returns the result.\\n */\\n function or(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint8 b) and returns the result.\\n */\\n function xor(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint8 b) and returns the result.\\n */\\n function eq(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint8 b) and returns the result.\\n */\\n function ne(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint8 b) and returns the result.\\n */\\n function ge(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint8 b) and returns the result.\\n */\\n function gt(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint8 b) and returns the result.\\n */\\n function le(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint8 b) and returns the result.\\n */\\n function lt(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint8 b) and returns the result.\\n */\\n function min(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint8 b) and returns the result.\\n */\\n function max(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint16 b) and returns the result.\\n */\\n function add(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint16 b) and returns the result.\\n */\\n function sub(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint16 b) and returns the result.\\n */\\n function mul(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint16 b) and returns the result.\\n */\\n function and(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint16 b) and returns the result.\\n */\\n function or(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint16 b) and returns the result.\\n */\\n function xor(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint16 b) and returns the result.\\n */\\n function eq(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint16 b) and returns the result.\\n */\\n function ne(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint16 b) and returns the result.\\n */\\n function ge(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint16 b) and returns the result.\\n */\\n function gt(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint16 b) and returns the result.\\n */\\n function le(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint16 b) and returns the result.\\n */\\n function lt(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint16 b) and returns the result.\\n */\\n function min(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint16 b) and returns the result.\\n */\\n function max(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint32 b) and returns the result.\\n */\\n function add(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint32 b) and returns the result.\\n */\\n function sub(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint32 b) and returns the result.\\n */\\n function mul(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint32 b) and returns the result.\\n */\\n function and(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint32 b) and returns the result.\\n */\\n function or(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint32 b) and returns the result.\\n */\\n function xor(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint32 b) and returns the result.\\n */\\n function eq(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint32 b) and returns the result.\\n */\\n function ne(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint32 b) and returns the result.\\n */\\n function ge(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint32 b) and returns the result.\\n */\\n function gt(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint32 b) and returns the result.\\n */\\n function le(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint32 b) and returns the result.\\n */\\n function lt(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint32 b) and returns the result.\\n */\\n function min(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint32 b) and returns the result.\\n */\\n function max(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint64 b) and returns the result.\\n */\\n function add(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint64 b) and returns the result.\\n */\\n function sub(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint64 b) and returns the result.\\n */\\n function mul(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint64 b) and returns the result.\\n */\\n function and(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint64 b) and returns the result.\\n */\\n function or(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint64 b) and returns the result.\\n */\\n function xor(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint64 b) and returns the result.\\n */\\n function eq(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint64 b) and returns the result.\\n */\\n function ne(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint64 b) and returns the result.\\n */\\n function ge(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint64 b) and returns the result.\\n */\\n function gt(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint64 b) and returns the result.\\n */\\n function le(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint64 b) and returns the result.\\n */\\n function lt(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint64 b) and returns the result.\\n */\\n function min(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint64 b) and returns the result.\\n */\\n function max(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint128 b) and returns the result.\\n */\\n function add(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint128 b) and returns the result.\\n */\\n function sub(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint128 b) and returns the result.\\n */\\n function mul(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint128 b) and returns the result.\\n */\\n function and(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint128 b) and returns the result.\\n */\\n function or(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint128 b) and returns the result.\\n */\\n function xor(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint128 b) and returns the result.\\n */\\n function eq(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint128 b) and returns the result.\\n */\\n function ne(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint128 b) and returns the result.\\n */\\n function ge(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint128 b) and returns the result.\\n */\\n function gt(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint128 b) and returns the result.\\n */\\n function le(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint128 b) and returns the result.\\n */\\n function lt(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint128 b) and returns the result.\\n */\\n function min(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint128 b) and returns the result.\\n */\\n function max(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint256 b) and returns the result.\\n */\\n function and(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint256 b) and returns the result.\\n */\\n function or(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint256 b) and returns the result.\\n */\\n function xor(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint256 b) and returns the result.\\n */\\n function eq(euint32 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint256 b) and returns the result.\\n */\\n function ne(euint32 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint8 b) and returns the result.\\n */\\n function add(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint8 b) and returns the result.\\n */\\n function sub(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint8 b) and returns the result.\\n */\\n function mul(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint8 b) and returns the result.\\n */\\n function and(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint8 b) and returns the result.\\n */\\n function or(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint8 b) and returns the result.\\n */\\n function xor(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint8 b) and returns the result.\\n */\\n function eq(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint8 b) and returns the result.\\n */\\n function ne(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint8 b) and returns the result.\\n */\\n function ge(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint8 b) and returns the result.\\n */\\n function gt(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint8 b) and returns the result.\\n */\\n function le(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint8 b) and returns the result.\\n */\\n function lt(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint8 b) and returns the result.\\n */\\n function min(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint8 b) and returns the result.\\n */\\n function max(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint16 b) and returns the result.\\n */\\n function add(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint16 b) and returns the result.\\n */\\n function sub(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint16 b) and returns the result.\\n */\\n function mul(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint16 b) and returns the result.\\n */\\n function and(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint16 b) and returns the result.\\n */\\n function or(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint16 b) and returns the result.\\n */\\n function xor(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint16 b) and returns the result.\\n */\\n function eq(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint16 b) and returns the result.\\n */\\n function ne(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint16 b) and returns the result.\\n */\\n function ge(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint16 b) and returns the result.\\n */\\n function gt(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint16 b) and returns the result.\\n */\\n function le(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint16 b) and returns the result.\\n */\\n function lt(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint16 b) and returns the result.\\n */\\n function min(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint16 b) and returns the result.\\n */\\n function max(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint32 b) and returns the result.\\n */\\n function add(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint32 b) and returns the result.\\n */\\n function sub(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint32 b) and returns the result.\\n */\\n function mul(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint32 b) and returns the result.\\n */\\n function and(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint32 b) and returns the result.\\n */\\n function or(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint32 b) and returns the result.\\n */\\n function xor(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint32 b) and returns the result.\\n */\\n function eq(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint32 b) and returns the result.\\n */\\n function ne(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint32 b) and returns the result.\\n */\\n function ge(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint32 b) and returns the result.\\n */\\n function gt(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint32 b) and returns the result.\\n */\\n function le(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint32 b) and returns the result.\\n */\\n function lt(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint32 b) and returns the result.\\n */\\n function min(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint32 b) and returns the result.\\n */\\n function max(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint64 b) and returns the result.\\n */\\n function add(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint64 b) and returns the result.\\n */\\n function sub(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint64 b) and returns the result.\\n */\\n function mul(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint64 b) and returns the result.\\n */\\n function and(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint64 b) and returns the result.\\n */\\n function or(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint64 b) and returns the result.\\n */\\n function xor(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint64 b) and returns the result.\\n */\\n function eq(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint64 b) and returns the result.\\n */\\n function ne(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint64 b) and returns the result.\\n */\\n function ge(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint64 b) and returns the result.\\n */\\n function gt(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint64 b) and returns the result.\\n */\\n function le(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint64 b) and returns the result.\\n */\\n function lt(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint64 b) and returns the result.\\n */\\n function min(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint64 b) and returns the result.\\n */\\n function max(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint128 b) and returns the result.\\n */\\n function add(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint128 b) and returns the result.\\n */\\n function sub(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint128 b) and returns the result.\\n */\\n function mul(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint128 b) and returns the result.\\n */\\n function and(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint128 b) and returns the result.\\n */\\n function or(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint128 b) and returns the result.\\n */\\n function xor(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint128 b) and returns the result.\\n */\\n function eq(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint128 b) and returns the result.\\n */\\n function ne(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint128 b) and returns the result.\\n */\\n function ge(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint128 b) and returns the result.\\n */\\n function gt(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint128 b) and returns the result.\\n */\\n function le(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint128 b) and returns the result.\\n */\\n function lt(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint128 b) and returns the result.\\n */\\n function min(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint128 b) and returns the result.\\n */\\n function max(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint256 b) and returns the result.\\n */\\n function and(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint256 b) and returns the result.\\n */\\n function or(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint256 b) and returns the result.\\n */\\n function xor(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint256 b) and returns the result.\\n */\\n function eq(euint64 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint256 b) and returns the result.\\n */\\n function ne(euint64 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint8 b) and returns the result.\\n */\\n function add(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint8 b) and returns the result.\\n */\\n function sub(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint8 b) and returns the result.\\n */\\n function mul(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint8 b) and returns the result.\\n */\\n function and(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint8 b) and returns the result.\\n */\\n function or(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint8 b) and returns the result.\\n */\\n function xor(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint8 b) and returns the result.\\n */\\n function eq(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint8 b) and returns the result.\\n */\\n function ne(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint8 b) and returns the result.\\n */\\n function ge(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint8 b) and returns the result.\\n */\\n function gt(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint8 b) and returns the result.\\n */\\n function le(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint8 b) and returns the result.\\n */\\n function lt(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint8 b) and returns the result.\\n */\\n function min(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint8 b) and returns the result.\\n */\\n function max(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint16 b) and returns the result.\\n */\\n function add(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint16 b) and returns the result.\\n */\\n function sub(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint16 b) and returns the result.\\n */\\n function mul(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint16 b) and returns the result.\\n */\\n function and(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint16 b) and returns the result.\\n */\\n function or(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint16 b) and returns the result.\\n */\\n function xor(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint16 b) and returns the result.\\n */\\n function eq(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint16 b) and returns the result.\\n */\\n function ne(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint16 b) and returns the result.\\n */\\n function ge(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint16 b) and returns the result.\\n */\\n function gt(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint16 b) and returns the result.\\n */\\n function le(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint16 b) and returns the result.\\n */\\n function lt(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint16 b) and returns the result.\\n */\\n function min(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint16 b) and returns the result.\\n */\\n function max(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint32 b) and returns the result.\\n */\\n function add(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint32 b) and returns the result.\\n */\\n function sub(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint32 b) and returns the result.\\n */\\n function mul(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint32 b) and returns the result.\\n */\\n function and(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint32 b) and returns the result.\\n */\\n function or(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint32 b) and returns the result.\\n */\\n function xor(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint32 b) and returns the result.\\n */\\n function eq(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint32 b) and returns the result.\\n */\\n function ne(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint32 b) and returns the result.\\n */\\n function ge(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint32 b) and returns the result.\\n */\\n function gt(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint32 b) and returns the result.\\n */\\n function le(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint32 b) and returns the result.\\n */\\n function lt(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint32 b) and returns the result.\\n */\\n function min(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint32 b) and returns the result.\\n */\\n function max(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint64 b) and returns the result.\\n */\\n function add(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint64 b) and returns the result.\\n */\\n function sub(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint64 b) and returns the result.\\n */\\n function mul(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint64 b) and returns the result.\\n */\\n function and(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint64 b) and returns the result.\\n */\\n function or(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint64 b) and returns the result.\\n */\\n function xor(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint64 b) and returns the result.\\n */\\n function eq(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint64 b) and returns the result.\\n */\\n function ne(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint64 b) and returns the result.\\n */\\n function ge(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint64 b) and returns the result.\\n */\\n function gt(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint64 b) and returns the result.\\n */\\n function le(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint64 b) and returns the result.\\n */\\n function lt(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint64 b) and returns the result.\\n */\\n function min(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint64 b) and returns the result.\\n */\\n function max(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint128 b) and returns the result.\\n */\\n function add(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint128 b) and returns the result.\\n */\\n function sub(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint128 b) and returns the result.\\n */\\n function mul(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint128 b) and returns the result.\\n */\\n function and(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint128 b) and returns the result.\\n */\\n function or(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint128 b) and returns the result.\\n */\\n function xor(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint128 b) and returns the result.\\n */\\n function eq(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint128 b) and returns the result.\\n */\\n function ne(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint128 b) and returns the result.\\n */\\n function ge(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint128 b) and returns the result.\\n */\\n function gt(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint128 b) and returns the result.\\n */\\n function le(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint128 b) and returns the result.\\n */\\n function lt(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint128 b) and returns the result.\\n */\\n function min(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint128 b) and returns the result.\\n */\\n function max(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint256 b) and returns the result.\\n */\\n function and(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint256 b) and returns the result.\\n */\\n function or(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint256 b) and returns the result.\\n */\\n function xor(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint256 b) and returns the result.\\n */\\n function eq(euint128 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint256 b) and returns the result.\\n */\\n function ne(euint128 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(eaddress a, eaddress b) and returns the result.\\n */\\n function eq(eaddress a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(a), eaddress.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(eaddress a, eaddress b) and returns the result.\\n */\\n function ne(eaddress a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(a), eaddress.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint8 b) and returns the result.\\n */\\n function and(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint8 b) and returns the result.\\n */\\n function or(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint8 b) and returns the result.\\n */\\n function xor(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint8 b) and returns the result.\\n */\\n function eq(euint256 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint8 b) and returns the result.\\n */\\n function ne(euint256 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint16 b) and returns the result.\\n */\\n function and(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint16 b) and returns the result.\\n */\\n function or(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint16 b) and returns the result.\\n */\\n function xor(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint16 b) and returns the result.\\n */\\n function eq(euint256 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint16 b) and returns the result.\\n */\\n function ne(euint256 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint32 b) and returns the result.\\n */\\n function and(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint32 b) and returns the result.\\n */\\n function or(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint32 b) and returns the result.\\n */\\n function xor(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint32 b) and returns the result.\\n */\\n function eq(euint256 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint32 b) and returns the result.\\n */\\n function ne(euint256 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint64 b) and returns the result.\\n */\\n function and(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint64 b) and returns the result.\\n */\\n function or(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint64 b) and returns the result.\\n */\\n function xor(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint64 b) and returns the result.\\n */\\n function eq(euint256 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint64 b) and returns the result.\\n */\\n function ne(euint256 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint128 b) and returns the result.\\n */\\n function and(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint128 b) and returns the result.\\n */\\n function or(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint128 b) and returns the result.\\n */\\n function xor(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint128 b) and returns the result.\\n */\\n function eq(euint256 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint128 b) and returns the result.\\n */\\n function ne(euint256 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint256 b) and returns the result.\\n */\\n function and(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint256 b) and returns the result.\\n */\\n function or(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint256 b) and returns the result.\\n */\\n function xor(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint256 b) and returns the result.\\n */\\n function eq(euint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint256 b) and returns the result.\\n */\\n function ne(euint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(ebool a, bool b) and returns the result.\\n */\\n function and(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(bool a, ebool b) and returns the result.\\n */\\n function and(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(ebool a, bool b) and returns the result.\\n */\\n function or(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(bool a, ebool b) and returns the result.\\n */\\n function or(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(ebool a, bool b) and returns the result.\\n */\\n function xor(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(bool a, ebool b) and returns the result.\\n */\\n function xor(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(ebool a, bool b) and returns the result.\\n */\\n function eq(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(bool a, ebool b) and returns the result.\\n */\\n function eq(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(ebool a, bool b) and returns the result.\\n */\\n function ne(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(bool a, ebool b) and returns the result.\\n */\\n function ne(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, uint8 b) and returns the result.\\n */\\n function add(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint8 a, euint8 b) and returns the result.\\n */\\n function add(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, uint8 b) and returns the result.\\n */\\n function sub(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint8 a, euint8 b) and returns the result.\\n */\\n function sub(uint8 a, euint8 b) internal returns (euint8) {\\n euint8 aEnc = asEuint8(a);\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(aEnc), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, uint8 b) and returns the result.\\n */\\n function mul(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint8 a, euint8 b) and returns the result.\\n */\\n function mul(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint8 a, uint8 b) and returns the result.\\n */\\n function div(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.div(euint8.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint8 a, uint8 b) and returns the result.\\n */\\n function rem(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rem(euint8.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, uint8 b) and returns the result.\\n */\\n function and(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint8 a, euint8 b) and returns the result.\\n */\\n function and(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, uint8 b) and returns the result.\\n */\\n function or(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint8 a, euint8 b) and returns the result.\\n */\\n function or(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, uint8 b) and returns the result.\\n */\\n function xor(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint8 a, euint8 b) and returns the result.\\n */\\n function xor(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, uint8 b) and returns the result.\\n */\\n function eq(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint8 a, euint8 b) and returns the result.\\n */\\n function eq(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, uint8 b) and returns the result.\\n */\\n function ne(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint8 a, euint8 b) and returns the result.\\n */\\n function ne(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, uint8 b) and returns the result.\\n */\\n function ge(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint8 a, euint8 b) and returns the result.\\n */\\n function ge(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, uint8 b) and returns the result.\\n */\\n function gt(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint8 a, euint8 b) and returns the result.\\n */\\n function gt(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, uint8 b) and returns the result.\\n */\\n function le(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint8 a, euint8 b) and returns the result.\\n */\\n function le(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, uint8 b) and returns the result.\\n */\\n function lt(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint8 a, euint8 b) and returns the result.\\n */\\n function lt(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, uint8 b) and returns the result.\\n */\\n function min(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint8 a, euint8 b) and returns the result.\\n */\\n function min(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, uint8 b) and returns the result.\\n */\\n function max(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint8 a, euint8 b) and returns the result.\\n */\\n function max(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, uint16 b) and returns the result.\\n */\\n function add(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint16 a, euint16 b) and returns the result.\\n */\\n function add(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, uint16 b) and returns the result.\\n */\\n function sub(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint16 a, euint16 b) and returns the result.\\n */\\n function sub(uint16 a, euint16 b) internal returns (euint16) {\\n euint16 aEnc = asEuint16(a);\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(aEnc), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, uint16 b) and returns the result.\\n */\\n function mul(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint16 a, euint16 b) and returns the result.\\n */\\n function mul(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint16 a, uint16 b) and returns the result.\\n */\\n function div(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.div(euint16.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint16 a, uint16 b) and returns the result.\\n */\\n function rem(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rem(euint16.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, uint16 b) and returns the result.\\n */\\n function and(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint16 a, euint16 b) and returns the result.\\n */\\n function and(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, uint16 b) and returns the result.\\n */\\n function or(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint16 a, euint16 b) and returns the result.\\n */\\n function or(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, uint16 b) and returns the result.\\n */\\n function xor(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint16 a, euint16 b) and returns the result.\\n */\\n function xor(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, uint16 b) and returns the result.\\n */\\n function eq(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint16 a, euint16 b) and returns the result.\\n */\\n function eq(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, uint16 b) and returns the result.\\n */\\n function ne(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint16 a, euint16 b) and returns the result.\\n */\\n function ne(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, uint16 b) and returns the result.\\n */\\n function ge(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint16 a, euint16 b) and returns the result.\\n */\\n function ge(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, uint16 b) and returns the result.\\n */\\n function gt(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint16 a, euint16 b) and returns the result.\\n */\\n function gt(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, uint16 b) and returns the result.\\n */\\n function le(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint16 a, euint16 b) and returns the result.\\n */\\n function le(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, uint16 b) and returns the result.\\n */\\n function lt(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint16 a, euint16 b) and returns the result.\\n */\\n function lt(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, uint16 b) and returns the result.\\n */\\n function min(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint16 a, euint16 b) and returns the result.\\n */\\n function min(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, uint16 b) and returns the result.\\n */\\n function max(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint16 a, euint16 b) and returns the result.\\n */\\n function max(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, uint32 b) and returns the result.\\n */\\n function add(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint32 a, euint32 b) and returns the result.\\n */\\n function add(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, uint32 b) and returns the result.\\n */\\n function sub(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint32 a, euint32 b) and returns the result.\\n */\\n function sub(uint32 a, euint32 b) internal returns (euint32) {\\n euint32 aEnc = asEuint32(a);\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(aEnc), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, uint32 b) and returns the result.\\n */\\n function mul(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint32 a, euint32 b) and returns the result.\\n */\\n function mul(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint32 a, uint32 b) and returns the result.\\n */\\n function div(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.div(euint32.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint32 a, uint32 b) and returns the result.\\n */\\n function rem(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rem(euint32.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, uint32 b) and returns the result.\\n */\\n function and(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint32 a, euint32 b) and returns the result.\\n */\\n function and(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, uint32 b) and returns the result.\\n */\\n function or(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint32 a, euint32 b) and returns the result.\\n */\\n function or(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, uint32 b) and returns the result.\\n */\\n function xor(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint32 a, euint32 b) and returns the result.\\n */\\n function xor(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, uint32 b) and returns the result.\\n */\\n function eq(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint32 a, euint32 b) and returns the result.\\n */\\n function eq(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, uint32 b) and returns the result.\\n */\\n function ne(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint32 a, euint32 b) and returns the result.\\n */\\n function ne(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, uint32 b) and returns the result.\\n */\\n function ge(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint32 a, euint32 b) and returns the result.\\n */\\n function ge(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, uint32 b) and returns the result.\\n */\\n function gt(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint32 a, euint32 b) and returns the result.\\n */\\n function gt(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, uint32 b) and returns the result.\\n */\\n function le(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint32 a, euint32 b) and returns the result.\\n */\\n function le(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, uint32 b) and returns the result.\\n */\\n function lt(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint32 a, euint32 b) and returns the result.\\n */\\n function lt(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, uint32 b) and returns the result.\\n */\\n function min(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint32 a, euint32 b) and returns the result.\\n */\\n function min(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, uint32 b) and returns the result.\\n */\\n function max(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint32 a, euint32 b) and returns the result.\\n */\\n function max(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, uint64 b) and returns the result.\\n */\\n function add(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint64 a, euint64 b) and returns the result.\\n */\\n function add(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, uint64 b) and returns the result.\\n */\\n function sub(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint64 a, euint64 b) and returns the result.\\n */\\n function sub(uint64 a, euint64 b) internal returns (euint64) {\\n euint64 aEnc = asEuint64(a);\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(aEnc), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, uint64 b) and returns the result.\\n */\\n function mul(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint64 a, euint64 b) and returns the result.\\n */\\n function mul(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint64 a, uint64 b) and returns the result.\\n */\\n function div(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.div(euint64.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint64 a, uint64 b) and returns the result.\\n */\\n function rem(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rem(euint64.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, uint64 b) and returns the result.\\n */\\n function and(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint64 a, euint64 b) and returns the result.\\n */\\n function and(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, uint64 b) and returns the result.\\n */\\n function or(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint64 a, euint64 b) and returns the result.\\n */\\n function or(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, uint64 b) and returns the result.\\n */\\n function xor(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint64 a, euint64 b) and returns the result.\\n */\\n function xor(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, uint64 b) and returns the result.\\n */\\n function eq(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint64 a, euint64 b) and returns the result.\\n */\\n function eq(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, uint64 b) and returns the result.\\n */\\n function ne(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint64 a, euint64 b) and returns the result.\\n */\\n function ne(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, uint64 b) and returns the result.\\n */\\n function ge(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint64 a, euint64 b) and returns the result.\\n */\\n function ge(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, uint64 b) and returns the result.\\n */\\n function gt(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint64 a, euint64 b) and returns the result.\\n */\\n function gt(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, uint64 b) and returns the result.\\n */\\n function le(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint64 a, euint64 b) and returns the result.\\n */\\n function le(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, uint64 b) and returns the result.\\n */\\n function lt(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint64 a, euint64 b) and returns the result.\\n */\\n function lt(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, uint64 b) and returns the result.\\n */\\n function min(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint64 a, euint64 b) and returns the result.\\n */\\n function min(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, uint64 b) and returns the result.\\n */\\n function max(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint64 a, euint64 b) and returns the result.\\n */\\n function max(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, uint128 b) and returns the result.\\n */\\n function add(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint128 a, euint128 b) and returns the result.\\n */\\n function add(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, uint128 b) and returns the result.\\n */\\n function sub(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint128 a, euint128 b) and returns the result.\\n */\\n function sub(uint128 a, euint128 b) internal returns (euint128) {\\n euint128 aEnc = asEuint128(a);\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(aEnc), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, uint128 b) and returns the result.\\n */\\n function mul(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint128 a, euint128 b) and returns the result.\\n */\\n function mul(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint128 a, uint128 b) and returns the result.\\n */\\n function div(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.div(euint128.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint128 a, uint128 b) and returns the result.\\n */\\n function rem(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rem(euint128.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, uint128 b) and returns the result.\\n */\\n function and(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint128 a, euint128 b) and returns the result.\\n */\\n function and(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, uint128 b) and returns the result.\\n */\\n function or(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint128 a, euint128 b) and returns the result.\\n */\\n function or(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, uint128 b) and returns the result.\\n */\\n function xor(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint128 a, euint128 b) and returns the result.\\n */\\n function xor(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, uint128 b) and returns the result.\\n */\\n function eq(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint128 a, euint128 b) and returns the result.\\n */\\n function eq(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, uint128 b) and returns the result.\\n */\\n function ne(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint128 a, euint128 b) and returns the result.\\n */\\n function ne(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, uint128 b) and returns the result.\\n */\\n function ge(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint128 a, euint128 b) and returns the result.\\n */\\n function ge(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, uint128 b) and returns the result.\\n */\\n function gt(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint128 a, euint128 b) and returns the result.\\n */\\n function gt(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, uint128 b) and returns the result.\\n */\\n function le(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint128 a, euint128 b) and returns the result.\\n */\\n function le(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, uint128 b) and returns the result.\\n */\\n function lt(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint128 a, euint128 b) and returns the result.\\n */\\n function lt(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, uint128 b) and returns the result.\\n */\\n function min(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint128 a, euint128 b) and returns the result.\\n */\\n function min(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, uint128 b) and returns the result.\\n */\\n function max(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint128 a, euint128 b) and returns the result.\\n */\\n function max(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(eaddress a, address b) and returns the result.\\n */\\n function eq(eaddress a, address b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(a), bytes32(uint256(uint160(b))), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(address a, eaddress b) and returns the result.\\n */\\n function eq(address a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(b), bytes32(uint256(uint160(a))), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(eaddress a, address b) and returns the result.\\n */\\n function ne(eaddress a, address b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(a), bytes32(uint256(uint160(b))), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(address a, eaddress b) and returns the result.\\n */\\n function ne(address a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(b), bytes32(uint256(uint160(a))), true));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, uint256 b) and returns the result.\\n */\\n function and(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint256 a, euint256 b) and returns the result.\\n */\\n function and(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, uint256 b) and returns the result.\\n */\\n function or(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint256 a, euint256 b) and returns the result.\\n */\\n function or(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, uint256 b) and returns the result.\\n */\\n function xor(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint256 a, euint256 b) and returns the result.\\n */\\n function xor(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, uint256 b) and returns the result.\\n */\\n function eq(euint256 a, uint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint256 a, euint256 b) and returns the result.\\n */\\n function eq(uint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, uint256 b) and returns the result.\\n */\\n function ne(euint256 a, uint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint256 a, euint256 b) and returns the result.\\n */\\n function ne(uint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint8 a, euint8 b) and returns the result.\\n */\\n function shl(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shl(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint8 a, uint8) and returns the result.\\n */\\n function shl(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shl(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint8 a, euint8 b) and returns the result.\\n */\\n function shr(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shr(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint8 a, uint8) and returns the result.\\n */\\n function shr(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shr(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint8 a, euint8 b) and returns the result.\\n */\\n function rotl(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotl(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint8 a, uint8) and returns the result.\\n */\\n function rotl(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotl(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint8 a, euint8 b) and returns the result.\\n */\\n function rotr(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotr(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint8 a, uint8) and returns the result.\\n */\\n function rotr(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotr(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint16 a, euint8 b) and returns the result.\\n */\\n function shl(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.shl(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint16 a, uint8) and returns the result.\\n */\\n function shl(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.shl(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint16 a, euint8 b) and returns the result.\\n */\\n function shr(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.shr(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint16 a, uint8) and returns the result.\\n */\\n function shr(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.shr(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint16 a, euint8 b) and returns the result.\\n */\\n function rotl(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.rotl(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint16 a, uint8) and returns the result.\\n */\\n function rotl(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rotl(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint16 a, euint8 b) and returns the result.\\n */\\n function rotr(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.rotr(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint16 a, uint8) and returns the result.\\n */\\n function rotr(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rotr(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint32 a, euint8 b) and returns the result.\\n */\\n function shl(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.shl(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint32 a, uint8) and returns the result.\\n */\\n function shl(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.shl(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint32 a, euint8 b) and returns the result.\\n */\\n function shr(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.shr(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint32 a, uint8) and returns the result.\\n */\\n function shr(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.shr(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint32 a, euint8 b) and returns the result.\\n */\\n function rotl(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.rotl(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint32 a, uint8) and returns the result.\\n */\\n function rotl(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rotl(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint32 a, euint8 b) and returns the result.\\n */\\n function rotr(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.rotr(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint32 a, uint8) and returns the result.\\n */\\n function rotr(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rotr(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint64 a, euint8 b) and returns the result.\\n */\\n function shl(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.shl(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint64 a, uint8) and returns the result.\\n */\\n function shl(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.shl(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint64 a, euint8 b) and returns the result.\\n */\\n function shr(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.shr(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint64 a, uint8) and returns the result.\\n */\\n function shr(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.shr(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint64 a, euint8 b) and returns the result.\\n */\\n function rotl(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.rotl(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint64 a, uint8) and returns the result.\\n */\\n function rotl(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rotl(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint64 a, euint8 b) and returns the result.\\n */\\n function rotr(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.rotr(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint64 a, uint8) and returns the result.\\n */\\n function rotr(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rotr(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint128 a, euint8 b) and returns the result.\\n */\\n function shl(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.shl(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint128 a, uint8) and returns the result.\\n */\\n function shl(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.shl(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint128 a, euint8 b) and returns the result.\\n */\\n function shr(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.shr(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint128 a, uint8) and returns the result.\\n */\\n function shr(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.shr(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint128 a, euint8 b) and returns the result.\\n */\\n function rotl(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.rotl(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint128 a, uint8) and returns the result.\\n */\\n function rotl(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rotl(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint128 a, euint8 b) and returns the result.\\n */\\n function rotr(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.rotr(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint128 a, uint8) and returns the result.\\n */\\n function rotr(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rotr(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint256 a, euint8 b) and returns the result.\\n */\\n function shl(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.shl(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint256 a, uint8) and returns the result.\\n */\\n function shl(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.shl(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint256 a, euint8 b) and returns the result.\\n */\\n function shr(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.shr(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint256 a, uint8) and returns the result.\\n */\\n function shr(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.shr(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint256 a, euint8 b) and returns the result.\\n */\\n function rotl(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.rotl(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint256 a, uint8) and returns the result.\\n */\\n function rotl(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.rotl(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint256 a, euint8 b) and returns the result.\\n */\\n function rotr(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.rotr(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint256 a, uint8) and returns the result.\\n */\\n function rotr(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.rotr(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.select(ebool.unwrap(control), ebool.unwrap(a), ebool.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.select(ebool.unwrap(control), euint8.unwrap(a), euint8.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.select(ebool.unwrap(control), euint16.unwrap(a), euint16.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.select(ebool.unwrap(control), euint32.unwrap(a), euint32.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.select(ebool.unwrap(control), euint64.unwrap(a), euint64.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.select(ebool.unwrap(control), euint128.unwrap(a), euint128.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, eaddress a, eaddress b) internal returns (eaddress) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return eaddress.wrap(Impl.select(ebool.unwrap(control), eaddress.unwrap(a), eaddress.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.select(ebool.unwrap(control), euint256.unwrap(a), euint256.unwrap(b)));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint8'.\\n */\\n function asEuint8(euint16 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint8'.\\n */\\n function asEuint8(euint32 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint8'.\\n */\\n function asEuint8(euint64 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint8'.\\n */\\n function asEuint8(euint128 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint8'.\\n */\\n function asEuint8(euint256 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint8'.\\n */\\n function asEuint8(ebool b) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'ebool'.\\n */\\n function asEbool(euint8 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint16'.\\n */\\n function asEuint16(euint8 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint16'.\\n */\\n function asEuint16(euint32 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint16'.\\n */\\n function asEuint16(euint64 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint16'.\\n */\\n function asEuint16(euint128 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint16'.\\n */\\n function asEuint16(euint256 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint16'.\\n */\\n function asEuint16(ebool b) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'ebool'.\\n */\\n function asEbool(euint16 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint32'.\\n */\\n function asEuint32(euint8 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint32'.\\n */\\n function asEuint32(euint16 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint32'.\\n */\\n function asEuint32(euint64 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint32'.\\n */\\n function asEuint32(euint128 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint32'.\\n */\\n function asEuint32(euint256 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint32'.\\n */\\n function asEuint32(ebool b) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'ebool'.\\n */\\n function asEbool(euint32 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint64'.\\n */\\n function asEuint64(euint8 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint64'.\\n */\\n function asEuint64(euint16 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint64'.\\n */\\n function asEuint64(euint32 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint64'.\\n */\\n function asEuint64(euint128 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint64'.\\n */\\n function asEuint64(euint256 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint64'.\\n */\\n function asEuint64(ebool b) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'ebool'.\\n */\\n function asEbool(euint64 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint128'.\\n */\\n function asEuint128(euint8 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint128'.\\n */\\n function asEuint128(euint16 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint128'.\\n */\\n function asEuint128(euint32 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint128'.\\n */\\n function asEuint128(euint64 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint128'.\\n */\\n function asEuint128(euint256 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint128'.\\n */\\n function asEuint128(ebool b) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'ebool'.\\n */\\n function asEbool(euint128 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint256'.\\n */\\n function asEuint256(euint8 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint256'.\\n */\\n function asEuint256(euint16 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint256'.\\n */\\n function asEuint256(euint32 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint256'.\\n */\\n function asEuint256(euint64 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint256'.\\n */\\n function asEuint256(euint128 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint256'.\\n */\\n function asEuint256(ebool b) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'ebool'.\\n */\\n function asEbool(euint256 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Evaluates not(ebool value) and returns the result.\\n */\\n function not(ebool value) internal returns (ebool) {\\n return ebool.wrap(Impl.not(ebool.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint8 value) and returns the result.\\n */\\n function neg(euint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.neg(euint8.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint8 value) and returns the result.\\n */\\n function not(euint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.not(euint8.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint16 value) and returns the result.\\n */\\n function neg(euint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.neg(euint16.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint16 value) and returns the result.\\n */\\n function not(euint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.not(euint16.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint32 value) and returns the result.\\n */\\n function neg(euint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.neg(euint32.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint32 value) and returns the result.\\n */\\n function not(euint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.not(euint32.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint64 value) and returns the result.\\n */\\n function neg(euint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.neg(euint64.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint64 value) and returns the result.\\n */\\n function not(euint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.not(euint64.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint128 value) and returns the result.\\n */\\n function neg(euint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.neg(euint128.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint128 value) and returns the result.\\n */\\n function not(euint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.not(euint128.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint256 value) and returns the result.\\n */\\n function neg(euint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.neg(euint256.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint256 value) and returns the result.\\n */\\n function not(euint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.not(euint256.unwrap(value)));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted ebool integer.\\n */\\n function fromExternal(externalEbool inputHandle, bytes memory inputProof) internal returns (ebool) {\\n return ebool.wrap(Impl.verify(externalEbool.unwrap(inputHandle), inputProof, FheType.Bool));\\n }\\n\\n /**\\n * @dev Converts a plaintext boolean to an encrypted boolean.\\n */\\n function asEbool(bool value) internal returns (ebool) {\\n return ebool.wrap(Impl.trivialEncrypt(value ? 1 : 0, FheType.Bool));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint8 integer.\\n */\\n function fromExternal(externalEuint8 inputHandle, bytes memory inputProof) internal returns (euint8) {\\n return euint8.wrap(Impl.verify(externalEuint8.unwrap(inputHandle), inputProof, FheType.Uint8));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint8 integer.\\n */\\n function asEuint8(uint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint16 integer.\\n */\\n function fromExternal(externalEuint16 inputHandle, bytes memory inputProof) internal returns (euint16) {\\n return euint16.wrap(Impl.verify(externalEuint16.unwrap(inputHandle), inputProof, FheType.Uint16));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint16 integer.\\n */\\n function asEuint16(uint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint32 integer.\\n */\\n function fromExternal(externalEuint32 inputHandle, bytes memory inputProof) internal returns (euint32) {\\n return euint32.wrap(Impl.verify(externalEuint32.unwrap(inputHandle), inputProof, FheType.Uint32));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint32 integer.\\n */\\n function asEuint32(uint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint64 integer.\\n */\\n function fromExternal(externalEuint64 inputHandle, bytes memory inputProof) internal returns (euint64) {\\n return euint64.wrap(Impl.verify(externalEuint64.unwrap(inputHandle), inputProof, FheType.Uint64));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint64 integer.\\n */\\n function asEuint64(uint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint128 integer.\\n */\\n function fromExternal(externalEuint128 inputHandle, bytes memory inputProof) internal returns (euint128) {\\n return euint128.wrap(Impl.verify(externalEuint128.unwrap(inputHandle), inputProof, FheType.Uint128));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint128 integer.\\n */\\n function asEuint128(uint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted eaddress integer.\\n */\\n function fromExternal(externalEaddress inputHandle, bytes memory inputProof) internal returns (eaddress) {\\n return eaddress.wrap(Impl.verify(externalEaddress.unwrap(inputHandle), inputProof, FheType.Uint160));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted eaddress integer.\\n */\\n function asEaddress(address value) internal returns (eaddress) {\\n return eaddress.wrap(Impl.trivialEncrypt(uint256(uint160(value)), FheType.Uint160));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint256 integer.\\n */\\n function fromExternal(externalEuint256 inputHandle, bytes memory inputProof) internal returns (euint256) {\\n return euint256.wrap(Impl.verify(externalEuint256.unwrap(inputHandle), inputProof, FheType.Uint256));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint256 integer.\\n */\\n function asEuint256(uint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEbool() internal returns (ebool) {\\n return ebool.wrap(Impl.rand(FheType.Bool));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint8() internal returns (euint8) {\\n return euint8.wrap(Impl.rand(FheType.Uint8));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 8-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint8(uint8 upperBound) internal returns (euint8) {\\n return euint8.wrap(Impl.randBounded(upperBound, FheType.Uint8));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint16() internal returns (euint16) {\\n return euint16.wrap(Impl.rand(FheType.Uint16));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 16-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint16(uint16 upperBound) internal returns (euint16) {\\n return euint16.wrap(Impl.randBounded(upperBound, FheType.Uint16));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint32() internal returns (euint32) {\\n return euint32.wrap(Impl.rand(FheType.Uint32));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 32-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint32(uint32 upperBound) internal returns (euint32) {\\n return euint32.wrap(Impl.randBounded(upperBound, FheType.Uint32));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint64() internal returns (euint64) {\\n return euint64.wrap(Impl.rand(FheType.Uint64));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 64-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint64(uint64 upperBound) internal returns (euint64) {\\n return euint64.wrap(Impl.randBounded(upperBound, FheType.Uint64));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint128() internal returns (euint128) {\\n return euint128.wrap(Impl.rand(FheType.Uint128));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 128-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint128(uint128 upperBound) internal returns (euint128) {\\n return euint128.wrap(Impl.randBounded(upperBound, FheType.Uint128));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint256() internal returns (euint256) {\\n return euint256.wrap(Impl.rand(FheType.Uint256));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 256-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint256(uint256 upperBound) internal returns (euint256) {\\n return euint256.wrap(Impl.randBounded(upperBound, FheType.Uint256));\\n }\\n\\n /**\\n * @dev This function cleans the transient storage for the ACL (accounts) and the InputVerifier\\n * (input proofs).\\n * This could be useful for integration with Account Abstraction when bundling several\\n * UserOps calling the FHEVMExecutor.\\n */\\n function cleanTransientStorage() internal {\\n Impl.cleanTransientStorageACL();\\n Impl.cleanTransientStorageInputVerifier();\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(ebool value, address account) internal view returns (bool) {\\n return Impl.isAllowed(ebool.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(ebool value) internal view returns (bool) {\\n return Impl.isAllowed(ebool.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(ebool value, address account) internal returns (ebool) {\\n Impl.allow(ebool.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(ebool value) internal returns (ebool) {\\n Impl.allow(ebool.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(ebool value, address account) internal returns (ebool) {\\n Impl.allowTransient(ebool.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(ebool value) internal returns (ebool) {\\n Impl.makePubliclyDecryptable(ebool.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(ebool value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(ebool.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint8 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint8.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint8 value) internal view returns (bool) {\\n return Impl.isAllowed(euint8.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint8 value, address account) internal returns (euint8) {\\n Impl.allow(euint8.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint8 value) internal returns (euint8) {\\n Impl.allow(euint8.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint8 value, address account) internal returns (euint8) {\\n Impl.allowTransient(euint8.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint8 value) internal returns (euint8) {\\n Impl.makePubliclyDecryptable(euint8.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint8 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint8.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint16 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint16.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint16 value) internal view returns (bool) {\\n return Impl.isAllowed(euint16.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint16 value, address account) internal returns (euint16) {\\n Impl.allow(euint16.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint16 value) internal returns (euint16) {\\n Impl.allow(euint16.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint16 value, address account) internal returns (euint16) {\\n Impl.allowTransient(euint16.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint16 value) internal returns (euint16) {\\n Impl.makePubliclyDecryptable(euint16.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint16 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint16.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint32 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint32.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint32 value) internal view returns (bool) {\\n return Impl.isAllowed(euint32.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint32 value, address account) internal returns (euint32) {\\n Impl.allow(euint32.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint32 value) internal returns (euint32) {\\n Impl.allow(euint32.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint32 value, address account) internal returns (euint32) {\\n Impl.allowTransient(euint32.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint32 value) internal returns (euint32) {\\n Impl.makePubliclyDecryptable(euint32.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint32 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint32.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint64 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint64.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint64 value) internal view returns (bool) {\\n return Impl.isAllowed(euint64.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint64 value, address account) internal returns (euint64) {\\n Impl.allow(euint64.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint64 value) internal returns (euint64) {\\n Impl.allow(euint64.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint64 value, address account) internal returns (euint64) {\\n Impl.allowTransient(euint64.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint64 value) internal returns (euint64) {\\n Impl.makePubliclyDecryptable(euint64.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint64 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint64.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint128 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint128.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint128 value) internal view returns (bool) {\\n return Impl.isAllowed(euint128.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint128 value, address account) internal returns (euint128) {\\n Impl.allow(euint128.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint128 value) internal returns (euint128) {\\n Impl.allow(euint128.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint128 value, address account) internal returns (euint128) {\\n Impl.allowTransient(euint128.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint128 value) internal returns (euint128) {\\n Impl.makePubliclyDecryptable(euint128.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint128 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint128.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(eaddress value, address account) internal view returns (bool) {\\n return Impl.isAllowed(eaddress.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(eaddress value) internal view returns (bool) {\\n return Impl.isAllowed(eaddress.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(eaddress value, address account) internal returns (eaddress) {\\n Impl.allow(eaddress.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(eaddress value) internal returns (eaddress) {\\n Impl.allow(eaddress.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(eaddress value, address account) internal returns (eaddress) {\\n Impl.allowTransient(eaddress.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(eaddress value) internal returns (eaddress) {\\n Impl.makePubliclyDecryptable(eaddress.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(eaddress value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(eaddress.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint256 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint256.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint256 value) internal view returns (bool) {\\n return Impl.isAllowed(euint256.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint256 value, address account) internal returns (euint256) {\\n Impl.allow(euint256.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint256 value) internal returns (euint256) {\\n Impl.allow(euint256.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint256 value, address account) internal returns (euint256) {\\n Impl.allowTransient(euint256.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint256 value) internal returns (euint256) {\\n Impl.makePubliclyDecryptable(euint256.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint256 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint256.unwrap(value));\\n }\\n\\n /// @notice Reverts if the KMS signatures verification against the provided handles and public decryption data\\n /// fails.\\n /// @dev The function MUST be called inside a public decryption callback function of a dApp contract\\n /// to verify the signatures and prevent fake decryption results for being submitted.\\n /// @param handlesList The list of handles as an array of bytes32 to check\\n /// @param abiEncodedCleartexts The ABI-encoded list of decrypted values associated with each handle in the `handlesList`.\\n /// The ABI-encoded list order must match the `handlesList` order.\\n /// @param decryptionProof The KMS public decryption proof. It includes the KMS signatures, associated metadata,\\n /// and the context needed for verification.\\n /// @dev Reverts if any of the following conditions are met:\\n /// - The `decryptionProof` is empty or has an invalid length.\\n /// - The number of valid signatures is zero or less than the configured KMS signers threshold.\\n /// - Any signature is produced by an address that is not a registered KMS signer.\\n /// - The signatures verification returns false.\\n function checkSignatures(\\n bytes32[] memory handlesList,\\n bytes memory abiEncodedCleartexts,\\n bytes memory decryptionProof\\n ) internal {\\n bool isVerified = _verifySignatures(handlesList, abiEncodedCleartexts, decryptionProof);\\n if (!isVerified) {\\n revert InvalidKMSSignatures();\\n }\\n emit PublicDecryptionVerified(handlesList, abiEncodedCleartexts);\\n }\\n\\n /// @notice Verifies KMS signatures against the provided handles and public decryption data.\\n /// @param handlesList The list of handles as an array of bytes32 to verify\\n /// @param abiEncodedCleartexts The ABI-encoded list of decrypted values associated with each handle in the `handlesList`.\\n /// The list order must match the list of handles in `handlesList`\\n /// @param decryptionProof The KMS public decryption proof computed by the KMS Signers assiciated to `handlesList` and\\n /// `abiEncodedCleartexts`\\n /// @return true if the signatures verification succeeds, false otherwise\\n /// @dev Private low-level function used to verify the KMS signatures.\\n /// Warning: this function never reverts, its boolean return value must be checked.\\n /// The decryptionProof is the numSigners + kmsSignatures + extraData (1 + 65*numSigners + extraData bytes)\\n /// Only static native solidity types for clear values are supported, so `abiEncodedCleartexts` is the concatenation of all clear values appended to 32 bytes.\\n /// @dev Reverts if any of the following conditions are met by the underlying KMS verifier:\\n /// - The `decryptionProof` is empty or has an invalid length.\\n /// - The number of valid signatures is zero or less than the configured KMS signers threshold.\\n /// - Any signature is produced by an address that is not a registered KMS signer.\\n function _verifySignatures(\\n bytes32[] memory handlesList,\\n bytes memory abiEncodedCleartexts,\\n bytes memory decryptionProof\\n ) private returns (bool) {\\n CoprocessorConfig storage $ = Impl.getCoprocessorConfig();\\n return\\n IKMSVerifier($.KMSVerifierAddress).verifyDecryptionEIP712KMSSignatures(\\n handlesList,\\n abiEncodedCleartexts,\\n decryptionProof\\n );\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(ebool value) internal pure returns (bytes32 ct) {\\n ct = ebool.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint8 value) internal pure returns (bytes32 ct) {\\n ct = euint8.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint16 value) internal pure returns (bytes32 ct) {\\n ct = euint16.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint32 value) internal pure returns (bytes32 ct) {\\n ct = euint32.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint64 value) internal pure returns (bytes32 ct) {\\n ct = euint64.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint128 value) internal pure returns (bytes32 ct) {\\n ct = euint128.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(eaddress value) internal pure returns (bytes32 ct) {\\n ct = eaddress.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint256 value) internal pure returns (bytes32 ct) {\\n ct = euint256.unwrap(value);\\n }\\n}\\n\",\"keccak256\":\"0x40fa1fd7a983b88f68b2efd87e879bc12ac363b2585bb39e9aa52fa168851d2b\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/FheType.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nenum FheType {\\n Bool,\\n Uint4,\\n Uint8,\\n Uint16,\\n Uint32,\\n Uint64,\\n Uint128,\\n Uint160,\\n Uint256,\\n Uint512,\\n Uint1024,\\n Uint2048,\\n Uint2,\\n Uint6,\\n Uint10,\\n Uint12,\\n Uint14,\\n Int2,\\n Int4,\\n Int6,\\n Int8,\\n Int10,\\n Int12,\\n Int14,\\n Int16,\\n Int32,\\n Int64,\\n Int128,\\n Int160,\\n Int256,\\n AsciiString,\\n Int512,\\n Int1024,\\n Int2048,\\n Uint24,\\n Uint40,\\n Uint48,\\n Uint56,\\n Uint72,\\n Uint80,\\n Uint88,\\n Uint96,\\n Uint104,\\n Uint112,\\n Uint120,\\n Uint136,\\n Uint144,\\n Uint152,\\n Uint168,\\n Uint176,\\n Uint184,\\n Uint192,\\n Uint200,\\n Uint208,\\n Uint216,\\n Uint224,\\n Uint232,\\n Uint240,\\n Uint248,\\n Int24,\\n Int40,\\n Int48,\\n Int56,\\n Int72,\\n Int80,\\n Int88,\\n Int96,\\n Int104,\\n Int112,\\n Int120,\\n Int136,\\n Int144,\\n Int152,\\n Int168,\\n Int176,\\n Int184,\\n Int192,\\n Int200,\\n Int208,\\n Int216,\\n Int224,\\n Int232,\\n Int240,\\n Int248\\n}\\n\",\"keccak256\":\"0x945f006108fab92cb082a6e5a80525953f17b8d8dcf88a283a83fc80c765497a\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/Impl.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport {FheType} from \\\"./FheType.sol\\\";\\n\\n/**\\n * @title CoprocessorConfig\\n * @notice This struct contains all addresses of core contracts, which are needed in a typical dApp.\\n */\\nstruct CoprocessorConfig {\\n address ACLAddress;\\n address CoprocessorAddress;\\n address KMSVerifierAddress;\\n}\\n\\n/**\\n * @title IFHEVMExecutor\\n * @notice This interface contains all functions to conduct FHE operations.\\n */\\ninterface IFHEVMExecutor {\\n /**\\n * @notice Computes fheAdd operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheAdd(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheSub operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheSub(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMul operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMul(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheDiv operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheDiv(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRem operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRem(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitAnd operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitAnd(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitOr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitOr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitXor operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitXor(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheShl operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheShl(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheShr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheShr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRotl operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRotl(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRotr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRotr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheEq operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheEq(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheNe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheGe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheGe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheGt operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheGt(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheLe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheLe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheLt operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheLt(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMin operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMin(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMax operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMax(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNeg operation.\\n * @param ct Ct\\n * @return result Result.\\n */\\n function fheNeg(bytes32 ct) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNot operation.\\n * @param ct Ct\\n * @return result Result.\\n */\\n function fheNot(bytes32 ct) external returns (bytes32 result);\\n\\n /**\\n * @notice Verifies the ciphertext.\\n * @param inputHandle Input handle.\\n * @param callerAddress Address of the caller.\\n * @param inputProof Input proof.\\n * @param inputType Input type.\\n * @return result Result.\\n */\\n function verifyInput(\\n bytes32 inputHandle,\\n address callerAddress,\\n bytes memory inputProof,\\n FheType inputType\\n ) external returns (bytes32 result);\\n\\n /**\\n * @notice Performs the casting to a target type.\\n * @param ct Value to cast.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function cast(bytes32 ct, FheType toType) external returns (bytes32 result);\\n\\n /**\\n * @notice Does trivial encryption.\\n * @param ct Value to encrypt.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function trivialEncrypt(uint256 ct, FheType toType) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHEIfThenElse operation.\\n * @param control Control value.\\n * @param ifTrue If true.\\n * @param ifFalse If false.\\n * @return result Result.\\n */\\n function fheIfThenElse(bytes32 control, bytes32 ifTrue, bytes32 ifFalse) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHERand operation.\\n * @param randType Type for the random result.\\n * @return result Result.\\n */\\n function fheRand(FheType randType) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHERandBounded operation.\\n * @param upperBound Upper bound value.\\n * @param randType Type for the random result.\\n * @return result Result.\\n */\\n function fheRandBounded(uint256 upperBound, FheType randType) external returns (bytes32 result);\\n\\n /**\\n * @notice Returns the address of the InputVerifier contract used by the coprocessor.\\n * @return inputVerifierAddress Address of the InputVerifier.\\n */\\n function getInputVerifierAddress() external view returns (address);\\n}\\n\\n/**\\n * @title IACL.\\n * @notice This interface contains all functions that are used to conduct operations\\n * with the ACL contract.\\n */\\ninterface IACL {\\n /**\\n * @notice Allows the use of handle by address account for this transaction.\\n * @dev The caller must be allowed to use handle for allowTransient() to succeed.\\n * If not, allowTransient() reverts.\\n * The Coprocessor contract can always allowTransient(), contrarily to allow().\\n * @param ciphertext Ciphertext.\\n * @param account Address of the account.\\n */\\n function allowTransient(bytes32 ciphertext, address account) external;\\n\\n /**\\n * @notice Allows the use of handle for the address account.\\n * @dev The caller must be allowed to use handle for allow() to succeed. If not, allow() reverts.\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allow(bytes32 handle, address account) external;\\n\\n /**\\n * @dev This function removes the transient allowances, which could be useful for integration with\\n * Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorage() external;\\n\\n /**\\n * @notice Returns whether the account is allowed to use the handle, either due to\\n * allowTransient() or allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n * @return isAllowed Whether the account can access the handle.\\n */\\n function isAllowed(bytes32 handle, address account) external view returns (bool);\\n\\n /**\\n * @notice Allows a list of handles to be decrypted.\\n * @param handlesList List of handles.\\n */\\n function allowForDecryption(bytes32[] memory handlesList) external;\\n\\n /**\\n * @notice Returns wether a handle is allowed to be publicly decrypted.\\n * @param handle Handle.\\n * @return isDecryptable Whether the handle can be publicly decrypted.\\n */\\n function isAllowedForDecryption(bytes32 handle) external view returns (bool);\\n}\\n\\n/**\\n * @title IInputVerifier\\n * @notice This interface contains the only function required from InputVerifier.\\n */\\ninterface IInputVerifier {\\n /**\\n * @dev This function removes the transient allowances, which could be useful for integration with\\n * Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorage() external;\\n}\\n\\n/**\\n * @title Impl\\n * @notice This library is the core implementation for computing FHE operations (e.g. add, sub, xor).\\n */\\nlibrary Impl {\\n /// keccak256(abi.encode(uint256(keccak256(\\\"confidential.storage.config\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant CoprocessorConfigLocation =\\n 0x9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700;\\n\\n /**\\n * @dev Returns the Coprocessor config.\\n */\\n function getCoprocessorConfig() internal pure returns (CoprocessorConfig storage $) {\\n assembly {\\n $.slot := CoprocessorConfigLocation\\n }\\n }\\n\\n /**\\n * @notice Sets the coprocessor addresses.\\n * @param coprocessorConfig Coprocessor config struct that contains contract addresses.\\n */\\n function setCoprocessor(CoprocessorConfig memory coprocessorConfig) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n $.ACLAddress = coprocessorConfig.ACLAddress;\\n $.CoprocessorAddress = coprocessorConfig.CoprocessorAddress;\\n $.KMSVerifierAddress = coprocessorConfig.KMSVerifierAddress;\\n }\\n\\n function add(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheAdd(lhs, rhs, scalarByte);\\n }\\n\\n function sub(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheSub(lhs, rhs, scalarByte);\\n }\\n\\n function mul(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMul(lhs, rhs, scalarByte);\\n }\\n\\n function div(bytes32 lhs, bytes32 rhs) internal returns (bytes32 result) {\\n bytes1 scalarByte = 0x01;\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheDiv(lhs, rhs, scalarByte);\\n }\\n\\n function rem(bytes32 lhs, bytes32 rhs) internal returns (bytes32 result) {\\n bytes1 scalarByte = 0x01;\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRem(lhs, rhs, scalarByte);\\n }\\n\\n function and(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitAnd(lhs, rhs, scalarByte);\\n }\\n\\n function or(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitOr(lhs, rhs, scalarByte);\\n }\\n\\n function xor(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitXor(lhs, rhs, scalarByte);\\n }\\n\\n function shl(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheShl(lhs, rhs, scalarByte);\\n }\\n\\n function shr(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheShr(lhs, rhs, scalarByte);\\n }\\n\\n function rotl(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRotl(lhs, rhs, scalarByte);\\n }\\n\\n function rotr(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRotr(lhs, rhs, scalarByte);\\n }\\n\\n function eq(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheEq(lhs, rhs, scalarByte);\\n }\\n\\n function ne(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNe(lhs, rhs, scalarByte);\\n }\\n\\n function ge(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheGe(lhs, rhs, scalarByte);\\n }\\n\\n function gt(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheGt(lhs, rhs, scalarByte);\\n }\\n\\n function le(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheLe(lhs, rhs, scalarByte);\\n }\\n\\n function lt(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheLt(lhs, rhs, scalarByte);\\n }\\n\\n function min(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMin(lhs, rhs, scalarByte);\\n }\\n\\n function max(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMax(lhs, rhs, scalarByte);\\n }\\n\\n function neg(bytes32 ct) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNeg(ct);\\n }\\n\\n function not(bytes32 ct) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNot(ct);\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(bytes32 control, bytes32 ifTrue, bytes32 ifFalse) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheIfThenElse(control, ifTrue, ifFalse);\\n }\\n\\n /**\\n * @notice Verifies the ciphertext (FHEVMExecutor) and allows transient (ACL).\\n * @param inputHandle Input handle.\\n * @param inputProof Input proof.\\n * @param toType Input type.\\n * @return result Result.\\n */\\n function verify(bytes32 inputHandle, bytes memory inputProof, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).verifyInput(inputHandle, msg.sender, inputProof, toType);\\n IACL($.ACLAddress).allowTransient(result, msg.sender);\\n }\\n\\n /**\\n * @notice Performs the casting to a target type.\\n * @param ciphertext Ciphertext to cast.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function cast(bytes32 ciphertext, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).cast(ciphertext, toType);\\n }\\n\\n /**\\n * @notice Does trivial encryption.\\n * @param value Value to encrypt.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function trivialEncrypt(uint256 value, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).trivialEncrypt(value, toType);\\n }\\n\\n function rand(FheType randType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRand(randType);\\n }\\n\\n function randBounded(uint256 upperBound, FheType randType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRandBounded(upperBound, randType);\\n }\\n\\n /**\\n * @notice Allows the use of handle by address account for this transaction.\\n * @dev The caller must be allowed to use handle for allowTransient() to succeed.\\n * If not, allowTransient() reverts.\\n * The Coprocessor contract can always allowTransient(), contrarily to allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allowTransient(bytes32 handle, address account) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).allowTransient(handle, account);\\n }\\n\\n /**\\n * @notice Allows the use of handle for the address account.\\n * @dev The caller must be allowed to use handle for allow() to succeed. If not, allow() reverts.\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allow(bytes32 handle, address account) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).allow(handle, account);\\n }\\n\\n /**\\n * @notice Allows the handle to be publicly decryptable.\\n * @dev The caller must be allowed to use handle for makePubliclyDecryptable() to succeed.\\n * If not, makePubliclyDecryptable() reverts.\\n * @param handle Handle.\\n */\\n function makePubliclyDecryptable(bytes32 handle) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n bytes32[] memory handleArray = new bytes32[](1);\\n handleArray[0] = handle;\\n IACL($.ACLAddress).allowForDecryption(handleArray);\\n }\\n\\n /**\\n * @dev This function removes the transient allowances in the ACL, which could be useful for integration\\n * with Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorageACL() internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).cleanTransientStorage();\\n }\\n\\n /**\\n * @dev This function removes the transient proofs in the InputVerifier, which could be useful for integration\\n * with Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorageInputVerifier() internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n address inputVerifierAddress = IFHEVMExecutor($.CoprocessorAddress).getInputVerifierAddress();\\n IInputVerifier(inputVerifierAddress).cleanTransientStorage();\\n }\\n\\n /**\\n * @notice Returns whether the account is allowed to use the handle, either due to\\n * allowTransient() or allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n * @return isAllowed Whether the account can access the handle.\\n */\\n function isAllowed(bytes32 handle, address account) internal view returns (bool) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n return IACL($.ACLAddress).isAllowed(handle, account);\\n }\\n\\n /**\\n * @notice Returns whether the handle is allowed to be publicly decrypted.\\n * @param handle Handle.\\n * @return isAllowed Whether the handle can be publicly decrypted.\\n */\\n function isPubliclyDecryptable(bytes32 handle) internal view returns (bool) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n return IACL($.ACLAddress).isAllowedForDecryption(handle);\\n }\\n}\\n\",\"keccak256\":\"0x42eaed792fa26d065044e0057b093a51dfe0666d0eb75937b99ce87bcc1d0bf2\",\"license\":\"BSD-3-Clause-Clear\"},\"contracts/tokens/CompliantERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// solhint-disable func-name-mixedcase\\npragma solidity ^0.8.27;\\n\\nimport {FHE, euint64, ebool, externalEuint64} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\nimport {ZamaEthereumConfig} from \\\"@fhevm/solidity/config/ZamaConfig.sol\\\";\\n\\n/**\\n * @title CompliantERC20\\n * @author Zentity\\n * @notice ERC20-like token with encrypted balances and compliance checks\\n * @dev Part of zentity-fhevm-contracts - Builder Track\\n *\\n * @custom:category token\\n * @custom:concept FHE.select() for branch-free compliant transfers\\n * @custom:difficulty advanced\\n *\\n * This contract implements a compliant token with encrypted balances.\\n * Transfers only succeed if both parties pass compliance checks, but\\n * failures are handled silently (transfer of 0) to prevent information leakage.\\n *\\n * Key patterns demonstrated:\\n * 1. FHE.select() for branch-free conditional logic\\n * 2. Combining multiple encrypted conditions with FHE.and()\\n * 3. Encrypted balance management\\n * 4. No-revert compliance (privacy-preserving failure handling)\\n * 5. Integration with external compliance checker\\n */\\ncontract CompliantERC20 is ZamaEthereumConfig {\\n // ============ Token Metadata ============\\n\\n /// @notice Token name\\n string public name;\\n\\n /// @notice Token symbol\\n string public symbol;\\n\\n /// @notice Token decimals\\n uint8 public constant DECIMALS = 18;\\n\\n /// @notice Total supply (public for transparency)\\n uint256 public totalSupply;\\n\\n // ============ Token State ============\\n\\n /// @notice Encrypted balances\\n mapping(address account => euint64 balance) private balances;\\n\\n /// @notice Encrypted allowances\\n mapping(address owner => mapping(address spender => euint64 allowance)) private allowances;\\n\\n // ============ Compliance State ============\\n\\n /// @notice Compliance checker interface (can be ComplianceRules or custom)\\n IComplianceChecker public complianceChecker;\\n\\n /// @notice Owner/admin\\n address public owner;\\n /// @notice Pending owner for two-step ownership transfer\\n address public pendingOwner;\\n\\n // ============ Events ============\\n\\n /// @notice Emitted on token transfers (indexed for efficient filtering)\\n /// @param from Address tokens are transferred from\\n /// @param to Address tokens are transferred to\\n event Transfer(address indexed from, address indexed to);\\n\\n /// @notice Emitted when spending allowance is set\\n /// @param owner Address of the token owner\\n /// @param spender Address authorized to spend\\n event Approval(address indexed owner, address indexed spender);\\n\\n /// @notice Emitted when new tokens are minted\\n /// @param to Address receiving the minted tokens\\n /// @param amount Number of tokens minted\\n event Mint(address indexed to, uint256 indexed amount);\\n\\n /// @notice Emitted when the compliance checker contract is updated\\n /// @param newChecker Address of the new compliance checker\\n event ComplianceCheckerUpdated(address indexed newChecker);\\n\\n /// @notice Emitted when ownership transfer is initiated\\n /// @param currentOwner Current owner address\\n /// @param pendingOwner Address that can accept ownership\\n event OwnershipTransferStarted(address indexed currentOwner, address indexed pendingOwner);\\n\\n /// @notice Emitted when ownership transfer is completed\\n /// @param previousOwner Previous owner address\\n /// @param newOwner New owner address\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // ============ Errors ============\\n\\n /// @notice Thrown when caller is not the contract owner\\n error OnlyOwner();\\n /// @notice Thrown when caller is not the pending owner\\n error OnlyPendingOwner();\\n /// @notice Thrown when new owner is the zero address\\n error InvalidOwner();\\n\\n /// @notice Thrown when compliance checker is required but not set\\n error ComplianceCheckerNotSet();\\n /// @notice Thrown when caller supplies an unauthorized ciphertext handle\\n error UnauthorizedCiphertext();\\n /// @notice Thrown when mint amount would exceed uint64 accounting bounds\\n error TotalSupplyOverflow();\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Initialize the token\\n * @param tokenName Token name\\n * @param tokenSymbol Token symbol\\n * @param checker Address of the compliance checker contract\\n */\\n constructor(string memory tokenName, string memory tokenSymbol, address checker) {\\n name = tokenName;\\n symbol = tokenSymbol;\\n owner = msg.sender;\\n if (checker != address(0)) {\\n complianceChecker = IComplianceChecker(checker);\\n }\\n }\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Set the compliance checker contract\\n * @param checker Address of the compliance checker\\n */\\n function setComplianceChecker(address checker) external {\\n if (msg.sender != owner) revert OnlyOwner();\\n complianceChecker = IComplianceChecker(checker);\\n emit ComplianceCheckerUpdated(checker);\\n }\\n\\n /**\\n * @notice Initiate transfer of contract ownership\\n * @param newOwner Address that can accept ownership\\n */\\n function transferOwnership(address newOwner) external {\\n if (msg.sender != owner) revert OnlyOwner();\\n if (newOwner == address(0)) revert InvalidOwner();\\n pendingOwner = newOwner;\\n emit OwnershipTransferStarted(owner, newOwner);\\n }\\n\\n /**\\n * @notice Accept ownership transfer\\n */\\n function acceptOwnership() external {\\n if (msg.sender != pendingOwner) revert OnlyPendingOwner();\\n address previousOwner = owner;\\n owner = pendingOwner;\\n pendingOwner = address(0);\\n emit OwnershipTransferred(previousOwner, owner);\\n }\\n\\n /**\\n * @notice Mint tokens to an address\\n * @dev Only owner can mint. Compliance is NOT checked on mint.\\n * @param to Recipient address\\n * @param amount Amount to mint (plaintext)\\n */\\n function mint(address to, uint256 amount) external {\\n if (msg.sender != owner) revert OnlyOwner();\\n if (amount > type(uint64).max) revert TotalSupplyOverflow();\\n if (totalSupply + amount > type(uint64).max) revert TotalSupplyOverflow();\\n\\n euint64 mintAmount = FHE.asEuint64(uint64(amount));\\n balances[to] = FHE.add(balances[to], mintAmount);\\n FHE.allowThis(balances[to]);\\n FHE.allow(balances[to], to);\\n\\n totalSupply += amount;\\n\\n emit Mint(to, amount);\\n }\\n\\n // ============ Token Functions ============\\n\\n /**\\n * @notice Transfer tokens with encrypted amount\\n * @dev Branch-free transfer with compliance checks\\n * @param to Recipient address\\n * @param encryptedAmount Encrypted amount to transfer\\n * @param inputProof Proof for encrypted input\\n * @return success Always returns true (actual transfer amount may be 0)\\n *\\n * Key insight: We never revert on failed compliance. Instead:\\n * - If compliant: transfer the requested amount\\n * - If not compliant: transfer 0 (no state change, no info leak)\\n */\\n function transfer(\\n address to,\\n externalEuint64 encryptedAmount,\\n bytes calldata inputProof\\n ) external returns (bool success) {\\n euint64 amount = FHE.fromExternal(encryptedAmount, inputProof);\\n return _transfer(msg.sender, to, amount);\\n }\\n\\n /**\\n * @notice Transfer with euint64 amount (for approved callers)\\n * @param to Recipient\\n * @param amount Encrypted amount\\n * @return success Always true\\n */\\n function transfer(address to, euint64 amount) external returns (bool success) {\\n if (!FHE.isSenderAllowed(amount)) revert UnauthorizedCiphertext();\\n return _transfer(msg.sender, to, amount);\\n }\\n\\n /**\\n * @notice Approve spender to transfer tokens\\n * @param spender Address to approve\\n * @param encryptedAmount Encrypted allowance amount\\n * @param inputProof Proof for encrypted input\\n * @return success Always true\\n */\\n function approve(\\n address spender,\\n externalEuint64 encryptedAmount,\\n bytes calldata inputProof\\n ) external returns (bool success) {\\n euint64 amount = FHE.fromExternal(encryptedAmount, inputProof);\\n allowances[msg.sender][spender] = amount;\\n FHE.allowThis(amount);\\n FHE.allow(amount, msg.sender);\\n FHE.allow(amount, spender);\\n\\n emit Approval(msg.sender, spender);\\n return true;\\n }\\n\\n /**\\n * @notice Transfer from another account (requires approval)\\n * @param from Source address\\n * @param to Destination address\\n * @param encryptedAmount Encrypted amount\\n * @param inputProof Proof for encrypted input\\n * @return success Always true\\n */\\n function transferFrom(\\n address from,\\n address to,\\n externalEuint64 encryptedAmount,\\n bytes calldata inputProof\\n ) external returns (bool success) {\\n euint64 amount = FHE.fromExternal(encryptedAmount, inputProof);\\n\\n // Check allowance\\n ebool hasAllowance = FHE.le(amount, allowances[from][msg.sender]);\\n\\n // Reduce allowance (branch-free)\\n euint64 newAllowance = FHE.select(\\n hasAllowance,\\n FHE.sub(allowances[from][msg.sender], amount),\\n allowances[from][msg.sender]\\n );\\n allowances[from][msg.sender] = newAllowance;\\n FHE.allowThis(newAllowance);\\n FHE.allow(newAllowance, from);\\n FHE.allow(newAllowance, msg.sender);\\n\\n // Only transfer if allowance was sufficient\\n euint64 actualAmount = FHE.select(hasAllowance, amount, FHE.asEuint64(0));\\n\\n return _transfer(from, to, actualAmount);\\n }\\n\\n // ============ View Functions ============\\n\\n /**\\n * @notice Get encrypted balance\\n * @param account Address to query\\n * @return Encrypted balance\\n */\\n function balanceOf(address account) external view returns (euint64) {\\n return balances[account];\\n }\\n\\n /**\\n * @notice Get encrypted allowance\\n * @param account Owner address\\n * @param spender Spender address\\n * @return Encrypted allowance\\n */\\n function allowance(address account, address spender) external view returns (euint64) {\\n return allowances[account][spender];\\n }\\n\\n /**\\n * @notice Get decimals\\n * @return Token decimals\\n */\\n function decimals() external pure returns (uint8) {\\n return DECIMALS;\\n }\\n\\n // ============ Internal Functions ============\\n\\n /**\\n * @notice Internal transfer implementation\\n * @dev The heart of branch-free compliance\\n *\\n * Logic flow:\\n * 1. Check sender compliance (if checker is set)\\n * 2. Check recipient compliance (if checker is set)\\n * 3. Check sender has sufficient balance\\n * 4. Combine all checks with FHE.and()\\n * 5. Use FHE.select() to set transfer amount:\\n * - If all checks pass: transfer requested amount\\n * - If any check fails: transfer 0\\n * 6. Update balances (even if amount is 0)\\n *\\n * @param from Source address\\n * @param to Destination address\\n * @param amount Encrypted amount to transfer\\n * @return success Always returns true (actual transfer may be 0)\\n */\\n function _transfer(\\n address from,\\n address to,\\n euint64 amount\\n ) internal returns (bool success) {\\n ebool canTransfer;\\n\\n // Check compliance if checker is set\\n if (address(complianceChecker) != address(0)) {\\n ebool senderCompliant = complianceChecker.checkCompliance(from);\\n ebool recipientCompliant = complianceChecker.checkCompliance(to);\\n ebool bothCompliant = FHE.and(senderCompliant, recipientCompliant);\\n\\n // Check sufficient balance\\n ebool hasSufficientBalance = FHE.le(amount, balances[from]);\\n\\n // Combine all conditions\\n canTransfer = FHE.and(bothCompliant, hasSufficientBalance);\\n } else {\\n // No compliance checker, only check balance\\n canTransfer = FHE.le(amount, balances[from]);\\n }\\n\\n // Branch-free: select actual amount or 0\\n euint64 actualAmount = FHE.select(canTransfer, amount, FHE.asEuint64(0));\\n\\n // Update balances\\n euint64 newFromBalance = FHE.sub(balances[from], actualAmount);\\n euint64 newToBalance = FHE.add(balances[to], actualAmount);\\n\\n balances[from] = newFromBalance;\\n balances[to] = newToBalance;\\n\\n // Set permissions\\n FHE.allowThis(newFromBalance);\\n FHE.allowThis(newToBalance);\\n FHE.allow(newFromBalance, from);\\n FHE.allow(newToBalance, to);\\n\\n // Always emit (hides success/failure)\\n emit Transfer(from, to);\\n\\n return true;\\n }\\n}\\n\\n/**\\n * @title IComplianceChecker\\n * @author Zentity\\n * @notice Interface for compliance checking contracts\\n */\\ninterface IComplianceChecker {\\n /// @notice Check if a user passes compliance requirements\\n /// @param user Address to check compliance for\\n /// @return Encrypted boolean indicating compliance status\\n function checkCompliance(address user) external returns (ebool);\\n}\\n\",\"keccak256\":\"0xd562f20d25e7d2830888ee148037d9e844c9d81e96a9b7ac71414f168a4924d3\",\"license\":\"MIT\"},\"encrypted-types/EncryptedTypes.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\ntype ebool is bytes32;\\n\\ntype euint8 is bytes32;\\ntype euint16 is bytes32;\\ntype euint24 is bytes32;\\ntype euint32 is bytes32;\\ntype euint40 is bytes32;\\ntype euint48 is bytes32;\\ntype euint56 is bytes32;\\ntype euint64 is bytes32;\\ntype euint72 is bytes32;\\ntype euint80 is bytes32;\\ntype euint88 is bytes32;\\ntype euint96 is bytes32;\\ntype euint104 is bytes32;\\ntype euint112 is bytes32;\\ntype euint120 is bytes32;\\ntype euint128 is bytes32;\\ntype euint136 is bytes32;\\ntype euint144 is bytes32;\\ntype euint152 is bytes32;\\ntype euint160 is bytes32;\\ntype euint168 is bytes32;\\ntype euint176 is bytes32;\\ntype euint184 is bytes32;\\ntype euint192 is bytes32;\\ntype euint200 is bytes32;\\ntype euint208 is bytes32;\\ntype euint216 is bytes32;\\ntype euint224 is bytes32;\\ntype euint232 is bytes32;\\ntype euint240 is bytes32;\\ntype euint248 is bytes32;\\ntype euint256 is bytes32;\\n\\ntype eint8 is bytes32;\\ntype eint16 is bytes32;\\ntype eint24 is bytes32;\\ntype eint32 is bytes32;\\ntype eint40 is bytes32;\\ntype eint48 is bytes32;\\ntype eint56 is bytes32;\\ntype eint64 is bytes32;\\ntype eint72 is bytes32;\\ntype eint80 is bytes32;\\ntype eint88 is bytes32;\\ntype eint96 is bytes32;\\ntype eint104 is bytes32;\\ntype eint112 is bytes32;\\ntype eint120 is bytes32;\\ntype eint128 is bytes32;\\ntype eint136 is bytes32;\\ntype eint144 is bytes32;\\ntype eint152 is bytes32;\\ntype eint160 is bytes32;\\ntype eint168 is bytes32;\\ntype eint176 is bytes32;\\ntype eint184 is bytes32;\\ntype eint192 is bytes32;\\ntype eint200 is bytes32;\\ntype eint208 is bytes32;\\ntype eint216 is bytes32;\\ntype eint224 is bytes32;\\ntype eint232 is bytes32;\\ntype eint240 is bytes32;\\ntype eint248 is bytes32;\\ntype eint256 is bytes32;\\n\\ntype eaddress is bytes32;\\n\\ntype ebytes1 is bytes32;\\ntype ebytes2 is bytes32;\\ntype ebytes3 is bytes32;\\ntype ebytes4 is bytes32;\\ntype ebytes5 is bytes32;\\ntype ebytes6 is bytes32;\\ntype ebytes7 is bytes32;\\ntype ebytes8 is bytes32;\\ntype ebytes9 is bytes32;\\ntype ebytes10 is bytes32;\\ntype ebytes11 is bytes32;\\ntype ebytes12 is bytes32;\\ntype ebytes13 is bytes32;\\ntype ebytes14 is bytes32;\\ntype ebytes15 is bytes32;\\ntype ebytes16 is bytes32;\\ntype ebytes17 is bytes32;\\ntype ebytes18 is bytes32;\\ntype ebytes19 is bytes32;\\ntype ebytes20 is bytes32;\\ntype ebytes21 is bytes32;\\ntype ebytes22 is bytes32;\\ntype ebytes23 is bytes32;\\ntype ebytes24 is bytes32;\\ntype ebytes25 is bytes32;\\ntype ebytes26 is bytes32;\\ntype ebytes27 is bytes32;\\ntype ebytes28 is bytes32;\\ntype ebytes29 is bytes32;\\ntype ebytes30 is bytes32;\\ntype ebytes31 is bytes32;\\ntype ebytes32 is bytes32;\\n\\ntype externalEbool is bytes32;\\n\\ntype externalEuint8 is bytes32;\\ntype externalEuint16 is bytes32;\\ntype externalEuint24 is bytes32;\\ntype externalEuint32 is bytes32;\\ntype externalEuint40 is bytes32;\\ntype externalEuint48 is bytes32;\\ntype externalEuint56 is bytes32;\\ntype externalEuint64 is bytes32;\\ntype externalEuint72 is bytes32;\\ntype externalEuint80 is bytes32;\\ntype externalEuint88 is bytes32;\\ntype externalEuint96 is bytes32;\\ntype externalEuint104 is bytes32;\\ntype externalEuint112 is bytes32;\\ntype externalEuint120 is bytes32;\\ntype externalEuint128 is bytes32;\\ntype externalEuint136 is bytes32;\\ntype externalEuint144 is bytes32;\\ntype externalEuint152 is bytes32;\\ntype externalEuint160 is bytes32;\\ntype externalEuint168 is bytes32;\\ntype externalEuint176 is bytes32;\\ntype externalEuint184 is bytes32;\\ntype externalEuint192 is bytes32;\\ntype externalEuint200 is bytes32;\\ntype externalEuint208 is bytes32;\\ntype externalEuint216 is bytes32;\\ntype externalEuint224 is bytes32;\\ntype externalEuint232 is bytes32;\\ntype externalEuint240 is bytes32;\\ntype externalEuint248 is bytes32;\\ntype externalEuint256 is bytes32;\\n\\ntype externalEint8 is bytes32;\\ntype externalEint16 is bytes32;\\ntype externalEint24 is bytes32;\\ntype externalEint32 is bytes32;\\ntype externalEint40 is bytes32;\\ntype externalEint48 is bytes32;\\ntype externalEint56 is bytes32;\\ntype externalEint64 is bytes32;\\ntype externalEint72 is bytes32;\\ntype externalEint80 is bytes32;\\ntype externalEint88 is bytes32;\\ntype externalEint96 is bytes32;\\ntype externalEint104 is bytes32;\\ntype externalEint112 is bytes32;\\ntype externalEint120 is bytes32;\\ntype externalEint128 is bytes32;\\ntype externalEint136 is bytes32;\\ntype externalEint144 is bytes32;\\ntype externalEint152 is bytes32;\\ntype externalEint160 is bytes32;\\ntype externalEint168 is bytes32;\\ntype externalEint176 is bytes32;\\ntype externalEint184 is bytes32;\\ntype externalEint192 is bytes32;\\ntype externalEint200 is bytes32;\\ntype externalEint208 is bytes32;\\ntype externalEint216 is bytes32;\\ntype externalEint224 is bytes32;\\ntype externalEint232 is bytes32;\\ntype externalEint240 is bytes32;\\ntype externalEint248 is bytes32;\\ntype externalEint256 is bytes32;\\n\\ntype externalEaddress is bytes32;\\n\\ntype externalEbytes1 is bytes32;\\ntype externalEbytes2 is bytes32;\\ntype externalEbytes3 is bytes32;\\ntype externalEbytes4 is bytes32;\\ntype externalEbytes5 is bytes32;\\ntype externalEbytes6 is bytes32;\\ntype externalEbytes7 is bytes32;\\ntype externalEbytes8 is bytes32;\\ntype externalEbytes9 is bytes32;\\ntype externalEbytes10 is bytes32;\\ntype externalEbytes11 is bytes32;\\ntype externalEbytes12 is bytes32;\\ntype externalEbytes13 is bytes32;\\ntype externalEbytes14 is bytes32;\\ntype externalEbytes15 is bytes32;\\ntype externalEbytes16 is bytes32;\\ntype externalEbytes17 is bytes32;\\ntype externalEbytes18 is bytes32;\\ntype externalEbytes19 is bytes32;\\ntype externalEbytes20 is bytes32;\\ntype externalEbytes21 is bytes32;\\ntype externalEbytes22 is bytes32;\\ntype externalEbytes23 is bytes32;\\ntype externalEbytes24 is bytes32;\\ntype externalEbytes25 is bytes32;\\ntype externalEbytes26 is bytes32;\\ntype externalEbytes27 is bytes32;\\ntype externalEbytes28 is bytes32;\\ntype externalEbytes29 is bytes32;\\ntype externalEbytes30 is bytes32;\\ntype externalEbytes31 is bytes32;\\ntype externalEbytes32 is bytes32;\\n\",\"keccak256\":\"0x5da9799cd5c30067ea946164722197151baee1f2579a76f01874d4fb25df02a3\",\"license\":\"MIT\"}},\"version\":1}",
516
- "bytecode": "0x608060405234801561000f575f5ffd5b50604051611a68380380611a6883398101604081905261002e9161034c565b6100e2610039610140565b80517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e464970080546001600160a01b03199081166001600160a01b039384161790915560208301517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497018054831691841691909117905560408301517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497028054909216921691909117905550565b5f6100ed8482610455565b5060016100fa8382610455565b50600680546001600160a01b031916331790556001600160a01b0381161561013857600580546001600160a01b0319166001600160a01b0383161790555b50505061050f565b604080516060810182525f808252602082018190529181019190915246600103610199575060408051606080820183525f8083526020808401829052928401819052835191820184528082529181018290529182015290565b4662aa36a703610218575060408051606080820183525f8083526020808401829052928401528251908101835273f0ffdc93b7e186bc2f8cb3daa75d86d1930a433d81527392c920834ec8941d2c77d188936e1f7a6f49c1279181019190915273be0e383937d564d7ff0bc3b46c51f0bf8d5c311a9181019190915290565b46617a6903610296575060408051606080820183525f8083526020808401829052928401528251908101835273f0ffdc93b7e186bc2f8cb3daa75d86d1930a433d81527392c920834ec8941d2c77d188936e1f7a6f49c1279181019190915273be0e383937d564d7ff0bc3b46c51f0bf8d5c311a9181019190915290565b6040516373cac13b60e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126102d2575f5ffd5b81516001600160401b038111156102eb576102eb6102af565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610319576103196102af565b604052818152838201602001851015610330575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f6060848603121561035e575f5ffd5b83516001600160401b03811115610373575f5ffd5b61037f868287016102c3565b602086015190945090506001600160401b0381111561039c575f5ffd5b6103a8868287016102c3565b604086015190935090506001600160a01b03811681146103c6575f5ffd5b809150509250925092565b600181811c908216806103e557607f821691505b60208210810361040357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561045057805f5260205f20601f840160051c8101602085101561042e5750805b601f840160051c820191505b8181101561044d575f815560010161043a565b50505b505050565b81516001600160401b0381111561046e5761046e6102af565b6104828161047c84546103d1565b84610409565b6020601f8211600181146104b4575f831561049d5750848201515b5f19600385901b1c1916600184901b17845561044d565b5f84815260208120601f198516915b828110156104e357878501518255602094850194600190920191016104c3565b508482101561050057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b61154c8061051c5f395ff3fe608060405234801561000f575f5ffd5b506004361061011c575f3560e01c80637d32e7bd116100a9578063b32c10011161006e578063b32c100114610252578063c8fbd4b314610265578063dd62ed3e14610278578063e30c3978146102b0578063f2fde38b146102c3575f5ffd5b80637d32e7bd146101f15780638927b030146102045780638da5cb5b1461020c57806395d89b41146102375780639a0943521461023f575f5ffd5b806340c10f19116100ef57806340c10f19146101765780636015992b1461018b57806370a082311461019e57806379ba5097146101c65780637b7e0a5a146101ce575f5ffd5b806306fdde031461012057806318160ddd1461013e5780632e0f262514610155578063313ce5671461016f575b5f5ffd5b6101286102d6565b6040516101359190611219565b60405180910390f35b61014760025481565b604051908152602001610135565b61015d601281565b60405160ff9091168152602001610135565b601261015d565b610189610184366004611246565b610361565b005b61018961019936600461126e565b6104b2565b6101476101ac36600461126e565b6001600160a01b03165f9081526003602052604090205490565b610189610526565b6101e16101dc3660046112cc565b6105ad565b6040519015158152602001610135565b6101e16101ff366004611246565b610605565b610147610640565b60065461021f906001600160a01b031681565b6040516001600160a01b039091168152602001610135565b61012861064e565b6101e161024d366004611322565b61065b565b6101e16102603660046112cc565b6107a5565b60055461021f906001600160a01b031681565b61014761028636600461138c565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b60075461021f906001600160a01b031681565b6101896102d136600461126e565b61086e565b5f80546102e2906113bd565b80601f016020809104026020016040519081016040528092919081815260200182805461030e906113bd565b80156103595780601f1061033057610100808354040283529160200191610359565b820191905f5260205f20905b81548152906001019060200180831161033c57829003601f168201915b505050505081565b6006546001600160a01b0316331461038c57604051635fc483c560e01b815260040160405180910390fd5b67ffffffffffffffff8111156103b55760405163e5cfe95760e01b815260040160405180910390fd5b60025467ffffffffffffffff906103cd9083906113f5565b11156103ec5760405163e5cfe95760e01b815260040160405180910390fd5b5f6103f682610911565b6001600160a01b0384165f9081526003602052604090205490915061041b9082610927565b6001600160a01b0384165f90815260036020526040902081905561043e90610955565b506001600160a01b0383165f908152600360205260409020546104619084610964565b508160025f82825461047391906113f5565b909155505060405182906001600160a01b038516907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885905f90a3505050565b6006546001600160a01b031633146104dd57604051635fc483c560e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040517f7c1403a777cb1caaa0258a821061f56fd1e6bc77b3d5f81c0f5630a299947d16905f90a250565b6007546001600160a01b03163314610551576040516303c25d1960e61b815260040160405180910390fd5b60068054600780546001600160a01b03198084166001600160a01b038381169182179096559116909155604051929091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b5f5f6105ee8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b90506105fb338783610983565b9695505050505050565b5f61060f82610be4565b61062c57604051631a93b31b60e31b815260040160405180910390fd5b610637338484610983565b90505b92915050565b5f610649610bef565b905090565b600180546102e2906113bd565b5f5f61069c8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b6001600160a01b0388165f908152600460209081526040808320338452909152812054919250906106ce908390610c23565b6001600160a01b0389165f9081526004602090815260408083203384529091528120549192509061072d9083906107059086610c51565b6001600160a01b038c165f908152600460209081526040808320338452909152902054610c7f565b6001600160a01b038a165f9081526004602090815260408083203384529091529020819055905061075d81610955565b50610768818a610964565b506107738133610964565b505f61078883856107835f610911565b610c7f565b90506107958a8a83610983565b9450505050505b95945050505050565b5f5f6107e68585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b335f9081526004602090815260408083206001600160a01b038b1684529091529020819055905061081681610955565b506108218133610964565b5061082c8187610964565b506040516001600160a01b0387169033907ff37f546c25e850257cc0c94f92bec94a17e2f0e884ddda268a25d8144b70eb6a905f90a350600195945050505050565b6006546001600160a01b0316331461089957604051635fc483c560e01b815260040160405180910390fd5b6001600160a01b0381166108c0576040516349e27cff60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b03838116918217909255600654604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b5f61063a8267ffffffffffffffff166005610cc6565b5f82610939576109365f610911565b92505b8161094a576109475f610911565b91505b61063783835f610d55565b5f6109608230610df8565b5090565b5f61096f8383610df8565b5090919050565b5f61063783836005610e6e565b6005545f9081906001600160a01b031615610ac257600554604051632c289dcf60e01b81526001600160a01b0387811660048301525f921690632c289dcf906024016020604051808303815f875af11580156109e1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a059190611414565b600554604051632c289dcf60e01b81526001600160a01b0388811660048301529293505f9290911690632c289dcf906024016020604051808303815f875af1158015610a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a779190611414565b90505f610a848383610f68565b6001600160a01b0389165f9081526003602052604081205491925090610aab908890610c23565b9050610ab78282610f68565b945050505050610ae8565b6001600160a01b0385165f90815260036020526040902054610ae5908490610c23565b90505b5f610af782856107835f610911565b6001600160a01b0387165f9081526003602052604081205491925090610b1d9083610c51565b6001600160a01b0387165f9081526003602052604081205491925090610b439084610927565b6001600160a01b03808a165f90815260036020526040808220869055918a168152208190559050610b7382610955565b50610b7d81610955565b50610b888289610964565b50610b938188610964565b50866001600160a01b0316886001600160a01b03167f4853ae1b4d437c4255ac16cd3ceda3465975023f27cb141584cd9d44440fed8260405160405180910390a360019450505050505b9392505050565b5f61063a8233610f96565b5f46600103610bfe5750600190565b4662aa36a703610c0f575061271190565b46617a6903610c1e57505f1990565b505f90565b5f82610c3557610c325f610911565b92505b81610c4657610c435f610911565b91505b61063783835f61101a565b5f82610c6357610c605f610911565b92505b81610c7457610c715f610911565b91505b61063783835f61107d565b5f83610c9157610c8e5f6110e0565b93505b82610ca257610c9f5f610911565b92505b81610cb357610cb05f610911565b91505b610cbe8484846110fb565b949350505050565b5f5160206114d75f395f51905f5254604051639cd07acb60e01b81525f915f5160206114f75f395f51905f52916001600160a01b0390911690639cd07acb90610d15908790879060040161144b565b6020604051808303815f875af1158015610d31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbe9190611414565b5f5f8215610d685750600160f81b610d6b565b505f5b5f5160206114d75f395f51905f525460405163022f65e760e31b81525f5160206114f75f395f51905f52916001600160a01b03169063117b2f3890610db89089908990879060040161145f565b6020604051808303815f875af1158015610dd4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105fb9190611414565b5f5f5160206114f75f395f51905f528054604051635ca4b5b160e11b8152600481018690526001600160a01b03858116602483015292935091169063b9496b62906044015f604051808303815f87803b158015610e53575f5ffd5b505af1158015610e65573d5f5f3e3d5ffd5b50505050505050565b5f5160206114d75f395f51905f525460405163045fc19560e11b81525f915f5160206114f75f395f51905f52916001600160a01b03909116906308bf832a90610ec190889033908990899060040161147f565b6020604051808303815f875af1158015610edd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190611414565b8154604051630f8e573b60e21b8152600481018390523360248201529193506001600160a01b031690633e395cec906044015f604051808303815f87803b158015610f4a575f5ffd5b505af1158015610f5c573d5f5f3e3d5ffd5b50505050509392505050565b5f82610f7a57610f775f6110e0565b92505b81610f8b57610f885f6110e0565b91505b61063783835f611188565b5f805f5160206114f75f395f51905f5280546040516382027b6d60e01b8152600481018790526001600160a01b0386811660248301529293509116906382027b6d90604401602060405180830381865afa158015610ff6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbe91906114b7565b5f5f821561102d5750600160f81b611030565b505f5b5f5160206114d75f395f51905f5254604051631d44e90160e21b81525f5160206114f75f395f51905f52916001600160a01b031690637513a40490610db89089908990879060040161145f565b5f5f82156110905750600160f81b611093565b505f5b5f5160206114d75f395f51905f52546040516303056db360e31b81525f5160206114f75f395f51905f52916001600160a01b03169063182b6d9890610db89089908990879060040161145f565b5f61063a826110ef575f6110f2565b60015b60ff165f610cc6565b5f805f5160206114f75f395f51905f526001810154604051637702dcff60e01b81526004810188905260248101879052604481018690529192506001600160a01b031690637702dcff906064016020604051808303815f875af1158015611164573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079c9190611414565b5f5f821561119b5750600160f81b61119e565b505f5b5f5160206114d75f395f51905f525460405163d99882d560e01b81525f5160206114f75f395f51905f52916001600160a01b03169063d99882d590610db89089908990879060040161145f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61063760208301846111eb565b80356001600160a01b0381168114611241575f5ffd5b919050565b5f5f60408385031215611257575f5ffd5b6112608361122b565b946020939093013593505050565b5f6020828403121561127e575f5ffd5b6106378261122b565b5f5f83601f840112611297575f5ffd5b50813567ffffffffffffffff8111156112ae575f5ffd5b6020830191508360208285010111156112c5575f5ffd5b9250929050565b5f5f5f5f606085870312156112df575f5ffd5b6112e88561122b565b935060208501359250604085013567ffffffffffffffff81111561130a575f5ffd5b61131687828801611287565b95989497509550505050565b5f5f5f5f5f60808688031215611336575f5ffd5b61133f8661122b565b945061134d6020870161122b565b935060408601359250606086013567ffffffffffffffff81111561136f575f5ffd5b61137b88828901611287565b969995985093965092949392505050565b5f5f6040838503121561139d575f5ffd5b6113a68361122b565b91506113b46020840161122b565b90509250929050565b600181811c908216806113d157607f821691505b6020821081036113ef57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561063a57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215611424575f5ffd5b5051919050565b6054811061144757634e487b7160e01b5f52602160045260245ffd5b9052565b82815260408101610bdd602083018461142b565b92835260208301919091526001600160f81b031916604082015260600190565b8481526001600160a01b03841660208201526080604082018190525f906114a8908301856111eb565b905061079c606083018461142b565b5f602082840312156114c7575f5ffd5b81518015158114610bdd575f5ffdfe9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497019e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700a2646970667358221220e5ab3ac4f1e92d02765379095d2a52058c5562e247286f76a722116cba17bcef64736f6c634300081b0033",
517
- "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061011c575f3560e01c80637d32e7bd116100a9578063b32c10011161006e578063b32c100114610252578063c8fbd4b314610265578063dd62ed3e14610278578063e30c3978146102b0578063f2fde38b146102c3575f5ffd5b80637d32e7bd146101f15780638927b030146102045780638da5cb5b1461020c57806395d89b41146102375780639a0943521461023f575f5ffd5b806340c10f19116100ef57806340c10f19146101765780636015992b1461018b57806370a082311461019e57806379ba5097146101c65780637b7e0a5a146101ce575f5ffd5b806306fdde031461012057806318160ddd1461013e5780632e0f262514610155578063313ce5671461016f575b5f5ffd5b6101286102d6565b6040516101359190611219565b60405180910390f35b61014760025481565b604051908152602001610135565b61015d601281565b60405160ff9091168152602001610135565b601261015d565b610189610184366004611246565b610361565b005b61018961019936600461126e565b6104b2565b6101476101ac36600461126e565b6001600160a01b03165f9081526003602052604090205490565b610189610526565b6101e16101dc3660046112cc565b6105ad565b6040519015158152602001610135565b6101e16101ff366004611246565b610605565b610147610640565b60065461021f906001600160a01b031681565b6040516001600160a01b039091168152602001610135565b61012861064e565b6101e161024d366004611322565b61065b565b6101e16102603660046112cc565b6107a5565b60055461021f906001600160a01b031681565b61014761028636600461138c565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b60075461021f906001600160a01b031681565b6101896102d136600461126e565b61086e565b5f80546102e2906113bd565b80601f016020809104026020016040519081016040528092919081815260200182805461030e906113bd565b80156103595780601f1061033057610100808354040283529160200191610359565b820191905f5260205f20905b81548152906001019060200180831161033c57829003601f168201915b505050505081565b6006546001600160a01b0316331461038c57604051635fc483c560e01b815260040160405180910390fd5b67ffffffffffffffff8111156103b55760405163e5cfe95760e01b815260040160405180910390fd5b60025467ffffffffffffffff906103cd9083906113f5565b11156103ec5760405163e5cfe95760e01b815260040160405180910390fd5b5f6103f682610911565b6001600160a01b0384165f9081526003602052604090205490915061041b9082610927565b6001600160a01b0384165f90815260036020526040902081905561043e90610955565b506001600160a01b0383165f908152600360205260409020546104619084610964565b508160025f82825461047391906113f5565b909155505060405182906001600160a01b038516907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885905f90a3505050565b6006546001600160a01b031633146104dd57604051635fc483c560e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040517f7c1403a777cb1caaa0258a821061f56fd1e6bc77b3d5f81c0f5630a299947d16905f90a250565b6007546001600160a01b03163314610551576040516303c25d1960e61b815260040160405180910390fd5b60068054600780546001600160a01b03198084166001600160a01b038381169182179096559116909155604051929091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b5f5f6105ee8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b90506105fb338783610983565b9695505050505050565b5f61060f82610be4565b61062c57604051631a93b31b60e31b815260040160405180910390fd5b610637338484610983565b90505b92915050565b5f610649610bef565b905090565b600180546102e2906113bd565b5f5f61069c8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b6001600160a01b0388165f908152600460209081526040808320338452909152812054919250906106ce908390610c23565b6001600160a01b0389165f9081526004602090815260408083203384529091528120549192509061072d9083906107059086610c51565b6001600160a01b038c165f908152600460209081526040808320338452909152902054610c7f565b6001600160a01b038a165f9081526004602090815260408083203384529091529020819055905061075d81610955565b50610768818a610964565b506107738133610964565b505f61078883856107835f610911565b610c7f565b90506107958a8a83610983565b9450505050505b95945050505050565b5f5f6107e68585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b335f9081526004602090815260408083206001600160a01b038b1684529091529020819055905061081681610955565b506108218133610964565b5061082c8187610964565b506040516001600160a01b0387169033907ff37f546c25e850257cc0c94f92bec94a17e2f0e884ddda268a25d8144b70eb6a905f90a350600195945050505050565b6006546001600160a01b0316331461089957604051635fc483c560e01b815260040160405180910390fd5b6001600160a01b0381166108c0576040516349e27cff60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b03838116918217909255600654604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b5f61063a8267ffffffffffffffff166005610cc6565b5f82610939576109365f610911565b92505b8161094a576109475f610911565b91505b61063783835f610d55565b5f6109608230610df8565b5090565b5f61096f8383610df8565b5090919050565b5f61063783836005610e6e565b6005545f9081906001600160a01b031615610ac257600554604051632c289dcf60e01b81526001600160a01b0387811660048301525f921690632c289dcf906024016020604051808303815f875af11580156109e1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a059190611414565b600554604051632c289dcf60e01b81526001600160a01b0388811660048301529293505f9290911690632c289dcf906024016020604051808303815f875af1158015610a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a779190611414565b90505f610a848383610f68565b6001600160a01b0389165f9081526003602052604081205491925090610aab908890610c23565b9050610ab78282610f68565b945050505050610ae8565b6001600160a01b0385165f90815260036020526040902054610ae5908490610c23565b90505b5f610af782856107835f610911565b6001600160a01b0387165f9081526003602052604081205491925090610b1d9083610c51565b6001600160a01b0387165f9081526003602052604081205491925090610b439084610927565b6001600160a01b03808a165f90815260036020526040808220869055918a168152208190559050610b7382610955565b50610b7d81610955565b50610b888289610964565b50610b938188610964565b50866001600160a01b0316886001600160a01b03167f4853ae1b4d437c4255ac16cd3ceda3465975023f27cb141584cd9d44440fed8260405160405180910390a360019450505050505b9392505050565b5f61063a8233610f96565b5f46600103610bfe5750600190565b4662aa36a703610c0f575061271190565b46617a6903610c1e57505f1990565b505f90565b5f82610c3557610c325f610911565b92505b81610c4657610c435f610911565b91505b61063783835f61101a565b5f82610c6357610c605f610911565b92505b81610c7457610c715f610911565b91505b61063783835f61107d565b5f83610c9157610c8e5f6110e0565b93505b82610ca257610c9f5f610911565b92505b81610cb357610cb05f610911565b91505b610cbe8484846110fb565b949350505050565b5f5160206114d75f395f51905f5254604051639cd07acb60e01b81525f915f5160206114f75f395f51905f52916001600160a01b0390911690639cd07acb90610d15908790879060040161144b565b6020604051808303815f875af1158015610d31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbe9190611414565b5f5f8215610d685750600160f81b610d6b565b505f5b5f5160206114d75f395f51905f525460405163022f65e760e31b81525f5160206114f75f395f51905f52916001600160a01b03169063117b2f3890610db89089908990879060040161145f565b6020604051808303815f875af1158015610dd4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105fb9190611414565b5f5f5160206114f75f395f51905f528054604051635ca4b5b160e11b8152600481018690526001600160a01b03858116602483015292935091169063b9496b62906044015f604051808303815f87803b158015610e53575f5ffd5b505af1158015610e65573d5f5f3e3d5ffd5b50505050505050565b5f5160206114d75f395f51905f525460405163045fc19560e11b81525f915f5160206114f75f395f51905f52916001600160a01b03909116906308bf832a90610ec190889033908990899060040161147f565b6020604051808303815f875af1158015610edd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190611414565b8154604051630f8e573b60e21b8152600481018390523360248201529193506001600160a01b031690633e395cec906044015f604051808303815f87803b158015610f4a575f5ffd5b505af1158015610f5c573d5f5f3e3d5ffd5b50505050509392505050565b5f82610f7a57610f775f6110e0565b92505b81610f8b57610f885f6110e0565b91505b61063783835f611188565b5f805f5160206114f75f395f51905f5280546040516382027b6d60e01b8152600481018790526001600160a01b0386811660248301529293509116906382027b6d90604401602060405180830381865afa158015610ff6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbe91906114b7565b5f5f821561102d5750600160f81b611030565b505f5b5f5160206114d75f395f51905f5254604051631d44e90160e21b81525f5160206114f75f395f51905f52916001600160a01b031690637513a40490610db89089908990879060040161145f565b5f5f82156110905750600160f81b611093565b505f5b5f5160206114d75f395f51905f52546040516303056db360e31b81525f5160206114f75f395f51905f52916001600160a01b03169063182b6d9890610db89089908990879060040161145f565b5f61063a826110ef575f6110f2565b60015b60ff165f610cc6565b5f805f5160206114f75f395f51905f526001810154604051637702dcff60e01b81526004810188905260248101879052604481018690529192506001600160a01b031690637702dcff906064016020604051808303815f875af1158015611164573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079c9190611414565b5f5f821561119b5750600160f81b61119e565b505f5b5f5160206114d75f395f51905f525460405163d99882d560e01b81525f5160206114f75f395f51905f52916001600160a01b03169063d99882d590610db89089908990879060040161145f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61063760208301846111eb565b80356001600160a01b0381168114611241575f5ffd5b919050565b5f5f60408385031215611257575f5ffd5b6112608361122b565b946020939093013593505050565b5f6020828403121561127e575f5ffd5b6106378261122b565b5f5f83601f840112611297575f5ffd5b50813567ffffffffffffffff8111156112ae575f5ffd5b6020830191508360208285010111156112c5575f5ffd5b9250929050565b5f5f5f5f606085870312156112df575f5ffd5b6112e88561122b565b935060208501359250604085013567ffffffffffffffff81111561130a575f5ffd5b61131687828801611287565b95989497509550505050565b5f5f5f5f5f60808688031215611336575f5ffd5b61133f8661122b565b945061134d6020870161122b565b935060408601359250606086013567ffffffffffffffff81111561136f575f5ffd5b61137b88828901611287565b969995985093965092949392505050565b5f5f6040838503121561139d575f5ffd5b6113a68361122b565b91506113b46020840161122b565b90509250929050565b600181811c908216806113d157607f821691505b6020821081036113ef57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561063a57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215611424575f5ffd5b5051919050565b6054811061144757634e487b7160e01b5f52602160045260245ffd5b9052565b82815260408101610bdd602083018461142b565b92835260208301919091526001600160f81b031916604082015260600190565b8481526001600160a01b03841660208201526080604082018190525f906114a8908301856111eb565b905061079c606083018461142b565b5f602082840312156114c7575f5ffd5b81518015158114610bdd575f5ffdfe9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497019e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700a2646970667358221220e5ab3ac4f1e92d02765379095d2a52058c5562e247286f76a722116cba17bcef64736f6c634300081b0033",
514
+ "solcInputHash": "d569a852ccf6cd3324bac3d3c54f79db",
515
+ "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"checker\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ComplianceCheckerNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TotalSupplyOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedCiphertext\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZamaProtocolUnsupported\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newChecker\",\"type\":\"address\"}],\"name\":\"ComplianceCheckerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"currentOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"euint64\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"externalEuint64\",\"name\":\"encryptedAmount\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"inputProof\",\"type\":\"bytes\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"euint64\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"complianceChecker\",\"outputs\":[{\"internalType\":\"contract IComplianceChecker\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confidentialProtocolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"checker\",\"type\":\"address\"}],\"name\":\"setComplianceChecker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"externalEuint64\",\"name\":\"encryptedAmount\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"inputProof\",\"type\":\"bytes\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"euint64\",\"name\":\"amount\",\"type\":\"bytes32\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"externalEuint64\",\"name\":\"encryptedAmount\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"inputProof\",\"type\":\"bytes\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Gustavo Valverde\",\"custom:category\":\"token\",\"custom:concept\":\"FHE.select() for branch-free compliant transfers\",\"custom:difficulty\":\"advanced This contract implements a compliant token with encrypted balances. Transfers only succeed if both parties pass compliance checks, but failures are handled silently (transfer of 0) to prevent information leakage. Key patterns demonstrated: 1. FHE.select() for branch-free conditional logic 2. Combining multiple encrypted conditions with FHE.and() 3. Encrypted balance management 4. No-revert compliance (privacy-preserving failure handling) 5. Integration with external compliance checker\",\"details\":\"Part of zentity-fhevm-contracts - Builder Track\",\"events\":{\"Approval(address,address)\":{\"params\":{\"owner\":\"Address of the token owner\",\"spender\":\"Address authorized to spend\"}},\"ComplianceCheckerUpdated(address)\":{\"params\":{\"newChecker\":\"Address of the new compliance checker\"}},\"Mint(address,uint256)\":{\"params\":{\"amount\":\"Number of tokens minted\",\"to\":\"Address receiving the minted tokens\"}},\"OwnershipTransferStarted(address,address)\":{\"params\":{\"currentOwner\":\"Current owner address\",\"pendingOwner\":\"Address that can accept ownership\"}},\"OwnershipTransferred(address,address)\":{\"params\":{\"newOwner\":\"New owner address\",\"previousOwner\":\"Previous owner address\"}},\"Transfer(address,address)\":{\"params\":{\"from\":\"Address tokens are transferred from\",\"to\":\"Address tokens are transferred to\"}}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"params\":{\"account\":\"Owner address\",\"spender\":\"Spender address\"},\"returns\":{\"_0\":\"Encrypted allowance\"}},\"approve(address,bytes32,bytes)\":{\"params\":{\"encryptedAmount\":\"Encrypted allowance amount\",\"inputProof\":\"Proof for encrypted input\",\"spender\":\"Address to approve\"},\"returns\":{\"success\":\"Always true\"}},\"balanceOf(address)\":{\"params\":{\"account\":\"Address to query\"},\"returns\":{\"_0\":\"Encrypted balance\"}},\"constructor\":{\"params\":{\"checker\":\"Address of the compliance checker contract\",\"tokenName\":\"Token name\",\"tokenSymbol\":\"Token symbol\"}},\"decimals()\":{\"returns\":{\"_0\":\"Token decimals\"}},\"mint(address,uint256)\":{\"details\":\"Only owner can mint. Compliance is NOT checked on mint.\",\"params\":{\"amount\":\"Amount to mint (plaintext)\",\"to\":\"Recipient address\"}},\"setComplianceChecker(address)\":{\"params\":{\"checker\":\"Address of the compliance checker\"}},\"transfer(address,bytes32)\":{\"params\":{\"amount\":\"Encrypted amount\",\"to\":\"Recipient\"},\"returns\":{\"success\":\"Always true\"}},\"transfer(address,bytes32,bytes)\":{\"details\":\"Branch-free transfer with compliance checks\",\"params\":{\"encryptedAmount\":\"Encrypted amount to transfer\",\"inputProof\":\"Proof for encrypted input\",\"to\":\"Recipient address\"},\"returns\":{\"success\":\"Always returns true (actual transfer amount may be 0) Key insight: We never revert on failed compliance. Instead: - If compliant: transfer the requested amount - If not compliant: transfer 0 (no state change, no info leak)\"}},\"transferFrom(address,address,bytes32,bytes)\":{\"params\":{\"encryptedAmount\":\"Encrypted amount\",\"from\":\"Source address\",\"inputProof\":\"Proof for encrypted input\",\"to\":\"Destination address\"},\"returns\":{\"success\":\"Always true\"}},\"transferOwnership(address)\":{\"params\":{\"newOwner\":\"Address that can accept ownership\"}}},\"title\":\"CompliantERC20\",\"version\":1},\"userdoc\":{\"errors\":{\"ComplianceCheckerNotSet()\":[{\"notice\":\"Thrown when compliance checker is required but not set\"}],\"InvalidOwner()\":[{\"notice\":\"Thrown when new owner is the zero address\"}],\"OnlyOwner()\":[{\"notice\":\"Thrown when caller is not the contract owner\"}],\"OnlyPendingOwner()\":[{\"notice\":\"Thrown when caller is not the pending owner\"}],\"TotalSupplyOverflow()\":[{\"notice\":\"Thrown when mint amount would exceed uint64 accounting bounds\"}],\"UnauthorizedCiphertext()\":[{\"notice\":\"Thrown when caller supplies an unauthorized ciphertext handle\"}],\"ZamaProtocolUnsupported()\":[{\"notice\":\"Returned if the Zama protocol is not supported on the current chain\"}]},\"events\":{\"Approval(address,address)\":{\"notice\":\"Emitted when spending allowance is set\"},\"ComplianceCheckerUpdated(address)\":{\"notice\":\"Emitted when the compliance checker contract is updated\"},\"Mint(address,uint256)\":{\"notice\":\"Emitted when new tokens are minted\"},\"OwnershipTransferStarted(address,address)\":{\"notice\":\"Emitted when ownership transfer is initiated\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Emitted when ownership transfer is completed\"},\"Transfer(address,address)\":{\"notice\":\"Emitted on token transfers (indexed for efficient filtering)\"}},\"kind\":\"user\",\"methods\":{\"DECIMALS()\":{\"notice\":\"Token decimals\"},\"acceptOwnership()\":{\"notice\":\"Accept ownership transfer\"},\"allowance(address,address)\":{\"notice\":\"Get encrypted allowance\"},\"approve(address,bytes32,bytes)\":{\"notice\":\"Approve spender to transfer tokens\"},\"balanceOf(address)\":{\"notice\":\"Get encrypted balance\"},\"complianceChecker()\":{\"notice\":\"Compliance checker interface (can be ComplianceRules or custom)\"},\"constructor\":{\"notice\":\"Initialize the token\"},\"decimals()\":{\"notice\":\"Get decimals\"},\"mint(address,uint256)\":{\"notice\":\"Mint tokens to an address\"},\"name()\":{\"notice\":\"Token name\"},\"owner()\":{\"notice\":\"Owner/admin\"},\"pendingOwner()\":{\"notice\":\"Pending owner for two-step ownership transfer\"},\"setComplianceChecker(address)\":{\"notice\":\"Set the compliance checker contract\"},\"symbol()\":{\"notice\":\"Token symbol\"},\"totalSupply()\":{\"notice\":\"Total supply (public for transparency)\"},\"transfer(address,bytes32)\":{\"notice\":\"Transfer with euint64 amount (for approved callers)\"},\"transfer(address,bytes32,bytes)\":{\"notice\":\"Transfer tokens with encrypted amount\"},\"transferFrom(address,address,bytes32,bytes)\":{\"notice\":\"Transfer from another account (requires approval)\"},\"transferOwnership(address)\":{\"notice\":\"Initiate transfer of contract ownership\"}},\"notice\":\"ERC20-like token with encrypted balances and compliance checks\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/tokens/CompliantERC20.sol\":\"CompliantERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@fhevm/solidity/config/ZamaConfig.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport {FHE} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\nimport {CoprocessorConfig} from \\\"@fhevm/solidity/lib/Impl.sol\\\";\\n\\n/**\\n * @title ZamaConfig.\\n * @notice This library returns the FHEVM config for different networks\\n * with the contract addresses for (1) ACL, (2) CoprocessorAddress, (3) KMSVerifier,\\n * which are deployed & maintained by Zama.\\n */\\nlibrary ZamaConfig {\\n /// @notice Returned if the Zama protocol is not supported on the current chain\\n error ZamaProtocolUnsupported();\\n\\n function getEthereumCoprocessorConfig() internal view returns (CoprocessorConfig memory config) {\\n if (block.chainid == 1) {\\n config = _getEthereumConfig();\\n } else if (block.chainid == 11155111) {\\n config = _getSepoliaConfig();\\n } else if (block.chainid == 31337) {\\n config = _getLocalConfig();\\n } else {\\n revert ZamaProtocolUnsupported();\\n }\\n }\\n\\n function getConfidentialProtocolId() internal view returns (uint256) {\\n if (block.chainid == 1) {\\n return _getEthereumProtocolId();\\n } else if (block.chainid == 11155111) {\\n return _getSepoliaProtocolId();\\n } else if (block.chainid == 31337) {\\n return _getLocalProtocolId();\\n }\\n return 0;\\n }\\n\\n /// @dev chainid == 1\\n function _getEthereumProtocolId() private pure returns (uint256) {\\n // Zama Ethereum protocol id is '1'\\n return 1;\\n }\\n\\n /// @dev chainid == 1\\n function _getEthereumConfig() private pure returns (CoprocessorConfig memory) {\\n // The addresses below are placeholders and should be replaced with actual addresses\\n // once deployed on the Ethereum mainnet.\\n return\\n CoprocessorConfig({ACLAddress: address(0), CoprocessorAddress: address(0), KMSVerifierAddress: address(0)});\\n }\\n\\n /// @dev chainid == 11155111\\n function _getSepoliaProtocolId() private pure returns (uint256) {\\n // Zama Ethereum Sepolia protocol id is '10000 + Zama Ethereum protocol id'\\n return 10001;\\n }\\n\\n /// @dev chainid == 11155111\\n function _getSepoliaConfig() private pure returns (CoprocessorConfig memory) {\\n return\\n CoprocessorConfig({\\n ACLAddress: 0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D,\\n CoprocessorAddress: 0x92C920834Ec8941d2C77D188936E1f7A6f49c127,\\n KMSVerifierAddress: 0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A\\n });\\n }\\n\\n /// @dev chainid == 31337\\n function _getLocalProtocolId() private pure returns (uint256) {\\n return type(uint256).max;\\n }\\n\\n function _getLocalConfig() private pure returns (CoprocessorConfig memory) {\\n return\\n CoprocessorConfig({\\n ACLAddress: 0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D,\\n CoprocessorAddress: 0x92C920834Ec8941d2C77D188936E1f7A6f49c127,\\n KMSVerifierAddress: 0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A\\n });\\n }\\n}\\n\\n/**\\n * @title ZamaEthereumConfig.\\n * @dev This contract can be inherited by a contract wishing to use the FHEVM contracts provided by Zama\\n * on the Ethereum (mainnet) network (chainId = 1) or Sepolia (testnet) network (chainId = 11155111).\\n * Other providers may offer similar contracts deployed at different addresses.\\n * If you wish to use them, you should rely on the instructions from these providers.\\n */\\nabstract contract ZamaEthereumConfig {\\n constructor() {\\n FHE.setCoprocessor(ZamaConfig.getEthereumCoprocessorConfig());\\n }\\n\\n function confidentialProtocolId() public view returns (uint256) {\\n return ZamaConfig.getConfidentialProtocolId();\\n }\\n}\\n\",\"keccak256\":\"0xa6e5421fb2a631825a980896055598620b5959bd1f5222031d95515fc1eb2a99\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/FHE.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport \\\"./Impl.sol\\\";\\nimport {FheType} from \\\"./FheType.sol\\\";\\n\\nimport \\\"encrypted-types/EncryptedTypes.sol\\\";\\n\\n/**\\n * @title IKMSVerifier\\n * @notice This interface contains the only function required from KMSVerifier.\\n */\\ninterface IKMSVerifier {\\n function verifyDecryptionEIP712KMSSignatures(\\n bytes32[] memory handlesList,\\n bytes memory decryptedResult,\\n bytes memory decryptionProof\\n ) external returns (bool);\\n}\\n\\n/**\\n * @title FHE\\n * @notice This library is the interaction point for all smart contract developers\\n * that interact with the FHEVM protocol.\\n */\\nlibrary FHE {\\n /// @notice Returned if the returned KMS signatures are not valid.\\n error InvalidKMSSignatures();\\n\\n /// @notice This event is emitted when public decryption has been successfully verified.\\n event PublicDecryptionVerified(bytes32[] handlesList, bytes abiEncodedCleartexts);\\n\\n /**\\n * @notice Sets the coprocessor addresses.\\n * @param coprocessorConfig Coprocessor config struct that contains contract addresses.\\n */\\n function setCoprocessor(CoprocessorConfig memory coprocessorConfig) internal {\\n Impl.setCoprocessor(coprocessorConfig);\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(ebool v) internal pure returns (bool) {\\n return ebool.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint8 v) internal pure returns (bool) {\\n return euint8.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint16 v) internal pure returns (bool) {\\n return euint16.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint32 v) internal pure returns (bool) {\\n return euint32.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint64 v) internal pure returns (bool) {\\n return euint64.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint128 v) internal pure returns (bool) {\\n return euint128.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(eaddress v) internal pure returns (bool) {\\n return eaddress.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint256 v) internal pure returns (bool) {\\n return euint256.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Evaluates and(ebool a, ebool b) and returns the result.\\n */\\n function and(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(ebool a, ebool b) and returns the result.\\n */\\n function or(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(ebool a, ebool b) and returns the result.\\n */\\n function xor(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(ebool a, ebool b) and returns the result.\\n */\\n function eq(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(ebool a, ebool b) and returns the result.\\n */\\n function ne(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint8 b) and returns the result.\\n */\\n function add(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint8 b) and returns the result.\\n */\\n function sub(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint8 b) and returns the result.\\n */\\n function mul(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint8 b) and returns the result.\\n */\\n function and(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint8 b) and returns the result.\\n */\\n function or(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint8 b) and returns the result.\\n */\\n function xor(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint8 b) and returns the result.\\n */\\n function eq(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint8 b) and returns the result.\\n */\\n function ne(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint8 b) and returns the result.\\n */\\n function ge(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint8 b) and returns the result.\\n */\\n function gt(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint8 b) and returns the result.\\n */\\n function le(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint8 b) and returns the result.\\n */\\n function lt(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint8 b) and returns the result.\\n */\\n function min(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint8 b) and returns the result.\\n */\\n function max(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint16 b) and returns the result.\\n */\\n function add(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint16 b) and returns the result.\\n */\\n function sub(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint16 b) and returns the result.\\n */\\n function mul(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint16 b) and returns the result.\\n */\\n function and(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint16 b) and returns the result.\\n */\\n function or(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint16 b) and returns the result.\\n */\\n function xor(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint16 b) and returns the result.\\n */\\n function eq(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint16 b) and returns the result.\\n */\\n function ne(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint16 b) and returns the result.\\n */\\n function ge(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint16 b) and returns the result.\\n */\\n function gt(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint16 b) and returns the result.\\n */\\n function le(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint16 b) and returns the result.\\n */\\n function lt(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint16 b) and returns the result.\\n */\\n function min(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint16 b) and returns the result.\\n */\\n function max(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint32 b) and returns the result.\\n */\\n function add(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint32 b) and returns the result.\\n */\\n function sub(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint32 b) and returns the result.\\n */\\n function mul(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint32 b) and returns the result.\\n */\\n function and(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint32 b) and returns the result.\\n */\\n function or(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint32 b) and returns the result.\\n */\\n function xor(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint32 b) and returns the result.\\n */\\n function eq(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint32 b) and returns the result.\\n */\\n function ne(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint32 b) and returns the result.\\n */\\n function ge(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint32 b) and returns the result.\\n */\\n function gt(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint32 b) and returns the result.\\n */\\n function le(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint32 b) and returns the result.\\n */\\n function lt(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint32 b) and returns the result.\\n */\\n function min(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint32 b) and returns the result.\\n */\\n function max(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint64 b) and returns the result.\\n */\\n function add(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint64 b) and returns the result.\\n */\\n function sub(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint64 b) and returns the result.\\n */\\n function mul(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint64 b) and returns the result.\\n */\\n function and(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint64 b) and returns the result.\\n */\\n function or(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint64 b) and returns the result.\\n */\\n function xor(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint64 b) and returns the result.\\n */\\n function eq(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint64 b) and returns the result.\\n */\\n function ne(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint64 b) and returns the result.\\n */\\n function ge(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint64 b) and returns the result.\\n */\\n function gt(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint64 b) and returns the result.\\n */\\n function le(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint64 b) and returns the result.\\n */\\n function lt(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint64 b) and returns the result.\\n */\\n function min(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint64 b) and returns the result.\\n */\\n function max(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint128 b) and returns the result.\\n */\\n function add(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint128 b) and returns the result.\\n */\\n function sub(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint128 b) and returns the result.\\n */\\n function mul(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint128 b) and returns the result.\\n */\\n function and(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint128 b) and returns the result.\\n */\\n function or(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint128 b) and returns the result.\\n */\\n function xor(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint128 b) and returns the result.\\n */\\n function eq(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint128 b) and returns the result.\\n */\\n function ne(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint128 b) and returns the result.\\n */\\n function ge(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint128 b) and returns the result.\\n */\\n function gt(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint128 b) and returns the result.\\n */\\n function le(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint128 b) and returns the result.\\n */\\n function lt(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint128 b) and returns the result.\\n */\\n function min(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint128 b) and returns the result.\\n */\\n function max(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint256 b) and returns the result.\\n */\\n function and(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint256 b) and returns the result.\\n */\\n function or(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint256 b) and returns the result.\\n */\\n function xor(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint256 b) and returns the result.\\n */\\n function eq(euint8 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint256 b) and returns the result.\\n */\\n function ne(euint8 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint8 b) and returns the result.\\n */\\n function add(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint8 b) and returns the result.\\n */\\n function sub(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint8 b) and returns the result.\\n */\\n function mul(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint8 b) and returns the result.\\n */\\n function and(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint8 b) and returns the result.\\n */\\n function or(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint8 b) and returns the result.\\n */\\n function xor(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint8 b) and returns the result.\\n */\\n function eq(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint8 b) and returns the result.\\n */\\n function ne(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint8 b) and returns the result.\\n */\\n function ge(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint8 b) and returns the result.\\n */\\n function gt(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint8 b) and returns the result.\\n */\\n function le(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint8 b) and returns the result.\\n */\\n function lt(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint8 b) and returns the result.\\n */\\n function min(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint8 b) and returns the result.\\n */\\n function max(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint16 b) and returns the result.\\n */\\n function add(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint16 b) and returns the result.\\n */\\n function sub(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint16 b) and returns the result.\\n */\\n function mul(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint16 b) and returns the result.\\n */\\n function and(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint16 b) and returns the result.\\n */\\n function or(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint16 b) and returns the result.\\n */\\n function xor(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint16 b) and returns the result.\\n */\\n function eq(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint16 b) and returns the result.\\n */\\n function ne(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint16 b) and returns the result.\\n */\\n function ge(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint16 b) and returns the result.\\n */\\n function gt(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint16 b) and returns the result.\\n */\\n function le(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint16 b) and returns the result.\\n */\\n function lt(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint16 b) and returns the result.\\n */\\n function min(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint16 b) and returns the result.\\n */\\n function max(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint32 b) and returns the result.\\n */\\n function add(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint32 b) and returns the result.\\n */\\n function sub(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint32 b) and returns the result.\\n */\\n function mul(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint32 b) and returns the result.\\n */\\n function and(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint32 b) and returns the result.\\n */\\n function or(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint32 b) and returns the result.\\n */\\n function xor(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint32 b) and returns the result.\\n */\\n function eq(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint32 b) and returns the result.\\n */\\n function ne(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint32 b) and returns the result.\\n */\\n function ge(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint32 b) and returns the result.\\n */\\n function gt(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint32 b) and returns the result.\\n */\\n function le(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint32 b) and returns the result.\\n */\\n function lt(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint32 b) and returns the result.\\n */\\n function min(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint32 b) and returns the result.\\n */\\n function max(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint64 b) and returns the result.\\n */\\n function add(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint64 b) and returns the result.\\n */\\n function sub(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint64 b) and returns the result.\\n */\\n function mul(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint64 b) and returns the result.\\n */\\n function and(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint64 b) and returns the result.\\n */\\n function or(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint64 b) and returns the result.\\n */\\n function xor(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint64 b) and returns the result.\\n */\\n function eq(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint64 b) and returns the result.\\n */\\n function ne(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint64 b) and returns the result.\\n */\\n function ge(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint64 b) and returns the result.\\n */\\n function gt(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint64 b) and returns the result.\\n */\\n function le(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint64 b) and returns the result.\\n */\\n function lt(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint64 b) and returns the result.\\n */\\n function min(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint64 b) and returns the result.\\n */\\n function max(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint128 b) and returns the result.\\n */\\n function add(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint128 b) and returns the result.\\n */\\n function sub(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint128 b) and returns the result.\\n */\\n function mul(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint128 b) and returns the result.\\n */\\n function and(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint128 b) and returns the result.\\n */\\n function or(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint128 b) and returns the result.\\n */\\n function xor(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint128 b) and returns the result.\\n */\\n function eq(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint128 b) and returns the result.\\n */\\n function ne(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint128 b) and returns the result.\\n */\\n function ge(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint128 b) and returns the result.\\n */\\n function gt(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint128 b) and returns the result.\\n */\\n function le(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint128 b) and returns the result.\\n */\\n function lt(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint128 b) and returns the result.\\n */\\n function min(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint128 b) and returns the result.\\n */\\n function max(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint256 b) and returns the result.\\n */\\n function and(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint256 b) and returns the result.\\n */\\n function or(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint256 b) and returns the result.\\n */\\n function xor(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint256 b) and returns the result.\\n */\\n function eq(euint16 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint256 b) and returns the result.\\n */\\n function ne(euint16 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint8 b) and returns the result.\\n */\\n function add(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint8 b) and returns the result.\\n */\\n function sub(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint8 b) and returns the result.\\n */\\n function mul(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint8 b) and returns the result.\\n */\\n function and(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint8 b) and returns the result.\\n */\\n function or(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint8 b) and returns the result.\\n */\\n function xor(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint8 b) and returns the result.\\n */\\n function eq(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint8 b) and returns the result.\\n */\\n function ne(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint8 b) and returns the result.\\n */\\n function ge(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint8 b) and returns the result.\\n */\\n function gt(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint8 b) and returns the result.\\n */\\n function le(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint8 b) and returns the result.\\n */\\n function lt(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint8 b) and returns the result.\\n */\\n function min(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint8 b) and returns the result.\\n */\\n function max(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint16 b) and returns the result.\\n */\\n function add(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint16 b) and returns the result.\\n */\\n function sub(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint16 b) and returns the result.\\n */\\n function mul(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint16 b) and returns the result.\\n */\\n function and(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint16 b) and returns the result.\\n */\\n function or(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint16 b) and returns the result.\\n */\\n function xor(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint16 b) and returns the result.\\n */\\n function eq(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint16 b) and returns the result.\\n */\\n function ne(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint16 b) and returns the result.\\n */\\n function ge(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint16 b) and returns the result.\\n */\\n function gt(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint16 b) and returns the result.\\n */\\n function le(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint16 b) and returns the result.\\n */\\n function lt(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint16 b) and returns the result.\\n */\\n function min(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint16 b) and returns the result.\\n */\\n function max(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint32 b) and returns the result.\\n */\\n function add(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint32 b) and returns the result.\\n */\\n function sub(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint32 b) and returns the result.\\n */\\n function mul(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint32 b) and returns the result.\\n */\\n function and(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint32 b) and returns the result.\\n */\\n function or(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint32 b) and returns the result.\\n */\\n function xor(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint32 b) and returns the result.\\n */\\n function eq(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint32 b) and returns the result.\\n */\\n function ne(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint32 b) and returns the result.\\n */\\n function ge(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint32 b) and returns the result.\\n */\\n function gt(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint32 b) and returns the result.\\n */\\n function le(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint32 b) and returns the result.\\n */\\n function lt(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint32 b) and returns the result.\\n */\\n function min(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint32 b) and returns the result.\\n */\\n function max(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint64 b) and returns the result.\\n */\\n function add(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint64 b) and returns the result.\\n */\\n function sub(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint64 b) and returns the result.\\n */\\n function mul(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint64 b) and returns the result.\\n */\\n function and(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint64 b) and returns the result.\\n */\\n function or(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint64 b) and returns the result.\\n */\\n function xor(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint64 b) and returns the result.\\n */\\n function eq(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint64 b) and returns the result.\\n */\\n function ne(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint64 b) and returns the result.\\n */\\n function ge(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint64 b) and returns the result.\\n */\\n function gt(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint64 b) and returns the result.\\n */\\n function le(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint64 b) and returns the result.\\n */\\n function lt(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint64 b) and returns the result.\\n */\\n function min(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint64 b) and returns the result.\\n */\\n function max(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint128 b) and returns the result.\\n */\\n function add(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint128 b) and returns the result.\\n */\\n function sub(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint128 b) and returns the result.\\n */\\n function mul(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint128 b) and returns the result.\\n */\\n function and(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint128 b) and returns the result.\\n */\\n function or(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint128 b) and returns the result.\\n */\\n function xor(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint128 b) and returns the result.\\n */\\n function eq(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint128 b) and returns the result.\\n */\\n function ne(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint128 b) and returns the result.\\n */\\n function ge(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint128 b) and returns the result.\\n */\\n function gt(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint128 b) and returns the result.\\n */\\n function le(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint128 b) and returns the result.\\n */\\n function lt(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint128 b) and returns the result.\\n */\\n function min(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint128 b) and returns the result.\\n */\\n function max(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint256 b) and returns the result.\\n */\\n function and(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint256 b) and returns the result.\\n */\\n function or(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint256 b) and returns the result.\\n */\\n function xor(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint256 b) and returns the result.\\n */\\n function eq(euint32 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint256 b) and returns the result.\\n */\\n function ne(euint32 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint8 b) and returns the result.\\n */\\n function add(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint8 b) and returns the result.\\n */\\n function sub(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint8 b) and returns the result.\\n */\\n function mul(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint8 b) and returns the result.\\n */\\n function and(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint8 b) and returns the result.\\n */\\n function or(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint8 b) and returns the result.\\n */\\n function xor(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint8 b) and returns the result.\\n */\\n function eq(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint8 b) and returns the result.\\n */\\n function ne(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint8 b) and returns the result.\\n */\\n function ge(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint8 b) and returns the result.\\n */\\n function gt(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint8 b) and returns the result.\\n */\\n function le(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint8 b) and returns the result.\\n */\\n function lt(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint8 b) and returns the result.\\n */\\n function min(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint8 b) and returns the result.\\n */\\n function max(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint16 b) and returns the result.\\n */\\n function add(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint16 b) and returns the result.\\n */\\n function sub(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint16 b) and returns the result.\\n */\\n function mul(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint16 b) and returns the result.\\n */\\n function and(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint16 b) and returns the result.\\n */\\n function or(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint16 b) and returns the result.\\n */\\n function xor(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint16 b) and returns the result.\\n */\\n function eq(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint16 b) and returns the result.\\n */\\n function ne(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint16 b) and returns the result.\\n */\\n function ge(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint16 b) and returns the result.\\n */\\n function gt(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint16 b) and returns the result.\\n */\\n function le(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint16 b) and returns the result.\\n */\\n function lt(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint16 b) and returns the result.\\n */\\n function min(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint16 b) and returns the result.\\n */\\n function max(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint32 b) and returns the result.\\n */\\n function add(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint32 b) and returns the result.\\n */\\n function sub(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint32 b) and returns the result.\\n */\\n function mul(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint32 b) and returns the result.\\n */\\n function and(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint32 b) and returns the result.\\n */\\n function or(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint32 b) and returns the result.\\n */\\n function xor(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint32 b) and returns the result.\\n */\\n function eq(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint32 b) and returns the result.\\n */\\n function ne(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint32 b) and returns the result.\\n */\\n function ge(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint32 b) and returns the result.\\n */\\n function gt(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint32 b) and returns the result.\\n */\\n function le(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint32 b) and returns the result.\\n */\\n function lt(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint32 b) and returns the result.\\n */\\n function min(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint32 b) and returns the result.\\n */\\n function max(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint64 b) and returns the result.\\n */\\n function add(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint64 b) and returns the result.\\n */\\n function sub(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint64 b) and returns the result.\\n */\\n function mul(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint64 b) and returns the result.\\n */\\n function and(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint64 b) and returns the result.\\n */\\n function or(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint64 b) and returns the result.\\n */\\n function xor(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint64 b) and returns the result.\\n */\\n function eq(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint64 b) and returns the result.\\n */\\n function ne(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint64 b) and returns the result.\\n */\\n function ge(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint64 b) and returns the result.\\n */\\n function gt(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint64 b) and returns the result.\\n */\\n function le(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint64 b) and returns the result.\\n */\\n function lt(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint64 b) and returns the result.\\n */\\n function min(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint64 b) and returns the result.\\n */\\n function max(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint128 b) and returns the result.\\n */\\n function add(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint128 b) and returns the result.\\n */\\n function sub(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint128 b) and returns the result.\\n */\\n function mul(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint128 b) and returns the result.\\n */\\n function and(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint128 b) and returns the result.\\n */\\n function or(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint128 b) and returns the result.\\n */\\n function xor(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint128 b) and returns the result.\\n */\\n function eq(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint128 b) and returns the result.\\n */\\n function ne(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint128 b) and returns the result.\\n */\\n function ge(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint128 b) and returns the result.\\n */\\n function gt(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint128 b) and returns the result.\\n */\\n function le(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint128 b) and returns the result.\\n */\\n function lt(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint128 b) and returns the result.\\n */\\n function min(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint128 b) and returns the result.\\n */\\n function max(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint256 b) and returns the result.\\n */\\n function and(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint256 b) and returns the result.\\n */\\n function or(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint256 b) and returns the result.\\n */\\n function xor(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint256 b) and returns the result.\\n */\\n function eq(euint64 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint256 b) and returns the result.\\n */\\n function ne(euint64 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint8 b) and returns the result.\\n */\\n function add(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint8 b) and returns the result.\\n */\\n function sub(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint8 b) and returns the result.\\n */\\n function mul(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint8 b) and returns the result.\\n */\\n function and(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint8 b) and returns the result.\\n */\\n function or(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint8 b) and returns the result.\\n */\\n function xor(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint8 b) and returns the result.\\n */\\n function eq(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint8 b) and returns the result.\\n */\\n function ne(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint8 b) and returns the result.\\n */\\n function ge(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint8 b) and returns the result.\\n */\\n function gt(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint8 b) and returns the result.\\n */\\n function le(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint8 b) and returns the result.\\n */\\n function lt(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint8 b) and returns the result.\\n */\\n function min(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint8 b) and returns the result.\\n */\\n function max(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint16 b) and returns the result.\\n */\\n function add(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint16 b) and returns the result.\\n */\\n function sub(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint16 b) and returns the result.\\n */\\n function mul(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint16 b) and returns the result.\\n */\\n function and(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint16 b) and returns the result.\\n */\\n function or(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint16 b) and returns the result.\\n */\\n function xor(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint16 b) and returns the result.\\n */\\n function eq(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint16 b) and returns the result.\\n */\\n function ne(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint16 b) and returns the result.\\n */\\n function ge(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint16 b) and returns the result.\\n */\\n function gt(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint16 b) and returns the result.\\n */\\n function le(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint16 b) and returns the result.\\n */\\n function lt(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint16 b) and returns the result.\\n */\\n function min(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint16 b) and returns the result.\\n */\\n function max(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint32 b) and returns the result.\\n */\\n function add(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint32 b) and returns the result.\\n */\\n function sub(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint32 b) and returns the result.\\n */\\n function mul(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint32 b) and returns the result.\\n */\\n function and(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint32 b) and returns the result.\\n */\\n function or(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint32 b) and returns the result.\\n */\\n function xor(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint32 b) and returns the result.\\n */\\n function eq(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint32 b) and returns the result.\\n */\\n function ne(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint32 b) and returns the result.\\n */\\n function ge(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint32 b) and returns the result.\\n */\\n function gt(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint32 b) and returns the result.\\n */\\n function le(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint32 b) and returns the result.\\n */\\n function lt(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint32 b) and returns the result.\\n */\\n function min(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint32 b) and returns the result.\\n */\\n function max(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint64 b) and returns the result.\\n */\\n function add(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint64 b) and returns the result.\\n */\\n function sub(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint64 b) and returns the result.\\n */\\n function mul(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint64 b) and returns the result.\\n */\\n function and(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint64 b) and returns the result.\\n */\\n function or(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint64 b) and returns the result.\\n */\\n function xor(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint64 b) and returns the result.\\n */\\n function eq(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint64 b) and returns the result.\\n */\\n function ne(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint64 b) and returns the result.\\n */\\n function ge(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint64 b) and returns the result.\\n */\\n function gt(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint64 b) and returns the result.\\n */\\n function le(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint64 b) and returns the result.\\n */\\n function lt(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint64 b) and returns the result.\\n */\\n function min(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint64 b) and returns the result.\\n */\\n function max(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint128 b) and returns the result.\\n */\\n function add(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint128 b) and returns the result.\\n */\\n function sub(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint128 b) and returns the result.\\n */\\n function mul(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint128 b) and returns the result.\\n */\\n function and(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint128 b) and returns the result.\\n */\\n function or(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint128 b) and returns the result.\\n */\\n function xor(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint128 b) and returns the result.\\n */\\n function eq(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint128 b) and returns the result.\\n */\\n function ne(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint128 b) and returns the result.\\n */\\n function ge(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint128 b) and returns the result.\\n */\\n function gt(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint128 b) and returns the result.\\n */\\n function le(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint128 b) and returns the result.\\n */\\n function lt(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint128 b) and returns the result.\\n */\\n function min(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint128 b) and returns the result.\\n */\\n function max(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint256 b) and returns the result.\\n */\\n function and(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint256 b) and returns the result.\\n */\\n function or(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint256 b) and returns the result.\\n */\\n function xor(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint256 b) and returns the result.\\n */\\n function eq(euint128 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint256 b) and returns the result.\\n */\\n function ne(euint128 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(eaddress a, eaddress b) and returns the result.\\n */\\n function eq(eaddress a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(a), eaddress.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(eaddress a, eaddress b) and returns the result.\\n */\\n function ne(eaddress a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(a), eaddress.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint8 b) and returns the result.\\n */\\n function and(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint8 b) and returns the result.\\n */\\n function or(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint8 b) and returns the result.\\n */\\n function xor(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint8 b) and returns the result.\\n */\\n function eq(euint256 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint8 b) and returns the result.\\n */\\n function ne(euint256 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint16 b) and returns the result.\\n */\\n function and(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint16 b) and returns the result.\\n */\\n function or(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint16 b) and returns the result.\\n */\\n function xor(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint16 b) and returns the result.\\n */\\n function eq(euint256 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint16 b) and returns the result.\\n */\\n function ne(euint256 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint32 b) and returns the result.\\n */\\n function and(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint32 b) and returns the result.\\n */\\n function or(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint32 b) and returns the result.\\n */\\n function xor(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint32 b) and returns the result.\\n */\\n function eq(euint256 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint32 b) and returns the result.\\n */\\n function ne(euint256 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint64 b) and returns the result.\\n */\\n function and(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint64 b) and returns the result.\\n */\\n function or(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint64 b) and returns the result.\\n */\\n function xor(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint64 b) and returns the result.\\n */\\n function eq(euint256 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint64 b) and returns the result.\\n */\\n function ne(euint256 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint128 b) and returns the result.\\n */\\n function and(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint128 b) and returns the result.\\n */\\n function or(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint128 b) and returns the result.\\n */\\n function xor(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint128 b) and returns the result.\\n */\\n function eq(euint256 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint128 b) and returns the result.\\n */\\n function ne(euint256 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint256 b) and returns the result.\\n */\\n function and(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint256 b) and returns the result.\\n */\\n function or(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint256 b) and returns the result.\\n */\\n function xor(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint256 b) and returns the result.\\n */\\n function eq(euint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint256 b) and returns the result.\\n */\\n function ne(euint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(ebool a, bool b) and returns the result.\\n */\\n function and(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(bool a, ebool b) and returns the result.\\n */\\n function and(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(ebool a, bool b) and returns the result.\\n */\\n function or(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(bool a, ebool b) and returns the result.\\n */\\n function or(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(ebool a, bool b) and returns the result.\\n */\\n function xor(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(bool a, ebool b) and returns the result.\\n */\\n function xor(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(ebool a, bool b) and returns the result.\\n */\\n function eq(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(bool a, ebool b) and returns the result.\\n */\\n function eq(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(ebool a, bool b) and returns the result.\\n */\\n function ne(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(bool a, ebool b) and returns the result.\\n */\\n function ne(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, uint8 b) and returns the result.\\n */\\n function add(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint8 a, euint8 b) and returns the result.\\n */\\n function add(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, uint8 b) and returns the result.\\n */\\n function sub(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint8 a, euint8 b) and returns the result.\\n */\\n function sub(uint8 a, euint8 b) internal returns (euint8) {\\n euint8 aEnc = asEuint8(a);\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(aEnc), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, uint8 b) and returns the result.\\n */\\n function mul(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint8 a, euint8 b) and returns the result.\\n */\\n function mul(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint8 a, uint8 b) and returns the result.\\n */\\n function div(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.div(euint8.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint8 a, uint8 b) and returns the result.\\n */\\n function rem(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rem(euint8.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, uint8 b) and returns the result.\\n */\\n function and(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint8 a, euint8 b) and returns the result.\\n */\\n function and(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, uint8 b) and returns the result.\\n */\\n function or(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint8 a, euint8 b) and returns the result.\\n */\\n function or(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, uint8 b) and returns the result.\\n */\\n function xor(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint8 a, euint8 b) and returns the result.\\n */\\n function xor(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, uint8 b) and returns the result.\\n */\\n function eq(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint8 a, euint8 b) and returns the result.\\n */\\n function eq(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, uint8 b) and returns the result.\\n */\\n function ne(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint8 a, euint8 b) and returns the result.\\n */\\n function ne(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, uint8 b) and returns the result.\\n */\\n function ge(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint8 a, euint8 b) and returns the result.\\n */\\n function ge(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, uint8 b) and returns the result.\\n */\\n function gt(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint8 a, euint8 b) and returns the result.\\n */\\n function gt(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, uint8 b) and returns the result.\\n */\\n function le(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint8 a, euint8 b) and returns the result.\\n */\\n function le(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, uint8 b) and returns the result.\\n */\\n function lt(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint8 a, euint8 b) and returns the result.\\n */\\n function lt(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, uint8 b) and returns the result.\\n */\\n function min(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint8 a, euint8 b) and returns the result.\\n */\\n function min(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, uint8 b) and returns the result.\\n */\\n function max(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint8 a, euint8 b) and returns the result.\\n */\\n function max(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, uint16 b) and returns the result.\\n */\\n function add(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint16 a, euint16 b) and returns the result.\\n */\\n function add(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, uint16 b) and returns the result.\\n */\\n function sub(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint16 a, euint16 b) and returns the result.\\n */\\n function sub(uint16 a, euint16 b) internal returns (euint16) {\\n euint16 aEnc = asEuint16(a);\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(aEnc), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, uint16 b) and returns the result.\\n */\\n function mul(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint16 a, euint16 b) and returns the result.\\n */\\n function mul(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint16 a, uint16 b) and returns the result.\\n */\\n function div(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.div(euint16.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint16 a, uint16 b) and returns the result.\\n */\\n function rem(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rem(euint16.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, uint16 b) and returns the result.\\n */\\n function and(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint16 a, euint16 b) and returns the result.\\n */\\n function and(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, uint16 b) and returns the result.\\n */\\n function or(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint16 a, euint16 b) and returns the result.\\n */\\n function or(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, uint16 b) and returns the result.\\n */\\n function xor(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint16 a, euint16 b) and returns the result.\\n */\\n function xor(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, uint16 b) and returns the result.\\n */\\n function eq(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint16 a, euint16 b) and returns the result.\\n */\\n function eq(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, uint16 b) and returns the result.\\n */\\n function ne(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint16 a, euint16 b) and returns the result.\\n */\\n function ne(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, uint16 b) and returns the result.\\n */\\n function ge(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint16 a, euint16 b) and returns the result.\\n */\\n function ge(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, uint16 b) and returns the result.\\n */\\n function gt(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint16 a, euint16 b) and returns the result.\\n */\\n function gt(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, uint16 b) and returns the result.\\n */\\n function le(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint16 a, euint16 b) and returns the result.\\n */\\n function le(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, uint16 b) and returns the result.\\n */\\n function lt(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint16 a, euint16 b) and returns the result.\\n */\\n function lt(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, uint16 b) and returns the result.\\n */\\n function min(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint16 a, euint16 b) and returns the result.\\n */\\n function min(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, uint16 b) and returns the result.\\n */\\n function max(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint16 a, euint16 b) and returns the result.\\n */\\n function max(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, uint32 b) and returns the result.\\n */\\n function add(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint32 a, euint32 b) and returns the result.\\n */\\n function add(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, uint32 b) and returns the result.\\n */\\n function sub(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint32 a, euint32 b) and returns the result.\\n */\\n function sub(uint32 a, euint32 b) internal returns (euint32) {\\n euint32 aEnc = asEuint32(a);\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(aEnc), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, uint32 b) and returns the result.\\n */\\n function mul(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint32 a, euint32 b) and returns the result.\\n */\\n function mul(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint32 a, uint32 b) and returns the result.\\n */\\n function div(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.div(euint32.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint32 a, uint32 b) and returns the result.\\n */\\n function rem(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rem(euint32.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, uint32 b) and returns the result.\\n */\\n function and(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint32 a, euint32 b) and returns the result.\\n */\\n function and(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, uint32 b) and returns the result.\\n */\\n function or(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint32 a, euint32 b) and returns the result.\\n */\\n function or(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, uint32 b) and returns the result.\\n */\\n function xor(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint32 a, euint32 b) and returns the result.\\n */\\n function xor(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, uint32 b) and returns the result.\\n */\\n function eq(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint32 a, euint32 b) and returns the result.\\n */\\n function eq(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, uint32 b) and returns the result.\\n */\\n function ne(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint32 a, euint32 b) and returns the result.\\n */\\n function ne(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, uint32 b) and returns the result.\\n */\\n function ge(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint32 a, euint32 b) and returns the result.\\n */\\n function ge(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, uint32 b) and returns the result.\\n */\\n function gt(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint32 a, euint32 b) and returns the result.\\n */\\n function gt(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, uint32 b) and returns the result.\\n */\\n function le(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint32 a, euint32 b) and returns the result.\\n */\\n function le(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, uint32 b) and returns the result.\\n */\\n function lt(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint32 a, euint32 b) and returns the result.\\n */\\n function lt(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, uint32 b) and returns the result.\\n */\\n function min(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint32 a, euint32 b) and returns the result.\\n */\\n function min(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, uint32 b) and returns the result.\\n */\\n function max(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint32 a, euint32 b) and returns the result.\\n */\\n function max(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, uint64 b) and returns the result.\\n */\\n function add(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint64 a, euint64 b) and returns the result.\\n */\\n function add(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, uint64 b) and returns the result.\\n */\\n function sub(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint64 a, euint64 b) and returns the result.\\n */\\n function sub(uint64 a, euint64 b) internal returns (euint64) {\\n euint64 aEnc = asEuint64(a);\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(aEnc), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, uint64 b) and returns the result.\\n */\\n function mul(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint64 a, euint64 b) and returns the result.\\n */\\n function mul(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint64 a, uint64 b) and returns the result.\\n */\\n function div(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.div(euint64.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint64 a, uint64 b) and returns the result.\\n */\\n function rem(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rem(euint64.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, uint64 b) and returns the result.\\n */\\n function and(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint64 a, euint64 b) and returns the result.\\n */\\n function and(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, uint64 b) and returns the result.\\n */\\n function or(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint64 a, euint64 b) and returns the result.\\n */\\n function or(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, uint64 b) and returns the result.\\n */\\n function xor(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint64 a, euint64 b) and returns the result.\\n */\\n function xor(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, uint64 b) and returns the result.\\n */\\n function eq(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint64 a, euint64 b) and returns the result.\\n */\\n function eq(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, uint64 b) and returns the result.\\n */\\n function ne(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint64 a, euint64 b) and returns the result.\\n */\\n function ne(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, uint64 b) and returns the result.\\n */\\n function ge(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint64 a, euint64 b) and returns the result.\\n */\\n function ge(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, uint64 b) and returns the result.\\n */\\n function gt(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint64 a, euint64 b) and returns the result.\\n */\\n function gt(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, uint64 b) and returns the result.\\n */\\n function le(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint64 a, euint64 b) and returns the result.\\n */\\n function le(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, uint64 b) and returns the result.\\n */\\n function lt(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint64 a, euint64 b) and returns the result.\\n */\\n function lt(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, uint64 b) and returns the result.\\n */\\n function min(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint64 a, euint64 b) and returns the result.\\n */\\n function min(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, uint64 b) and returns the result.\\n */\\n function max(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint64 a, euint64 b) and returns the result.\\n */\\n function max(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, uint128 b) and returns the result.\\n */\\n function add(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint128 a, euint128 b) and returns the result.\\n */\\n function add(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, uint128 b) and returns the result.\\n */\\n function sub(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint128 a, euint128 b) and returns the result.\\n */\\n function sub(uint128 a, euint128 b) internal returns (euint128) {\\n euint128 aEnc = asEuint128(a);\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(aEnc), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, uint128 b) and returns the result.\\n */\\n function mul(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint128 a, euint128 b) and returns the result.\\n */\\n function mul(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint128 a, uint128 b) and returns the result.\\n */\\n function div(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.div(euint128.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint128 a, uint128 b) and returns the result.\\n */\\n function rem(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rem(euint128.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, uint128 b) and returns the result.\\n */\\n function and(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint128 a, euint128 b) and returns the result.\\n */\\n function and(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, uint128 b) and returns the result.\\n */\\n function or(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint128 a, euint128 b) and returns the result.\\n */\\n function or(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, uint128 b) and returns the result.\\n */\\n function xor(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint128 a, euint128 b) and returns the result.\\n */\\n function xor(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, uint128 b) and returns the result.\\n */\\n function eq(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint128 a, euint128 b) and returns the result.\\n */\\n function eq(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, uint128 b) and returns the result.\\n */\\n function ne(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint128 a, euint128 b) and returns the result.\\n */\\n function ne(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, uint128 b) and returns the result.\\n */\\n function ge(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint128 a, euint128 b) and returns the result.\\n */\\n function ge(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, uint128 b) and returns the result.\\n */\\n function gt(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint128 a, euint128 b) and returns the result.\\n */\\n function gt(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, uint128 b) and returns the result.\\n */\\n function le(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint128 a, euint128 b) and returns the result.\\n */\\n function le(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, uint128 b) and returns the result.\\n */\\n function lt(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint128 a, euint128 b) and returns the result.\\n */\\n function lt(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, uint128 b) and returns the result.\\n */\\n function min(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint128 a, euint128 b) and returns the result.\\n */\\n function min(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, uint128 b) and returns the result.\\n */\\n function max(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint128 a, euint128 b) and returns the result.\\n */\\n function max(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(eaddress a, address b) and returns the result.\\n */\\n function eq(eaddress a, address b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(a), bytes32(uint256(uint160(b))), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(address a, eaddress b) and returns the result.\\n */\\n function eq(address a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(b), bytes32(uint256(uint160(a))), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(eaddress a, address b) and returns the result.\\n */\\n function ne(eaddress a, address b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(a), bytes32(uint256(uint160(b))), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(address a, eaddress b) and returns the result.\\n */\\n function ne(address a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(b), bytes32(uint256(uint160(a))), true));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, uint256 b) and returns the result.\\n */\\n function and(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint256 a, euint256 b) and returns the result.\\n */\\n function and(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, uint256 b) and returns the result.\\n */\\n function or(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint256 a, euint256 b) and returns the result.\\n */\\n function or(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, uint256 b) and returns the result.\\n */\\n function xor(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint256 a, euint256 b) and returns the result.\\n */\\n function xor(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, uint256 b) and returns the result.\\n */\\n function eq(euint256 a, uint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint256 a, euint256 b) and returns the result.\\n */\\n function eq(uint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, uint256 b) and returns the result.\\n */\\n function ne(euint256 a, uint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint256 a, euint256 b) and returns the result.\\n */\\n function ne(uint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint8 a, euint8 b) and returns the result.\\n */\\n function shl(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shl(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint8 a, uint8) and returns the result.\\n */\\n function shl(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shl(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint8 a, euint8 b) and returns the result.\\n */\\n function shr(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shr(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint8 a, uint8) and returns the result.\\n */\\n function shr(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shr(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint8 a, euint8 b) and returns the result.\\n */\\n function rotl(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotl(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint8 a, uint8) and returns the result.\\n */\\n function rotl(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotl(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint8 a, euint8 b) and returns the result.\\n */\\n function rotr(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotr(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint8 a, uint8) and returns the result.\\n */\\n function rotr(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotr(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint16 a, euint8 b) and returns the result.\\n */\\n function shl(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.shl(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint16 a, uint8) and returns the result.\\n */\\n function shl(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.shl(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint16 a, euint8 b) and returns the result.\\n */\\n function shr(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.shr(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint16 a, uint8) and returns the result.\\n */\\n function shr(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.shr(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint16 a, euint8 b) and returns the result.\\n */\\n function rotl(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.rotl(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint16 a, uint8) and returns the result.\\n */\\n function rotl(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rotl(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint16 a, euint8 b) and returns the result.\\n */\\n function rotr(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.rotr(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint16 a, uint8) and returns the result.\\n */\\n function rotr(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rotr(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint32 a, euint8 b) and returns the result.\\n */\\n function shl(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.shl(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint32 a, uint8) and returns the result.\\n */\\n function shl(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.shl(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint32 a, euint8 b) and returns the result.\\n */\\n function shr(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.shr(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint32 a, uint8) and returns the result.\\n */\\n function shr(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.shr(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint32 a, euint8 b) and returns the result.\\n */\\n function rotl(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.rotl(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint32 a, uint8) and returns the result.\\n */\\n function rotl(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rotl(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint32 a, euint8 b) and returns the result.\\n */\\n function rotr(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.rotr(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint32 a, uint8) and returns the result.\\n */\\n function rotr(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rotr(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint64 a, euint8 b) and returns the result.\\n */\\n function shl(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.shl(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint64 a, uint8) and returns the result.\\n */\\n function shl(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.shl(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint64 a, euint8 b) and returns the result.\\n */\\n function shr(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.shr(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint64 a, uint8) and returns the result.\\n */\\n function shr(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.shr(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint64 a, euint8 b) and returns the result.\\n */\\n function rotl(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.rotl(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint64 a, uint8) and returns the result.\\n */\\n function rotl(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rotl(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint64 a, euint8 b) and returns the result.\\n */\\n function rotr(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.rotr(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint64 a, uint8) and returns the result.\\n */\\n function rotr(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rotr(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint128 a, euint8 b) and returns the result.\\n */\\n function shl(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.shl(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint128 a, uint8) and returns the result.\\n */\\n function shl(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.shl(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint128 a, euint8 b) and returns the result.\\n */\\n function shr(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.shr(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint128 a, uint8) and returns the result.\\n */\\n function shr(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.shr(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint128 a, euint8 b) and returns the result.\\n */\\n function rotl(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.rotl(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint128 a, uint8) and returns the result.\\n */\\n function rotl(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rotl(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint128 a, euint8 b) and returns the result.\\n */\\n function rotr(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.rotr(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint128 a, uint8) and returns the result.\\n */\\n function rotr(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rotr(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint256 a, euint8 b) and returns the result.\\n */\\n function shl(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.shl(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint256 a, uint8) and returns the result.\\n */\\n function shl(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.shl(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint256 a, euint8 b) and returns the result.\\n */\\n function shr(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.shr(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint256 a, uint8) and returns the result.\\n */\\n function shr(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.shr(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint256 a, euint8 b) and returns the result.\\n */\\n function rotl(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.rotl(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint256 a, uint8) and returns the result.\\n */\\n function rotl(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.rotl(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint256 a, euint8 b) and returns the result.\\n */\\n function rotr(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.rotr(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint256 a, uint8) and returns the result.\\n */\\n function rotr(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.rotr(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.select(ebool.unwrap(control), ebool.unwrap(a), ebool.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.select(ebool.unwrap(control), euint8.unwrap(a), euint8.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.select(ebool.unwrap(control), euint16.unwrap(a), euint16.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.select(ebool.unwrap(control), euint32.unwrap(a), euint32.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.select(ebool.unwrap(control), euint64.unwrap(a), euint64.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.select(ebool.unwrap(control), euint128.unwrap(a), euint128.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, eaddress a, eaddress b) internal returns (eaddress) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return eaddress.wrap(Impl.select(ebool.unwrap(control), eaddress.unwrap(a), eaddress.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.select(ebool.unwrap(control), euint256.unwrap(a), euint256.unwrap(b)));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint8'.\\n */\\n function asEuint8(euint16 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint8'.\\n */\\n function asEuint8(euint32 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint8'.\\n */\\n function asEuint8(euint64 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint8'.\\n */\\n function asEuint8(euint128 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint8'.\\n */\\n function asEuint8(euint256 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint8'.\\n */\\n function asEuint8(ebool b) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'ebool'.\\n */\\n function asEbool(euint8 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint16'.\\n */\\n function asEuint16(euint8 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint16'.\\n */\\n function asEuint16(euint32 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint16'.\\n */\\n function asEuint16(euint64 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint16'.\\n */\\n function asEuint16(euint128 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint16'.\\n */\\n function asEuint16(euint256 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint16'.\\n */\\n function asEuint16(ebool b) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'ebool'.\\n */\\n function asEbool(euint16 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint32'.\\n */\\n function asEuint32(euint8 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint32'.\\n */\\n function asEuint32(euint16 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint32'.\\n */\\n function asEuint32(euint64 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint32'.\\n */\\n function asEuint32(euint128 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint32'.\\n */\\n function asEuint32(euint256 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint32'.\\n */\\n function asEuint32(ebool b) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'ebool'.\\n */\\n function asEbool(euint32 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint64'.\\n */\\n function asEuint64(euint8 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint64'.\\n */\\n function asEuint64(euint16 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint64'.\\n */\\n function asEuint64(euint32 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint64'.\\n */\\n function asEuint64(euint128 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint64'.\\n */\\n function asEuint64(euint256 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint64'.\\n */\\n function asEuint64(ebool b) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'ebool'.\\n */\\n function asEbool(euint64 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint128'.\\n */\\n function asEuint128(euint8 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint128'.\\n */\\n function asEuint128(euint16 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint128'.\\n */\\n function asEuint128(euint32 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint128'.\\n */\\n function asEuint128(euint64 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint128'.\\n */\\n function asEuint128(euint256 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint128'.\\n */\\n function asEuint128(ebool b) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'ebool'.\\n */\\n function asEbool(euint128 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint256'.\\n */\\n function asEuint256(euint8 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint256'.\\n */\\n function asEuint256(euint16 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint256'.\\n */\\n function asEuint256(euint32 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint256'.\\n */\\n function asEuint256(euint64 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint256'.\\n */\\n function asEuint256(euint128 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint256'.\\n */\\n function asEuint256(ebool b) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'ebool'.\\n */\\n function asEbool(euint256 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Evaluates not(ebool value) and returns the result.\\n */\\n function not(ebool value) internal returns (ebool) {\\n return ebool.wrap(Impl.not(ebool.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint8 value) and returns the result.\\n */\\n function neg(euint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.neg(euint8.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint8 value) and returns the result.\\n */\\n function not(euint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.not(euint8.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint16 value) and returns the result.\\n */\\n function neg(euint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.neg(euint16.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint16 value) and returns the result.\\n */\\n function not(euint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.not(euint16.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint32 value) and returns the result.\\n */\\n function neg(euint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.neg(euint32.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint32 value) and returns the result.\\n */\\n function not(euint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.not(euint32.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint64 value) and returns the result.\\n */\\n function neg(euint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.neg(euint64.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint64 value) and returns the result.\\n */\\n function not(euint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.not(euint64.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint128 value) and returns the result.\\n */\\n function neg(euint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.neg(euint128.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint128 value) and returns the result.\\n */\\n function not(euint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.not(euint128.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint256 value) and returns the result.\\n */\\n function neg(euint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.neg(euint256.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint256 value) and returns the result.\\n */\\n function not(euint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.not(euint256.unwrap(value)));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted ebool integer.\\n */\\n function fromExternal(externalEbool inputHandle, bytes memory inputProof) internal returns (ebool) {\\n return ebool.wrap(Impl.verify(externalEbool.unwrap(inputHandle), inputProof, FheType.Bool));\\n }\\n\\n /**\\n * @dev Converts a plaintext boolean to an encrypted boolean.\\n */\\n function asEbool(bool value) internal returns (ebool) {\\n return ebool.wrap(Impl.trivialEncrypt(value ? 1 : 0, FheType.Bool));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint8 integer.\\n */\\n function fromExternal(externalEuint8 inputHandle, bytes memory inputProof) internal returns (euint8) {\\n return euint8.wrap(Impl.verify(externalEuint8.unwrap(inputHandle), inputProof, FheType.Uint8));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint8 integer.\\n */\\n function asEuint8(uint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint16 integer.\\n */\\n function fromExternal(externalEuint16 inputHandle, bytes memory inputProof) internal returns (euint16) {\\n return euint16.wrap(Impl.verify(externalEuint16.unwrap(inputHandle), inputProof, FheType.Uint16));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint16 integer.\\n */\\n function asEuint16(uint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint32 integer.\\n */\\n function fromExternal(externalEuint32 inputHandle, bytes memory inputProof) internal returns (euint32) {\\n return euint32.wrap(Impl.verify(externalEuint32.unwrap(inputHandle), inputProof, FheType.Uint32));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint32 integer.\\n */\\n function asEuint32(uint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint64 integer.\\n */\\n function fromExternal(externalEuint64 inputHandle, bytes memory inputProof) internal returns (euint64) {\\n return euint64.wrap(Impl.verify(externalEuint64.unwrap(inputHandle), inputProof, FheType.Uint64));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint64 integer.\\n */\\n function asEuint64(uint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint128 integer.\\n */\\n function fromExternal(externalEuint128 inputHandle, bytes memory inputProof) internal returns (euint128) {\\n return euint128.wrap(Impl.verify(externalEuint128.unwrap(inputHandle), inputProof, FheType.Uint128));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint128 integer.\\n */\\n function asEuint128(uint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted eaddress integer.\\n */\\n function fromExternal(externalEaddress inputHandle, bytes memory inputProof) internal returns (eaddress) {\\n return eaddress.wrap(Impl.verify(externalEaddress.unwrap(inputHandle), inputProof, FheType.Uint160));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted eaddress integer.\\n */\\n function asEaddress(address value) internal returns (eaddress) {\\n return eaddress.wrap(Impl.trivialEncrypt(uint256(uint160(value)), FheType.Uint160));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint256 integer.\\n */\\n function fromExternal(externalEuint256 inputHandle, bytes memory inputProof) internal returns (euint256) {\\n return euint256.wrap(Impl.verify(externalEuint256.unwrap(inputHandle), inputProof, FheType.Uint256));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint256 integer.\\n */\\n function asEuint256(uint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEbool() internal returns (ebool) {\\n return ebool.wrap(Impl.rand(FheType.Bool));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint8() internal returns (euint8) {\\n return euint8.wrap(Impl.rand(FheType.Uint8));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 8-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint8(uint8 upperBound) internal returns (euint8) {\\n return euint8.wrap(Impl.randBounded(upperBound, FheType.Uint8));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint16() internal returns (euint16) {\\n return euint16.wrap(Impl.rand(FheType.Uint16));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 16-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint16(uint16 upperBound) internal returns (euint16) {\\n return euint16.wrap(Impl.randBounded(upperBound, FheType.Uint16));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint32() internal returns (euint32) {\\n return euint32.wrap(Impl.rand(FheType.Uint32));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 32-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint32(uint32 upperBound) internal returns (euint32) {\\n return euint32.wrap(Impl.randBounded(upperBound, FheType.Uint32));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint64() internal returns (euint64) {\\n return euint64.wrap(Impl.rand(FheType.Uint64));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 64-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint64(uint64 upperBound) internal returns (euint64) {\\n return euint64.wrap(Impl.randBounded(upperBound, FheType.Uint64));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint128() internal returns (euint128) {\\n return euint128.wrap(Impl.rand(FheType.Uint128));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 128-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint128(uint128 upperBound) internal returns (euint128) {\\n return euint128.wrap(Impl.randBounded(upperBound, FheType.Uint128));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint256() internal returns (euint256) {\\n return euint256.wrap(Impl.rand(FheType.Uint256));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 256-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint256(uint256 upperBound) internal returns (euint256) {\\n return euint256.wrap(Impl.randBounded(upperBound, FheType.Uint256));\\n }\\n\\n /**\\n * @dev This function cleans the transient storage for the ACL (accounts) and the InputVerifier\\n * (input proofs).\\n * This could be useful for integration with Account Abstraction when bundling several\\n * UserOps calling the FHEVMExecutor.\\n */\\n function cleanTransientStorage() internal {\\n Impl.cleanTransientStorageACL();\\n Impl.cleanTransientStorageInputVerifier();\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(ebool value, address account) internal view returns (bool) {\\n return Impl.isAllowed(ebool.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(ebool value) internal view returns (bool) {\\n return Impl.isAllowed(ebool.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(ebool value, address account) internal returns (ebool) {\\n Impl.allow(ebool.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(ebool value) internal returns (ebool) {\\n Impl.allow(ebool.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(ebool value, address account) internal returns (ebool) {\\n Impl.allowTransient(ebool.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(ebool value) internal returns (ebool) {\\n Impl.makePubliclyDecryptable(ebool.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(ebool value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(ebool.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint8 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint8.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint8 value) internal view returns (bool) {\\n return Impl.isAllowed(euint8.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint8 value, address account) internal returns (euint8) {\\n Impl.allow(euint8.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint8 value) internal returns (euint8) {\\n Impl.allow(euint8.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint8 value, address account) internal returns (euint8) {\\n Impl.allowTransient(euint8.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint8 value) internal returns (euint8) {\\n Impl.makePubliclyDecryptable(euint8.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint8 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint8.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint16 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint16.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint16 value) internal view returns (bool) {\\n return Impl.isAllowed(euint16.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint16 value, address account) internal returns (euint16) {\\n Impl.allow(euint16.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint16 value) internal returns (euint16) {\\n Impl.allow(euint16.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint16 value, address account) internal returns (euint16) {\\n Impl.allowTransient(euint16.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint16 value) internal returns (euint16) {\\n Impl.makePubliclyDecryptable(euint16.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint16 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint16.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint32 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint32.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint32 value) internal view returns (bool) {\\n return Impl.isAllowed(euint32.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint32 value, address account) internal returns (euint32) {\\n Impl.allow(euint32.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint32 value) internal returns (euint32) {\\n Impl.allow(euint32.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint32 value, address account) internal returns (euint32) {\\n Impl.allowTransient(euint32.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint32 value) internal returns (euint32) {\\n Impl.makePubliclyDecryptable(euint32.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint32 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint32.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint64 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint64.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint64 value) internal view returns (bool) {\\n return Impl.isAllowed(euint64.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint64 value, address account) internal returns (euint64) {\\n Impl.allow(euint64.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint64 value) internal returns (euint64) {\\n Impl.allow(euint64.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint64 value, address account) internal returns (euint64) {\\n Impl.allowTransient(euint64.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint64 value) internal returns (euint64) {\\n Impl.makePubliclyDecryptable(euint64.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint64 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint64.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint128 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint128.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint128 value) internal view returns (bool) {\\n return Impl.isAllowed(euint128.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint128 value, address account) internal returns (euint128) {\\n Impl.allow(euint128.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint128 value) internal returns (euint128) {\\n Impl.allow(euint128.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint128 value, address account) internal returns (euint128) {\\n Impl.allowTransient(euint128.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint128 value) internal returns (euint128) {\\n Impl.makePubliclyDecryptable(euint128.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint128 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint128.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(eaddress value, address account) internal view returns (bool) {\\n return Impl.isAllowed(eaddress.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(eaddress value) internal view returns (bool) {\\n return Impl.isAllowed(eaddress.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(eaddress value, address account) internal returns (eaddress) {\\n Impl.allow(eaddress.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(eaddress value) internal returns (eaddress) {\\n Impl.allow(eaddress.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(eaddress value, address account) internal returns (eaddress) {\\n Impl.allowTransient(eaddress.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(eaddress value) internal returns (eaddress) {\\n Impl.makePubliclyDecryptable(eaddress.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(eaddress value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(eaddress.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint256 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint256.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint256 value) internal view returns (bool) {\\n return Impl.isAllowed(euint256.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint256 value, address account) internal returns (euint256) {\\n Impl.allow(euint256.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint256 value) internal returns (euint256) {\\n Impl.allow(euint256.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint256 value, address account) internal returns (euint256) {\\n Impl.allowTransient(euint256.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint256 value) internal returns (euint256) {\\n Impl.makePubliclyDecryptable(euint256.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint256 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint256.unwrap(value));\\n }\\n\\n /// @notice Reverts if the KMS signatures verification against the provided handles and public decryption data\\n /// fails.\\n /// @dev The function MUST be called inside a public decryption callback function of a dApp contract\\n /// to verify the signatures and prevent fake decryption results for being submitted.\\n /// @param handlesList The list of handles as an array of bytes32 to check\\n /// @param abiEncodedCleartexts The ABI-encoded list of decrypted values associated with each handle in the `handlesList`.\\n /// The ABI-encoded list order must match the `handlesList` order.\\n /// @param decryptionProof The KMS public decryption proof. It includes the KMS signatures, associated metadata,\\n /// and the context needed for verification.\\n /// @dev Reverts if any of the following conditions are met:\\n /// - The `decryptionProof` is empty or has an invalid length.\\n /// - The number of valid signatures is zero or less than the configured KMS signers threshold.\\n /// - Any signature is produced by an address that is not a registered KMS signer.\\n /// - The signatures verification returns false.\\n function checkSignatures(\\n bytes32[] memory handlesList,\\n bytes memory abiEncodedCleartexts,\\n bytes memory decryptionProof\\n ) internal {\\n bool isVerified = _verifySignatures(handlesList, abiEncodedCleartexts, decryptionProof);\\n if (!isVerified) {\\n revert InvalidKMSSignatures();\\n }\\n emit PublicDecryptionVerified(handlesList, abiEncodedCleartexts);\\n }\\n\\n /// @notice Verifies KMS signatures against the provided handles and public decryption data.\\n /// @param handlesList The list of handles as an array of bytes32 to verify\\n /// @param abiEncodedCleartexts The ABI-encoded list of decrypted values associated with each handle in the `handlesList`.\\n /// The list order must match the list of handles in `handlesList`\\n /// @param decryptionProof The KMS public decryption proof computed by the KMS Signers assiciated to `handlesList` and\\n /// `abiEncodedCleartexts`\\n /// @return true if the signatures verification succeeds, false otherwise\\n /// @dev Private low-level function used to verify the KMS signatures.\\n /// Warning: this function never reverts, its boolean return value must be checked.\\n /// The decryptionProof is the numSigners + kmsSignatures + extraData (1 + 65*numSigners + extraData bytes)\\n /// Only static native solidity types for clear values are supported, so `abiEncodedCleartexts` is the concatenation of all clear values appended to 32 bytes.\\n /// @dev Reverts if any of the following conditions are met by the underlying KMS verifier:\\n /// - The `decryptionProof` is empty or has an invalid length.\\n /// - The number of valid signatures is zero or less than the configured KMS signers threshold.\\n /// - Any signature is produced by an address that is not a registered KMS signer.\\n function _verifySignatures(\\n bytes32[] memory handlesList,\\n bytes memory abiEncodedCleartexts,\\n bytes memory decryptionProof\\n ) private returns (bool) {\\n CoprocessorConfig storage $ = Impl.getCoprocessorConfig();\\n return\\n IKMSVerifier($.KMSVerifierAddress).verifyDecryptionEIP712KMSSignatures(\\n handlesList,\\n abiEncodedCleartexts,\\n decryptionProof\\n );\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(ebool value) internal pure returns (bytes32 ct) {\\n ct = ebool.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint8 value) internal pure returns (bytes32 ct) {\\n ct = euint8.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint16 value) internal pure returns (bytes32 ct) {\\n ct = euint16.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint32 value) internal pure returns (bytes32 ct) {\\n ct = euint32.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint64 value) internal pure returns (bytes32 ct) {\\n ct = euint64.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint128 value) internal pure returns (bytes32 ct) {\\n ct = euint128.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(eaddress value) internal pure returns (bytes32 ct) {\\n ct = eaddress.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint256 value) internal pure returns (bytes32 ct) {\\n ct = euint256.unwrap(value);\\n }\\n}\\n\",\"keccak256\":\"0x40fa1fd7a983b88f68b2efd87e879bc12ac363b2585bb39e9aa52fa168851d2b\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/FheType.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nenum FheType {\\n Bool,\\n Uint4,\\n Uint8,\\n Uint16,\\n Uint32,\\n Uint64,\\n Uint128,\\n Uint160,\\n Uint256,\\n Uint512,\\n Uint1024,\\n Uint2048,\\n Uint2,\\n Uint6,\\n Uint10,\\n Uint12,\\n Uint14,\\n Int2,\\n Int4,\\n Int6,\\n Int8,\\n Int10,\\n Int12,\\n Int14,\\n Int16,\\n Int32,\\n Int64,\\n Int128,\\n Int160,\\n Int256,\\n AsciiString,\\n Int512,\\n Int1024,\\n Int2048,\\n Uint24,\\n Uint40,\\n Uint48,\\n Uint56,\\n Uint72,\\n Uint80,\\n Uint88,\\n Uint96,\\n Uint104,\\n Uint112,\\n Uint120,\\n Uint136,\\n Uint144,\\n Uint152,\\n Uint168,\\n Uint176,\\n Uint184,\\n Uint192,\\n Uint200,\\n Uint208,\\n Uint216,\\n Uint224,\\n Uint232,\\n Uint240,\\n Uint248,\\n Int24,\\n Int40,\\n Int48,\\n Int56,\\n Int72,\\n Int80,\\n Int88,\\n Int96,\\n Int104,\\n Int112,\\n Int120,\\n Int136,\\n Int144,\\n Int152,\\n Int168,\\n Int176,\\n Int184,\\n Int192,\\n Int200,\\n Int208,\\n Int216,\\n Int224,\\n Int232,\\n Int240,\\n Int248\\n}\\n\",\"keccak256\":\"0x945f006108fab92cb082a6e5a80525953f17b8d8dcf88a283a83fc80c765497a\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/Impl.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport {FheType} from \\\"./FheType.sol\\\";\\n\\n/**\\n * @title CoprocessorConfig\\n * @notice This struct contains all addresses of core contracts, which are needed in a typical dApp.\\n */\\nstruct CoprocessorConfig {\\n address ACLAddress;\\n address CoprocessorAddress;\\n address KMSVerifierAddress;\\n}\\n\\n/**\\n * @title IFHEVMExecutor\\n * @notice This interface contains all functions to conduct FHE operations.\\n */\\ninterface IFHEVMExecutor {\\n /**\\n * @notice Computes fheAdd operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheAdd(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheSub operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheSub(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMul operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMul(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheDiv operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheDiv(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRem operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRem(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitAnd operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitAnd(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitOr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitOr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitXor operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitXor(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheShl operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheShl(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheShr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheShr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRotl operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRotl(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRotr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRotr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheEq operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheEq(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheNe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheGe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheGe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheGt operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheGt(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheLe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheLe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheLt operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheLt(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMin operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMin(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMax operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMax(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNeg operation.\\n * @param ct Ct\\n * @return result Result.\\n */\\n function fheNeg(bytes32 ct) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNot operation.\\n * @param ct Ct\\n * @return result Result.\\n */\\n function fheNot(bytes32 ct) external returns (bytes32 result);\\n\\n /**\\n * @notice Verifies the ciphertext.\\n * @param inputHandle Input handle.\\n * @param callerAddress Address of the caller.\\n * @param inputProof Input proof.\\n * @param inputType Input type.\\n * @return result Result.\\n */\\n function verifyInput(\\n bytes32 inputHandle,\\n address callerAddress,\\n bytes memory inputProof,\\n FheType inputType\\n ) external returns (bytes32 result);\\n\\n /**\\n * @notice Performs the casting to a target type.\\n * @param ct Value to cast.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function cast(bytes32 ct, FheType toType) external returns (bytes32 result);\\n\\n /**\\n * @notice Does trivial encryption.\\n * @param ct Value to encrypt.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function trivialEncrypt(uint256 ct, FheType toType) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHEIfThenElse operation.\\n * @param control Control value.\\n * @param ifTrue If true.\\n * @param ifFalse If false.\\n * @return result Result.\\n */\\n function fheIfThenElse(bytes32 control, bytes32 ifTrue, bytes32 ifFalse) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHERand operation.\\n * @param randType Type for the random result.\\n * @return result Result.\\n */\\n function fheRand(FheType randType) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHERandBounded operation.\\n * @param upperBound Upper bound value.\\n * @param randType Type for the random result.\\n * @return result Result.\\n */\\n function fheRandBounded(uint256 upperBound, FheType randType) external returns (bytes32 result);\\n\\n /**\\n * @notice Returns the address of the InputVerifier contract used by the coprocessor.\\n * @return inputVerifierAddress Address of the InputVerifier.\\n */\\n function getInputVerifierAddress() external view returns (address);\\n}\\n\\n/**\\n * @title IACL.\\n * @notice This interface contains all functions that are used to conduct operations\\n * with the ACL contract.\\n */\\ninterface IACL {\\n /**\\n * @notice Allows the use of handle by address account for this transaction.\\n * @dev The caller must be allowed to use handle for allowTransient() to succeed.\\n * If not, allowTransient() reverts.\\n * The Coprocessor contract can always allowTransient(), contrarily to allow().\\n * @param ciphertext Ciphertext.\\n * @param account Address of the account.\\n */\\n function allowTransient(bytes32 ciphertext, address account) external;\\n\\n /**\\n * @notice Allows the use of handle for the address account.\\n * @dev The caller must be allowed to use handle for allow() to succeed. If not, allow() reverts.\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allow(bytes32 handle, address account) external;\\n\\n /**\\n * @dev This function removes the transient allowances, which could be useful for integration with\\n * Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorage() external;\\n\\n /**\\n * @notice Returns whether the account is allowed to use the handle, either due to\\n * allowTransient() or allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n * @return isAllowed Whether the account can access the handle.\\n */\\n function isAllowed(bytes32 handle, address account) external view returns (bool);\\n\\n /**\\n * @notice Allows a list of handles to be decrypted.\\n * @param handlesList List of handles.\\n */\\n function allowForDecryption(bytes32[] memory handlesList) external;\\n\\n /**\\n * @notice Returns wether a handle is allowed to be publicly decrypted.\\n * @param handle Handle.\\n * @return isDecryptable Whether the handle can be publicly decrypted.\\n */\\n function isAllowedForDecryption(bytes32 handle) external view returns (bool);\\n}\\n\\n/**\\n * @title IInputVerifier\\n * @notice This interface contains the only function required from InputVerifier.\\n */\\ninterface IInputVerifier {\\n /**\\n * @dev This function removes the transient allowances, which could be useful for integration with\\n * Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorage() external;\\n}\\n\\n/**\\n * @title Impl\\n * @notice This library is the core implementation for computing FHE operations (e.g. add, sub, xor).\\n */\\nlibrary Impl {\\n /// keccak256(abi.encode(uint256(keccak256(\\\"confidential.storage.config\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant CoprocessorConfigLocation =\\n 0x9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700;\\n\\n /**\\n * @dev Returns the Coprocessor config.\\n */\\n function getCoprocessorConfig() internal pure returns (CoprocessorConfig storage $) {\\n assembly {\\n $.slot := CoprocessorConfigLocation\\n }\\n }\\n\\n /**\\n * @notice Sets the coprocessor addresses.\\n * @param coprocessorConfig Coprocessor config struct that contains contract addresses.\\n */\\n function setCoprocessor(CoprocessorConfig memory coprocessorConfig) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n $.ACLAddress = coprocessorConfig.ACLAddress;\\n $.CoprocessorAddress = coprocessorConfig.CoprocessorAddress;\\n $.KMSVerifierAddress = coprocessorConfig.KMSVerifierAddress;\\n }\\n\\n function add(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheAdd(lhs, rhs, scalarByte);\\n }\\n\\n function sub(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheSub(lhs, rhs, scalarByte);\\n }\\n\\n function mul(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMul(lhs, rhs, scalarByte);\\n }\\n\\n function div(bytes32 lhs, bytes32 rhs) internal returns (bytes32 result) {\\n bytes1 scalarByte = 0x01;\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheDiv(lhs, rhs, scalarByte);\\n }\\n\\n function rem(bytes32 lhs, bytes32 rhs) internal returns (bytes32 result) {\\n bytes1 scalarByte = 0x01;\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRem(lhs, rhs, scalarByte);\\n }\\n\\n function and(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitAnd(lhs, rhs, scalarByte);\\n }\\n\\n function or(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitOr(lhs, rhs, scalarByte);\\n }\\n\\n function xor(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitXor(lhs, rhs, scalarByte);\\n }\\n\\n function shl(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheShl(lhs, rhs, scalarByte);\\n }\\n\\n function shr(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheShr(lhs, rhs, scalarByte);\\n }\\n\\n function rotl(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRotl(lhs, rhs, scalarByte);\\n }\\n\\n function rotr(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRotr(lhs, rhs, scalarByte);\\n }\\n\\n function eq(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheEq(lhs, rhs, scalarByte);\\n }\\n\\n function ne(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNe(lhs, rhs, scalarByte);\\n }\\n\\n function ge(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheGe(lhs, rhs, scalarByte);\\n }\\n\\n function gt(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheGt(lhs, rhs, scalarByte);\\n }\\n\\n function le(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheLe(lhs, rhs, scalarByte);\\n }\\n\\n function lt(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheLt(lhs, rhs, scalarByte);\\n }\\n\\n function min(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMin(lhs, rhs, scalarByte);\\n }\\n\\n function max(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMax(lhs, rhs, scalarByte);\\n }\\n\\n function neg(bytes32 ct) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNeg(ct);\\n }\\n\\n function not(bytes32 ct) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNot(ct);\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(bytes32 control, bytes32 ifTrue, bytes32 ifFalse) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheIfThenElse(control, ifTrue, ifFalse);\\n }\\n\\n /**\\n * @notice Verifies the ciphertext (FHEVMExecutor) and allows transient (ACL).\\n * @param inputHandle Input handle.\\n * @param inputProof Input proof.\\n * @param toType Input type.\\n * @return result Result.\\n */\\n function verify(bytes32 inputHandle, bytes memory inputProof, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).verifyInput(inputHandle, msg.sender, inputProof, toType);\\n IACL($.ACLAddress).allowTransient(result, msg.sender);\\n }\\n\\n /**\\n * @notice Performs the casting to a target type.\\n * @param ciphertext Ciphertext to cast.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function cast(bytes32 ciphertext, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).cast(ciphertext, toType);\\n }\\n\\n /**\\n * @notice Does trivial encryption.\\n * @param value Value to encrypt.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function trivialEncrypt(uint256 value, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).trivialEncrypt(value, toType);\\n }\\n\\n function rand(FheType randType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRand(randType);\\n }\\n\\n function randBounded(uint256 upperBound, FheType randType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRandBounded(upperBound, randType);\\n }\\n\\n /**\\n * @notice Allows the use of handle by address account for this transaction.\\n * @dev The caller must be allowed to use handle for allowTransient() to succeed.\\n * If not, allowTransient() reverts.\\n * The Coprocessor contract can always allowTransient(), contrarily to allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allowTransient(bytes32 handle, address account) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).allowTransient(handle, account);\\n }\\n\\n /**\\n * @notice Allows the use of handle for the address account.\\n * @dev The caller must be allowed to use handle for allow() to succeed. If not, allow() reverts.\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allow(bytes32 handle, address account) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).allow(handle, account);\\n }\\n\\n /**\\n * @notice Allows the handle to be publicly decryptable.\\n * @dev The caller must be allowed to use handle for makePubliclyDecryptable() to succeed.\\n * If not, makePubliclyDecryptable() reverts.\\n * @param handle Handle.\\n */\\n function makePubliclyDecryptable(bytes32 handle) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n bytes32[] memory handleArray = new bytes32[](1);\\n handleArray[0] = handle;\\n IACL($.ACLAddress).allowForDecryption(handleArray);\\n }\\n\\n /**\\n * @dev This function removes the transient allowances in the ACL, which could be useful for integration\\n * with Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorageACL() internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).cleanTransientStorage();\\n }\\n\\n /**\\n * @dev This function removes the transient proofs in the InputVerifier, which could be useful for integration\\n * with Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorageInputVerifier() internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n address inputVerifierAddress = IFHEVMExecutor($.CoprocessorAddress).getInputVerifierAddress();\\n IInputVerifier(inputVerifierAddress).cleanTransientStorage();\\n }\\n\\n /**\\n * @notice Returns whether the account is allowed to use the handle, either due to\\n * allowTransient() or allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n * @return isAllowed Whether the account can access the handle.\\n */\\n function isAllowed(bytes32 handle, address account) internal view returns (bool) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n return IACL($.ACLAddress).isAllowed(handle, account);\\n }\\n\\n /**\\n * @notice Returns whether the handle is allowed to be publicly decrypted.\\n * @param handle Handle.\\n * @return isAllowed Whether the handle can be publicly decrypted.\\n */\\n function isPubliclyDecryptable(bytes32 handle) internal view returns (bool) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n return IACL($.ACLAddress).isAllowedForDecryption(handle);\\n }\\n}\\n\",\"keccak256\":\"0x42eaed792fa26d065044e0057b093a51dfe0666d0eb75937b99ce87bcc1d0bf2\",\"license\":\"BSD-3-Clause-Clear\"},\"contracts/tokens/CompliantERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// solhint-disable func-name-mixedcase\\npragma solidity ^0.8.27;\\n\\nimport {FHE, euint64, ebool, externalEuint64} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\nimport {ZamaEthereumConfig} from \\\"@fhevm/solidity/config/ZamaConfig.sol\\\";\\n\\n/**\\n * @title CompliantERC20\\n * @author Gustavo Valverde\\n * @notice ERC20-like token with encrypted balances and compliance checks\\n * @dev Part of zentity-fhevm-contracts - Builder Track\\n *\\n * @custom:category token\\n * @custom:concept FHE.select() for branch-free compliant transfers\\n * @custom:difficulty advanced\\n *\\n * This contract implements a compliant token with encrypted balances.\\n * Transfers only succeed if both parties pass compliance checks, but\\n * failures are handled silently (transfer of 0) to prevent information leakage.\\n *\\n * Key patterns demonstrated:\\n * 1. FHE.select() for branch-free conditional logic\\n * 2. Combining multiple encrypted conditions with FHE.and()\\n * 3. Encrypted balance management\\n * 4. No-revert compliance (privacy-preserving failure handling)\\n * 5. Integration with external compliance checker\\n */\\ncontract CompliantERC20 is ZamaEthereumConfig {\\n // ============ Token Metadata ============\\n\\n /// @notice Token name\\n string public name;\\n\\n /// @notice Token symbol\\n string public symbol;\\n\\n /// @notice Token decimals\\n uint8 public constant DECIMALS = 18;\\n\\n /// @notice Total supply (public for transparency)\\n uint256 public totalSupply;\\n\\n // ============ Token State ============\\n\\n /// @notice Encrypted balances\\n mapping(address account => euint64 balance) private balances;\\n\\n /// @notice Encrypted allowances\\n mapping(address owner => mapping(address spender => euint64 allowance)) private allowances;\\n\\n // ============ Compliance State ============\\n\\n /// @notice Compliance checker interface (can be ComplianceRules or custom)\\n IComplianceChecker public complianceChecker;\\n\\n /// @notice Owner/admin\\n address public owner;\\n /// @notice Pending owner for two-step ownership transfer\\n address public pendingOwner;\\n\\n // ============ Events ============\\n\\n /// @notice Emitted on token transfers (indexed for efficient filtering)\\n /// @param from Address tokens are transferred from\\n /// @param to Address tokens are transferred to\\n event Transfer(address indexed from, address indexed to);\\n\\n /// @notice Emitted when spending allowance is set\\n /// @param owner Address of the token owner\\n /// @param spender Address authorized to spend\\n event Approval(address indexed owner, address indexed spender);\\n\\n /// @notice Emitted when new tokens are minted\\n /// @param to Address receiving the minted tokens\\n /// @param amount Number of tokens minted\\n event Mint(address indexed to, uint256 indexed amount);\\n\\n /// @notice Emitted when the compliance checker contract is updated\\n /// @param newChecker Address of the new compliance checker\\n event ComplianceCheckerUpdated(address indexed newChecker);\\n\\n /// @notice Emitted when ownership transfer is initiated\\n /// @param currentOwner Current owner address\\n /// @param pendingOwner Address that can accept ownership\\n event OwnershipTransferStarted(address indexed currentOwner, address indexed pendingOwner);\\n\\n /// @notice Emitted when ownership transfer is completed\\n /// @param previousOwner Previous owner address\\n /// @param newOwner New owner address\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // ============ Errors ============\\n\\n /// @notice Thrown when caller is not the contract owner\\n error OnlyOwner();\\n /// @notice Thrown when caller is not the pending owner\\n error OnlyPendingOwner();\\n /// @notice Thrown when new owner is the zero address\\n error InvalidOwner();\\n\\n /// @notice Thrown when compliance checker is required but not set\\n error ComplianceCheckerNotSet();\\n /// @notice Thrown when caller supplies an unauthorized ciphertext handle\\n error UnauthorizedCiphertext();\\n /// @notice Thrown when mint amount would exceed uint64 accounting bounds\\n error TotalSupplyOverflow();\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Initialize the token\\n * @param tokenName Token name\\n * @param tokenSymbol Token symbol\\n * @param checker Address of the compliance checker contract\\n */\\n constructor(string memory tokenName, string memory tokenSymbol, address checker) {\\n name = tokenName;\\n symbol = tokenSymbol;\\n owner = msg.sender;\\n if (checker != address(0)) {\\n complianceChecker = IComplianceChecker(checker);\\n }\\n }\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Set the compliance checker contract\\n * @param checker Address of the compliance checker\\n */\\n function setComplianceChecker(address checker) external {\\n if (msg.sender != owner) revert OnlyOwner();\\n complianceChecker = IComplianceChecker(checker);\\n emit ComplianceCheckerUpdated(checker);\\n }\\n\\n /**\\n * @notice Initiate transfer of contract ownership\\n * @param newOwner Address that can accept ownership\\n */\\n function transferOwnership(address newOwner) external {\\n if (msg.sender != owner) revert OnlyOwner();\\n if (newOwner == address(0)) revert InvalidOwner();\\n pendingOwner = newOwner;\\n emit OwnershipTransferStarted(owner, newOwner);\\n }\\n\\n /**\\n * @notice Accept ownership transfer\\n */\\n function acceptOwnership() external {\\n if (msg.sender != pendingOwner) revert OnlyPendingOwner();\\n address previousOwner = owner;\\n owner = pendingOwner;\\n pendingOwner = address(0);\\n emit OwnershipTransferred(previousOwner, owner);\\n }\\n\\n /**\\n * @notice Mint tokens to an address\\n * @dev Only owner can mint. Compliance is NOT checked on mint.\\n * @param to Recipient address\\n * @param amount Amount to mint (plaintext)\\n */\\n function mint(address to, uint256 amount) external {\\n if (msg.sender != owner) revert OnlyOwner();\\n if (amount > type(uint64).max) revert TotalSupplyOverflow();\\n if (totalSupply + amount > type(uint64).max) revert TotalSupplyOverflow();\\n\\n euint64 mintAmount = FHE.asEuint64(uint64(amount));\\n balances[to] = FHE.add(balances[to], mintAmount);\\n FHE.allowThis(balances[to]);\\n FHE.allow(balances[to], to);\\n\\n totalSupply += amount;\\n\\n emit Mint(to, amount);\\n }\\n\\n // ============ Token Functions ============\\n\\n /**\\n * @notice Transfer tokens with encrypted amount\\n * @dev Branch-free transfer with compliance checks\\n * @param to Recipient address\\n * @param encryptedAmount Encrypted amount to transfer\\n * @param inputProof Proof for encrypted input\\n * @return success Always returns true (actual transfer amount may be 0)\\n *\\n * Key insight: We never revert on failed compliance. Instead:\\n * - If compliant: transfer the requested amount\\n * - If not compliant: transfer 0 (no state change, no info leak)\\n */\\n function transfer(\\n address to,\\n externalEuint64 encryptedAmount,\\n bytes calldata inputProof\\n ) external returns (bool success) {\\n euint64 amount = FHE.fromExternal(encryptedAmount, inputProof);\\n return _transfer(msg.sender, to, amount);\\n }\\n\\n /**\\n * @notice Transfer with euint64 amount (for approved callers)\\n * @param to Recipient\\n * @param amount Encrypted amount\\n * @return success Always true\\n */\\n function transfer(address to, euint64 amount) external returns (bool success) {\\n if (!FHE.isSenderAllowed(amount)) revert UnauthorizedCiphertext();\\n return _transfer(msg.sender, to, amount);\\n }\\n\\n /**\\n * @notice Approve spender to transfer tokens\\n * @param spender Address to approve\\n * @param encryptedAmount Encrypted allowance amount\\n * @param inputProof Proof for encrypted input\\n * @return success Always true\\n */\\n function approve(\\n address spender,\\n externalEuint64 encryptedAmount,\\n bytes calldata inputProof\\n ) external returns (bool success) {\\n euint64 amount = FHE.fromExternal(encryptedAmount, inputProof);\\n allowances[msg.sender][spender] = amount;\\n FHE.allowThis(amount);\\n FHE.allow(amount, msg.sender);\\n FHE.allow(amount, spender);\\n\\n emit Approval(msg.sender, spender);\\n return true;\\n }\\n\\n /**\\n * @notice Transfer from another account (requires approval)\\n * @param from Source address\\n * @param to Destination address\\n * @param encryptedAmount Encrypted amount\\n * @param inputProof Proof for encrypted input\\n * @return success Always true\\n */\\n function transferFrom(\\n address from,\\n address to,\\n externalEuint64 encryptedAmount,\\n bytes calldata inputProof\\n ) external returns (bool success) {\\n euint64 amount = FHE.fromExternal(encryptedAmount, inputProof);\\n\\n // Check allowance\\n ebool hasAllowance = FHE.le(amount, allowances[from][msg.sender]);\\n\\n // Reduce allowance (branch-free)\\n euint64 newAllowance = FHE.select(\\n hasAllowance,\\n FHE.sub(allowances[from][msg.sender], amount),\\n allowances[from][msg.sender]\\n );\\n allowances[from][msg.sender] = newAllowance;\\n FHE.allowThis(newAllowance);\\n FHE.allow(newAllowance, from);\\n FHE.allow(newAllowance, msg.sender);\\n\\n // Only transfer if allowance was sufficient\\n euint64 actualAmount = FHE.select(hasAllowance, amount, FHE.asEuint64(0));\\n\\n return _transfer(from, to, actualAmount);\\n }\\n\\n // ============ View Functions ============\\n\\n /**\\n * @notice Get encrypted balance\\n * @param account Address to query\\n * @return Encrypted balance\\n */\\n function balanceOf(address account) external view returns (euint64) {\\n return balances[account];\\n }\\n\\n /**\\n * @notice Get encrypted allowance\\n * @param account Owner address\\n * @param spender Spender address\\n * @return Encrypted allowance\\n */\\n function allowance(address account, address spender) external view returns (euint64) {\\n return allowances[account][spender];\\n }\\n\\n /**\\n * @notice Get decimals\\n * @return Token decimals\\n */\\n function decimals() external pure returns (uint8) {\\n return DECIMALS;\\n }\\n\\n // ============ Internal Functions ============\\n\\n /**\\n * @notice Internal transfer implementation\\n * @dev The heart of branch-free compliance\\n *\\n * Logic flow:\\n * 1. Check sender compliance (if checker is set)\\n * 2. Check recipient compliance (if checker is set)\\n * 3. Check sender has sufficient balance\\n * 4. Combine all checks with FHE.and()\\n * 5. Use FHE.select() to set transfer amount:\\n * - If all checks pass: transfer requested amount\\n * - If any check fails: transfer 0\\n * 6. Update balances (even if amount is 0)\\n *\\n * @param from Source address\\n * @param to Destination address\\n * @param amount Encrypted amount to transfer\\n * @return success Always returns true (actual transfer may be 0)\\n */\\n function _transfer(\\n address from,\\n address to,\\n euint64 amount\\n ) internal returns (bool success) {\\n ebool canTransfer;\\n\\n // Check compliance if checker is set\\n if (address(complianceChecker) != address(0)) {\\n ebool senderCompliant = complianceChecker.checkCompliance(from);\\n ebool recipientCompliant = complianceChecker.checkCompliance(to);\\n ebool bothCompliant = FHE.and(senderCompliant, recipientCompliant);\\n\\n // Check sufficient balance\\n ebool hasSufficientBalance = FHE.le(amount, balances[from]);\\n\\n // Combine all conditions\\n canTransfer = FHE.and(bothCompliant, hasSufficientBalance);\\n } else {\\n // No compliance checker, only check balance\\n canTransfer = FHE.le(amount, balances[from]);\\n }\\n\\n // Branch-free: select actual amount or 0\\n euint64 actualAmount = FHE.select(canTransfer, amount, FHE.asEuint64(0));\\n\\n // Update balances\\n euint64 newFromBalance = FHE.sub(balances[from], actualAmount);\\n euint64 newToBalance = FHE.add(balances[to], actualAmount);\\n\\n balances[from] = newFromBalance;\\n balances[to] = newToBalance;\\n\\n // Set permissions\\n FHE.allowThis(newFromBalance);\\n FHE.allowThis(newToBalance);\\n FHE.allow(newFromBalance, from);\\n FHE.allow(newToBalance, to);\\n\\n // Always emit (hides success/failure)\\n emit Transfer(from, to);\\n\\n return true;\\n }\\n}\\n\\n/**\\n * @title IComplianceChecker\\n * @author Gustavo Valverde\\n * @notice Interface for compliance checking contracts\\n */\\ninterface IComplianceChecker {\\n /// @notice Check if a user passes compliance requirements\\n /// @param user Address to check compliance for\\n /// @return Encrypted boolean indicating compliance status\\n function checkCompliance(address user) external returns (ebool);\\n}\\n\",\"keccak256\":\"0x33c3d8b39168cc6998f00731bbc93359f566b465c0eadb0c18b8c336665717fd\",\"license\":\"MIT\"},\"encrypted-types/EncryptedTypes.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\ntype ebool is bytes32;\\n\\ntype euint8 is bytes32;\\ntype euint16 is bytes32;\\ntype euint24 is bytes32;\\ntype euint32 is bytes32;\\ntype euint40 is bytes32;\\ntype euint48 is bytes32;\\ntype euint56 is bytes32;\\ntype euint64 is bytes32;\\ntype euint72 is bytes32;\\ntype euint80 is bytes32;\\ntype euint88 is bytes32;\\ntype euint96 is bytes32;\\ntype euint104 is bytes32;\\ntype euint112 is bytes32;\\ntype euint120 is bytes32;\\ntype euint128 is bytes32;\\ntype euint136 is bytes32;\\ntype euint144 is bytes32;\\ntype euint152 is bytes32;\\ntype euint160 is bytes32;\\ntype euint168 is bytes32;\\ntype euint176 is bytes32;\\ntype euint184 is bytes32;\\ntype euint192 is bytes32;\\ntype euint200 is bytes32;\\ntype euint208 is bytes32;\\ntype euint216 is bytes32;\\ntype euint224 is bytes32;\\ntype euint232 is bytes32;\\ntype euint240 is bytes32;\\ntype euint248 is bytes32;\\ntype euint256 is bytes32;\\n\\ntype eint8 is bytes32;\\ntype eint16 is bytes32;\\ntype eint24 is bytes32;\\ntype eint32 is bytes32;\\ntype eint40 is bytes32;\\ntype eint48 is bytes32;\\ntype eint56 is bytes32;\\ntype eint64 is bytes32;\\ntype eint72 is bytes32;\\ntype eint80 is bytes32;\\ntype eint88 is bytes32;\\ntype eint96 is bytes32;\\ntype eint104 is bytes32;\\ntype eint112 is bytes32;\\ntype eint120 is bytes32;\\ntype eint128 is bytes32;\\ntype eint136 is bytes32;\\ntype eint144 is bytes32;\\ntype eint152 is bytes32;\\ntype eint160 is bytes32;\\ntype eint168 is bytes32;\\ntype eint176 is bytes32;\\ntype eint184 is bytes32;\\ntype eint192 is bytes32;\\ntype eint200 is bytes32;\\ntype eint208 is bytes32;\\ntype eint216 is bytes32;\\ntype eint224 is bytes32;\\ntype eint232 is bytes32;\\ntype eint240 is bytes32;\\ntype eint248 is bytes32;\\ntype eint256 is bytes32;\\n\\ntype eaddress is bytes32;\\n\\ntype ebytes1 is bytes32;\\ntype ebytes2 is bytes32;\\ntype ebytes3 is bytes32;\\ntype ebytes4 is bytes32;\\ntype ebytes5 is bytes32;\\ntype ebytes6 is bytes32;\\ntype ebytes7 is bytes32;\\ntype ebytes8 is bytes32;\\ntype ebytes9 is bytes32;\\ntype ebytes10 is bytes32;\\ntype ebytes11 is bytes32;\\ntype ebytes12 is bytes32;\\ntype ebytes13 is bytes32;\\ntype ebytes14 is bytes32;\\ntype ebytes15 is bytes32;\\ntype ebytes16 is bytes32;\\ntype ebytes17 is bytes32;\\ntype ebytes18 is bytes32;\\ntype ebytes19 is bytes32;\\ntype ebytes20 is bytes32;\\ntype ebytes21 is bytes32;\\ntype ebytes22 is bytes32;\\ntype ebytes23 is bytes32;\\ntype ebytes24 is bytes32;\\ntype ebytes25 is bytes32;\\ntype ebytes26 is bytes32;\\ntype ebytes27 is bytes32;\\ntype ebytes28 is bytes32;\\ntype ebytes29 is bytes32;\\ntype ebytes30 is bytes32;\\ntype ebytes31 is bytes32;\\ntype ebytes32 is bytes32;\\n\\ntype externalEbool is bytes32;\\n\\ntype externalEuint8 is bytes32;\\ntype externalEuint16 is bytes32;\\ntype externalEuint24 is bytes32;\\ntype externalEuint32 is bytes32;\\ntype externalEuint40 is bytes32;\\ntype externalEuint48 is bytes32;\\ntype externalEuint56 is bytes32;\\ntype externalEuint64 is bytes32;\\ntype externalEuint72 is bytes32;\\ntype externalEuint80 is bytes32;\\ntype externalEuint88 is bytes32;\\ntype externalEuint96 is bytes32;\\ntype externalEuint104 is bytes32;\\ntype externalEuint112 is bytes32;\\ntype externalEuint120 is bytes32;\\ntype externalEuint128 is bytes32;\\ntype externalEuint136 is bytes32;\\ntype externalEuint144 is bytes32;\\ntype externalEuint152 is bytes32;\\ntype externalEuint160 is bytes32;\\ntype externalEuint168 is bytes32;\\ntype externalEuint176 is bytes32;\\ntype externalEuint184 is bytes32;\\ntype externalEuint192 is bytes32;\\ntype externalEuint200 is bytes32;\\ntype externalEuint208 is bytes32;\\ntype externalEuint216 is bytes32;\\ntype externalEuint224 is bytes32;\\ntype externalEuint232 is bytes32;\\ntype externalEuint240 is bytes32;\\ntype externalEuint248 is bytes32;\\ntype externalEuint256 is bytes32;\\n\\ntype externalEint8 is bytes32;\\ntype externalEint16 is bytes32;\\ntype externalEint24 is bytes32;\\ntype externalEint32 is bytes32;\\ntype externalEint40 is bytes32;\\ntype externalEint48 is bytes32;\\ntype externalEint56 is bytes32;\\ntype externalEint64 is bytes32;\\ntype externalEint72 is bytes32;\\ntype externalEint80 is bytes32;\\ntype externalEint88 is bytes32;\\ntype externalEint96 is bytes32;\\ntype externalEint104 is bytes32;\\ntype externalEint112 is bytes32;\\ntype externalEint120 is bytes32;\\ntype externalEint128 is bytes32;\\ntype externalEint136 is bytes32;\\ntype externalEint144 is bytes32;\\ntype externalEint152 is bytes32;\\ntype externalEint160 is bytes32;\\ntype externalEint168 is bytes32;\\ntype externalEint176 is bytes32;\\ntype externalEint184 is bytes32;\\ntype externalEint192 is bytes32;\\ntype externalEint200 is bytes32;\\ntype externalEint208 is bytes32;\\ntype externalEint216 is bytes32;\\ntype externalEint224 is bytes32;\\ntype externalEint232 is bytes32;\\ntype externalEint240 is bytes32;\\ntype externalEint248 is bytes32;\\ntype externalEint256 is bytes32;\\n\\ntype externalEaddress is bytes32;\\n\\ntype externalEbytes1 is bytes32;\\ntype externalEbytes2 is bytes32;\\ntype externalEbytes3 is bytes32;\\ntype externalEbytes4 is bytes32;\\ntype externalEbytes5 is bytes32;\\ntype externalEbytes6 is bytes32;\\ntype externalEbytes7 is bytes32;\\ntype externalEbytes8 is bytes32;\\ntype externalEbytes9 is bytes32;\\ntype externalEbytes10 is bytes32;\\ntype externalEbytes11 is bytes32;\\ntype externalEbytes12 is bytes32;\\ntype externalEbytes13 is bytes32;\\ntype externalEbytes14 is bytes32;\\ntype externalEbytes15 is bytes32;\\ntype externalEbytes16 is bytes32;\\ntype externalEbytes17 is bytes32;\\ntype externalEbytes18 is bytes32;\\ntype externalEbytes19 is bytes32;\\ntype externalEbytes20 is bytes32;\\ntype externalEbytes21 is bytes32;\\ntype externalEbytes22 is bytes32;\\ntype externalEbytes23 is bytes32;\\ntype externalEbytes24 is bytes32;\\ntype externalEbytes25 is bytes32;\\ntype externalEbytes26 is bytes32;\\ntype externalEbytes27 is bytes32;\\ntype externalEbytes28 is bytes32;\\ntype externalEbytes29 is bytes32;\\ntype externalEbytes30 is bytes32;\\ntype externalEbytes31 is bytes32;\\ntype externalEbytes32 is bytes32;\\n\",\"keccak256\":\"0x5da9799cd5c30067ea946164722197151baee1f2579a76f01874d4fb25df02a3\",\"license\":\"MIT\"}},\"version\":1}",
516
+ "bytecode": "0x608060405234801561000f575f5ffd5b50604051611a68380380611a6883398101604081905261002e9161034c565b6100e2610039610140565b80517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e464970080546001600160a01b03199081166001600160a01b039384161790915560208301517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497018054831691841691909117905560408301517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497028054909216921691909117905550565b5f6100ed8482610455565b5060016100fa8382610455565b50600680546001600160a01b031916331790556001600160a01b0381161561013857600580546001600160a01b0319166001600160a01b0383161790555b50505061050f565b604080516060810182525f808252602082018190529181019190915246600103610199575060408051606080820183525f8083526020808401829052928401819052835191820184528082529181018290529182015290565b4662aa36a703610218575060408051606080820183525f8083526020808401829052928401528251908101835273f0ffdc93b7e186bc2f8cb3daa75d86d1930a433d81527392c920834ec8941d2c77d188936e1f7a6f49c1279181019190915273be0e383937d564d7ff0bc3b46c51f0bf8d5c311a9181019190915290565b46617a6903610296575060408051606080820183525f8083526020808401829052928401528251908101835273f0ffdc93b7e186bc2f8cb3daa75d86d1930a433d81527392c920834ec8941d2c77d188936e1f7a6f49c1279181019190915273be0e383937d564d7ff0bc3b46c51f0bf8d5c311a9181019190915290565b6040516373cac13b60e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126102d2575f5ffd5b81516001600160401b038111156102eb576102eb6102af565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610319576103196102af565b604052818152838201602001851015610330575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f6060848603121561035e575f5ffd5b83516001600160401b03811115610373575f5ffd5b61037f868287016102c3565b602086015190945090506001600160401b0381111561039c575f5ffd5b6103a8868287016102c3565b604086015190935090506001600160a01b03811681146103c6575f5ffd5b809150509250925092565b600181811c908216806103e557607f821691505b60208210810361040357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561045057805f5260205f20601f840160051c8101602085101561042e5750805b601f840160051c820191505b8181101561044d575f815560010161043a565b50505b505050565b81516001600160401b0381111561046e5761046e6102af565b6104828161047c84546103d1565b84610409565b6020601f8211600181146104b4575f831561049d5750848201515b5f19600385901b1c1916600184901b17845561044d565b5f84815260208120601f198516915b828110156104e357878501518255602094850194600190920191016104c3565b508482101561050057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b61154c8061051c5f395ff3fe608060405234801561000f575f5ffd5b506004361061011c575f3560e01c80637d32e7bd116100a9578063b32c10011161006e578063b32c100114610252578063c8fbd4b314610265578063dd62ed3e14610278578063e30c3978146102b0578063f2fde38b146102c3575f5ffd5b80637d32e7bd146101f15780638927b030146102045780638da5cb5b1461020c57806395d89b41146102375780639a0943521461023f575f5ffd5b806340c10f19116100ef57806340c10f19146101765780636015992b1461018b57806370a082311461019e57806379ba5097146101c65780637b7e0a5a146101ce575f5ffd5b806306fdde031461012057806318160ddd1461013e5780632e0f262514610155578063313ce5671461016f575b5f5ffd5b6101286102d6565b6040516101359190611219565b60405180910390f35b61014760025481565b604051908152602001610135565b61015d601281565b60405160ff9091168152602001610135565b601261015d565b610189610184366004611246565b610361565b005b61018961019936600461126e565b6104b2565b6101476101ac36600461126e565b6001600160a01b03165f9081526003602052604090205490565b610189610526565b6101e16101dc3660046112cc565b6105ad565b6040519015158152602001610135565b6101e16101ff366004611246565b610605565b610147610640565b60065461021f906001600160a01b031681565b6040516001600160a01b039091168152602001610135565b61012861064e565b6101e161024d366004611322565b61065b565b6101e16102603660046112cc565b6107a5565b60055461021f906001600160a01b031681565b61014761028636600461138c565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b60075461021f906001600160a01b031681565b6101896102d136600461126e565b61086e565b5f80546102e2906113bd565b80601f016020809104026020016040519081016040528092919081815260200182805461030e906113bd565b80156103595780601f1061033057610100808354040283529160200191610359565b820191905f5260205f20905b81548152906001019060200180831161033c57829003601f168201915b505050505081565b6006546001600160a01b0316331461038c57604051635fc483c560e01b815260040160405180910390fd5b67ffffffffffffffff8111156103b55760405163e5cfe95760e01b815260040160405180910390fd5b60025467ffffffffffffffff906103cd9083906113f5565b11156103ec5760405163e5cfe95760e01b815260040160405180910390fd5b5f6103f682610911565b6001600160a01b0384165f9081526003602052604090205490915061041b9082610927565b6001600160a01b0384165f90815260036020526040902081905561043e90610955565b506001600160a01b0383165f908152600360205260409020546104619084610964565b508160025f82825461047391906113f5565b909155505060405182906001600160a01b038516907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885905f90a3505050565b6006546001600160a01b031633146104dd57604051635fc483c560e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040517f7c1403a777cb1caaa0258a821061f56fd1e6bc77b3d5f81c0f5630a299947d16905f90a250565b6007546001600160a01b03163314610551576040516303c25d1960e61b815260040160405180910390fd5b60068054600780546001600160a01b03198084166001600160a01b038381169182179096559116909155604051929091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b5f5f6105ee8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b90506105fb338783610983565b9695505050505050565b5f61060f82610be4565b61062c57604051631a93b31b60e31b815260040160405180910390fd5b610637338484610983565b90505b92915050565b5f610649610bef565b905090565b600180546102e2906113bd565b5f5f61069c8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b6001600160a01b0388165f908152600460209081526040808320338452909152812054919250906106ce908390610c23565b6001600160a01b0389165f9081526004602090815260408083203384529091528120549192509061072d9083906107059086610c51565b6001600160a01b038c165f908152600460209081526040808320338452909152902054610c7f565b6001600160a01b038a165f9081526004602090815260408083203384529091529020819055905061075d81610955565b50610768818a610964565b506107738133610964565b505f61078883856107835f610911565b610c7f565b90506107958a8a83610983565b9450505050505b95945050505050565b5f5f6107e68585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b335f9081526004602090815260408083206001600160a01b038b1684529091529020819055905061081681610955565b506108218133610964565b5061082c8187610964565b506040516001600160a01b0387169033907ff37f546c25e850257cc0c94f92bec94a17e2f0e884ddda268a25d8144b70eb6a905f90a350600195945050505050565b6006546001600160a01b0316331461089957604051635fc483c560e01b815260040160405180910390fd5b6001600160a01b0381166108c0576040516349e27cff60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b03838116918217909255600654604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b5f61063a8267ffffffffffffffff166005610cc6565b5f82610939576109365f610911565b92505b8161094a576109475f610911565b91505b61063783835f610d55565b5f6109608230610df8565b5090565b5f61096f8383610df8565b5090919050565b5f61063783836005610e6e565b6005545f9081906001600160a01b031615610ac257600554604051632c289dcf60e01b81526001600160a01b0387811660048301525f921690632c289dcf906024016020604051808303815f875af11580156109e1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a059190611414565b600554604051632c289dcf60e01b81526001600160a01b0388811660048301529293505f9290911690632c289dcf906024016020604051808303815f875af1158015610a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a779190611414565b90505f610a848383610f68565b6001600160a01b0389165f9081526003602052604081205491925090610aab908890610c23565b9050610ab78282610f68565b945050505050610ae8565b6001600160a01b0385165f90815260036020526040902054610ae5908490610c23565b90505b5f610af782856107835f610911565b6001600160a01b0387165f9081526003602052604081205491925090610b1d9083610c51565b6001600160a01b0387165f9081526003602052604081205491925090610b439084610927565b6001600160a01b03808a165f90815260036020526040808220869055918a168152208190559050610b7382610955565b50610b7d81610955565b50610b888289610964565b50610b938188610964565b50866001600160a01b0316886001600160a01b03167f4853ae1b4d437c4255ac16cd3ceda3465975023f27cb141584cd9d44440fed8260405160405180910390a360019450505050505b9392505050565b5f61063a8233610f96565b5f46600103610bfe5750600190565b4662aa36a703610c0f575061271190565b46617a6903610c1e57505f1990565b505f90565b5f82610c3557610c325f610911565b92505b81610c4657610c435f610911565b91505b61063783835f61101a565b5f82610c6357610c605f610911565b92505b81610c7457610c715f610911565b91505b61063783835f61107d565b5f83610c9157610c8e5f6110e0565b93505b82610ca257610c9f5f610911565b92505b81610cb357610cb05f610911565b91505b610cbe8484846110fb565b949350505050565b5f5160206114d75f395f51905f5254604051639cd07acb60e01b81525f915f5160206114f75f395f51905f52916001600160a01b0390911690639cd07acb90610d15908790879060040161144b565b6020604051808303815f875af1158015610d31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbe9190611414565b5f5f8215610d685750600160f81b610d6b565b505f5b5f5160206114d75f395f51905f525460405163022f65e760e31b81525f5160206114f75f395f51905f52916001600160a01b03169063117b2f3890610db89089908990879060040161145f565b6020604051808303815f875af1158015610dd4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105fb9190611414565b5f5f5160206114f75f395f51905f528054604051635ca4b5b160e11b8152600481018690526001600160a01b03858116602483015292935091169063b9496b62906044015f604051808303815f87803b158015610e53575f5ffd5b505af1158015610e65573d5f5f3e3d5ffd5b50505050505050565b5f5160206114d75f395f51905f525460405163045fc19560e11b81525f915f5160206114f75f395f51905f52916001600160a01b03909116906308bf832a90610ec190889033908990899060040161147f565b6020604051808303815f875af1158015610edd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190611414565b8154604051630f8e573b60e21b8152600481018390523360248201529193506001600160a01b031690633e395cec906044015f604051808303815f87803b158015610f4a575f5ffd5b505af1158015610f5c573d5f5f3e3d5ffd5b50505050509392505050565b5f82610f7a57610f775f6110e0565b92505b81610f8b57610f885f6110e0565b91505b61063783835f611188565b5f805f5160206114f75f395f51905f5280546040516382027b6d60e01b8152600481018790526001600160a01b0386811660248301529293509116906382027b6d90604401602060405180830381865afa158015610ff6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbe91906114b7565b5f5f821561102d5750600160f81b611030565b505f5b5f5160206114d75f395f51905f5254604051631d44e90160e21b81525f5160206114f75f395f51905f52916001600160a01b031690637513a40490610db89089908990879060040161145f565b5f5f82156110905750600160f81b611093565b505f5b5f5160206114d75f395f51905f52546040516303056db360e31b81525f5160206114f75f395f51905f52916001600160a01b03169063182b6d9890610db89089908990879060040161145f565b5f61063a826110ef575f6110f2565b60015b60ff165f610cc6565b5f805f5160206114f75f395f51905f526001810154604051637702dcff60e01b81526004810188905260248101879052604481018690529192506001600160a01b031690637702dcff906064016020604051808303815f875af1158015611164573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079c9190611414565b5f5f821561119b5750600160f81b61119e565b505f5b5f5160206114d75f395f51905f525460405163d99882d560e01b81525f5160206114f75f395f51905f52916001600160a01b03169063d99882d590610db89089908990879060040161145f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61063760208301846111eb565b80356001600160a01b0381168114611241575f5ffd5b919050565b5f5f60408385031215611257575f5ffd5b6112608361122b565b946020939093013593505050565b5f6020828403121561127e575f5ffd5b6106378261122b565b5f5f83601f840112611297575f5ffd5b50813567ffffffffffffffff8111156112ae575f5ffd5b6020830191508360208285010111156112c5575f5ffd5b9250929050565b5f5f5f5f606085870312156112df575f5ffd5b6112e88561122b565b935060208501359250604085013567ffffffffffffffff81111561130a575f5ffd5b61131687828801611287565b95989497509550505050565b5f5f5f5f5f60808688031215611336575f5ffd5b61133f8661122b565b945061134d6020870161122b565b935060408601359250606086013567ffffffffffffffff81111561136f575f5ffd5b61137b88828901611287565b969995985093965092949392505050565b5f5f6040838503121561139d575f5ffd5b6113a68361122b565b91506113b46020840161122b565b90509250929050565b600181811c908216806113d157607f821691505b6020821081036113ef57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561063a57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215611424575f5ffd5b5051919050565b6054811061144757634e487b7160e01b5f52602160045260245ffd5b9052565b82815260408101610bdd602083018461142b565b92835260208301919091526001600160f81b031916604082015260600190565b8481526001600160a01b03841660208201526080604082018190525f906114a8908301856111eb565b905061079c606083018461142b565b5f602082840312156114c7575f5ffd5b81518015158114610bdd575f5ffdfe9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497019e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700a26469706673582212206447351ee352fd08cb3771d2c32a54efde5bd82a729887485649801c2130df8164736f6c634300081b0033",
517
+ "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061011c575f3560e01c80637d32e7bd116100a9578063b32c10011161006e578063b32c100114610252578063c8fbd4b314610265578063dd62ed3e14610278578063e30c3978146102b0578063f2fde38b146102c3575f5ffd5b80637d32e7bd146101f15780638927b030146102045780638da5cb5b1461020c57806395d89b41146102375780639a0943521461023f575f5ffd5b806340c10f19116100ef57806340c10f19146101765780636015992b1461018b57806370a082311461019e57806379ba5097146101c65780637b7e0a5a146101ce575f5ffd5b806306fdde031461012057806318160ddd1461013e5780632e0f262514610155578063313ce5671461016f575b5f5ffd5b6101286102d6565b6040516101359190611219565b60405180910390f35b61014760025481565b604051908152602001610135565b61015d601281565b60405160ff9091168152602001610135565b601261015d565b610189610184366004611246565b610361565b005b61018961019936600461126e565b6104b2565b6101476101ac36600461126e565b6001600160a01b03165f9081526003602052604090205490565b610189610526565b6101e16101dc3660046112cc565b6105ad565b6040519015158152602001610135565b6101e16101ff366004611246565b610605565b610147610640565b60065461021f906001600160a01b031681565b6040516001600160a01b039091168152602001610135565b61012861064e565b6101e161024d366004611322565b61065b565b6101e16102603660046112cc565b6107a5565b60055461021f906001600160a01b031681565b61014761028636600461138c565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b60075461021f906001600160a01b031681565b6101896102d136600461126e565b61086e565b5f80546102e2906113bd565b80601f016020809104026020016040519081016040528092919081815260200182805461030e906113bd565b80156103595780601f1061033057610100808354040283529160200191610359565b820191905f5260205f20905b81548152906001019060200180831161033c57829003601f168201915b505050505081565b6006546001600160a01b0316331461038c57604051635fc483c560e01b815260040160405180910390fd5b67ffffffffffffffff8111156103b55760405163e5cfe95760e01b815260040160405180910390fd5b60025467ffffffffffffffff906103cd9083906113f5565b11156103ec5760405163e5cfe95760e01b815260040160405180910390fd5b5f6103f682610911565b6001600160a01b0384165f9081526003602052604090205490915061041b9082610927565b6001600160a01b0384165f90815260036020526040902081905561043e90610955565b506001600160a01b0383165f908152600360205260409020546104619084610964565b508160025f82825461047391906113f5565b909155505060405182906001600160a01b038516907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885905f90a3505050565b6006546001600160a01b031633146104dd57604051635fc483c560e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040517f7c1403a777cb1caaa0258a821061f56fd1e6bc77b3d5f81c0f5630a299947d16905f90a250565b6007546001600160a01b03163314610551576040516303c25d1960e61b815260040160405180910390fd5b60068054600780546001600160a01b03198084166001600160a01b038381169182179096559116909155604051929091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b5f5f6105ee8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b90506105fb338783610983565b9695505050505050565b5f61060f82610be4565b61062c57604051631a93b31b60e31b815260040160405180910390fd5b610637338484610983565b90505b92915050565b5f610649610bef565b905090565b600180546102e2906113bd565b5f5f61069c8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b6001600160a01b0388165f908152600460209081526040808320338452909152812054919250906106ce908390610c23565b6001600160a01b0389165f9081526004602090815260408083203384529091528120549192509061072d9083906107059086610c51565b6001600160a01b038c165f908152600460209081526040808320338452909152902054610c7f565b6001600160a01b038a165f9081526004602090815260408083203384529091529020819055905061075d81610955565b50610768818a610964565b506107738133610964565b505f61078883856107835f610911565b610c7f565b90506107958a8a83610983565b9450505050505b95945050505050565b5f5f6107e68585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097692505050565b335f9081526004602090815260408083206001600160a01b038b1684529091529020819055905061081681610955565b506108218133610964565b5061082c8187610964565b506040516001600160a01b0387169033907ff37f546c25e850257cc0c94f92bec94a17e2f0e884ddda268a25d8144b70eb6a905f90a350600195945050505050565b6006546001600160a01b0316331461089957604051635fc483c560e01b815260040160405180910390fd5b6001600160a01b0381166108c0576040516349e27cff60e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b03838116918217909255600654604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700905f90a350565b5f61063a8267ffffffffffffffff166005610cc6565b5f82610939576109365f610911565b92505b8161094a576109475f610911565b91505b61063783835f610d55565b5f6109608230610df8565b5090565b5f61096f8383610df8565b5090919050565b5f61063783836005610e6e565b6005545f9081906001600160a01b031615610ac257600554604051632c289dcf60e01b81526001600160a01b0387811660048301525f921690632c289dcf906024016020604051808303815f875af11580156109e1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a059190611414565b600554604051632c289dcf60e01b81526001600160a01b0388811660048301529293505f9290911690632c289dcf906024016020604051808303815f875af1158015610a53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a779190611414565b90505f610a848383610f68565b6001600160a01b0389165f9081526003602052604081205491925090610aab908890610c23565b9050610ab78282610f68565b945050505050610ae8565b6001600160a01b0385165f90815260036020526040902054610ae5908490610c23565b90505b5f610af782856107835f610911565b6001600160a01b0387165f9081526003602052604081205491925090610b1d9083610c51565b6001600160a01b0387165f9081526003602052604081205491925090610b439084610927565b6001600160a01b03808a165f90815260036020526040808220869055918a168152208190559050610b7382610955565b50610b7d81610955565b50610b888289610964565b50610b938188610964565b50866001600160a01b0316886001600160a01b03167f4853ae1b4d437c4255ac16cd3ceda3465975023f27cb141584cd9d44440fed8260405160405180910390a360019450505050505b9392505050565b5f61063a8233610f96565b5f46600103610bfe5750600190565b4662aa36a703610c0f575061271190565b46617a6903610c1e57505f1990565b505f90565b5f82610c3557610c325f610911565b92505b81610c4657610c435f610911565b91505b61063783835f61101a565b5f82610c6357610c605f610911565b92505b81610c7457610c715f610911565b91505b61063783835f61107d565b5f83610c9157610c8e5f6110e0565b93505b82610ca257610c9f5f610911565b92505b81610cb357610cb05f610911565b91505b610cbe8484846110fb565b949350505050565b5f5160206114d75f395f51905f5254604051639cd07acb60e01b81525f915f5160206114f75f395f51905f52916001600160a01b0390911690639cd07acb90610d15908790879060040161144b565b6020604051808303815f875af1158015610d31573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbe9190611414565b5f5f8215610d685750600160f81b610d6b565b505f5b5f5160206114d75f395f51905f525460405163022f65e760e31b81525f5160206114f75f395f51905f52916001600160a01b03169063117b2f3890610db89089908990879060040161145f565b6020604051808303815f875af1158015610dd4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105fb9190611414565b5f5f5160206114f75f395f51905f528054604051635ca4b5b160e11b8152600481018690526001600160a01b03858116602483015292935091169063b9496b62906044015f604051808303815f87803b158015610e53575f5ffd5b505af1158015610e65573d5f5f3e3d5ffd5b50505050505050565b5f5160206114d75f395f51905f525460405163045fc19560e11b81525f915f5160206114f75f395f51905f52916001600160a01b03909116906308bf832a90610ec190889033908990899060040161147f565b6020604051808303815f875af1158015610edd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f019190611414565b8154604051630f8e573b60e21b8152600481018390523360248201529193506001600160a01b031690633e395cec906044015f604051808303815f87803b158015610f4a575f5ffd5b505af1158015610f5c573d5f5f3e3d5ffd5b50505050509392505050565b5f82610f7a57610f775f6110e0565b92505b81610f8b57610f885f6110e0565b91505b61063783835f611188565b5f805f5160206114f75f395f51905f5280546040516382027b6d60e01b8152600481018790526001600160a01b0386811660248301529293509116906382027b6d90604401602060405180830381865afa158015610ff6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbe91906114b7565b5f5f821561102d5750600160f81b611030565b505f5b5f5160206114d75f395f51905f5254604051631d44e90160e21b81525f5160206114f75f395f51905f52916001600160a01b031690637513a40490610db89089908990879060040161145f565b5f5f82156110905750600160f81b611093565b505f5b5f5160206114d75f395f51905f52546040516303056db360e31b81525f5160206114f75f395f51905f52916001600160a01b03169063182b6d9890610db89089908990879060040161145f565b5f61063a826110ef575f6110f2565b60015b60ff165f610cc6565b5f805f5160206114f75f395f51905f526001810154604051637702dcff60e01b81526004810188905260248101879052604481018690529192506001600160a01b031690637702dcff906064016020604051808303815f875af1158015611164573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079c9190611414565b5f5f821561119b5750600160f81b61119e565b505f5b5f5160206114d75f395f51905f525460405163d99882d560e01b81525f5160206114f75f395f51905f52916001600160a01b03169063d99882d590610db89089908990879060040161145f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61063760208301846111eb565b80356001600160a01b0381168114611241575f5ffd5b919050565b5f5f60408385031215611257575f5ffd5b6112608361122b565b946020939093013593505050565b5f6020828403121561127e575f5ffd5b6106378261122b565b5f5f83601f840112611297575f5ffd5b50813567ffffffffffffffff8111156112ae575f5ffd5b6020830191508360208285010111156112c5575f5ffd5b9250929050565b5f5f5f5f606085870312156112df575f5ffd5b6112e88561122b565b935060208501359250604085013567ffffffffffffffff81111561130a575f5ffd5b61131687828801611287565b95989497509550505050565b5f5f5f5f5f60808688031215611336575f5ffd5b61133f8661122b565b945061134d6020870161122b565b935060408601359250606086013567ffffffffffffffff81111561136f575f5ffd5b61137b88828901611287565b969995985093965092949392505050565b5f5f6040838503121561139d575f5ffd5b6113a68361122b565b91506113b46020840161122b565b90509250929050565b600181811c908216806113d157607f821691505b6020821081036113ef57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561063a57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215611424575f5ffd5b5051919050565b6054811061144757634e487b7160e01b5f52602160045260245ffd5b9052565b82815260408101610bdd602083018461142b565b92835260208301919091526001600160f81b031916604082015260600190565b8481526001600160a01b03841660208201526080604082018190525f906114a8908301856111eb565b905061079c606083018461142b565b5f602082840312156114c7575f5ffd5b81518015158114610bdd575f5ffdfe9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497019e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700a26469706673582212206447351ee352fd08cb3771d2c32a54efde5bd82a729887485649801c2130df8164736f6c634300081b0033",
518
518
  "devdoc": {
519
- "author": "Zentity",
519
+ "author": "Gustavo Valverde",
520
520
  "custom:category": "token",
521
521
  "custom:concept": "FHE.select() for branch-free compliant transfers",
522
522
  "custom:difficulty": "advanced This contract implements a compliant token with encrypted balances. Transfers only succeed if both parties pass compliance checks, but failures are handled silently (transfer of 0) to prevent information leakage. Key patterns demonstrated: 1. FHE.select() for branch-free conditional logic 2. Combining multiple encrypted conditions with FHE.and() 3. Encrypted balance management 4. No-revert compliance (privacy-preserving failure handling) 5. Integration with external compliance checker",
@@ -775,7 +775,7 @@
775
775
  "storageLayout": {
776
776
  "storage": [
777
777
  {
778
- "astId": 40948,
778
+ "astId": 41151,
779
779
  "contract": "contracts/tokens/CompliantERC20.sol:CompliantERC20",
780
780
  "label": "name",
781
781
  "offset": 0,
@@ -783,7 +783,7 @@
783
783
  "type": "t_string_storage"
784
784
  },
785
785
  {
786
- "astId": 40951,
786
+ "astId": 41154,
787
787
  "contract": "contracts/tokens/CompliantERC20.sol:CompliantERC20",
788
788
  "label": "symbol",
789
789
  "offset": 0,
@@ -791,7 +791,7 @@
791
791
  "type": "t_string_storage"
792
792
  },
793
793
  {
794
- "astId": 40958,
794
+ "astId": 41161,
795
795
  "contract": "contracts/tokens/CompliantERC20.sol:CompliantERC20",
796
796
  "label": "totalSupply",
797
797
  "offset": 0,
@@ -799,31 +799,31 @@
799
799
  "type": "t_uint256"
800
800
  },
801
801
  {
802
- "astId": 40964,
802
+ "astId": 41167,
803
803
  "contract": "contracts/tokens/CompliantERC20.sol:CompliantERC20",
804
804
  "label": "balances",
805
805
  "offset": 0,
806
806
  "slot": "3",
807
- "type": "t_mapping(t_address,t_userDefinedValueType(euint64)41728)"
807
+ "type": "t_mapping(t_address,t_userDefinedValueType(euint64)41931)"
808
808
  },
809
809
  {
810
- "astId": 40972,
810
+ "astId": 41175,
811
811
  "contract": "contracts/tokens/CompliantERC20.sol:CompliantERC20",
812
812
  "label": "allowances",
813
813
  "offset": 0,
814
814
  "slot": "4",
815
- "type": "t_mapping(t_address,t_mapping(t_address,t_userDefinedValueType(euint64)41728))"
815
+ "type": "t_mapping(t_address,t_mapping(t_address,t_userDefinedValueType(euint64)41931))"
816
816
  },
817
817
  {
818
- "astId": 40976,
818
+ "astId": 41179,
819
819
  "contract": "contracts/tokens/CompliantERC20.sol:CompliantERC20",
820
820
  "label": "complianceChecker",
821
821
  "offset": 0,
822
822
  "slot": "5",
823
- "type": "t_contract(IComplianceChecker)41708"
823
+ "type": "t_contract(IComplianceChecker)41911"
824
824
  },
825
825
  {
826
- "astId": 40979,
826
+ "astId": 41182,
827
827
  "contract": "contracts/tokens/CompliantERC20.sol:CompliantERC20",
828
828
  "label": "owner",
829
829
  "offset": 0,
@@ -831,7 +831,7 @@
831
831
  "type": "t_address"
832
832
  },
833
833
  {
834
- "astId": 40982,
834
+ "astId": 41185,
835
835
  "contract": "contracts/tokens/CompliantERC20.sol:CompliantERC20",
836
836
  "label": "pendingOwner",
837
837
  "offset": 0,
@@ -845,24 +845,24 @@
845
845
  "label": "address",
846
846
  "numberOfBytes": "20"
847
847
  },
848
- "t_contract(IComplianceChecker)41708": {
848
+ "t_contract(IComplianceChecker)41911": {
849
849
  "encoding": "inplace",
850
850
  "label": "contract IComplianceChecker",
851
851
  "numberOfBytes": "20"
852
852
  },
853
- "t_mapping(t_address,t_mapping(t_address,t_userDefinedValueType(euint64)41728))": {
853
+ "t_mapping(t_address,t_mapping(t_address,t_userDefinedValueType(euint64)41931))": {
854
854
  "encoding": "mapping",
855
855
  "key": "t_address",
856
856
  "label": "mapping(address => mapping(address => euint64))",
857
857
  "numberOfBytes": "32",
858
- "value": "t_mapping(t_address,t_userDefinedValueType(euint64)41728)"
858
+ "value": "t_mapping(t_address,t_userDefinedValueType(euint64)41931)"
859
859
  },
860
- "t_mapping(t_address,t_userDefinedValueType(euint64)41728)": {
860
+ "t_mapping(t_address,t_userDefinedValueType(euint64)41931)": {
861
861
  "encoding": "mapping",
862
862
  "key": "t_address",
863
863
  "label": "mapping(address => euint64)",
864
864
  "numberOfBytes": "32",
865
- "value": "t_userDefinedValueType(euint64)41728"
865
+ "value": "t_userDefinedValueType(euint64)41931"
866
866
  },
867
867
  "t_string_storage": {
868
868
  "encoding": "bytes",
@@ -874,7 +874,7 @@
874
874
  "label": "uint256",
875
875
  "numberOfBytes": "32"
876
876
  },
877
- "t_userDefinedValueType(euint64)41728": {
877
+ "t_userDefinedValueType(euint64)41931": {
878
878
  "encoding": "inplace",
879
879
  "label": "euint64",
880
880
  "numberOfBytes": "32"