@zentity/fhevm-contracts 0.1.0

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.
Files changed (83) hide show
  1. package/README.md +160 -0
  2. package/abi/ComplianceRules.json +352 -0
  3. package/abi/CompliantERC20.json +493 -0
  4. package/abi/IdentityRegistry.json +712 -0
  5. package/abi/index.d.ts +3 -0
  6. package/abi/index.js +9 -0
  7. package/contracts/ARCHITECTURE.md +66 -0
  8. package/contracts/ARCHITECTURE_EXPLAINER.md +77 -0
  9. package/contracts/compliance/ComplianceRules.sol +255 -0
  10. package/contracts/core/IdentityRegistry.sol +352 -0
  11. package/contracts/interfaces/IIdentityRegistry.sol +226 -0
  12. package/contracts/mocks/.gitkeep +0 -0
  13. package/contracts/tokens/CompliantERC20.sol +379 -0
  14. package/deployments/hardhat/addresses.json +20 -0
  15. package/deployments/localhost/.chainId +1 -0
  16. package/deployments/localhost/ComplianceRules.json +662 -0
  17. package/deployments/localhost/CompliantERC20.json +888 -0
  18. package/deployments/localhost/IdentityRegistry.json +1093 -0
  19. package/deployments/localhost/solcInputs/e36969353329df673b4fae03d39e01c4.json +60 -0
  20. package/deployments/sepolia/.chainId +1 -0
  21. package/deployments/sepolia/.gitkeep +0 -0
  22. package/deployments/sepolia/ComplianceRules.json +662 -0
  23. package/deployments/sepolia/CompliantERC20.json +888 -0
  24. package/deployments/sepolia/IdentityRegistry.json +1093 -0
  25. package/deployments/sepolia/solcInputs/93d280ff0d4e798a18947a9ed6015031.json +60 -0
  26. package/dist/index.d.ts +459 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +135 -0
  29. package/package.json +110 -0
  30. package/typechain-types/@fhevm/index.ts +5 -0
  31. package/typechain-types/@fhevm/solidity/config/ZamaConfig.sol/ZamaConfig.ts +69 -0
  32. package/typechain-types/@fhevm/solidity/config/ZamaConfig.sol/ZamaEthereumConfig.ts +90 -0
  33. package/typechain-types/@fhevm/solidity/config/ZamaConfig.sol/index.ts +5 -0
  34. package/typechain-types/@fhevm/solidity/config/index.ts +5 -0
  35. package/typechain-types/@fhevm/solidity/index.ts +7 -0
  36. package/typechain-types/@fhevm/solidity/lib/FHE.sol/FHE.ts +112 -0
  37. package/typechain-types/@fhevm/solidity/lib/FHE.sol/IKMSVerifier.ts +108 -0
  38. package/typechain-types/@fhevm/solidity/lib/FHE.sol/index.ts +5 -0
  39. package/typechain-types/@fhevm/solidity/lib/Impl.sol/IACL.ts +190 -0
  40. package/typechain-types/@fhevm/solidity/lib/Impl.sol/IFHEVMExecutor.ts +623 -0
  41. package/typechain-types/@fhevm/solidity/lib/Impl.sol/IInputVerifier.ts +90 -0
  42. package/typechain-types/@fhevm/solidity/lib/Impl.sol/index.ts +6 -0
  43. package/typechain-types/@fhevm/solidity/lib/index.ts +7 -0
  44. package/typechain-types/common.ts +131 -0
  45. package/typechain-types/contracts/compliance/ComplianceRules.ts +479 -0
  46. package/typechain-types/contracts/compliance/index.ts +4 -0
  47. package/typechain-types/contracts/core/IdentityRegistry.ts +874 -0
  48. package/typechain-types/contracts/core/index.ts +4 -0
  49. package/typechain-types/contracts/index.ts +11 -0
  50. package/typechain-types/contracts/interfaces/IIdentityRegistry.ts +798 -0
  51. package/typechain-types/contracts/interfaces/index.ts +4 -0
  52. package/typechain-types/contracts/tokens/CompliantERC20.sol/CompliantERC20.ts +572 -0
  53. package/typechain-types/contracts/tokens/CompliantERC20.sol/IComplianceChecker.ts +95 -0
  54. package/typechain-types/contracts/tokens/CompliantERC20.sol/index.ts +5 -0
  55. package/typechain-types/contracts/tokens/index.ts +5 -0
  56. package/typechain-types/factories/@fhevm/index.ts +4 -0
  57. package/typechain-types/factories/@fhevm/solidity/config/ZamaConfig.sol/ZamaConfig__factory.ts +69 -0
  58. package/typechain-types/factories/@fhevm/solidity/config/ZamaConfig.sol/ZamaEthereumConfig__factory.ts +43 -0
  59. package/typechain-types/factories/@fhevm/solidity/config/ZamaConfig.sol/index.ts +5 -0
  60. package/typechain-types/factories/@fhevm/solidity/config/index.ts +4 -0
  61. package/typechain-types/factories/@fhevm/solidity/index.ts +5 -0
  62. package/typechain-types/factories/@fhevm/solidity/lib/FHE.sol/FHE__factory.ts +88 -0
  63. package/typechain-types/factories/@fhevm/solidity/lib/FHE.sol/IKMSVerifier__factory.ts +54 -0
  64. package/typechain-types/factories/@fhevm/solidity/lib/FHE.sol/index.ts +5 -0
  65. package/typechain-types/factories/@fhevm/solidity/lib/Impl.sol/IACL__factory.ts +121 -0
  66. package/typechain-types/factories/@fhevm/solidity/lib/Impl.sol/IFHEVMExecutor__factory.ts +810 -0
  67. package/typechain-types/factories/@fhevm/solidity/lib/Impl.sol/IInputVerifier__factory.ts +32 -0
  68. package/typechain-types/factories/@fhevm/solidity/lib/Impl.sol/index.ts +6 -0
  69. package/typechain-types/factories/@fhevm/solidity/lib/index.ts +5 -0
  70. package/typechain-types/factories/contracts/compliance/ComplianceRules__factory.ts +437 -0
  71. package/typechain-types/factories/contracts/compliance/index.ts +4 -0
  72. package/typechain-types/factories/contracts/core/IdentityRegistry__factory.ts +777 -0
  73. package/typechain-types/factories/contracts/core/index.ts +4 -0
  74. package/typechain-types/factories/contracts/index.ts +7 -0
  75. package/typechain-types/factories/contracts/interfaces/IIdentityRegistry__factory.ts +640 -0
  76. package/typechain-types/factories/contracts/interfaces/index.ts +4 -0
  77. package/typechain-types/factories/contracts/tokens/CompliantERC20.sol/CompliantERC20__factory.ts +581 -0
  78. package/typechain-types/factories/contracts/tokens/CompliantERC20.sol/IComplianceChecker__factory.ts +44 -0
  79. package/typechain-types/factories/contracts/tokens/CompliantERC20.sol/index.ts +5 -0
  80. package/typechain-types/factories/contracts/tokens/index.ts +4 -0
  81. package/typechain-types/factories/index.ts +5 -0
  82. package/typechain-types/hardhat.d.ts +261 -0
  83. package/typechain-types/index.ts +32 -0
@@ -0,0 +1,662 @@
1
+ {
2
+ "address": "0x276C216D241856199A83bf27b2286659e5b877D3",
3
+ "abi": [
4
+ {
5
+ "inputs": [
6
+ {
7
+ "internalType": "address",
8
+ "name": "registry",
9
+ "type": "address"
10
+ },
11
+ {
12
+ "internalType": "uint8",
13
+ "name": "initialMinKycLevel",
14
+ "type": "uint8"
15
+ }
16
+ ],
17
+ "stateMutability": "nonpayable",
18
+ "type": "constructor"
19
+ },
20
+ {
21
+ "inputs": [],
22
+ "name": "AccessProhibited",
23
+ "type": "error"
24
+ },
25
+ {
26
+ "inputs": [],
27
+ "name": "CallerNotAuthorized",
28
+ "type": "error"
29
+ },
30
+ {
31
+ "inputs": [],
32
+ "name": "InvalidOwner",
33
+ "type": "error"
34
+ },
35
+ {
36
+ "inputs": [],
37
+ "name": "OnlyOwner",
38
+ "type": "error"
39
+ },
40
+ {
41
+ "inputs": [],
42
+ "name": "OnlyPendingOwner",
43
+ "type": "error"
44
+ },
45
+ {
46
+ "inputs": [],
47
+ "name": "RegistryNotSet",
48
+ "type": "error"
49
+ },
50
+ {
51
+ "inputs": [],
52
+ "name": "ZamaProtocolUnsupported",
53
+ "type": "error"
54
+ },
55
+ {
56
+ "anonymous": false,
57
+ "inputs": [
58
+ {
59
+ "indexed": true,
60
+ "internalType": "address",
61
+ "name": "caller",
62
+ "type": "address"
63
+ },
64
+ {
65
+ "indexed": false,
66
+ "internalType": "bool",
67
+ "name": "allowed",
68
+ "type": "bool"
69
+ }
70
+ ],
71
+ "name": "AuthorizedCallerUpdated",
72
+ "type": "event"
73
+ },
74
+ {
75
+ "anonymous": false,
76
+ "inputs": [
77
+ {
78
+ "indexed": true,
79
+ "internalType": "address",
80
+ "name": "user",
81
+ "type": "address"
82
+ }
83
+ ],
84
+ "name": "ComplianceChecked",
85
+ "type": "event"
86
+ },
87
+ {
88
+ "anonymous": false,
89
+ "inputs": [
90
+ {
91
+ "indexed": true,
92
+ "internalType": "uint8",
93
+ "name": "newLevel",
94
+ "type": "uint8"
95
+ }
96
+ ],
97
+ "name": "MinKycLevelUpdated",
98
+ "type": "event"
99
+ },
100
+ {
101
+ "anonymous": false,
102
+ "inputs": [
103
+ {
104
+ "indexed": true,
105
+ "internalType": "address",
106
+ "name": "currentOwner",
107
+ "type": "address"
108
+ },
109
+ {
110
+ "indexed": true,
111
+ "internalType": "address",
112
+ "name": "pendingOwner",
113
+ "type": "address"
114
+ }
115
+ ],
116
+ "name": "OwnershipTransferStarted",
117
+ "type": "event"
118
+ },
119
+ {
120
+ "anonymous": false,
121
+ "inputs": [
122
+ {
123
+ "indexed": true,
124
+ "internalType": "address",
125
+ "name": "previousOwner",
126
+ "type": "address"
127
+ },
128
+ {
129
+ "indexed": true,
130
+ "internalType": "address",
131
+ "name": "newOwner",
132
+ "type": "address"
133
+ }
134
+ ],
135
+ "name": "OwnershipTransferred",
136
+ "type": "event"
137
+ },
138
+ {
139
+ "inputs": [],
140
+ "name": "acceptOwnership",
141
+ "outputs": [],
142
+ "stateMutability": "nonpayable",
143
+ "type": "function"
144
+ },
145
+ {
146
+ "inputs": [
147
+ {
148
+ "internalType": "address",
149
+ "name": "caller",
150
+ "type": "address"
151
+ }
152
+ ],
153
+ "name": "authorizedCallers",
154
+ "outputs": [
155
+ {
156
+ "internalType": "bool",
157
+ "name": "authorized",
158
+ "type": "bool"
159
+ }
160
+ ],
161
+ "stateMutability": "view",
162
+ "type": "function"
163
+ },
164
+ {
165
+ "inputs": [
166
+ {
167
+ "internalType": "address",
168
+ "name": "user",
169
+ "type": "address"
170
+ }
171
+ ],
172
+ "name": "checkCompliance",
173
+ "outputs": [
174
+ {
175
+ "internalType": "ebool",
176
+ "name": "",
177
+ "type": "bytes32"
178
+ }
179
+ ],
180
+ "stateMutability": "nonpayable",
181
+ "type": "function"
182
+ },
183
+ {
184
+ "inputs": [
185
+ {
186
+ "internalType": "address",
187
+ "name": "user",
188
+ "type": "address"
189
+ },
190
+ {
191
+ "internalType": "uint16",
192
+ "name": "allowedCountry",
193
+ "type": "uint16"
194
+ }
195
+ ],
196
+ "name": "checkComplianceWithCountry",
197
+ "outputs": [
198
+ {
199
+ "internalType": "ebool",
200
+ "name": "",
201
+ "type": "bytes32"
202
+ }
203
+ ],
204
+ "stateMutability": "nonpayable",
205
+ "type": "function"
206
+ },
207
+ {
208
+ "inputs": [],
209
+ "name": "confidentialProtocolId",
210
+ "outputs": [
211
+ {
212
+ "internalType": "uint256",
213
+ "name": "",
214
+ "type": "uint256"
215
+ }
216
+ ],
217
+ "stateMutability": "view",
218
+ "type": "function"
219
+ },
220
+ {
221
+ "inputs": [
222
+ {
223
+ "internalType": "address",
224
+ "name": "user",
225
+ "type": "address"
226
+ }
227
+ ],
228
+ "name": "getComplianceResult",
229
+ "outputs": [
230
+ {
231
+ "internalType": "ebool",
232
+ "name": "",
233
+ "type": "bytes32"
234
+ }
235
+ ],
236
+ "stateMutability": "view",
237
+ "type": "function"
238
+ },
239
+ {
240
+ "inputs": [
241
+ {
242
+ "internalType": "address",
243
+ "name": "user",
244
+ "type": "address"
245
+ }
246
+ ],
247
+ "name": "hasComplianceResult",
248
+ "outputs": [
249
+ {
250
+ "internalType": "bool",
251
+ "name": "",
252
+ "type": "bool"
253
+ }
254
+ ],
255
+ "stateMutability": "view",
256
+ "type": "function"
257
+ },
258
+ {
259
+ "inputs": [],
260
+ "name": "identityRegistry",
261
+ "outputs": [
262
+ {
263
+ "internalType": "contract IIdentityRegistry",
264
+ "name": "",
265
+ "type": "address"
266
+ }
267
+ ],
268
+ "stateMutability": "view",
269
+ "type": "function"
270
+ },
271
+ {
272
+ "inputs": [],
273
+ "name": "minKycLevel",
274
+ "outputs": [
275
+ {
276
+ "internalType": "uint8",
277
+ "name": "",
278
+ "type": "uint8"
279
+ }
280
+ ],
281
+ "stateMutability": "view",
282
+ "type": "function"
283
+ },
284
+ {
285
+ "inputs": [],
286
+ "name": "owner",
287
+ "outputs": [
288
+ {
289
+ "internalType": "address",
290
+ "name": "",
291
+ "type": "address"
292
+ }
293
+ ],
294
+ "stateMutability": "view",
295
+ "type": "function"
296
+ },
297
+ {
298
+ "inputs": [],
299
+ "name": "pendingOwner",
300
+ "outputs": [
301
+ {
302
+ "internalType": "address",
303
+ "name": "",
304
+ "type": "address"
305
+ }
306
+ ],
307
+ "stateMutability": "view",
308
+ "type": "function"
309
+ },
310
+ {
311
+ "inputs": [
312
+ {
313
+ "internalType": "address",
314
+ "name": "caller",
315
+ "type": "address"
316
+ },
317
+ {
318
+ "internalType": "bool",
319
+ "name": "allowed",
320
+ "type": "bool"
321
+ }
322
+ ],
323
+ "name": "setAuthorizedCaller",
324
+ "outputs": [],
325
+ "stateMutability": "nonpayable",
326
+ "type": "function"
327
+ },
328
+ {
329
+ "inputs": [
330
+ {
331
+ "internalType": "uint8",
332
+ "name": "newLevel",
333
+ "type": "uint8"
334
+ }
335
+ ],
336
+ "name": "setMinKycLevel",
337
+ "outputs": [],
338
+ "stateMutability": "nonpayable",
339
+ "type": "function"
340
+ },
341
+ {
342
+ "inputs": [
343
+ {
344
+ "internalType": "address",
345
+ "name": "newOwner",
346
+ "type": "address"
347
+ }
348
+ ],
349
+ "name": "transferOwnership",
350
+ "outputs": [],
351
+ "stateMutability": "nonpayable",
352
+ "type": "function"
353
+ }
354
+ ],
355
+ "transactionHash": "0x6ecc411a2b3be080fd8ccf6af84a17740e2e454b0a5c2321701943cc6a114078",
356
+ "receipt": {
357
+ "to": null,
358
+ "from": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
359
+ "contractAddress": "0x276C216D241856199A83bf27b2286659e5b877D3",
360
+ "transactionIndex": 0,
361
+ "gasUsed": "1023254",
362
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
363
+ "blockHash": "0xb05991277105d142e27710b0d3e3d5129ebd1ef2ec454448d67d3c68ffb58da9",
364
+ "transactionHash": "0x6ecc411a2b3be080fd8ccf6af84a17740e2e454b0a5c2321701943cc6a114078",
365
+ "logs": [],
366
+ "blockNumber": 128,
367
+ "cumulativeGasUsed": "1023254",
368
+ "status": 1,
369
+ "byzantium": true
370
+ },
371
+ "args": [
372
+ "0xA7c59f010700930003b33aB25a7a0679C860f29c",
373
+ 1
374
+ ],
375
+ "numDeployments": 1,
376
+ "solcInputHash": "e36969353329df673b4fae03d39e01c4",
377
+ "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"initialMinKycLevel\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessProhibited\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZamaProtocolUnsupported\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"AuthorizedCallerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ComplianceChecked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"newLevel\",\"type\":\"uint8\"}],\"name\":\"MinKycLevelUpdated\",\"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\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"authorizedCallers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"authorized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"checkCompliance\",\"outputs\":[{\"internalType\":\"ebool\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"allowedCountry\",\"type\":\"uint16\"}],\"name\":\"checkComplianceWithCountry\",\"outputs\":[{\"internalType\":\"ebool\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confidentialProtocolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getComplianceResult\",\"outputs\":[{\"internalType\":\"ebool\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"hasComplianceResult\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identityRegistry\",\"outputs\":[{\"internalType\":\"contract IIdentityRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minKycLevel\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"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\":\"caller\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setAuthorizedCaller\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newLevel\",\"type\":\"uint8\"}],\"name\":\"setMinKycLevel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Gustavo Valverde\",\"custom:category\":\"compliance\",\"custom:concept\":\"Combining encrypted compliance checks with FHE.and()\",\"custom:difficulty\":\"intermediate This contract aggregates compliance checks from IdentityRegistry and returns encrypted boolean results. Consumer contracts (like CompliantERC20) can use these results with FHE.select() for branch-free logic. Key patterns demonstrated: 1. FHE.and() for combining multiple encrypted conditions 2. Integration with IdentityRegistry 3. Configurable compliance parameters 4. Encrypted result caching\",\"details\":\"Part of zentity-fhevm-contracts - Builder Track\",\"events\":{\"AuthorizedCallerUpdated(address,bool)\":{\"params\":{\"allowed\":\"Whether the caller is allowed\",\"caller\":\"Address being authorized or revoked\"}},\"ComplianceChecked(address)\":{\"params\":{\"user\":\"Address of the user whose compliance was checked\"}},\"MinKycLevelUpdated(uint8)\":{\"params\":{\"newLevel\":\"The new minimum KYC level required for compliance\"}},\"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\"}}},\"kind\":\"dev\",\"methods\":{\"checkCompliance(address)\":{\"details\":\"Combines: hasMinKycLevel AND isNotBlacklisted\",\"params\":{\"user\":\"Address to check\"},\"returns\":{\"_0\":\"Encrypted boolean indicating compliance status Note: This function makes external calls to IdentityRegistry which computes and stores verification results. The combined result is stored locally for later retrieval.\"}},\"checkComplianceWithCountry(address,uint16)\":{\"params\":{\"allowedCountry\":\"Country code that is allowed\",\"user\":\"Address to check\"},\"returns\":{\"_0\":\"Encrypted boolean indicating compliance status\"}},\"constructor\":{\"params\":{\"initialMinKycLevel\":\"Initial minimum KYC level (default: 1)\",\"registry\":\"Address of the IdentityRegistry contract\"}},\"getComplianceResult(address)\":{\"details\":\"Call checkCompliance first to compute and store the result\",\"params\":{\"user\":\"Address to get result for\"},\"returns\":{\"_0\":\"Encrypted boolean result\"}},\"hasComplianceResult(address)\":{\"params\":{\"user\":\"Address to check\"},\"returns\":{\"_0\":\"Whether a cached result exists\"}},\"setAuthorizedCaller(address,bool)\":{\"params\":{\"allowed\":\"Whether the caller is allowed\",\"caller\":\"Address to update\"}},\"setMinKycLevel(uint8)\":{\"params\":{\"newLevel\":\"New minimum level\"}},\"transferOwnership(address)\":{\"params\":{\"newOwner\":\"Address that can accept ownership\"}}},\"title\":\"ComplianceRules\",\"version\":1},\"userdoc\":{\"errors\":{\"AccessProhibited()\":[{\"notice\":\"Thrown when caller lacks permission for encrypted result\"}],\"CallerNotAuthorized()\":[{\"notice\":\"Thrown when caller is not authorized to check another user\"}],\"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\"}],\"RegistryNotSet()\":[{\"notice\":\"Thrown when registry address is zero\"}],\"ZamaProtocolUnsupported()\":[{\"notice\":\"Returned if the Zama protocol is not supported on the current chain\"}]},\"events\":{\"AuthorizedCallerUpdated(address,bool)\":{\"notice\":\"Emitted when a caller's authorization is updated\"},\"ComplianceChecked(address)\":{\"notice\":\"Emitted when a compliance check is performed for a user\"},\"MinKycLevelUpdated(uint8)\":{\"notice\":\"Emitted when the minimum KYC level requirement is updated\"},\"OwnershipTransferStarted(address,address)\":{\"notice\":\"Emitted when ownership transfer is initiated\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Emitted when ownership transfer is completed\"}},\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Accept ownership transfer\"},\"authorizedCallers(address)\":{\"notice\":\"Authorized callers that can request compliance checks for others\"},\"checkCompliance(address)\":{\"notice\":\"Check if user passes all compliance requirements\"},\"checkComplianceWithCountry(address,uint16)\":{\"notice\":\"Check compliance with additional country restriction\"},\"constructor\":{\"notice\":\"Initialize with identity registry reference\"},\"getComplianceResult(address)\":{\"notice\":\"Get the last compliance check result for a user\"},\"hasComplianceResult(address)\":{\"notice\":\"Check if compliance result exists for user\"},\"identityRegistry()\":{\"notice\":\"Reference to the identity registry\"},\"minKycLevel()\":{\"notice\":\"Minimum KYC level required for compliance\"},\"owner()\":{\"notice\":\"Owner/admin\"},\"pendingOwner()\":{\"notice\":\"Pending owner for two-step ownership transfer\"},\"setAuthorizedCaller(address,bool)\":{\"notice\":\"Allow or revoke a caller to check compliance for other users\"},\"setMinKycLevel(uint8)\":{\"notice\":\"Update minimum KYC level\"},\"transferOwnership(address)\":{\"notice\":\"Initiate transfer of contract ownership\"}},\"notice\":\"Combines multiple compliance checks using FHE operations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/compliance/ComplianceRules.sol\":\"ComplianceRules\"},\"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: 0x50157CFfD6bBFA2DECe204a89ec419c23ef5755D,\\n CoprocessorAddress: 0xe3a9105a3a932253A70F126eb1E3b589C643dD24,\\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\":\"0xeafba724691cee312937d8dac21d74e48f9f2f75b293462dbfb9beccbe9fc036\",\"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/compliance/ComplianceRules.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.27;\\n\\nimport {FHE, ebool} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\nimport {ZamaEthereumConfig} from \\\"@fhevm/solidity/config/ZamaConfig.sol\\\";\\nimport {IIdentityRegistry} from \\\"../interfaces/IIdentityRegistry.sol\\\";\\n\\n/**\\n * @title ComplianceRules\\n * @author Gustavo Valverde\\n * @notice Combines multiple compliance checks using FHE operations\\n * @dev Part of zentity-fhevm-contracts - Builder Track\\n *\\n * @custom:category compliance\\n * @custom:concept Combining encrypted compliance checks with FHE.and()\\n * @custom:difficulty intermediate\\n *\\n * This contract aggregates compliance checks from IdentityRegistry and returns\\n * encrypted boolean results. Consumer contracts (like CompliantERC20) can use\\n * these results with FHE.select() for branch-free logic.\\n *\\n * Key patterns demonstrated:\\n * 1. FHE.and() for combining multiple encrypted conditions\\n * 2. Integration with IdentityRegistry\\n * 3. Configurable compliance parameters\\n * 4. Encrypted result caching\\n */\\ncontract ComplianceRules is ZamaEthereumConfig {\\n // ============ State ============\\n\\n /// @notice Reference to the identity registry\\n IIdentityRegistry public immutable identityRegistry;\\n\\n /// @notice Owner/admin\\n address public owner;\\n /// @notice Pending owner for two-step ownership transfer\\n address public pendingOwner;\\n\\n /// @notice Minimum KYC level required for compliance\\n uint8 public minKycLevel;\\n\\n /// @notice Store last compliance check result for each user\\n mapping(address user => ebool result) private complianceResults;\\n\\n /// @notice Authorized callers that can request compliance checks for others\\n mapping(address caller => bool authorized) public authorizedCallers;\\n\\n // ============ Events ============\\n\\n /// @notice Emitted when the minimum KYC level requirement is updated\\n /// @param newLevel The new minimum KYC level required for compliance\\n event MinKycLevelUpdated(uint8 indexed newLevel);\\n\\n /// @notice Emitted when a compliance check is performed for a user\\n /// @param user Address of the user whose compliance was checked\\n event ComplianceChecked(address indexed user);\\n\\n /// @notice Emitted when a caller's authorization is updated\\n /// @param caller Address being authorized or revoked\\n /// @param allowed Whether the caller is allowed\\n event AuthorizedCallerUpdated(address indexed caller, bool allowed);\\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 registry address is zero\\n error RegistryNotSet();\\n\\n /// @notice Thrown when caller is not authorized to check another user\\n error CallerNotAuthorized();\\n\\n /// @notice Thrown when caller lacks permission for encrypted result\\n error AccessProhibited();\\n\\n // ============ Modifiers ============\\n\\n modifier onlyOwner() {\\n if (msg.sender != owner) revert OnlyOwner();\\n _;\\n }\\n\\n modifier onlyAuthorizedOrSelf(address user) {\\n if (msg.sender != user && !authorizedCallers[msg.sender]) {\\n revert CallerNotAuthorized();\\n }\\n _;\\n }\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Initialize with identity registry reference\\n * @param registry Address of the IdentityRegistry contract\\n * @param initialMinKycLevel Initial minimum KYC level (default: 1)\\n */\\n constructor(address registry, uint8 initialMinKycLevel) {\\n if (registry == address(0)) revert RegistryNotSet();\\n identityRegistry = IIdentityRegistry(registry);\\n owner = msg.sender;\\n minKycLevel = initialMinKycLevel;\\n }\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Update minimum KYC level\\n * @param newLevel New minimum level\\n */\\n function setMinKycLevel(uint8 newLevel) external onlyOwner {\\n minKycLevel = newLevel;\\n emit MinKycLevelUpdated(newLevel);\\n }\\n\\n /**\\n * @notice Allow or revoke a caller to check compliance for other users\\n * @param caller Address to update\\n * @param allowed Whether the caller is allowed\\n */\\n function setAuthorizedCaller(address caller, bool allowed) external onlyOwner {\\n authorizedCallers[caller] = allowed;\\n emit AuthorizedCallerUpdated(caller, allowed);\\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 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 // ============ Compliance Checks ============\\n\\n /**\\n * @notice Check if user passes all compliance requirements\\n * @dev Combines: hasMinKycLevel AND isNotBlacklisted\\n * @param user Address to check\\n * @return Encrypted boolean indicating compliance status\\n *\\n * Note: This function makes external calls to IdentityRegistry which\\n * computes and stores verification results. The combined result is\\n * stored locally for later retrieval.\\n */\\n function checkCompliance(address user) external onlyAuthorizedOrSelf(user) returns (ebool) {\\n // Check if user is attested\\n if (!identityRegistry.isAttested(user)) {\\n ebool notAttestedResult = FHE.asEbool(false);\\n FHE.allowThis(notAttestedResult);\\n FHE.allow(notAttestedResult, msg.sender);\\n complianceResults[user] = notAttestedResult;\\n return notAttestedResult;\\n }\\n\\n // Get individual compliance checks\\n ebool hasKyc = identityRegistry.hasMinKycLevel(user, minKycLevel);\\n ebool notBlacklisted = identityRegistry.isNotBlacklisted(user);\\n\\n // Combine all conditions\\n ebool result = FHE.and(hasKyc, notBlacklisted);\\n\\n // Store and grant permissions\\n complianceResults[user] = result;\\n FHE.allowThis(result);\\n FHE.allow(result, msg.sender);\\n\\n emit ComplianceChecked(user);\\n\\n return result;\\n }\\n\\n /**\\n * @notice Check compliance with additional country restriction\\n * @param user Address to check\\n * @param allowedCountry Country code that is allowed\\n * @return Encrypted boolean indicating compliance status\\n */\\n function checkComplianceWithCountry(\\n address user,\\n uint16 allowedCountry\\n ) external onlyAuthorizedOrSelf(user) returns (ebool) {\\n // Check if user is attested\\n if (!identityRegistry.isAttested(user)) {\\n ebool notAttestedResult = FHE.asEbool(false);\\n FHE.allowThis(notAttestedResult);\\n FHE.allow(notAttestedResult, msg.sender);\\n return notAttestedResult;\\n }\\n\\n // Get individual compliance checks\\n ebool hasKyc = identityRegistry.hasMinKycLevel(user, minKycLevel);\\n ebool notBlacklisted = identityRegistry.isNotBlacklisted(user);\\n ebool isFromAllowedCountry = identityRegistry.isFromCountry(user, allowedCountry);\\n\\n // Combine all conditions\\n ebool result = FHE.and(FHE.and(hasKyc, notBlacklisted), isFromAllowedCountry);\\n\\n // Grant permissions\\n FHE.allowThis(result);\\n FHE.allow(result, msg.sender);\\n\\n emit ComplianceChecked(user);\\n\\n return result;\\n }\\n\\n /**\\n * @notice Get the last compliance check result for a user\\n * @dev Call checkCompliance first to compute and store the result\\n * @param user Address to get result for\\n * @return Encrypted boolean result\\n */\\n function getComplianceResult(address user) external view returns (ebool) {\\n ebool result = complianceResults[user];\\n if (!FHE.isSenderAllowed(result)) revert AccessProhibited();\\n return result;\\n }\\n\\n /**\\n * @notice Check if compliance result exists for user\\n * @param user Address to check\\n * @return Whether a cached result exists\\n */\\n function hasComplianceResult(address user) external view returns (bool) {\\n return FHE.isInitialized(complianceResults[user]);\\n }\\n}\\n\",\"keccak256\":\"0xa73bc6a29ddda6bd2feb3718cbceb65b4802022784a49e829b37a8e49d0c87bf\",\"license\":\"MIT\"},\"contracts/interfaces/IIdentityRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.27;\\n\\nimport {euint8, euint16, ebool, externalEuint8, externalEuint16, externalEbool} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\n\\n/**\\n * @title IIdentityRegistry\\n * @author Gustavo Valverde\\n * @notice Interface for the IdentityRegistry contract\\n * @dev Part of zentity-fhevm-contracts - Builder Track\\n *\\n * @custom:category identity\\n * @custom:concept Interface for encrypted identity storage and verification\\n * @custom:difficulty intermediate\\n */\\ninterface IIdentityRegistry {\\n // ============ Events ============\\n\\n /// @notice Emitted when a new registrar is authorized\\n /// @param registrar Address of the authorized registrar\\n event RegistrarAdded(address indexed registrar);\\n\\n /// @notice Emitted when a registrar's authorization is revoked\\n /// @param registrar Address of the removed registrar\\n event RegistrarRemoved(address indexed registrar);\\n\\n /// @notice Emitted when an identity is attested on-chain\\n /// @param user Address of the attested user\\n /// @param registrar Address of the registrar who performed attestation\\n event IdentityAttested(address indexed user, address indexed registrar);\\n\\n /// @notice Emitted when an identity attestation is revoked\\n /// @param user Address whose attestation was revoked\\n event IdentityRevoked(address indexed user);\\n\\n /// @notice Emitted when a user grants access to their encrypted data\\n /// @param user Address of the user granting access\\n /// @param grantee Address receiving access permission\\n event AccessGranted(address indexed user, address indexed grantee);\\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\\n /// @notice Thrown when caller is not the pending owner\\n error OnlyPendingOwner();\\n\\n /// @notice Thrown when new owner is the zero address\\n error InvalidOwner();\\n\\n /// @notice Thrown when caller is not an authorized registrar\\n error OnlyRegistrar();\\n\\n /// @notice Thrown when querying a user without attestation\\n error NotAttested();\\n\\n /// @notice Thrown when attempting to attest an already-attested user\\n error AlreadyAttested();\\n\\n // ============ Registrar Management ============\\n\\n /// @notice Add a new authorized registrar\\n /// @param registrar Address to authorize as registrar\\n function addRegistrar(address registrar) external;\\n\\n /// @notice Remove an authorized registrar\\n /// @param registrar Address to remove from registrars\\n function removeRegistrar(address registrar) external;\\n\\n // ============ Identity Attestation ============\\n\\n /// @notice Attest a user's encrypted identity data on-chain\\n /// @param user Address of the user being attested\\n /// @param encBirthYearOffset Encrypted birth year offset (years since 1900)\\n /// @param encCountryCode Encrypted ISO 3166-1 numeric country code\\n /// @param encKycLevel Encrypted KYC verification level (0-3)\\n /// @param encIsBlacklisted Encrypted blacklist status\\n /// @param inputProof FHE proof for encrypted inputs\\n function attestIdentity(\\n address user,\\n externalEuint8 encBirthYearOffset,\\n externalEuint16 encCountryCode,\\n externalEuint8 encKycLevel,\\n externalEbool encIsBlacklisted,\\n bytes calldata inputProof\\n ) external;\\n\\n /// @notice Revoke a user's identity attestation\\n /// @param user Address of the user to revoke\\n function revokeIdentity(address user) external;\\n\\n // ============ Encrypted Queries ============\\n\\n /// @notice Get user's encrypted birth year offset\\n /// @param user Address of the user\\n /// @return Encrypted birth year offset (years since 1900)\\n function getBirthYearOffset(address user) external view returns (euint8);\\n\\n /// @notice Get user's encrypted country code\\n /// @param user Address of the user\\n /// @return Encrypted ISO 3166-1 numeric country code\\n function getCountryCode(address user) external view returns (euint16);\\n\\n /// @notice Get user's encrypted KYC level\\n /// @param user Address of the user\\n /// @return Encrypted KYC verification level (0-3)\\n function getKycLevel(address user) external view returns (euint8);\\n\\n /// @notice Get user's encrypted blacklist status\\n /// @param user Address of the user\\n /// @return Encrypted blacklist status (true if blacklisted)\\n function getBlacklistStatus(address user) external view returns (ebool);\\n\\n // ============ Verification Helpers ============\\n\\n /// @notice Check if user has minimum KYC level (encrypted comparison)\\n /// @param user Address of the user\\n /// @param minLevel Minimum KYC level required\\n /// @return Encrypted boolean result of comparison\\n function hasMinKycLevel(address user, uint8 minLevel) external returns (ebool);\\n\\n /// @notice Check if user is from a specific country (encrypted comparison)\\n /// @param user Address of the user\\n /// @param country ISO 3166-1 numeric country code to check\\n /// @return Encrypted boolean result of comparison\\n function isFromCountry(address user, uint16 country) external returns (ebool);\\n\\n /// @notice Check if user is not blacklisted (encrypted)\\n /// @param user Address of the user\\n /// @return Encrypted boolean (true if NOT blacklisted)\\n function isNotBlacklisted(address user) external returns (ebool);\\n\\n // ============ Access Control ============\\n\\n /// @notice Grant a contract access to caller's encrypted identity data\\n /// @param grantee Address to grant access to\\n function grantAccessTo(address grantee) external;\\n\\n /// @notice Check if a user has been attested\\n /// @param user Address of the user\\n /// @return True if user has valid attestation\\n function isAttested(address user) external view returns (bool);\\n\\n // ============ Public State ============\\n\\n /// @notice Get the contract owner address\\n /// @return Owner address\\n function owner() external view returns (address);\\n\\n /// @notice Get the pending owner address\\n /// @return Pending owner address\\n function pendingOwner() external view returns (address);\\n\\n /// @notice Initiate transfer of contract ownership\\n /// @param newOwner Address that can accept ownership\\n function transferOwnership(address newOwner) external;\\n\\n /// @notice Accept ownership transfer\\n function acceptOwnership() external;\\n\\n /// @notice Check if an address is an authorized registrar\\n /// @param registrar Address to check\\n /// @return True if address is authorized registrar\\n function registrars(address registrar) external view returns (bool);\\n\\n /// @notice Get the timestamp when a user was attested\\n /// @param user Address of the user\\n /// @return Unix timestamp of attestation (0 if not attested)\\n function attestationTimestamp(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xdeac12c508652c58682f8552a6f7687da379e94f887ab34b5685134daa1f3124\",\"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}",
378
+ "bytecode": "0x60a060405234801561000f575f5ffd5b5060405161129b38038061129b83398101604081905261002e916102ba565b6100e261003961014b565b80517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e464970080546001600160a01b03199081166001600160a01b039384161790915560208301517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497018054831691841691909117905560408301517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497028054909216921691909117905550565b6001600160a01b03821661010957604051630e048e7160e41b815260040160405180910390fd5b6001600160a01b039091166080525f80546001600160a01b031916331790556001805460ff909216600160a01b0260ff60a01b19909216919091179055610302565b604080516060810182525f8082526020820181905291810191909152466001036101a4575060408051606080820183525f8083526020808401829052928401819052835191820184528082529181018290529182015290565b4662aa36a703610223575060408051606080820183525f8083526020808401829052928401528251908101835273f0ffdc93b7e186bc2f8cb3daa75d86d1930a433d81527392c920834ec8941d2c77d188936e1f7a6f49c1279181019190915273be0e383937d564d7ff0bc3b46c51f0bf8d5c311a9181019190915290565b46617a69036102a1575060408051606080820183525f808352602080840182905292840152825190810183527350157cffd6bbfa2dece204a89ec419c23ef5755d815273e3a9105a3a932253a70f126eb1e3b589c643dd249181019190915273be0e383937d564d7ff0bc3b46c51f0bf8d5c311a9181019190915290565b6040516373cac13b60e01b815260040160405180910390fd5b5f5f604083850312156102cb575f5ffd5b82516001600160a01b03811681146102e1575f5ffd5b602084015190925060ff811681146102f7575f5ffd5b809150509250929050565b608051610f5161034a5f395f818160ee01528181610329015281816103f20152818161048001528181610518015281816106560152818161073901526107c70152610f515ff3fe608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c806379ba509711610088578063b4d7ed3b11610063578063b4d7ed3b146101f0578063e30c397814610216578063e451a1b414610229578063f2fde38b1461023c575f5ffd5b806379ba5097146101ce5780638927b030146101d65780638da5cb5b146101de575f5ffd5b80632c289dcf116100c35780632c289dcf14610163578063454bbd2914610176578063536fff6c14610189578063714d3178146101bb575f5ffd5b8063134e18f4146100e95780631cf794b81461012d57806322005b5e14610142575b5f5ffd5b6101107f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61014061013b366004610dd0565b61024f565b005b610155610150366004610e0b565b6102c2565b604051908152602001610124565b610155610171366004610e46565b6105ef565b610140610184366004610e6f565b6108ad565b6101ab610197366004610e46565b60036020525f908152604090205460ff1681565b6040519015158152602001610124565b6101ab6101c9366004610e46565b610935565b610140610956565b6101556109da565b5f54610110906001600160a01b031681565b60015461020490600160a01b900460ff1681565b60405160ff9091168152602001610124565b600154610110906001600160a01b031681565b610155610237366004610e46565b6109e8565b61014061024a366004610e46565b610a26565b5f546001600160a01b0316331461027957604051635fc483c560e01b815260040160405180910390fd5b6001805460ff60a01b1916600160a01b60ff8416908102919091179091556040517f4112c9bab84e64484a432251785f83b12087c4e24f7234af674069ee9e94b549905f90a250565b5f82336001600160a01b038216148015906102ec5750335f9081526003602052604090205460ff16155b1561030a5760405163c183bcef60e01b815260040160405180910390fd5b604051631e11d7dd60e11b81526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690633c23afba90602401602060405180830381865afa15801561036e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103929190610e99565b6103be575f6103a05f610ac7565b90506103ab81610ae2565b506103b68133610af1565b5091506105e8565b600154604051632afc1eeb60e01b81526001600160a01b038681166004830152600160a01b90920460ff1660248201525f917f00000000000000000000000000000000000000000000000000000000000000001690632afc1eeb906044016020604051808303815f875af1158015610438573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045c9190610eb4565b60405163b745e8b160e01b81526001600160a01b0387811660048301529192505f917f0000000000000000000000000000000000000000000000000000000000000000169063b745e8b1906024016020604051808303815f875af11580156104c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ea9190610eb4565b6040516391b4975560e01b81526001600160a01b03888116600483015261ffff881660248301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906391b49755906044016020604051808303815f875af115801561055e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105829190610eb4565b90505f6105986105928585610b03565b83610b03565b90506105a381610ae2565b506105ae8133610af1565b506040516001600160a01b038916907f296fb6ae07b0cc29ce12d17d682365452ebd827f6f17a1ff7478ef0a1edae665905f90a294505050505b5092915050565b5f81336001600160a01b038216148015906106195750335f9081526003602052604090205460ff16155b156106375760405163c183bcef60e01b815260040160405180910390fd5b604051631e11d7dd60e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690633c23afba90602401602060405180830381865afa15801561069b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bf9190610e99565b610705575f6106cd5f610ac7565b90506106d881610ae2565b506106e38133610af1565b506001600160a01b0384165f90815260026020526040902081905591506108a7565b600154604051632afc1eeb60e01b81526001600160a01b038581166004830152600160a01b90920460ff1660248201525f917f00000000000000000000000000000000000000000000000000000000000000001690632afc1eeb906044016020604051808303815f875af115801561077f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a39190610eb4565b60405163b745e8b160e01b81526001600160a01b0386811660048301529192505f917f0000000000000000000000000000000000000000000000000000000000000000169063b745e8b1906024016020604051808303815f875af115801561080d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108319190610eb4565b90505f61083e8383610b03565b6001600160a01b0387165f908152600260205260409020819055905061086381610ae2565b5061086e8133610af1565b506040516001600160a01b038716907f296fb6ae07b0cc29ce12d17d682365452ebd827f6f17a1ff7478ef0a1edae665905f90a2935050505b50919050565b5f546001600160a01b031633146108d757604051635fc483c560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260036020908152604091829020805460ff191685151590811790915591519182527fad857fa38c9319cb80848f1ef2f924383b90297eb5d71755738ff037d100faa1910160405180910390a25050565b6001600160a01b0381165f9081526002602052604081205415155b92915050565b6001546001600160a01b03163314610981576040516303c25d1960e61b815260040160405180910390fd5b5f8054600180546001600160a01b038082166001600160a01b031980861682178755909216909255604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f6109e3610b38565b905090565b6001600160a01b0381165f90815260026020526040812054610a0981610b6c565b61095057604051631a6bd1fd60e01b815260040160405180910390fd5b5f546001600160a01b03163314610a5057604051635fc483c560e01b815260040160405180910390fd5b6001600160a01b038116610a77576040516349e27cff60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a350565b5f61095082610ad6575f610ad9565b60015b60ff165f610b77565b5f610aed8230610c21565b5090565b5f610afc8383610c21565b5090919050565b5f82610b1557610b125f610ac7565b92505b81610b2657610b235f610ac7565b91505b610b3183835f610c97565b9392505050565b5f46600103610b475750600190565b4662aa36a703610b58575061271190565b46617a6903610b6757505f1990565b505f90565b5f6109508233610d4c565b7f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e464970154604051639cd07acb60e01b81525f915f516020610efc5f395f51905f52916001600160a01b0390911690639cd07acb90610bd99087908790600401610ecb565b6020604051808303815f875af1158015610bf5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c199190610eb4565b949350505050565b5f5f516020610efc5f395f51905f528054604051635ca4b5b160e11b8152600481018690526001600160a01b03858116602483015292935091169063b9496b62906044015f604051808303815f87803b158015610c7c575f5ffd5b505af1158015610c8e573d5f5f3e3d5ffd5b50505050505050565b5f5f8215610caa5750600160f81b610cad565b505f5b5f5f516020610efc5f395f51905f52600181015460405163d99882d560e01b815260048101899052602481018890526001600160f81b0319851660448201529192506001600160a01b03169063d99882d5906064016020604051808303815f875af1158015610d1e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d429190610eb4565b9695505050505050565b5f805f516020610efc5f395f51905f5280546040516382027b6d60e01b8152600481018790526001600160a01b0386811660248301529293509116906382027b6d90604401602060405180830381865afa158015610dac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c199190610e99565b5f60208284031215610de0575f5ffd5b813560ff81168114610b31575f5ffd5b80356001600160a01b0381168114610e06575f5ffd5b919050565b5f5f60408385031215610e1c575f5ffd5b610e2583610df0565b9150602083013561ffff81168114610e3b575f5ffd5b809150509250929050565b5f60208284031215610e56575f5ffd5b610b3182610df0565b8015158114610e6c575f5ffd5b50565b5f5f60408385031215610e80575f5ffd5b610e8983610df0565b91506020830135610e3b81610e5f565b5f60208284031215610ea9575f5ffd5b8151610b3181610e5f565b5f60208284031215610ec4575f5ffd5b5051919050565b8281526040810160548310610eee57634e487b7160e01b5f52602160045260245ffd5b826020830152939250505056fe9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700a264697066735822122094343589de20d17b13a80d17c98ef82cdb9d2f07f22db36b0c55a24890930aa664736f6c634300081b0033",
379
+ "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c806379ba509711610088578063b4d7ed3b11610063578063b4d7ed3b146101f0578063e30c397814610216578063e451a1b414610229578063f2fde38b1461023c575f5ffd5b806379ba5097146101ce5780638927b030146101d65780638da5cb5b146101de575f5ffd5b80632c289dcf116100c35780632c289dcf14610163578063454bbd2914610176578063536fff6c14610189578063714d3178146101bb575f5ffd5b8063134e18f4146100e95780631cf794b81461012d57806322005b5e14610142575b5f5ffd5b6101107f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61014061013b366004610dd0565b61024f565b005b610155610150366004610e0b565b6102c2565b604051908152602001610124565b610155610171366004610e46565b6105ef565b610140610184366004610e6f565b6108ad565b6101ab610197366004610e46565b60036020525f908152604090205460ff1681565b6040519015158152602001610124565b6101ab6101c9366004610e46565b610935565b610140610956565b6101556109da565b5f54610110906001600160a01b031681565b60015461020490600160a01b900460ff1681565b60405160ff9091168152602001610124565b600154610110906001600160a01b031681565b610155610237366004610e46565b6109e8565b61014061024a366004610e46565b610a26565b5f546001600160a01b0316331461027957604051635fc483c560e01b815260040160405180910390fd5b6001805460ff60a01b1916600160a01b60ff8416908102919091179091556040517f4112c9bab84e64484a432251785f83b12087c4e24f7234af674069ee9e94b549905f90a250565b5f82336001600160a01b038216148015906102ec5750335f9081526003602052604090205460ff16155b1561030a5760405163c183bcef60e01b815260040160405180910390fd5b604051631e11d7dd60e11b81526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690633c23afba90602401602060405180830381865afa15801561036e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103929190610e99565b6103be575f6103a05f610ac7565b90506103ab81610ae2565b506103b68133610af1565b5091506105e8565b600154604051632afc1eeb60e01b81526001600160a01b038681166004830152600160a01b90920460ff1660248201525f917f00000000000000000000000000000000000000000000000000000000000000001690632afc1eeb906044016020604051808303815f875af1158015610438573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045c9190610eb4565b60405163b745e8b160e01b81526001600160a01b0387811660048301529192505f917f0000000000000000000000000000000000000000000000000000000000000000169063b745e8b1906024016020604051808303815f875af11580156104c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104ea9190610eb4565b6040516391b4975560e01b81526001600160a01b03888116600483015261ffff881660248301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906391b49755906044016020604051808303815f875af115801561055e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105829190610eb4565b90505f6105986105928585610b03565b83610b03565b90506105a381610ae2565b506105ae8133610af1565b506040516001600160a01b038916907f296fb6ae07b0cc29ce12d17d682365452ebd827f6f17a1ff7478ef0a1edae665905f90a294505050505b5092915050565b5f81336001600160a01b038216148015906106195750335f9081526003602052604090205460ff16155b156106375760405163c183bcef60e01b815260040160405180910390fd5b604051631e11d7dd60e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690633c23afba90602401602060405180830381865afa15801561069b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bf9190610e99565b610705575f6106cd5f610ac7565b90506106d881610ae2565b506106e38133610af1565b506001600160a01b0384165f90815260026020526040902081905591506108a7565b600154604051632afc1eeb60e01b81526001600160a01b038581166004830152600160a01b90920460ff1660248201525f917f00000000000000000000000000000000000000000000000000000000000000001690632afc1eeb906044016020604051808303815f875af115801561077f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a39190610eb4565b60405163b745e8b160e01b81526001600160a01b0386811660048301529192505f917f0000000000000000000000000000000000000000000000000000000000000000169063b745e8b1906024016020604051808303815f875af115801561080d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108319190610eb4565b90505f61083e8383610b03565b6001600160a01b0387165f908152600260205260409020819055905061086381610ae2565b5061086e8133610af1565b506040516001600160a01b038716907f296fb6ae07b0cc29ce12d17d682365452ebd827f6f17a1ff7478ef0a1edae665905f90a2935050505b50919050565b5f546001600160a01b031633146108d757604051635fc483c560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260036020908152604091829020805460ff191685151590811790915591519182527fad857fa38c9319cb80848f1ef2f924383b90297eb5d71755738ff037d100faa1910160405180910390a25050565b6001600160a01b0381165f9081526002602052604081205415155b92915050565b6001546001600160a01b03163314610981576040516303c25d1960e61b815260040160405180910390fd5b5f8054600180546001600160a01b038082166001600160a01b031980861682178755909216909255604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f6109e3610b38565b905090565b6001600160a01b0381165f90815260026020526040812054610a0981610b6c565b61095057604051631a6bd1fd60e01b815260040160405180910390fd5b5f546001600160a01b03163314610a5057604051635fc483c560e01b815260040160405180910390fd5b6001600160a01b038116610a77576040516349e27cff60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a350565b5f61095082610ad6575f610ad9565b60015b60ff165f610b77565b5f610aed8230610c21565b5090565b5f610afc8383610c21565b5090919050565b5f82610b1557610b125f610ac7565b92505b81610b2657610b235f610ac7565b91505b610b3183835f610c97565b9392505050565b5f46600103610b475750600190565b4662aa36a703610b58575061271190565b46617a6903610b6757505f1990565b505f90565b5f6109508233610d4c565b7f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e464970154604051639cd07acb60e01b81525f915f516020610efc5f395f51905f52916001600160a01b0390911690639cd07acb90610bd99087908790600401610ecb565b6020604051808303815f875af1158015610bf5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c199190610eb4565b949350505050565b5f5f516020610efc5f395f51905f528054604051635ca4b5b160e11b8152600481018690526001600160a01b03858116602483015292935091169063b9496b62906044015f604051808303815f87803b158015610c7c575f5ffd5b505af1158015610c8e573d5f5f3e3d5ffd5b50505050505050565b5f5f8215610caa5750600160f81b610cad565b505f5b5f5f516020610efc5f395f51905f52600181015460405163d99882d560e01b815260048101899052602481018890526001600160f81b0319851660448201529192506001600160a01b03169063d99882d5906064016020604051808303815f875af1158015610d1e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d429190610eb4565b9695505050505050565b5f805f516020610efc5f395f51905f5280546040516382027b6d60e01b8152600481018790526001600160a01b0386811660248301529293509116906382027b6d90604401602060405180830381865afa158015610dac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c199190610e99565b5f60208284031215610de0575f5ffd5b813560ff81168114610b31575f5ffd5b80356001600160a01b0381168114610e06575f5ffd5b919050565b5f5f60408385031215610e1c575f5ffd5b610e2583610df0565b9150602083013561ffff81168114610e3b575f5ffd5b809150509250929050565b5f60208284031215610e56575f5ffd5b610b3182610df0565b8015158114610e6c575f5ffd5b50565b5f5f60408385031215610e80575f5ffd5b610e8983610df0565b91506020830135610e3b81610e5f565b5f60208284031215610ea9575f5ffd5b8151610b3181610e5f565b5f60208284031215610ec4575f5ffd5b5051919050565b8281526040810160548310610eee57634e487b7160e01b5f52602160045260245ffd5b826020830152939250505056fe9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700a264697066735822122094343589de20d17b13a80d17c98ef82cdb9d2f07f22db36b0c55a24890930aa664736f6c634300081b0033",
380
+ "devdoc": {
381
+ "author": "Gustavo Valverde",
382
+ "custom:category": "compliance",
383
+ "custom:concept": "Combining encrypted compliance checks with FHE.and()",
384
+ "custom:difficulty": "intermediate This contract aggregates compliance checks from IdentityRegistry and returns encrypted boolean results. Consumer contracts (like CompliantERC20) can use these results with FHE.select() for branch-free logic. Key patterns demonstrated: 1. FHE.and() for combining multiple encrypted conditions 2. Integration with IdentityRegistry 3. Configurable compliance parameters 4. Encrypted result caching",
385
+ "details": "Part of zentity-fhevm-contracts - Builder Track",
386
+ "events": {
387
+ "AuthorizedCallerUpdated(address,bool)": {
388
+ "params": {
389
+ "allowed": "Whether the caller is allowed",
390
+ "caller": "Address being authorized or revoked"
391
+ }
392
+ },
393
+ "ComplianceChecked(address)": {
394
+ "params": {
395
+ "user": "Address of the user whose compliance was checked"
396
+ }
397
+ },
398
+ "MinKycLevelUpdated(uint8)": {
399
+ "params": {
400
+ "newLevel": "The new minimum KYC level required for compliance"
401
+ }
402
+ },
403
+ "OwnershipTransferStarted(address,address)": {
404
+ "params": {
405
+ "currentOwner": "Current owner address",
406
+ "pendingOwner": "Address that can accept ownership"
407
+ }
408
+ },
409
+ "OwnershipTransferred(address,address)": {
410
+ "params": {
411
+ "newOwner": "New owner address",
412
+ "previousOwner": "Previous owner address"
413
+ }
414
+ }
415
+ },
416
+ "kind": "dev",
417
+ "methods": {
418
+ "checkCompliance(address)": {
419
+ "details": "Combines: hasMinKycLevel AND isNotBlacklisted",
420
+ "params": {
421
+ "user": "Address to check"
422
+ },
423
+ "returns": {
424
+ "_0": "Encrypted boolean indicating compliance status Note: This function makes external calls to IdentityRegistry which computes and stores verification results. The combined result is stored locally for later retrieval."
425
+ }
426
+ },
427
+ "checkComplianceWithCountry(address,uint16)": {
428
+ "params": {
429
+ "allowedCountry": "Country code that is allowed",
430
+ "user": "Address to check"
431
+ },
432
+ "returns": {
433
+ "_0": "Encrypted boolean indicating compliance status"
434
+ }
435
+ },
436
+ "constructor": {
437
+ "params": {
438
+ "initialMinKycLevel": "Initial minimum KYC level (default: 1)",
439
+ "registry": "Address of the IdentityRegistry contract"
440
+ }
441
+ },
442
+ "getComplianceResult(address)": {
443
+ "details": "Call checkCompliance first to compute and store the result",
444
+ "params": {
445
+ "user": "Address to get result for"
446
+ },
447
+ "returns": {
448
+ "_0": "Encrypted boolean result"
449
+ }
450
+ },
451
+ "hasComplianceResult(address)": {
452
+ "params": {
453
+ "user": "Address to check"
454
+ },
455
+ "returns": {
456
+ "_0": "Whether a cached result exists"
457
+ }
458
+ },
459
+ "setAuthorizedCaller(address,bool)": {
460
+ "params": {
461
+ "allowed": "Whether the caller is allowed",
462
+ "caller": "Address to update"
463
+ }
464
+ },
465
+ "setMinKycLevel(uint8)": {
466
+ "params": {
467
+ "newLevel": "New minimum level"
468
+ }
469
+ },
470
+ "transferOwnership(address)": {
471
+ "params": {
472
+ "newOwner": "Address that can accept ownership"
473
+ }
474
+ }
475
+ },
476
+ "title": "ComplianceRules",
477
+ "version": 1
478
+ },
479
+ "userdoc": {
480
+ "errors": {
481
+ "AccessProhibited()": [
482
+ {
483
+ "notice": "Thrown when caller lacks permission for encrypted result"
484
+ }
485
+ ],
486
+ "CallerNotAuthorized()": [
487
+ {
488
+ "notice": "Thrown when caller is not authorized to check another user"
489
+ }
490
+ ],
491
+ "InvalidOwner()": [
492
+ {
493
+ "notice": "Thrown when new owner is the zero address"
494
+ }
495
+ ],
496
+ "OnlyOwner()": [
497
+ {
498
+ "notice": "Thrown when caller is not the contract owner"
499
+ }
500
+ ],
501
+ "OnlyPendingOwner()": [
502
+ {
503
+ "notice": "Thrown when caller is not the pending owner"
504
+ }
505
+ ],
506
+ "RegistryNotSet()": [
507
+ {
508
+ "notice": "Thrown when registry address is zero"
509
+ }
510
+ ],
511
+ "ZamaProtocolUnsupported()": [
512
+ {
513
+ "notice": "Returned if the Zama protocol is not supported on the current chain"
514
+ }
515
+ ]
516
+ },
517
+ "events": {
518
+ "AuthorizedCallerUpdated(address,bool)": {
519
+ "notice": "Emitted when a caller's authorization is updated"
520
+ },
521
+ "ComplianceChecked(address)": {
522
+ "notice": "Emitted when a compliance check is performed for a user"
523
+ },
524
+ "MinKycLevelUpdated(uint8)": {
525
+ "notice": "Emitted when the minimum KYC level requirement is updated"
526
+ },
527
+ "OwnershipTransferStarted(address,address)": {
528
+ "notice": "Emitted when ownership transfer is initiated"
529
+ },
530
+ "OwnershipTransferred(address,address)": {
531
+ "notice": "Emitted when ownership transfer is completed"
532
+ }
533
+ },
534
+ "kind": "user",
535
+ "methods": {
536
+ "acceptOwnership()": {
537
+ "notice": "Accept ownership transfer"
538
+ },
539
+ "authorizedCallers(address)": {
540
+ "notice": "Authorized callers that can request compliance checks for others"
541
+ },
542
+ "checkCompliance(address)": {
543
+ "notice": "Check if user passes all compliance requirements"
544
+ },
545
+ "checkComplianceWithCountry(address,uint16)": {
546
+ "notice": "Check compliance with additional country restriction"
547
+ },
548
+ "constructor": {
549
+ "notice": "Initialize with identity registry reference"
550
+ },
551
+ "getComplianceResult(address)": {
552
+ "notice": "Get the last compliance check result for a user"
553
+ },
554
+ "hasComplianceResult(address)": {
555
+ "notice": "Check if compliance result exists for user"
556
+ },
557
+ "identityRegistry()": {
558
+ "notice": "Reference to the identity registry"
559
+ },
560
+ "minKycLevel()": {
561
+ "notice": "Minimum KYC level required for compliance"
562
+ },
563
+ "owner()": {
564
+ "notice": "Owner/admin"
565
+ },
566
+ "pendingOwner()": {
567
+ "notice": "Pending owner for two-step ownership transfer"
568
+ },
569
+ "setAuthorizedCaller(address,bool)": {
570
+ "notice": "Allow or revoke a caller to check compliance for other users"
571
+ },
572
+ "setMinKycLevel(uint8)": {
573
+ "notice": "Update minimum KYC level"
574
+ },
575
+ "transferOwnership(address)": {
576
+ "notice": "Initiate transfer of contract ownership"
577
+ }
578
+ },
579
+ "notice": "Combines multiple compliance checks using FHE operations",
580
+ "version": 1
581
+ },
582
+ "storageLayout": {
583
+ "storage": [
584
+ {
585
+ "astId": 39190,
586
+ "contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
587
+ "label": "owner",
588
+ "offset": 0,
589
+ "slot": "0",
590
+ "type": "t_address"
591
+ },
592
+ {
593
+ "astId": 39193,
594
+ "contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
595
+ "label": "pendingOwner",
596
+ "offset": 0,
597
+ "slot": "1",
598
+ "type": "t_address"
599
+ },
600
+ {
601
+ "astId": 39196,
602
+ "contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
603
+ "label": "minKycLevel",
604
+ "offset": 20,
605
+ "slot": "1",
606
+ "type": "t_uint8"
607
+ },
608
+ {
609
+ "astId": 39202,
610
+ "contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
611
+ "label": "complianceResults",
612
+ "offset": 0,
613
+ "slot": "2",
614
+ "type": "t_mapping(t_address,t_userDefinedValueType(ebool)41712)"
615
+ },
616
+ {
617
+ "astId": 39207,
618
+ "contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
619
+ "label": "authorizedCallers",
620
+ "offset": 0,
621
+ "slot": "3",
622
+ "type": "t_mapping(t_address,t_bool)"
623
+ }
624
+ ],
625
+ "types": {
626
+ "t_address": {
627
+ "encoding": "inplace",
628
+ "label": "address",
629
+ "numberOfBytes": "20"
630
+ },
631
+ "t_bool": {
632
+ "encoding": "inplace",
633
+ "label": "bool",
634
+ "numberOfBytes": "1"
635
+ },
636
+ "t_mapping(t_address,t_bool)": {
637
+ "encoding": "mapping",
638
+ "key": "t_address",
639
+ "label": "mapping(address => bool)",
640
+ "numberOfBytes": "32",
641
+ "value": "t_bool"
642
+ },
643
+ "t_mapping(t_address,t_userDefinedValueType(ebool)41712)": {
644
+ "encoding": "mapping",
645
+ "key": "t_address",
646
+ "label": "mapping(address => ebool)",
647
+ "numberOfBytes": "32",
648
+ "value": "t_userDefinedValueType(ebool)41712"
649
+ },
650
+ "t_uint8": {
651
+ "encoding": "inplace",
652
+ "label": "uint8",
653
+ "numberOfBytes": "1"
654
+ },
655
+ "t_userDefinedValueType(ebool)41712": {
656
+ "encoding": "inplace",
657
+ "label": "ebool",
658
+ "numberOfBytes": "32"
659
+ }
660
+ }
661
+ }
662
+ }