@zkpassport/sdk 0.9.1 → 0.10.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.
@@ -1,2541 +0,0 @@
1
- import {
2
- DEFAULT_VALIDITY
3
- } from "./chunk-VJZDMGW3.js";
4
-
5
- // src/solidity-verifier.ts
6
- import {
7
- formatBoundData,
8
- getCommittedInputCount,
9
- getNumberOfPublicInputs,
10
- getParamCommitmentsFromOuterProof,
11
- getProofData,
12
- numberToBytesBE,
13
- ProofType,
14
- rightPadArrayWithZeros
15
- } from "@zkpassport/utils";
16
- import { sha256 } from "@noble/hashes/sha2";
17
- import { bytesToHex, hexToBytes } from "@noble/hashes/utils";
18
-
19
- // src/assets/abi/ZKPassportVerifier.json
20
- var ZKPassportVerifier_default = {
21
- abi: [
22
- {
23
- type: "constructor",
24
- inputs: [{ name: "_rootRegistry", type: "address", internalType: "address" }],
25
- stateMutability: "nonpayable"
26
- },
27
- {
28
- type: "function",
29
- name: "CERTIFICATE_REGISTRY_ID",
30
- inputs: [],
31
- outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
32
- stateMutability: "view"
33
- },
34
- {
35
- type: "function",
36
- name: "CIRCUIT_REGISTRY_ID",
37
- inputs: [],
38
- outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
39
- stateMutability: "view"
40
- },
41
- {
42
- type: "function",
43
- name: "SANCTIONS_REGISTRY_ID",
44
- inputs: [],
45
- outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
46
- stateMutability: "view"
47
- },
48
- {
49
- type: "function",
50
- name: "addVerifiers",
51
- inputs: [
52
- { name: "vkeyHashes", type: "bytes32[]", internalType: "bytes32[]" },
53
- { name: "verifiers", type: "address[]", internalType: "address[]" }
54
- ],
55
- outputs: [],
56
- stateMutability: "nonpayable"
57
- },
58
- {
59
- type: "function",
60
- name: "admin",
61
- inputs: [],
62
- outputs: [{ name: "", type: "address", internalType: "address" }],
63
- stateMutability: "view"
64
- },
65
- {
66
- type: "function",
67
- name: "enforceSanctionsRoot",
68
- inputs: [
69
- {
70
- name: "commitments",
71
- type: "tuple",
72
- internalType: "struct Commitments",
73
- components: [
74
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
75
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
76
- ]
77
- }
78
- ],
79
- outputs: [],
80
- stateMutability: "view"
81
- },
82
- {
83
- type: "function",
84
- name: "getBoundData",
85
- inputs: [
86
- {
87
- name: "commitments",
88
- type: "tuple",
89
- internalType: "struct Commitments",
90
- components: [
91
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
92
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
93
- ]
94
- }
95
- ],
96
- outputs: [
97
- {
98
- name: "boundData",
99
- type: "tuple",
100
- internalType: "struct BoundData",
101
- components: [
102
- { name: "senderAddress", type: "address", internalType: "address" },
103
- { name: "chainId", type: "uint256", internalType: "uint256" },
104
- { name: "customData", type: "string", internalType: "string" }
105
- ]
106
- }
107
- ],
108
- stateMutability: "pure"
109
- },
110
- {
111
- type: "function",
112
- name: "getDisclosedData",
113
- inputs: [
114
- {
115
- name: "commitments",
116
- type: "tuple",
117
- internalType: "struct Commitments",
118
- components: [
119
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
120
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
121
- ]
122
- },
123
- { name: "isIDCard", type: "bool", internalType: "bool" }
124
- ],
125
- outputs: [
126
- {
127
- name: "disclosedData",
128
- type: "tuple",
129
- internalType: "struct DisclosedData",
130
- components: [
131
- { name: "name", type: "string", internalType: "string" },
132
- { name: "issuingCountry", type: "string", internalType: "string" },
133
- { name: "nationality", type: "string", internalType: "string" },
134
- { name: "gender", type: "string", internalType: "string" },
135
- { name: "birthDate", type: "string", internalType: "string" },
136
- { name: "expiryDate", type: "string", internalType: "string" },
137
- { name: "documentNumber", type: "string", internalType: "string" },
138
- { name: "documentType", type: "string", internalType: "string" }
139
- ]
140
- }
141
- ],
142
- stateMutability: "pure"
143
- },
144
- {
145
- type: "function",
146
- name: "isAgeAbove",
147
- inputs: [
148
- { name: "minAge", type: "uint8", internalType: "uint8" },
149
- {
150
- name: "commitments",
151
- type: "tuple",
152
- internalType: "struct Commitments",
153
- components: [
154
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
155
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
156
- ]
157
- },
158
- {
159
- name: "serviceConfig",
160
- type: "tuple",
161
- internalType: "struct ServiceConfig",
162
- components: [
163
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
164
- { name: "domain", type: "string", internalType: "string" },
165
- { name: "scope", type: "string", internalType: "string" },
166
- { name: "devMode", type: "bool", internalType: "bool" }
167
- ]
168
- }
169
- ],
170
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
171
- stateMutability: "view"
172
- },
173
- {
174
- type: "function",
175
- name: "isAgeAboveOrEqual",
176
- inputs: [
177
- { name: "minAge", type: "uint8", internalType: "uint8" },
178
- {
179
- name: "commitments",
180
- type: "tuple",
181
- internalType: "struct Commitments",
182
- components: [
183
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
184
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
185
- ]
186
- },
187
- {
188
- name: "serviceConfig",
189
- type: "tuple",
190
- internalType: "struct ServiceConfig",
191
- components: [
192
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
193
- { name: "domain", type: "string", internalType: "string" },
194
- { name: "scope", type: "string", internalType: "string" },
195
- { name: "devMode", type: "bool", internalType: "bool" }
196
- ]
197
- }
198
- ],
199
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
200
- stateMutability: "view"
201
- },
202
- {
203
- type: "function",
204
- name: "isAgeBelow",
205
- inputs: [
206
- { name: "maxAge", type: "uint8", internalType: "uint8" },
207
- {
208
- name: "commitments",
209
- type: "tuple",
210
- internalType: "struct Commitments",
211
- components: [
212
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
213
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
214
- ]
215
- },
216
- {
217
- name: "serviceConfig",
218
- type: "tuple",
219
- internalType: "struct ServiceConfig",
220
- components: [
221
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
222
- { name: "domain", type: "string", internalType: "string" },
223
- { name: "scope", type: "string", internalType: "string" },
224
- { name: "devMode", type: "bool", internalType: "bool" }
225
- ]
226
- }
227
- ],
228
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
229
- stateMutability: "view"
230
- },
231
- {
232
- type: "function",
233
- name: "isAgeBelowOrEqual",
234
- inputs: [
235
- { name: "maxAge", type: "uint8", internalType: "uint8" },
236
- {
237
- name: "commitments",
238
- type: "tuple",
239
- internalType: "struct Commitments",
240
- components: [
241
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
242
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
243
- ]
244
- },
245
- {
246
- name: "serviceConfig",
247
- type: "tuple",
248
- internalType: "struct ServiceConfig",
249
- components: [
250
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
251
- { name: "domain", type: "string", internalType: "string" },
252
- { name: "scope", type: "string", internalType: "string" },
253
- { name: "devMode", type: "bool", internalType: "bool" }
254
- ]
255
- }
256
- ],
257
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
258
- stateMutability: "view"
259
- },
260
- {
261
- type: "function",
262
- name: "isAgeBetween",
263
- inputs: [
264
- { name: "minAge", type: "uint8", internalType: "uint8" },
265
- { name: "maxAge", type: "uint8", internalType: "uint8" },
266
- {
267
- name: "commitments",
268
- type: "tuple",
269
- internalType: "struct Commitments",
270
- components: [
271
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
272
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
273
- ]
274
- },
275
- {
276
- name: "serviceConfig",
277
- type: "tuple",
278
- internalType: "struct ServiceConfig",
279
- components: [
280
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
281
- { name: "domain", type: "string", internalType: "string" },
282
- { name: "scope", type: "string", internalType: "string" },
283
- { name: "devMode", type: "bool", internalType: "bool" }
284
- ]
285
- }
286
- ],
287
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
288
- stateMutability: "view"
289
- },
290
- {
291
- type: "function",
292
- name: "isAgeEqual",
293
- inputs: [
294
- { name: "age", type: "uint8", internalType: "uint8" },
295
- {
296
- name: "commitments",
297
- type: "tuple",
298
- internalType: "struct Commitments",
299
- components: [
300
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
301
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
302
- ]
303
- },
304
- {
305
- name: "serviceConfig",
306
- type: "tuple",
307
- internalType: "struct ServiceConfig",
308
- components: [
309
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
310
- { name: "domain", type: "string", internalType: "string" },
311
- { name: "scope", type: "string", internalType: "string" },
312
- { name: "devMode", type: "bool", internalType: "bool" }
313
- ]
314
- }
315
- ],
316
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
317
- stateMutability: "view"
318
- },
319
- {
320
- type: "function",
321
- name: "isBirthdateAfter",
322
- inputs: [
323
- { name: "minDate", type: "uint256", internalType: "uint256" },
324
- {
325
- name: "commitments",
326
- type: "tuple",
327
- internalType: "struct Commitments",
328
- components: [
329
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
330
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
331
- ]
332
- },
333
- {
334
- name: "serviceConfig",
335
- type: "tuple",
336
- internalType: "struct ServiceConfig",
337
- components: [
338
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
339
- { name: "domain", type: "string", internalType: "string" },
340
- { name: "scope", type: "string", internalType: "string" },
341
- { name: "devMode", type: "bool", internalType: "bool" }
342
- ]
343
- }
344
- ],
345
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
346
- stateMutability: "view"
347
- },
348
- {
349
- type: "function",
350
- name: "isBirthdateAfterOrEqual",
351
- inputs: [
352
- { name: "minDate", type: "uint256", internalType: "uint256" },
353
- {
354
- name: "commitments",
355
- type: "tuple",
356
- internalType: "struct Commitments",
357
- components: [
358
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
359
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
360
- ]
361
- },
362
- {
363
- name: "serviceConfig",
364
- type: "tuple",
365
- internalType: "struct ServiceConfig",
366
- components: [
367
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
368
- { name: "domain", type: "string", internalType: "string" },
369
- { name: "scope", type: "string", internalType: "string" },
370
- { name: "devMode", type: "bool", internalType: "bool" }
371
- ]
372
- }
373
- ],
374
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
375
- stateMutability: "view"
376
- },
377
- {
378
- type: "function",
379
- name: "isBirthdateBefore",
380
- inputs: [
381
- { name: "maxDate", type: "uint256", internalType: "uint256" },
382
- {
383
- name: "commitments",
384
- type: "tuple",
385
- internalType: "struct Commitments",
386
- components: [
387
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
388
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
389
- ]
390
- },
391
- {
392
- name: "serviceConfig",
393
- type: "tuple",
394
- internalType: "struct ServiceConfig",
395
- components: [
396
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
397
- { name: "domain", type: "string", internalType: "string" },
398
- { name: "scope", type: "string", internalType: "string" },
399
- { name: "devMode", type: "bool", internalType: "bool" }
400
- ]
401
- }
402
- ],
403
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
404
- stateMutability: "view"
405
- },
406
- {
407
- type: "function",
408
- name: "isBirthdateBeforeOrEqual",
409
- inputs: [
410
- { name: "maxDate", type: "uint256", internalType: "uint256" },
411
- {
412
- name: "commitments",
413
- type: "tuple",
414
- internalType: "struct Commitments",
415
- components: [
416
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
417
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
418
- ]
419
- },
420
- {
421
- name: "serviceConfig",
422
- type: "tuple",
423
- internalType: "struct ServiceConfig",
424
- components: [
425
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
426
- { name: "domain", type: "string", internalType: "string" },
427
- { name: "scope", type: "string", internalType: "string" },
428
- { name: "devMode", type: "bool", internalType: "bool" }
429
- ]
430
- }
431
- ],
432
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
433
- stateMutability: "view"
434
- },
435
- {
436
- type: "function",
437
- name: "isBirthdateBetween",
438
- inputs: [
439
- { name: "minDate", type: "uint256", internalType: "uint256" },
440
- { name: "maxDate", type: "uint256", internalType: "uint256" },
441
- {
442
- name: "commitments",
443
- type: "tuple",
444
- internalType: "struct Commitments",
445
- components: [
446
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
447
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
448
- ]
449
- },
450
- {
451
- name: "serviceConfig",
452
- type: "tuple",
453
- internalType: "struct ServiceConfig",
454
- components: [
455
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
456
- { name: "domain", type: "string", internalType: "string" },
457
- { name: "scope", type: "string", internalType: "string" },
458
- { name: "devMode", type: "bool", internalType: "bool" }
459
- ]
460
- }
461
- ],
462
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
463
- stateMutability: "view"
464
- },
465
- {
466
- type: "function",
467
- name: "isBirthdateEqual",
468
- inputs: [
469
- { name: "date", type: "uint256", internalType: "uint256" },
470
- {
471
- name: "commitments",
472
- type: "tuple",
473
- internalType: "struct Commitments",
474
- components: [
475
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
476
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
477
- ]
478
- },
479
- {
480
- name: "serviceConfig",
481
- type: "tuple",
482
- internalType: "struct ServiceConfig",
483
- components: [
484
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
485
- { name: "domain", type: "string", internalType: "string" },
486
- { name: "scope", type: "string", internalType: "string" },
487
- { name: "devMode", type: "bool", internalType: "bool" }
488
- ]
489
- }
490
- ],
491
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
492
- stateMutability: "view"
493
- },
494
- {
495
- type: "function",
496
- name: "isExpiryDateAfter",
497
- inputs: [
498
- { name: "minDate", type: "uint256", internalType: "uint256" },
499
- {
500
- name: "commitments",
501
- type: "tuple",
502
- internalType: "struct Commitments",
503
- components: [
504
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
505
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
506
- ]
507
- },
508
- {
509
- name: "serviceConfig",
510
- type: "tuple",
511
- internalType: "struct ServiceConfig",
512
- components: [
513
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
514
- { name: "domain", type: "string", internalType: "string" },
515
- { name: "scope", type: "string", internalType: "string" },
516
- { name: "devMode", type: "bool", internalType: "bool" }
517
- ]
518
- }
519
- ],
520
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
521
- stateMutability: "view"
522
- },
523
- {
524
- type: "function",
525
- name: "isExpiryDateAfterOrEqual",
526
- inputs: [
527
- { name: "minDate", type: "uint256", internalType: "uint256" },
528
- {
529
- name: "commitments",
530
- type: "tuple",
531
- internalType: "struct Commitments",
532
- components: [
533
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
534
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
535
- ]
536
- },
537
- {
538
- name: "serviceConfig",
539
- type: "tuple",
540
- internalType: "struct ServiceConfig",
541
- components: [
542
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
543
- { name: "domain", type: "string", internalType: "string" },
544
- { name: "scope", type: "string", internalType: "string" },
545
- { name: "devMode", type: "bool", internalType: "bool" }
546
- ]
547
- }
548
- ],
549
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
550
- stateMutability: "view"
551
- },
552
- {
553
- type: "function",
554
- name: "isExpiryDateBefore",
555
- inputs: [
556
- { name: "maxDate", type: "uint256", internalType: "uint256" },
557
- {
558
- name: "commitments",
559
- type: "tuple",
560
- internalType: "struct Commitments",
561
- components: [
562
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
563
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
564
- ]
565
- },
566
- {
567
- name: "serviceConfig",
568
- type: "tuple",
569
- internalType: "struct ServiceConfig",
570
- components: [
571
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
572
- { name: "domain", type: "string", internalType: "string" },
573
- { name: "scope", type: "string", internalType: "string" },
574
- { name: "devMode", type: "bool", internalType: "bool" }
575
- ]
576
- }
577
- ],
578
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
579
- stateMutability: "view"
580
- },
581
- {
582
- type: "function",
583
- name: "isExpiryDateBeforeOrEqual",
584
- inputs: [
585
- { name: "maxDate", type: "uint256", internalType: "uint256" },
586
- {
587
- name: "commitments",
588
- type: "tuple",
589
- internalType: "struct Commitments",
590
- components: [
591
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
592
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
593
- ]
594
- },
595
- {
596
- name: "serviceConfig",
597
- type: "tuple",
598
- internalType: "struct ServiceConfig",
599
- components: [
600
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
601
- { name: "domain", type: "string", internalType: "string" },
602
- { name: "scope", type: "string", internalType: "string" },
603
- { name: "devMode", type: "bool", internalType: "bool" }
604
- ]
605
- }
606
- ],
607
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
608
- stateMutability: "view"
609
- },
610
- {
611
- type: "function",
612
- name: "isExpiryDateBetween",
613
- inputs: [
614
- { name: "minDate", type: "uint256", internalType: "uint256" },
615
- { name: "maxDate", type: "uint256", internalType: "uint256" },
616
- {
617
- name: "commitments",
618
- type: "tuple",
619
- internalType: "struct Commitments",
620
- components: [
621
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
622
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
623
- ]
624
- },
625
- {
626
- name: "serviceConfig",
627
- type: "tuple",
628
- internalType: "struct ServiceConfig",
629
- components: [
630
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
631
- { name: "domain", type: "string", internalType: "string" },
632
- { name: "scope", type: "string", internalType: "string" },
633
- { name: "devMode", type: "bool", internalType: "bool" }
634
- ]
635
- }
636
- ],
637
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
638
- stateMutability: "view"
639
- },
640
- {
641
- type: "function",
642
- name: "isExpiryDateEqual",
643
- inputs: [
644
- { name: "date", type: "uint256", internalType: "uint256" },
645
- {
646
- name: "commitments",
647
- type: "tuple",
648
- internalType: "struct Commitments",
649
- components: [
650
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
651
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
652
- ]
653
- },
654
- {
655
- name: "serviceConfig",
656
- type: "tuple",
657
- internalType: "struct ServiceConfig",
658
- components: [
659
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
660
- { name: "domain", type: "string", internalType: "string" },
661
- { name: "scope", type: "string", internalType: "string" },
662
- { name: "devMode", type: "bool", internalType: "bool" }
663
- ]
664
- }
665
- ],
666
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
667
- stateMutability: "view"
668
- },
669
- {
670
- type: "function",
671
- name: "isFaceMatchVerified",
672
- inputs: [
673
- { name: "faceMatchMode", type: "uint8", internalType: "enum FaceMatchMode" },
674
- { name: "os", type: "uint8", internalType: "enum OS" },
675
- {
676
- name: "commitments",
677
- type: "tuple",
678
- internalType: "struct Commitments",
679
- components: [
680
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
681
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
682
- ]
683
- }
684
- ],
685
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
686
- stateMutability: "pure"
687
- },
688
- {
689
- type: "function",
690
- name: "isIssuingCountryIn",
691
- inputs: [
692
- { name: "countryList", type: "string[]", internalType: "string[]" },
693
- {
694
- name: "commitments",
695
- type: "tuple",
696
- internalType: "struct Commitments",
697
- components: [
698
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
699
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
700
- ]
701
- }
702
- ],
703
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
704
- stateMutability: "pure"
705
- },
706
- {
707
- type: "function",
708
- name: "isIssuingCountryOut",
709
- inputs: [
710
- { name: "countryList", type: "string[]", internalType: "string[]" },
711
- {
712
- name: "commitments",
713
- type: "tuple",
714
- internalType: "struct Commitments",
715
- components: [
716
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
717
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
718
- ]
719
- }
720
- ],
721
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
722
- stateMutability: "pure"
723
- },
724
- {
725
- type: "function",
726
- name: "isNationalityIn",
727
- inputs: [
728
- { name: "countryList", type: "string[]", internalType: "string[]" },
729
- {
730
- name: "commitments",
731
- type: "tuple",
732
- internalType: "struct Commitments",
733
- components: [
734
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
735
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
736
- ]
737
- }
738
- ],
739
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
740
- stateMutability: "pure"
741
- },
742
- {
743
- type: "function",
744
- name: "isNationalityOut",
745
- inputs: [
746
- { name: "countryList", type: "string[]", internalType: "string[]" },
747
- {
748
- name: "commitments",
749
- type: "tuple",
750
- internalType: "struct Commitments",
751
- components: [
752
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
753
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
754
- ]
755
- }
756
- ],
757
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
758
- stateMutability: "pure"
759
- },
760
- {
761
- type: "function",
762
- name: "paused",
763
- inputs: [],
764
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
765
- stateMutability: "view"
766
- },
767
- {
768
- type: "function",
769
- name: "removeVerifiers",
770
- inputs: [{ name: "vkeyHashes", type: "bytes32[]", internalType: "bytes32[]" }],
771
- outputs: [],
772
- stateMutability: "nonpayable"
773
- },
774
- {
775
- type: "function",
776
- name: "rootRegistry",
777
- inputs: [],
778
- outputs: [{ name: "", type: "address", internalType: "contract IRootRegistry" }],
779
- stateMutability: "view"
780
- },
781
- {
782
- type: "function",
783
- name: "setPaused",
784
- inputs: [{ name: "_paused", type: "bool", internalType: "bool" }],
785
- outputs: [],
786
- stateMutability: "nonpayable"
787
- },
788
- {
789
- type: "function",
790
- name: "transferAdmin",
791
- inputs: [{ name: "newAdmin", type: "address", internalType: "address" }],
792
- outputs: [],
793
- stateMutability: "nonpayable"
794
- },
795
- {
796
- type: "function",
797
- name: "updateRootRegistry",
798
- inputs: [{ name: "_rootRegistry", type: "address", internalType: "address" }],
799
- outputs: [],
800
- stateMutability: "nonpayable"
801
- },
802
- {
803
- type: "function",
804
- name: "verifyProof",
805
- inputs: [
806
- {
807
- name: "params",
808
- type: "tuple",
809
- internalType: "struct ProofVerificationParams",
810
- components: [
811
- {
812
- name: "proofVerificationData",
813
- type: "tuple",
814
- internalType: "struct ProofVerificationData",
815
- components: [
816
- { name: "vkeyHash", type: "bytes32", internalType: "bytes32" },
817
- { name: "proof", type: "bytes", internalType: "bytes" },
818
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" }
819
- ]
820
- },
821
- {
822
- name: "commitments",
823
- type: "tuple",
824
- internalType: "struct Commitments",
825
- components: [
826
- { name: "committedInputs", type: "bytes", internalType: "bytes" },
827
- { name: "committedInputCounts", type: "uint256[]", internalType: "uint256[]" }
828
- ]
829
- },
830
- {
831
- name: "serviceConfig",
832
- type: "tuple",
833
- internalType: "struct ServiceConfig",
834
- components: [
835
- { name: "validityPeriodInSeconds", type: "uint256", internalType: "uint256" },
836
- { name: "domain", type: "string", internalType: "string" },
837
- { name: "scope", type: "string", internalType: "string" },
838
- { name: "devMode", type: "bool", internalType: "bool" }
839
- ]
840
- }
841
- ]
842
- }
843
- ],
844
- outputs: [
845
- { name: "isValid", type: "bool", internalType: "bool" },
846
- { name: "uniqueIdentifier", type: "bytes32", internalType: "bytes32" }
847
- ],
848
- stateMutability: "view"
849
- },
850
- {
851
- type: "function",
852
- name: "verifyScopes",
853
- inputs: [
854
- { name: "publicInputs", type: "bytes32[]", internalType: "bytes32[]" },
855
- { name: "domain", type: "string", internalType: "string" },
856
- { name: "scope", type: "string", internalType: "string" }
857
- ],
858
- outputs: [{ name: "", type: "bool", internalType: "bool" }],
859
- stateMutability: "pure"
860
- },
861
- {
862
- type: "function",
863
- name: "vkeyHashToVerifier",
864
- inputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
865
- outputs: [{ name: "", type: "address", internalType: "address" }],
866
- stateMutability: "view"
867
- },
868
- {
869
- type: "event",
870
- name: "AdminUpdated",
871
- inputs: [
872
- { name: "oldAdmin", type: "address", indexed: true, internalType: "address" },
873
- { name: "newAdmin", type: "address", indexed: true, internalType: "address" }
874
- ],
875
- anonymous: false
876
- },
877
- {
878
- type: "event",
879
- name: "CertificateRegistryRootAdded",
880
- inputs: [
881
- {
882
- name: "certificateRegistryRoot",
883
- type: "bytes32",
884
- indexed: true,
885
- internalType: "bytes32"
886
- }
887
- ],
888
- anonymous: false
889
- },
890
- {
891
- type: "event",
892
- name: "CertificateRegistryRootRemoved",
893
- inputs: [
894
- {
895
- name: "certificateRegistryRoot",
896
- type: "bytes32",
897
- indexed: true,
898
- internalType: "bytes32"
899
- }
900
- ],
901
- anonymous: false
902
- },
903
- {
904
- type: "event",
905
- name: "PausedStatusChanged",
906
- inputs: [{ name: "paused", type: "bool", indexed: false, internalType: "bool" }],
907
- anonymous: false
908
- },
909
- {
910
- type: "event",
911
- name: "SanctionsTreesRootUpdates",
912
- inputs: [
913
- {
914
- name: "_sanctionsTreesRoot",
915
- type: "bytes32",
916
- indexed: true,
917
- internalType: "bytes32"
918
- }
919
- ],
920
- anonymous: false
921
- },
922
- {
923
- type: "event",
924
- name: "VerifierAdded",
925
- inputs: [
926
- { name: "vkeyHash", type: "bytes32", indexed: true, internalType: "bytes32" },
927
- { name: "verifier", type: "address", indexed: true, internalType: "address" }
928
- ],
929
- anonymous: false
930
- },
931
- {
932
- type: "event",
933
- name: "VerifierRemoved",
934
- inputs: [
935
- { name: "vkeyHash", type: "bytes32", indexed: true, internalType: "bytes32" }
936
- ],
937
- anonymous: false
938
- },
939
- {
940
- type: "event",
941
- name: "ZKPassportVerifierDeployed",
942
- inputs: [
943
- { name: "admin", type: "address", indexed: true, internalType: "address" },
944
- { name: "timestamp", type: "uint256", indexed: false, internalType: "uint256" }
945
- ],
946
- anonymous: false
947
- }
948
- ],
949
- bytecode: {
950
- object: "0x608060405234801561000f575f5ffd5b50604051613d70380380613d7083398101604081905261002e916100f6565b6001600160a01b0381166100945760405162461bcd60e51b8152602060048201526024808201527f526f6f742072656769737472792063616e6e6f74206265207a65726f206164646044820152637265737360e01b606482015260840160405180910390fd5b5f8054336001600160a01b03199182168117909255600280549091166001600160a01b0384161790556040514281527ff29b53747ae7121d0958d490ad3d5cf6767119b0fdbd8389d918de3a12cf5a299060200160405180910390a250610123565b5f60208284031215610106575f5ffd5b81516001600160a01b038116811461011c575f5ffd5b9392505050565b613c40806101305f395ff3fe608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80638b2ec61111610135578063c3fa6f22116100b4578063ddd8f8e311610079578063ddd8f8e31461051a578063ec8e07291461052d578063f3757ad414610557578063f851a44014610577578063ff20370714610589575f5ffd5b8063c3fa6f22146104bb578063ca4051f2146104ce578063cf515d37146104e1578063d39a5cf9146104f4578063d4932b4e14610507575f5ffd5b8063a6df2c01116100fa578063a6df2c011461045c578063ac20d6781461046f578063b8bd487914610482578063b96b161c14610495578063c1b77162146104a8575f5ffd5b80638b2ec611146103f05780638d6937b8146104035780638e2e2e621461041657806398e73ac3146104295780639c1a81a314610449575f5ffd5b806346b758a0116101c157806375829def1161018657806375829def146103645780637e5a88f3146103775780638163f2311461038a578063818694f1146103ca578063847755e3146103dd575f5ffd5b806346b758a01461031b5780635b7ab9291461032e5780635c975abb14610341578063652ba33d146103545780636c40d5d61461035c575f5ffd5b80632e5ce77f116102075780632e5ce77f146102b9578063311a335c146102cc578063320d3b55146102df5780633d6ed975146102f257806341a0e2c214610305575f5ffd5b8063106a2f6d1461024357806316c38b3c1461026b57806316e3d7291461028057806318677f2a146102935780631fac4345146102a6575b5f5ffd5b610256610251366004612a78565b61059c565b60405190151581526020015b60405180910390f35b61027e610279366004612ae2565b610809565b005b61027e61028e366004612afd565b610892565b61027e6102a1366004612b42565b610919565b6102566102b4366004612b6d565b6109c6565b6102566102c7366004612bdc565b6109dc565b6102566102da366004612c13565b610b10565b6102566102ed366004612b6d565b610b28565b610256610300366004612c13565b610b37565b61030d600181565b604051908152602001610262565b610256610329366004612d3d565b610b46565b61025661033c366004612d3d565b610b5c565b5f5461025690600160a01b900460ff1681565b61030d600381565b61030d600281565b61027e610372366004612b42565b610b69565b610256610385366004612d3d565b610c37565b6103b2610398366004612e5b565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6102566103d8366004612bdc565b610c44565b6102566103eb366004612ef6565b610cac565b6102566103fe366004612b6d565b610e74565b61027e610411366004612f92565b610e83565b610256610424366004612b6d565b610f43565b61043c610437366004612afd565b610f51565b6040516102629190612ffe565b610256610457366004612b6d565b61107c565b61027e61046a366004613034565b611096565b61025661047d366004612b6d565b6111c0565b610256610490366004612b6d565b6111da565b6002546103b2906001600160a01b031681565b6102566104b6366004612b6d565b6111f4565b6102566104c9366004612bdc565b611202565b6102566104dc366004612b6d565b611218565b6102566104ef36600461309e565b611226565b610256610502366004612d3d565b61147a565b610256610515366004612bdc565b611487565b610256610528366004612b6d565b6115bb565b61054061053b3660046130e6565b6115d5565b604080519215158352602083019190915201610262565b61056a61056536600461311c565b611bf5565b604051610262919061316a565b5f546103b2906001600160a01b031681565b610256610597366004612bdc565b611d35565b5f5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63defa8ed9876040518263ffffffff1660e01b81526004016105d89190613360565b608060405180830381865af41580156105f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106179190613372565b929650909450925090505f6001846001811115610636576106366133be565b1490505f89600281111561064c5761064c6133be565b83600281111561065e5761065e6133be565b1490505f7f2532418a107c5306fa8308c22255792cf77e4a290cbce8a840a642a3e591340b871480156106bc575060018a60028111156106a0576106a06133be565b14806106bc57505f8a60028111156106ba576106ba6133be565b145b8061071c57507f16700a2d9168a194fc85f237af5829b5a2be05b8ae8ac4879ada34cf54a9c2118714801561071c575060028a6002811115610700576107006133be565b148061071c57505f8a600281111561071a5761071a6133be565b145b90505f7f1fa73686cf510f8f85757b0602de0dd72a13e68ae2092462be8b72662e7f179b86148015610779575060018b600281111561075d5761075d6133be565b148061077957505f8b6002811115610777576107776133be565b145b806107d957507f24d9929b248be7eeecaa98e105c034a50539610f3fdd4cb9c8983ef4100d615d861480156107d9575060028b60028111156107bd576107bd6133be565b14806107d957505f8b60028111156107d7576107d76133be565b145b90508380156107e55750825b80156107ee5750815b80156107f75750805b985050505050505050505b9392505050565b5f546001600160a01b0316331461083b5760405162461bcd60e51b8152600401610832906133d2565b60405180910390fd5b5f8054821515600160a01b0260ff60a01b199091161790556040517f9a506b30e47f3823b09f67e4c0dfa5c3d8023b71825b7ceaa97677129128c9c59061088790831515815260200190565b60405180910390a150565b604051632988ebc960e21b81525f9073__$144f4fe859debe4776cdef2b99f7b97a42$__9063a623af24906108cb908590600401613360565b602060405180830381865af41580156108e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090a9190613409565b905061091581611d42565b5050565b5f546001600160a01b031633146109425760405162461bcd60e51b8152600401610832906133d2565b6001600160a01b0381166109a45760405162461bcd60e51b8152602060048201526024808201527f526f6f742072656769737472792063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610832565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f6109d48460028585611e03565b949350505050565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6384052813876040518263ffffffff1660e01b8152600401610a179190613360565b606060405180830381865af4158015610a32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190613420565b91945092509050610a68838635611ff5565b610a845760405162461bcd60e51b815260040161083290613461565b60ff811615610afd576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e73746561646064820152608401610832565b5060ff8681169116149150509392505050565b5f610b1f858560028686612022565b95945050505050565b5f6109d4848560028686612022565b5f610b1f858560038686612022565b5f610b5383600484612343565b90505b92915050565b5f610b5383600784612343565b5f546001600160a01b03163314610b925760405162461bcd60e51b8152600401610832906133d2565b6001600160a01b038116610be85760405162461bcd60e51b815260206004820152601c60248201527f41646d696e2063616e6e6f74206265207a65726f2061646472657373000000006044820152606401610832565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b9190a35050565b5f610b5383600684612343565b5f5f8460ff1611610c975760405162461bcd60e51b815260206004820152601e60248201527f4d617820616765206d7573742062652067726561746572207468616e203000006044820152606401610832565b6109d4610ca56001866134e6565b8484611487565b5f5f610cec86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061245192505050565b610d6657600860028787604051602001610d079291906134ff565b60408051601f1981840301815290829052610d219161350e565b602060405180830381855afa158015610d3c573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d5f9190613409565b901c610d68565b5f5b90505f610da985858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061245192505050565b610e2357600860028686604051602001610dc49291906134ff565b60408051601f1981840301815290829052610dde9161350e565b602060405180830381855afa158015610df9573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1c9190613409565b901c610e25565b5f5b90508189896003818110610e3b57610e3b613524565b90506020020135148015610e6757508089896004818110610e5e57610e5e613524565b90506020020135145b9998505050505050505050565b5f6109d4848560038686612022565b5f546001600160a01b03163314610eac5760405162461bcd60e51b8152600401610832906133d2565b5f5b81811015610f3e5760015f848484818110610ecb57610ecb613524565b602090810292909201358352508101919091526040015f2080546001600160a01b0319169055828282818110610f0357610f03613524565b905060200201357f6fdcbcf8f91bc23f2c9dcfe8fe01d80d1b1afbbf207298e94c0171ccc587424c60405160405180910390a2600101610eae565b505050565b5f6109d48460038585611e03565b60408051606080820183525f80835260208301529181019190915260405163dfda037960e01b81525f9073__$144f4fe859debe4776cdef2b99f7b97a42$__9063dfda037990610fa5908690600401613360565b5f60405180830381865af4158015610fbf573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fe69190810190613587565b604051630578c5d360e11b815290915073__$144f4fe859debe4776cdef2b99f7b97a42$__90630af18ba6906110209084906004016135b8565b5f60405180830381865af415801561103a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261106191908101906135ca565b604085015260208401526001600160a01b0316825250919050565b5f6109d461108d6201518086613615565b60028585611e03565b5f546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610832906133d2565b5f5b838110156111b9578282828181106110db576110db613524565b90506020020160208101906110f09190612b42565b60015f87878581811061110557611105613524565b9050602002013581526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082828281811061114e5761114e613524565b90506020020160208101906111639190612b42565b6001600160a01b031685858381811061117e5761117e613524565b905060200201357f636107338a3eb46f1f60562462f3ec11393d35fbc965991aaade3b9e7d89c3f560405160405180910390a36001016110c1565b5050505050565b5f6109d46111d18562015180613628565b60038585612456565b5f6109d46111eb8562015180613628565b60028585612456565b5f6109d48460028585612456565b5f6109d461121185600161363b565b84846109dc565b5f6109d48460038585612456565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6384052813876040518263ffffffff1660e01b81526004016112619190613360565b606060405180830381865af415801561127c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a09190613420565b919450925090506112b2838635611ff5565b6112ce5760405162461bcd60e51b815260040161083290613461565b8660ff168860ff16111561133a5760405162461bcd60e51b815260206004820152602d60248201527f4d696e20616765206d757374206265206c657373207468616e206f722065717560448201526c616c20746f206d61782061676560981b6064820152608401610832565b8160ff165f036113c75760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676542656c6f774f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a401610832565b8060ff165f036114545760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676541626f76654f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a401610832565b8160ff168860ff1614801561146e57508060ff168760ff16145b98975050505050505050565b5f610b5383600584612343565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6384052813876040518263ffffffff1660e01b81526004016114c29190613360565b606060405180830381865af41580156114dd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115019190613420565b91945092509050611513838635611ff5565b61152f5760405162461bcd60e51b815260040161083290613461565b60ff8216156115a8576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e73746561646064820152608401610832565b60ff878116911614925050509392505050565b5f6109d46115cc6201518086613615565b60038585611e03565b5f80548190600160a01b900460ff16156116265760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b6044820152606401610832565b5f61163a6116348580613654565b35612687565b90506116736116498580613654565b611657906040810190613672565b5f81811061166757611667613524565b905060200201356126e0565b6116ab6116808580613654565b61168e906040810190613672565b600181811061169f5761169f613524565b905060200201356127a8565b61170a6116b88580613654565b6116c6906040810190613672565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506117049250505060408701876136b7565b35612866565b6117725760405162461bcd60e51b815260206004820152603360248201527f5468652070726f6f66207761732067656e657261746564206f757473696465206044820152721d1a19481d985b1a591a5d1e481c195c9a5bd9606a1b6064820152608401610832565b6117c361177f8580613654565b61178d906040810190613672565b61179a60408801886136b7565b6117a89060208101906136cb565b6117b560408a018a6136b7565b6103eb9060408101906136cb565b61180f5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420646f6d61696e206f722073636f70650000000000000000006044820152606401610832565b6118a261181c8580613654565b61182a906040810190613672565b60059060016118398980613654565b611847906040810190613672565b611852929150613615565b9261185f9392919061370d565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061189d925050506020870187613738565b612891565b5f6118ad8580613654565b6118bb906040810190613672565b60026118c78880613654565b6118d5906040810190613672565b6118e0929150613615565b8181106118ef576118ef613524565b905060200201355f1c6003811115611909576119096133be565b9050600281600381111561191f5761191f6133be565b1415801561193f5750600381600381111561193c5761193c6133be565b14155b80611963575061195260408601866136b7565b611963906080810190606001612ae2565b6119c05760405162461bcd60e51b815260206004820152602860248201527f4d6f636b2070726f6f667320617265206f6e6c7920616c6c6f77656420696e20604482015267646576206d6f646560c01b6064820152608401610832565b5f8160038111156119d3576119d36133be565b14806119f857506119e760408601866136b7565b6119f8906080810190606001612ae2565b611a585760405162461bcd60e51b815260206004820152602b60248201527f53616c746564206e756c6c69666965727320617265206e6f7420737570706f7260448201526a74656420666f72206e6f7760a81b6064820152608401610832565b6007611a648680613654565b611a72906040810190613672565b611a7d929150613615565b611a8a6020870187613738565b611a98906020810190613672565b905014611af55760405162461bcd60e51b815260206004820152602560248201527f496e76616c696420636f6d6d697474656420696e70757420636f756e7473206c6044820152640cadccee8d60db1b6064820152608401610832565b6001600160a01b03821663ea50d0e4611b0e8780613654565b611b1c9060208101906136cb565b611b268980613654565b611b34906040810190613672565b6040518563ffffffff1660e01b8152600401611b53949392919061374c565b602060405180830381865afa158015611b6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b92919061377d565b93505f6001611ba18780613654565b611baf906040810190613672565b611bba929150613615565b9050611bc68680613654565b611bd4906040810190613672565b82818110611be457611be4613524565b905060200201359350505050915091565b611c3d60405180610100016040528060608152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604051635450abb360e11b81525f9073__$144f4fe859debe4776cdef2b99f7b97a42$__9063a8a1576690611c76908790600401613360565b5f60405180830381865af4158015611c90573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb79190810190613798565b6040516301e9bf5760e11b815290925073__$144f4fe859debe4776cdef2b99f7b97a42$__91506303d37eae90611cf490849087906004016137f1565b5f60405180830381865af4158015611d0e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190613814565b5f6109d484858585611226565b6002546040516383578c1160e01b815260036004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa158015611d90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db4919061377d565b611e005760405162461bcd60e51b815260206004820152601f60248201527f496e76616c69642073616e6374696f6e7320726567697374727920726f6f74006044820152606401610832565b50565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6374d9a37e87896040518363ffffffff1660e01b8152600401611e409291906139a5565b606060405180830381865af4158015611e5b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7f91906139e2565b91945092509050611e91838635611ff5565b611ead5760405162461bcd60e51b815260040161083290613461565b8115611f2b5760405162461bcd60e51b815260206004820152604160248201527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973446174654265747765656e20696e737465616064820152601960fa1b608482015260a401610832565b600287600a811115611f3f57611f3f6133be565b1480611f5c5750600387600a811115611f5a57611f5a6133be565b145b611f785760405162461bcd60e51b815260040161083290613a0d565b600287600a811115611f8c57611f8c6133be565b03611fca57805f03611fb05760405162461bcd60e51b815260040161083290613a39565b611fbe6383aa7e8082613615565b881493505050506109d4565b805f03611fe95760405162461bcd60e51b815260040161083290613ab1565b871492506109d4915050565b5f806120018385613628565b905083421015801561201257508381115b80156109d4575042109392505050565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6374d9a37e87896040518363ffffffff1660e01b815260040161205f9291906139a5565b606060405180830381865af415801561207a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209e91906139e2565b919450925090506120b0838635611ff5565b6120cc5760405162461bcd60e51b815260040161083290613461565b878911156121345760405162461bcd60e51b815260206004820152602f60248201527f4d696e2064617465206d757374206265206c657373207468616e206f7220657160448201526e75616c20746f206d6178206461746560881b6064820152608401610832565b600287600a811115612148576121486133be565b14806121655750600387600a811115612163576121636133be565b145b6121815760405162461bcd60e51b815260040161083290613a0d565b600287600a811115612195576121956133be565b0361227b57815f0361222a5760405162461bcd60e51b815260206004820152605260248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746542656064820152711b1bddd3dc915c5d585b081a5b9cdd19585960721b608482015260a401610832565b805f036122495760405162461bcd60e51b815260040161083290613a39565b6122576383aa7e8083613615565b89148015612271575061226e6383aa7e8082613615565b88145b9350505050610b1f565b815f0361230c5760405162461bcd60e51b815260206004820152605360248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746542606482015272195b1bddd3dc915c5d585b081a5b9cdd195859606a1b608482015260a401610832565b805f0361232b5760405162461bcd60e51b815260040161083290613ab1565b81891480156122715750909614979650505050505050565b5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63dc8c5e9a85876040518363ffffffff1660e01b815260040161237f9291906139a5565b5f60405180830381865af4158015612399573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123c09190810190613b2a565b91509150808651146123d6575f92505050610802565b5f5b818110156124445761242d8782815181106123f5576123f5613524565b602002602001015184838151811061240f5761240f613524565b60200260200101518051602091820120825192909101919091201490565b61243c575f9350505050610802565b6001016123d8565b5060019695505050505050565b511590565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6374d9a37e87896040518363ffffffff1660e01b81526004016124939291906139a5565b606060405180830381865af41580156124ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d291906139e2565b919450925090506124e4838635611ff5565b6125005760405162461bcd60e51b815260040161083290613461565b600287600a811115612514576125146133be565b14806125315750600387600a81111561252f5761252f6133be565b145b61254d5760405162461bcd60e51b815260040161083290613a0d565b600287600a811115612561576125616133be565b036125f75780156125e95760405162461bcd60e51b815260206004820152604660248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734269727468646174654265747765656e20696064820152651b9cdd19585960d21b608482015260a401610832565b611fbe6383aa7e8083613615565b801561267b5760405162461bcd60e51b815260206004820152604760248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973457870697279446174654265747765656e206064820152661a5b9cdd19585960ca1b608482015260a401610832565b50861491506109d49050565b5f818152600160205260408120546001600160a01b031680610b565760405162461bcd60e51b815260206004820152601260248201527115995c9a599a595c881b9bdd08199bdd5b9960721b6044820152606401610832565b6002546040516383578c1160e01b815260016004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa15801561272e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612752919061377d565b611e005760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420636572746966696361746520726567697374727920726f6f6044820152601d60fa1b6064820152608401610832565b600280546040516383578c1160e01b81526004810192909252602482018390526001600160a01b0316906383578c1190604401602060405180830381865afa1580156127f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061281a919061377d565b611e005760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206369726375697420726567697374727920726f6f740000006044820152606401610832565b5f5f8360028151811061287b5761287b613524565b60200260200101515f1c90506109d48184611ff5565b5f805b6128a16020840184613672565b90508110156129fb575f600860026128b986806136cb565b86906128c860208a018a613672565b888181106128d8576128d8613524565b90506020020135886128ea9190613628565b926128f793929190613be3565b6040516020016129089291906134ff565b60408051601f19818403018152908290526129229161350e565b602060405180830381855afa15801561293d573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906129609190613409565b901c905084828151811061297657612976613524565b602002602001015181146129c15760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590818dbdb5b5a5d1b595b9d60721b6044820152606401610832565b6129ce6020850185613672565b838181106129de576129de613524565b90506020020135836129f09190613628565b925050600101612894565b50612a0682806136cb565b90508114610f3e5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420636f6d6d697474656420696e70757473206c656e677468006044820152606401610832565b60038110611e00575f5ffd5b5f60408284031215612a72575f5ffd5b50919050565b5f5f5f60608486031215612a8a575f5ffd5b8335612a9581612a56565b92506020840135612aa581612a56565b915060408401356001600160401b03811115612abf575f5ffd5b612acb86828701612a62565b9150509250925092565b8015158114611e00575f5ffd5b5f60208284031215612af2575f5ffd5b813561080281612ad5565b5f60208284031215612b0d575f5ffd5b81356001600160401b03811115612b22575f5ffd5b6109d484828501612a62565b6001600160a01b0381168114611e00575f5ffd5b5f60208284031215612b52575f5ffd5b813561080281612b2e565b5f60808284031215612a72575f5ffd5b5f5f5f60608486031215612b7f575f5ffd5b8335925060208401356001600160401b03811115612b9b575f5ffd5b612ba786828701612a62565b92505060408401356001600160401b03811115612bc2575f5ffd5b612acb86828701612b5d565b60ff81168114611e00575f5ffd5b5f5f5f60608486031215612bee575f5ffd5b8335612bf981612bce565b925060208401356001600160401b03811115612b9b575f5ffd5b5f5f5f5f60808587031215612c26575f5ffd5b843593506020850135925060408501356001600160401b03811115612c49575f5ffd5b612c5587828801612a62565b92505060608501356001600160401b03811115612c70575f5ffd5b612c7c87828801612b5d565b91505092959194509250565b634e487b7160e01b5f52604160045260245ffd5b60405161010081016001600160401b0381118282101715612cbf57612cbf612c88565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612ced57612ced612c88565b604052919050565b5f6001600160401b03821115612d0d57612d0d612c88565b5060051b60200190565b5f6001600160401b03821115612d2f57612d2f612c88565b50601f01601f191660200190565b5f5f60408385031215612d4e575f5ffd5b82356001600160401b03811115612d63575f5ffd5b8301601f81018513612d73575f5ffd5b8035612d86612d8182612cf5565b612cc5565b8082825260208201915060208360051b850101925087831115612da7575f5ffd5b602084015b83811015612e275780356001600160401b03811115612dc9575f5ffd5b8501603f81018a13612dd9575f5ffd5b6020810135612dea612d8182612d17565b8181526040838301018c1015612dfe575f5ffd5b816040840160208301375f60208383010152808652505050602083019250602081019050612dac565b50945050505060208301356001600160401b03811115612e45575f5ffd5b612e5185828601612a62565b9150509250929050565b5f60208284031215612e6b575f5ffd5b5035919050565b5f5f83601f840112612e82575f5ffd5b5081356001600160401b03811115612e98575f5ffd5b6020830191508360208260051b8501011115612eb2575f5ffd5b9250929050565b5f5f83601f840112612ec9575f5ffd5b5081356001600160401b03811115612edf575f5ffd5b602083019150836020828501011115612eb2575f5ffd5b5f5f5f5f5f5f60608789031215612f0b575f5ffd5b86356001600160401b03811115612f20575f5ffd5b612f2c89828a01612e72565b90975095505060208701356001600160401b03811115612f4a575f5ffd5b612f5689828a01612eb9565b90955093505060408701356001600160401b03811115612f74575f5ffd5b612f8089828a01612eb9565b979a9699509497509295939492505050565b5f5f60208385031215612fa3575f5ffd5b82356001600160401b03811115612fb8575f5ffd5b612fc485828601612e72565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6020815260018060a01b038251166020820152602082015160408201525f60408301516060808401526109d46080840182612fd0565b5f5f5f5f60408587031215613047575f5ffd5b84356001600160401b0381111561305c575f5ffd5b61306887828801612e72565b90955093505060208501356001600160401b03811115613086575f5ffd5b61309287828801612e72565b95989497509550505050565b5f5f5f5f608085870312156130b1575f5ffd5b84356130bc81612bce565b935060208501356130cc81612bce565b925060408501356001600160401b03811115612c49575f5ffd5b5f602082840312156130f6575f5ffd5b81356001600160401b0381111561310b575f5ffd5b820160608185031215610802575f5ffd5b5f5f6040838503121561312d575f5ffd5b82356001600160401b03811115613142575f5ffd5b61314e85828601612a62565b925050602083013561315f81612ad5565b809150509250929050565b602081525f82516101006020840152613187610120840182612fd0565b90506020840151601f198483030160408501526131a48282612fd0565b9150506040840151601f198483030160608501526131c28282612fd0565b9150506060840151601f198483030160808501526131e08282612fd0565b9150506080840151601f198483030160a08501526131fe8282612fd0565b91505060a0840151601f198483030160c085015261321c8282612fd0565b91505060c0840151601f198483030160e085015261323a8282612fd0565b91505060e0840151601f1984830301610100850152610b1f8282612fd0565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6001600160fb1b03831115613298575f5ffd5b8260051b80836020870137939093016020019392505050565b5f8135601e19833603018082126132c6575f5ffd5b602091840191820191356001600160401b038111156132e3575f5ffd5b8036038313156132f1575f5ffd5b60408652613303604087018285613259565b9250506020840135818112613316575f5ffd5b8401602081019150356001600160401b03811115613332575f5ffd5b8060051b3603821315613343575f5ffd5b8583036020870152613356838284613281565b9695505050505050565b602081525f610b5360208301846132b1565b5f5f5f5f60808587031215613385575f5ffd5b845160208601519094506002811061339b575f5ffd5b6040860151606087015191945092506133b381612a56565b939692955090935050565b634e487b7160e01b5f52602160045260245ffd5b6020808252601a908201527f4e6f7420617574686f72697a65643a2061646d696e206f6e6c79000000000000604082015260600190565b5f60208284031215613419575f5ffd5b5051919050565b5f5f5f60608486031215613432575f5ffd5b8351602085015190935061344581612bce565b604085015190925061345681612bce565b809150509250925092565b6020808252604b908201527f5468652063757272656e742064617465207573656420696e207468652070726f60408201527f6f6620646f6573206e6f742066616c6c2077697468696e207468652076616c6960608201526a191a5d1e481c195c9a5bd960aa1b608082015260a00190565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115610b5657610b566134d2565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112613547575f5ffd5b8151602083015f61355a612d8184612d17565b905082815285838301111561356d575f5ffd5b8282602083015e5f92810160200192909252509392505050565b5f60208284031215613597575f5ffd5b81516001600160401b038111156135ac575f5ffd5b6109d484828501613538565b602081525f610b536020830184612fd0565b5f5f5f606084860312156135dc575f5ffd5b83516135e781612b2e565b6020850151604086015191945092506001600160401b03811115613609575f5ffd5b612acb86828701613538565b81810381811115610b5657610b566134d2565b80820180821115610b5657610b566134d2565b60ff8181168382160190811115610b5657610b566134d2565b5f8235605e19833603018112613668575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613687575f5ffd5b8301803591506001600160401b038211156136a0575f5ffd5b6020019150600581901b3603821315612eb2575f5ffd5b5f8235607e19833603018112613668575f5ffd5b5f5f8335601e198436030181126136e0575f5ffd5b8301803591506001600160401b038211156136f9575f5ffd5b602001915036819003821315612eb2575f5ffd5b5f5f8585111561371b575f5ffd5b83861115613727575f5ffd5b5050600583901b0193919092039150565b5f8235603e19833603018112613668575f5ffd5b604081525f61375f604083018688613259565b8281036020840152613772818587613281565b979650505050505050565b5f6020828403121561378d575f5ffd5b815161080281612ad5565b5f5f604083850312156137a9575f5ffd5b82516001600160401b038111156137be575f5ffd5b6137ca85828601613538565b92505060208301516001600160401b038111156137e5575f5ffd5b612e5185828601613538565b604081525f6138036040830185612fd0565b905082151560208301529392505050565b5f60208284031215613824575f5ffd5b81516001600160401b03811115613839575f5ffd5b8201610100818503121561384b575f5ffd5b613853612c9c565b81516001600160401b03811115613868575f5ffd5b61387486828501613538565b82525060208201516001600160401b0381111561388f575f5ffd5b61389b86828501613538565b60208301525060408201516001600160401b038111156138b9575f5ffd5b6138c586828501613538565b60408301525060608201516001600160401b038111156138e3575f5ffd5b6138ef86828501613538565b60608301525060808201516001600160401b0381111561390d575f5ffd5b61391986828501613538565b60808301525060a08201516001600160401b03811115613937575f5ffd5b61394386828501613538565b60a08301525060c08201516001600160401b03811115613961575f5ffd5b61396d86828501613538565b60c08301525060e08201516001600160401b0381111561398b575f5ffd5b61399786828501613538565b60e083015250949350505050565b604081525f6139b760408301856132b1565b9050600b83106139d557634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b5f5f5f606084860312156139f4575f5ffd5b5050815160208301516040909301519094929350919050565b602080825260129082015271496e76616c69642070726f6f66207479706560701b604082015260600190565b60208082526052908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746541626060820152711bdd9953dc915c5d585b081a5b9cdd19585960721b608082015260a00190565b60208082526053908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746541606082015272189bdd9953dc915c5d585b081a5b9cdd195859606a1b608082015260a00190565b5f5f60408385031215613b3b575f5ffd5b82516001600160401b03811115613b50575f5ffd5b8301601f81018513613b60575f5ffd5b8051613b6e612d8182612cf5565b8082825260208201915060208360051b850101925087831115613b8f575f5ffd5b602084015b83811015613bcf5780516001600160401b03811115613bb1575f5ffd5b613bc08a602083890101613538565b84525060209283019201613b94565b506020969096015195979596505050505050565b5f5f85851115613bf1575f5ffd5b83861115613bfd575f5ffd5b505082019391909203915056fea2646970667358221220f991155c5f0495dd21a11592eb81a72baddd6126ad66ff51d0de5dd26a8c865164736f6c634300081d0033",
951
- sourceMap: "706:30507:26:-:0;;;1848:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1897:27:26;;1889:76;;;;-1:-1:-1;;;1889:76:26;;511:2:34;1889:76:26;;;493:21:34;550:2;530:18;;;523:30;589:34;569:18;;;562:62;-1:-1:-1;;;640:18:34;;;633:34;684:19;;1889:76:26;;;;;;;;1971:5;:18;;1979:10;-1:-1:-1;;;;;;1971:18:26;;;;;;;;1995:12;:43;;;;;-1:-1:-1;;;;;1995:43:26;;;;;2049:50;;2083:15;860:25:34;;2049:50:26;;848:2:34;833:18;2049:50:26;;;;;;;1848:256;706:30507;;14:290:34;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:34;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:34:o;714:177::-;706:30507:26;;;;;;",
952
- linkReferences: {
953
- "src/InputsExtractor.sol": {
954
- InputsExtractor: [
955
- { start: 1747, length: 20 },
956
- { start: 2515, length: 20 },
957
- { start: 2834, length: 20 },
958
- { start: 4269, length: 20 },
959
- { start: 4392, length: 20 },
960
- { start: 4956, length: 20 },
961
- { start: 5565, length: 20 },
962
- { start: 7550, length: 20 },
963
- { start: 7673, length: 20 },
964
- { start: 7993, length: 20 },
965
- { start: 8536, length: 20 },
966
- { start: 9336, length: 20 },
967
- { start: 9612, length: 20 }
968
- ]
969
- }
970
- }
971
- },
972
- deployedBytecode: {
973
- object: "0x608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80638b2ec61111610135578063c3fa6f22116100b4578063ddd8f8e311610079578063ddd8f8e31461051a578063ec8e07291461052d578063f3757ad414610557578063f851a44014610577578063ff20370714610589575f5ffd5b8063c3fa6f22146104bb578063ca4051f2146104ce578063cf515d37146104e1578063d39a5cf9146104f4578063d4932b4e14610507575f5ffd5b8063a6df2c01116100fa578063a6df2c011461045c578063ac20d6781461046f578063b8bd487914610482578063b96b161c14610495578063c1b77162146104a8575f5ffd5b80638b2ec611146103f05780638d6937b8146104035780638e2e2e621461041657806398e73ac3146104295780639c1a81a314610449575f5ffd5b806346b758a0116101c157806375829def1161018657806375829def146103645780637e5a88f3146103775780638163f2311461038a578063818694f1146103ca578063847755e3146103dd575f5ffd5b806346b758a01461031b5780635b7ab9291461032e5780635c975abb14610341578063652ba33d146103545780636c40d5d61461035c575f5ffd5b80632e5ce77f116102075780632e5ce77f146102b9578063311a335c146102cc578063320d3b55146102df5780633d6ed975146102f257806341a0e2c214610305575f5ffd5b8063106a2f6d1461024357806316c38b3c1461026b57806316e3d7291461028057806318677f2a146102935780631fac4345146102a6575b5f5ffd5b610256610251366004612a78565b61059c565b60405190151581526020015b60405180910390f35b61027e610279366004612ae2565b610809565b005b61027e61028e366004612afd565b610892565b61027e6102a1366004612b42565b610919565b6102566102b4366004612b6d565b6109c6565b6102566102c7366004612bdc565b6109dc565b6102566102da366004612c13565b610b10565b6102566102ed366004612b6d565b610b28565b610256610300366004612c13565b610b37565b61030d600181565b604051908152602001610262565b610256610329366004612d3d565b610b46565b61025661033c366004612d3d565b610b5c565b5f5461025690600160a01b900460ff1681565b61030d600381565b61030d600281565b61027e610372366004612b42565b610b69565b610256610385366004612d3d565b610c37565b6103b2610398366004612e5b565b60016020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6102566103d8366004612bdc565b610c44565b6102566103eb366004612ef6565b610cac565b6102566103fe366004612b6d565b610e74565b61027e610411366004612f92565b610e83565b610256610424366004612b6d565b610f43565b61043c610437366004612afd565b610f51565b6040516102629190612ffe565b610256610457366004612b6d565b61107c565b61027e61046a366004613034565b611096565b61025661047d366004612b6d565b6111c0565b610256610490366004612b6d565b6111da565b6002546103b2906001600160a01b031681565b6102566104b6366004612b6d565b6111f4565b6102566104c9366004612bdc565b611202565b6102566104dc366004612b6d565b611218565b6102566104ef36600461309e565b611226565b610256610502366004612d3d565b61147a565b610256610515366004612bdc565b611487565b610256610528366004612b6d565b6115bb565b61054061053b3660046130e6565b6115d5565b604080519215158352602083019190915201610262565b61056a61056536600461311c565b611bf5565b604051610262919061316a565b5f546103b2906001600160a01b031681565b610256610597366004612bdc565b611d35565b5f5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63defa8ed9876040518263ffffffff1660e01b81526004016105d89190613360565b608060405180830381865af41580156105f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106179190613372565b929650909450925090505f6001846001811115610636576106366133be565b1490505f89600281111561064c5761064c6133be565b83600281111561065e5761065e6133be565b1490505f7f2532418a107c5306fa8308c22255792cf77e4a290cbce8a840a642a3e591340b871480156106bc575060018a60028111156106a0576106a06133be565b14806106bc57505f8a60028111156106ba576106ba6133be565b145b8061071c57507f16700a2d9168a194fc85f237af5829b5a2be05b8ae8ac4879ada34cf54a9c2118714801561071c575060028a6002811115610700576107006133be565b148061071c57505f8a600281111561071a5761071a6133be565b145b90505f7f1fa73686cf510f8f85757b0602de0dd72a13e68ae2092462be8b72662e7f179b86148015610779575060018b600281111561075d5761075d6133be565b148061077957505f8b6002811115610777576107776133be565b145b806107d957507f24d9929b248be7eeecaa98e105c034a50539610f3fdd4cb9c8983ef4100d615d861480156107d9575060028b60028111156107bd576107bd6133be565b14806107d957505f8b60028111156107d7576107d76133be565b145b90508380156107e55750825b80156107ee5750815b80156107f75750805b985050505050505050505b9392505050565b5f546001600160a01b0316331461083b5760405162461bcd60e51b8152600401610832906133d2565b60405180910390fd5b5f8054821515600160a01b0260ff60a01b199091161790556040517f9a506b30e47f3823b09f67e4c0dfa5c3d8023b71825b7ceaa97677129128c9c59061088790831515815260200190565b60405180910390a150565b604051632988ebc960e21b81525f9073__$144f4fe859debe4776cdef2b99f7b97a42$__9063a623af24906108cb908590600401613360565b602060405180830381865af41580156108e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090a9190613409565b905061091581611d42565b5050565b5f546001600160a01b031633146109425760405162461bcd60e51b8152600401610832906133d2565b6001600160a01b0381166109a45760405162461bcd60e51b8152602060048201526024808201527f526f6f742072656769737472792063616e6e6f74206265207a65726f206164646044820152637265737360e01b6064820152608401610832565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f6109d48460028585611e03565b949350505050565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6384052813876040518263ffffffff1660e01b8152600401610a179190613360565b606060405180830381865af4158015610a32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a569190613420565b91945092509050610a68838635611ff5565b610a845760405162461bcd60e51b815260040161083290613461565b60ff811615610afd576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e73746561646064820152608401610832565b5060ff8681169116149150509392505050565b5f610b1f858560028686612022565b95945050505050565b5f6109d4848560028686612022565b5f610b1f858560038686612022565b5f610b5383600484612343565b90505b92915050565b5f610b5383600784612343565b5f546001600160a01b03163314610b925760405162461bcd60e51b8152600401610832906133d2565b6001600160a01b038116610be85760405162461bcd60e51b815260206004820152601c60248201527f41646d696e2063616e6e6f74206265207a65726f2061646472657373000000006044820152606401610832565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f101b8081ff3b56bbf45deb824d86a3b0fd38b7e3dd42421105cf8abe9106db0b9190a35050565b5f610b5383600684612343565b5f5f8460ff1611610c975760405162461bcd60e51b815260206004820152601e60248201527f4d617820616765206d7573742062652067726561746572207468616e203000006044820152606401610832565b6109d4610ca56001866134e6565b8484611487565b5f5f610cec86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061245192505050565b610d6657600860028787604051602001610d079291906134ff565b60408051601f1981840301815290829052610d219161350e565b602060405180830381855afa158015610d3c573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d5f9190613409565b901c610d68565b5f5b90505f610da985858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061245192505050565b610e2357600860028686604051602001610dc49291906134ff565b60408051601f1981840301815290829052610dde9161350e565b602060405180830381855afa158015610df9573d5f5f3e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1c9190613409565b901c610e25565b5f5b90508189896003818110610e3b57610e3b613524565b90506020020135148015610e6757508089896004818110610e5e57610e5e613524565b90506020020135145b9998505050505050505050565b5f6109d4848560038686612022565b5f546001600160a01b03163314610eac5760405162461bcd60e51b8152600401610832906133d2565b5f5b81811015610f3e5760015f848484818110610ecb57610ecb613524565b602090810292909201358352508101919091526040015f2080546001600160a01b0319169055828282818110610f0357610f03613524565b905060200201357f6fdcbcf8f91bc23f2c9dcfe8fe01d80d1b1afbbf207298e94c0171ccc587424c60405160405180910390a2600101610eae565b505050565b5f6109d48460038585611e03565b60408051606080820183525f80835260208301529181019190915260405163dfda037960e01b81525f9073__$144f4fe859debe4776cdef2b99f7b97a42$__9063dfda037990610fa5908690600401613360565b5f60405180830381865af4158015610fbf573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fe69190810190613587565b604051630578c5d360e11b815290915073__$144f4fe859debe4776cdef2b99f7b97a42$__90630af18ba6906110209084906004016135b8565b5f60405180830381865af415801561103a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261106191908101906135ca565b604085015260208401526001600160a01b0316825250919050565b5f6109d461108d6201518086613615565b60028585611e03565b5f546001600160a01b031633146110bf5760405162461bcd60e51b8152600401610832906133d2565b5f5b838110156111b9578282828181106110db576110db613524565b90506020020160208101906110f09190612b42565b60015f87878581811061110557611105613524565b9050602002013581526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082828281811061114e5761114e613524565b90506020020160208101906111639190612b42565b6001600160a01b031685858381811061117e5761117e613524565b905060200201357f636107338a3eb46f1f60562462f3ec11393d35fbc965991aaade3b9e7d89c3f560405160405180910390a36001016110c1565b5050505050565b5f6109d46111d18562015180613628565b60038585612456565b5f6109d46111eb8562015180613628565b60028585612456565b5f6109d48460028585612456565b5f6109d461121185600161363b565b84846109dc565b5f6109d48460038585612456565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6384052813876040518263ffffffff1660e01b81526004016112619190613360565b606060405180830381865af415801561127c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a09190613420565b919450925090506112b2838635611ff5565b6112ce5760405162461bcd60e51b815260040161083290613461565b8660ff168860ff16111561133a5760405162461bcd60e51b815260206004820152602d60248201527f4d696e20616765206d757374206265206c657373207468616e206f722065717560448201526c616c20746f206d61782061676560981b6064820152608401610832565b8160ff165f036113c75760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676542656c6f774f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a401610832565b8060ff165f036114545760405162461bcd60e51b815260206004820152604c60248201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697341676541626f76654f724560648201526b1c5d585b081a5b9cdd19585960a21b608482015260a401610832565b8160ff168860ff1614801561146e57508060ff168760ff16145b98975050505050505050565b5f610b5383600584612343565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6384052813876040518263ffffffff1660e01b81526004016114c29190613360565b606060405180830381865af41580156114dd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115019190613420565b91945092509050611513838635611ff5565b61152f5760405162461bcd60e51b815260040161083290613461565b60ff8216156115a8576040805162461bcd60e51b81526020600482015260248101919091527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734167654265747765656e20696e73746561646064820152608401610832565b60ff878116911614925050509392505050565b5f6109d46115cc6201518086613615565b60038585611e03565b5f80548190600160a01b900460ff16156116265760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b6044820152606401610832565b5f61163a6116348580613654565b35612687565b90506116736116498580613654565b611657906040810190613672565b5f81811061166757611667613524565b905060200201356126e0565b6116ab6116808580613654565b61168e906040810190613672565b600181811061169f5761169f613524565b905060200201356127a8565b61170a6116b88580613654565b6116c6906040810190613672565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506117049250505060408701876136b7565b35612866565b6117725760405162461bcd60e51b815260206004820152603360248201527f5468652070726f6f66207761732067656e657261746564206f757473696465206044820152721d1a19481d985b1a591a5d1e481c195c9a5bd9606a1b6064820152608401610832565b6117c361177f8580613654565b61178d906040810190613672565b61179a60408801886136b7565b6117a89060208101906136cb565b6117b560408a018a6136b7565b6103eb9060408101906136cb565b61180f5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420646f6d61696e206f722073636f70650000000000000000006044820152606401610832565b6118a261181c8580613654565b61182a906040810190613672565b60059060016118398980613654565b611847906040810190613672565b611852929150613615565b9261185f9392919061370d565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061189d925050506020870187613738565b612891565b5f6118ad8580613654565b6118bb906040810190613672565b60026118c78880613654565b6118d5906040810190613672565b6118e0929150613615565b8181106118ef576118ef613524565b905060200201355f1c6003811115611909576119096133be565b9050600281600381111561191f5761191f6133be565b1415801561193f5750600381600381111561193c5761193c6133be565b14155b80611963575061195260408601866136b7565b611963906080810190606001612ae2565b6119c05760405162461bcd60e51b815260206004820152602860248201527f4d6f636b2070726f6f667320617265206f6e6c7920616c6c6f77656420696e20604482015267646576206d6f646560c01b6064820152608401610832565b5f8160038111156119d3576119d36133be565b14806119f857506119e760408601866136b7565b6119f8906080810190606001612ae2565b611a585760405162461bcd60e51b815260206004820152602b60248201527f53616c746564206e756c6c69666965727320617265206e6f7420737570706f7260448201526a74656420666f72206e6f7760a81b6064820152608401610832565b6007611a648680613654565b611a72906040810190613672565b611a7d929150613615565b611a8a6020870187613738565b611a98906020810190613672565b905014611af55760405162461bcd60e51b815260206004820152602560248201527f496e76616c696420636f6d6d697474656420696e70757420636f756e7473206c6044820152640cadccee8d60db1b6064820152608401610832565b6001600160a01b03821663ea50d0e4611b0e8780613654565b611b1c9060208101906136cb565b611b268980613654565b611b34906040810190613672565b6040518563ffffffff1660e01b8152600401611b53949392919061374c565b602060405180830381865afa158015611b6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b92919061377d565b93505f6001611ba18780613654565b611baf906040810190613672565b611bba929150613615565b9050611bc68680613654565b611bd4906040810190613672565b82818110611be457611be4613524565b905060200201359350505050915091565b611c3d60405180610100016040528060608152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604051635450abb360e11b81525f9073__$144f4fe859debe4776cdef2b99f7b97a42$__9063a8a1576690611c76908790600401613360565b5f60405180830381865af4158015611c90573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cb79190810190613798565b6040516301e9bf5760e11b815290925073__$144f4fe859debe4776cdef2b99f7b97a42$__91506303d37eae90611cf490849087906004016137f1565b5f60405180830381865af4158015611d0e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109d49190810190613814565b5f6109d484858585611226565b6002546040516383578c1160e01b815260036004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa158015611d90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db4919061377d565b611e005760405162461bcd60e51b815260206004820152601f60248201527f496e76616c69642073616e6374696f6e7320726567697374727920726f6f74006044820152606401610832565b50565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6374d9a37e87896040518363ffffffff1660e01b8152600401611e409291906139a5565b606060405180830381865af4158015611e5b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7f91906139e2565b91945092509050611e91838635611ff5565b611ead5760405162461bcd60e51b815260040161083290613461565b8115611f2b5760405162461bcd60e51b815260206004820152604160248201527f5468652070726f6f66206c6f77657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973446174654265747765656e20696e737465616064820152601960fa1b608482015260a401610832565b600287600a811115611f3f57611f3f6133be565b1480611f5c5750600387600a811115611f5a57611f5a6133be565b145b611f785760405162461bcd60e51b815260040161083290613a0d565b600287600a811115611f8c57611f8c6133be565b03611fca57805f03611fb05760405162461bcd60e51b815260040161083290613a39565b611fbe6383aa7e8082613615565b881493505050506109d4565b805f03611fe95760405162461bcd60e51b815260040161083290613ab1565b871492506109d4915050565b5f806120018385613628565b905083421015801561201257508381115b80156109d4575042109392505050565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6374d9a37e87896040518363ffffffff1660e01b815260040161205f9291906139a5565b606060405180830381865af415801561207a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209e91906139e2565b919450925090506120b0838635611ff5565b6120cc5760405162461bcd60e51b815260040161083290613461565b878911156121345760405162461bcd60e51b815260206004820152602f60248201527f4d696e2064617465206d757374206265206c657373207468616e206f7220657160448201526e75616c20746f206d6178206461746560881b6064820152608401610832565b600287600a811115612148576121486133be565b14806121655750600387600a811115612163576121636133be565b145b6121815760405162461bcd60e51b815260040161083290613a0d565b600287600a811115612195576121956133be565b0361227b57815f0361222a5760405162461bcd60e51b815260206004820152605260248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746542656064820152711b1bddd3dc915c5d585b081a5b9cdd19585960721b608482015260a401610832565b805f036122495760405162461bcd60e51b815260040161083290613a39565b6122576383aa7e8083613615565b89148015612271575061226e6383aa7e8082613615565b88145b9350505050610b1f565b815f0361230c5760405162461bcd60e51b815260206004820152605360248201527f5468652070726f6f66206c6f77657220626f756e64206d757374206265206e6f60448201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746542606482015272195b1bddd3dc915c5d585b081a5b9cdd195859606a1b608482015260a401610832565b805f0361232b5760405162461bcd60e51b815260040161083290613ab1565b81891480156122715750909614979650505050505050565b5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__63dc8c5e9a85876040518363ffffffff1660e01b815260040161237f9291906139a5565b5f60405180830381865af4158015612399573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123c09190810190613b2a565b91509150808651146123d6575f92505050610802565b5f5b818110156124445761242d8782815181106123f5576123f5613524565b602002602001015184838151811061240f5761240f613524565b60200260200101518051602091820120825192909101919091201490565b61243c575f9350505050610802565b6001016123d8565b5060019695505050505050565b511590565b5f5f5f5f73__$144f4fe859debe4776cdef2b99f7b97a42$__6374d9a37e87896040518363ffffffff1660e01b81526004016124939291906139a5565b606060405180830381865af41580156124ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d291906139e2565b919450925090506124e4838635611ff5565b6125005760405162461bcd60e51b815260040161083290613461565b600287600a811115612514576125146133be565b14806125315750600387600a81111561252f5761252f6133be565b145b61254d5760405162461bcd60e51b815260040161083290613a0d565b600287600a811115612561576125616133be565b036125f75780156125e95760405162461bcd60e51b815260206004820152604660248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c65617365207573652069734269727468646174654265747765656e20696064820152651b9cdd19585960d21b608482015260a401610832565b611fbe6383aa7e8083613615565b801561267b5760405162461bcd60e51b815260206004820152604760248201527f5468652070726f6f6620757070657220626f756e64206d75737420626520302c60448201527f20706c6561736520757365206973457870697279446174654265747765656e206064820152661a5b9cdd19585960ca1b608482015260a401610832565b50861491506109d49050565b5f818152600160205260408120546001600160a01b031680610b565760405162461bcd60e51b815260206004820152601260248201527115995c9a599a595c881b9bdd08199bdd5b9960721b6044820152606401610832565b6002546040516383578c1160e01b815260016004820152602481018390526001600160a01b03909116906383578c1190604401602060405180830381865afa15801561272e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612752919061377d565b611e005760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420636572746966696361746520726567697374727920726f6f6044820152601d60fa1b6064820152608401610832565b600280546040516383578c1160e01b81526004810192909252602482018390526001600160a01b0316906383578c1190604401602060405180830381865afa1580156127f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061281a919061377d565b611e005760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206369726375697420726567697374727920726f6f740000006044820152606401610832565b5f5f8360028151811061287b5761287b613524565b60200260200101515f1c90506109d48184611ff5565b5f805b6128a16020840184613672565b90508110156129fb575f600860026128b986806136cb565b86906128c860208a018a613672565b888181106128d8576128d8613524565b90506020020135886128ea9190613628565b926128f793929190613be3565b6040516020016129089291906134ff565b60408051601f19818403018152908290526129229161350e565b602060405180830381855afa15801561293d573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906129609190613409565b901c905084828151811061297657612976613524565b602002602001015181146129c15760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590818dbdb5b5a5d1b595b9d60721b6044820152606401610832565b6129ce6020850185613672565b838181106129de576129de613524565b90506020020135836129f09190613628565b925050600101612894565b50612a0682806136cb565b90508114610f3e5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420636f6d6d697474656420696e70757473206c656e677468006044820152606401610832565b60038110611e00575f5ffd5b5f60408284031215612a72575f5ffd5b50919050565b5f5f5f60608486031215612a8a575f5ffd5b8335612a9581612a56565b92506020840135612aa581612a56565b915060408401356001600160401b03811115612abf575f5ffd5b612acb86828701612a62565b9150509250925092565b8015158114611e00575f5ffd5b5f60208284031215612af2575f5ffd5b813561080281612ad5565b5f60208284031215612b0d575f5ffd5b81356001600160401b03811115612b22575f5ffd5b6109d484828501612a62565b6001600160a01b0381168114611e00575f5ffd5b5f60208284031215612b52575f5ffd5b813561080281612b2e565b5f60808284031215612a72575f5ffd5b5f5f5f60608486031215612b7f575f5ffd5b8335925060208401356001600160401b03811115612b9b575f5ffd5b612ba786828701612a62565b92505060408401356001600160401b03811115612bc2575f5ffd5b612acb86828701612b5d565b60ff81168114611e00575f5ffd5b5f5f5f60608486031215612bee575f5ffd5b8335612bf981612bce565b925060208401356001600160401b03811115612b9b575f5ffd5b5f5f5f5f60808587031215612c26575f5ffd5b843593506020850135925060408501356001600160401b03811115612c49575f5ffd5b612c5587828801612a62565b92505060608501356001600160401b03811115612c70575f5ffd5b612c7c87828801612b5d565b91505092959194509250565b634e487b7160e01b5f52604160045260245ffd5b60405161010081016001600160401b0381118282101715612cbf57612cbf612c88565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612ced57612ced612c88565b604052919050565b5f6001600160401b03821115612d0d57612d0d612c88565b5060051b60200190565b5f6001600160401b03821115612d2f57612d2f612c88565b50601f01601f191660200190565b5f5f60408385031215612d4e575f5ffd5b82356001600160401b03811115612d63575f5ffd5b8301601f81018513612d73575f5ffd5b8035612d86612d8182612cf5565b612cc5565b8082825260208201915060208360051b850101925087831115612da7575f5ffd5b602084015b83811015612e275780356001600160401b03811115612dc9575f5ffd5b8501603f81018a13612dd9575f5ffd5b6020810135612dea612d8182612d17565b8181526040838301018c1015612dfe575f5ffd5b816040840160208301375f60208383010152808652505050602083019250602081019050612dac565b50945050505060208301356001600160401b03811115612e45575f5ffd5b612e5185828601612a62565b9150509250929050565b5f60208284031215612e6b575f5ffd5b5035919050565b5f5f83601f840112612e82575f5ffd5b5081356001600160401b03811115612e98575f5ffd5b6020830191508360208260051b8501011115612eb2575f5ffd5b9250929050565b5f5f83601f840112612ec9575f5ffd5b5081356001600160401b03811115612edf575f5ffd5b602083019150836020828501011115612eb2575f5ffd5b5f5f5f5f5f5f60608789031215612f0b575f5ffd5b86356001600160401b03811115612f20575f5ffd5b612f2c89828a01612e72565b90975095505060208701356001600160401b03811115612f4a575f5ffd5b612f5689828a01612eb9565b90955093505060408701356001600160401b03811115612f74575f5ffd5b612f8089828a01612eb9565b979a9699509497509295939492505050565b5f5f60208385031215612fa3575f5ffd5b82356001600160401b03811115612fb8575f5ffd5b612fc485828601612e72565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6020815260018060a01b038251166020820152602082015160408201525f60408301516060808401526109d46080840182612fd0565b5f5f5f5f60408587031215613047575f5ffd5b84356001600160401b0381111561305c575f5ffd5b61306887828801612e72565b90955093505060208501356001600160401b03811115613086575f5ffd5b61309287828801612e72565b95989497509550505050565b5f5f5f5f608085870312156130b1575f5ffd5b84356130bc81612bce565b935060208501356130cc81612bce565b925060408501356001600160401b03811115612c49575f5ffd5b5f602082840312156130f6575f5ffd5b81356001600160401b0381111561310b575f5ffd5b820160608185031215610802575f5ffd5b5f5f6040838503121561312d575f5ffd5b82356001600160401b03811115613142575f5ffd5b61314e85828601612a62565b925050602083013561315f81612ad5565b809150509250929050565b602081525f82516101006020840152613187610120840182612fd0565b90506020840151601f198483030160408501526131a48282612fd0565b9150506040840151601f198483030160608501526131c28282612fd0565b9150506060840151601f198483030160808501526131e08282612fd0565b9150506080840151601f198483030160a08501526131fe8282612fd0565b91505060a0840151601f198483030160c085015261321c8282612fd0565b91505060c0840151601f198483030160e085015261323a8282612fd0565b91505060e0840151601f1984830301610100850152610b1f8282612fd0565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6001600160fb1b03831115613298575f5ffd5b8260051b80836020870137939093016020019392505050565b5f8135601e19833603018082126132c6575f5ffd5b602091840191820191356001600160401b038111156132e3575f5ffd5b8036038313156132f1575f5ffd5b60408652613303604087018285613259565b9250506020840135818112613316575f5ffd5b8401602081019150356001600160401b03811115613332575f5ffd5b8060051b3603821315613343575f5ffd5b8583036020870152613356838284613281565b9695505050505050565b602081525f610b5360208301846132b1565b5f5f5f5f60808587031215613385575f5ffd5b845160208601519094506002811061339b575f5ffd5b6040860151606087015191945092506133b381612a56565b939692955090935050565b634e487b7160e01b5f52602160045260245ffd5b6020808252601a908201527f4e6f7420617574686f72697a65643a2061646d696e206f6e6c79000000000000604082015260600190565b5f60208284031215613419575f5ffd5b5051919050565b5f5f5f60608486031215613432575f5ffd5b8351602085015190935061344581612bce565b604085015190925061345681612bce565b809150509250925092565b6020808252604b908201527f5468652063757272656e742064617465207573656420696e207468652070726f60408201527f6f6620646f6573206e6f742066616c6c2077697468696e207468652076616c6960608201526a191a5d1e481c195c9a5bd960aa1b608082015260a00190565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115610b5657610b566134d2565b818382375f9101908152919050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52603260045260245ffd5b5f82601f830112613547575f5ffd5b8151602083015f61355a612d8184612d17565b905082815285838301111561356d575f5ffd5b8282602083015e5f92810160200192909252509392505050565b5f60208284031215613597575f5ffd5b81516001600160401b038111156135ac575f5ffd5b6109d484828501613538565b602081525f610b536020830184612fd0565b5f5f5f606084860312156135dc575f5ffd5b83516135e781612b2e565b6020850151604086015191945092506001600160401b03811115613609575f5ffd5b612acb86828701613538565b81810381811115610b5657610b566134d2565b80820180821115610b5657610b566134d2565b60ff8181168382160190811115610b5657610b566134d2565b5f8235605e19833603018112613668575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613687575f5ffd5b8301803591506001600160401b038211156136a0575f5ffd5b6020019150600581901b3603821315612eb2575f5ffd5b5f8235607e19833603018112613668575f5ffd5b5f5f8335601e198436030181126136e0575f5ffd5b8301803591506001600160401b038211156136f9575f5ffd5b602001915036819003821315612eb2575f5ffd5b5f5f8585111561371b575f5ffd5b83861115613727575f5ffd5b5050600583901b0193919092039150565b5f8235603e19833603018112613668575f5ffd5b604081525f61375f604083018688613259565b8281036020840152613772818587613281565b979650505050505050565b5f6020828403121561378d575f5ffd5b815161080281612ad5565b5f5f604083850312156137a9575f5ffd5b82516001600160401b038111156137be575f5ffd5b6137ca85828601613538565b92505060208301516001600160401b038111156137e5575f5ffd5b612e5185828601613538565b604081525f6138036040830185612fd0565b905082151560208301529392505050565b5f60208284031215613824575f5ffd5b81516001600160401b03811115613839575f5ffd5b8201610100818503121561384b575f5ffd5b613853612c9c565b81516001600160401b03811115613868575f5ffd5b61387486828501613538565b82525060208201516001600160401b0381111561388f575f5ffd5b61389b86828501613538565b60208301525060408201516001600160401b038111156138b9575f5ffd5b6138c586828501613538565b60408301525060608201516001600160401b038111156138e3575f5ffd5b6138ef86828501613538565b60608301525060808201516001600160401b0381111561390d575f5ffd5b61391986828501613538565b60808301525060a08201516001600160401b03811115613937575f5ffd5b61394386828501613538565b60a08301525060c08201516001600160401b03811115613961575f5ffd5b61396d86828501613538565b60c08301525060e08201516001600160401b0381111561398b575f5ffd5b61399786828501613538565b60e083015250949350505050565b604081525f6139b760408301856132b1565b9050600b83106139d557634e487b7160e01b5f52602160045260245ffd5b8260208301529392505050565b5f5f5f606084860312156139f4575f5ffd5b5050815160208301516040909301519094929350919050565b602080825260129082015271496e76616c69642070726f6f66207479706560701b604082015260600190565b60208082526052908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c656173652075736520697342697274686461746541626060820152711bdd9953dc915c5d585b081a5b9cdd19585960721b608082015260a00190565b60208082526053908201527f5468652070726f6f6620757070657220626f756e64206d757374206265206e6f60408201527f6e2d7a65726f2c20706c65617365207573652069734578706972794461746541606082015272189bdd9953dc915c5d585b081a5b9cdd195859606a1b608082015260a00190565b5f5f60408385031215613b3b575f5ffd5b82516001600160401b03811115613b50575f5ffd5b8301601f81018513613b60575f5ffd5b8051613b6e612d8182612cf5565b8082825260208201915060208360051b850101925087831115613b8f575f5ffd5b602084015b83811015613bcf5780516001600160401b03811115613bb1575f5ffd5b613bc08a602083890101613538565b84525060209283019201613b94565b506020969096015195979596505050505050565b5f5f85851115613bf1575f5ffd5b83861115613bfd575f5ffd5b505082019391909203915056fea2646970667358221220f991155c5f0495dd21a11592eb81a72baddd6126ad66ff51d0de5dd26a8c865164736f6c634300081d0033",
974
- sourceMap: "706:30507:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23756:915;;;;;;:::i;:::-;;:::i;:::-;;;1155:14:34;;1148:22;1130:41;;1118:2;1103:18;23756:915:26;;;;;;;;2527:118;;;;;;:::i;:::-;;:::i;:::-;;23118:224;;;;;;:::i;:::-;;:::i;3178:206::-;;;;;;:::i;:::-;;:::i;14705:261::-;;;;;;:::i;:::-;;:::i;4538:543::-;;;;;;:::i;:::-;;:::i;14091:279::-;;;;;;:::i;:::-;;:::i;15830:247::-;;;;;;:::i;:::-;;:::i;17636:282::-;;;;;;:::i;:::-;;:::i;738:69::-;;804:1;738:69;;;;;5120:25:34;;;5108:2;5093:18;738:69:26;4974:177:34;20526:220:26;;;;;;:::i;:::-;;:::i;22299:228::-;;;;;;:::i;:::-;;:::i;976:18::-;;;;;-1:-1:-1;;;976:18:26;;;;;;880:67;;944:1;880:67;;811:65;;873:1;811:65;;2294:229;;;;;;:::i;:::-;;:::i;21065:227::-;;;;;;:::i;:::-;;:::i;1084:53::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1084:53:26;;;;;;-1:-1:-1;;;;;8330:32:34;;;8312:51;;8300:2;8285:18;1084:53:26;8166:203:34;7831:283:26;;;;;;:::i;:::-;;:::i;25010:706::-;;;;;;:::i;:::-;;:::i;19402:250::-;;;;;;:::i;:::-;;:::i;2943:231::-;;;;;;:::i;:::-;;:::i;18259:264::-;;;;;;:::i;:::-;;:::i;22680:300::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15265:263::-;;;;;;:::i;:::-;;:::i;2649:290::-;;;;;;:::i;:::-;;:::i;16979:264::-;;;;;;:::i;:::-;;:::i;13445:261::-;;;;;;:::i;:::-;;:::i;1211:33::-;;;;;-1:-1:-1;;;;;1211:33:26;;;12890:259;;;;;;:::i;:::-;;:::i;5355:224::-;;;;;;:::i;:::-;;:::i;16415:262::-;;;;;;:::i;:::-;;:::i;5936:768::-;;;;;;:::i;:::-;;:::i;21681:221::-;;;;;;:::i;:::-;;:::i;7014:543::-;;;;;;:::i;:::-;;:::i;18828:266::-;;;;;;:::i;:::-;;:::i;27654:3557::-;;;;;;:::i;:::-;;:::i;:::-;;;;13891:14:34;;13884:22;13866:41;;13938:2;13923:18;;13916:34;;;;13839:18;27654:3557:26;13698:258:34;3906:322:26;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;952:20::-;;;;;-1:-1:-1;;;;;952:20:26;;;8394:214;;;;;;:::i;:::-;;:::i;23756:915::-;23892:4;23905:19;23926:23;23951:13;23966:36;24006:15;:39;24046:11;24006:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23904:154;;-1:-1:-1;23904:154:26;;-1:-1:-1;23904:154:26;-1:-1:-1;23904:154:26;-1:-1:-1;24064:17:26;24099:22;24084:11;:37;;;;;;;;:::i;:::-;;24064:57;;24127:18;24174:13;24148:39;;;;;;;;:::i;:::-;:22;:39;;;;;;;;:::i;:::-;;;-1:-1:-1;24193:25:26;5336:66:19;24222:44:26;;:78;;;;-1:-1:-1;24277:6:26;24271:2;:12;;;;;;;;:::i;:::-;;:28;;;-1:-1:-1;24293:6:26;24287:2;:12;;;;;;;;:::i;:::-;;24271:28;24221:173;;;-1:-1:-1;5508:66:19;24306:49:26;;:87;;;;-1:-1:-1;24366:10:26;24360:2;:16;;;;;;;;:::i;:::-;;:32;;;-1:-1:-1;24386:6:26;24380:2;:12;;;;;;;;:::i;:::-;;24360:32;24193:201;-1:-1:-1;24400:23:26;4953:66:19;24427:34:26;;:68;;;;-1:-1:-1;24472:6:26;24466:2;:12;;;;;;;;:::i;:::-;;:28;;;-1:-1:-1;24488:6:26;24482:2;:12;;;;;;;;:::i;:::-;;24466:28;24426:152;;;-1:-1:-1;5174:66:19;24501:38:26;;:76;;;;-1:-1:-1;24550:10:26;24544:2;:16;;;;;;;;:::i;:::-;;:32;;;-1:-1:-1;24570:6:26;24564:2;:12;;;;;;;;:::i;:::-;;24544:32;24400:178;;24591:12;:29;;;;;24607:13;24591:29;:53;;;;;24624:20;24591:53;:75;;;;;24648:18;24591:75;24584:82;;;;;;;;;;23756:915;;;;;;:::o;2527:118::-;2157:5;;-1:-1:-1;;;;;2157:5:26;2143:10;:19;2135:58;;;;-1:-1:-1;;;2135:58:26;;;;;;;:::i;:::-;;;;;;;;;2585:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;2585:16:26::1;-1:-1:-1::0;;;;2585:16:26;;::::1;;::::0;;2612:28:::1;::::0;::::1;::::0;::::1;::::0;2594:7;1155:14:34;1148:22;1130:41;;1118:2;1103:18;;990:187;2612:28:26::1;;;;;;;;2527:118:::0;:::o;23118:224::-;23237:52;;-1:-1:-1;;;23237:52:26;;23208:26;;23237:15;;:39;;:52;;23277:11;;23237:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23208:81;;23295:42;23318:18;23295:22;:42::i;:::-;23202:140;23118:224;:::o;3178:206::-;2157:5;;-1:-1:-1;;;;;2157:5:26;2143:10;:19;2135:58;;;;-1:-1:-1;;;2135:58:26;;;;;;;:::i;:::-;-1:-1:-1;;;;;3262:27:26;::::1;3254:76;;;::::0;-1:-1:-1;;;3254:76:26;;19820:2:34;3254:76:26::1;::::0;::::1;19802:21:34::0;19859:2;19839:18;;;19832:30;19898:34;19878:18;;;19871:62;-1:-1:-1;;;19949:18:34;;;19942:34;19993:19;;3254:76:26::1;19618:400:34::0;3254:76:26::1;3336:12;:43:::0;;-1:-1:-1;;;;;;3336:43:26::1;-1:-1:-1::0;;;;;3336:43:26;;;::::1;::::0;;;::::1;::::0;;3178:206::o;14705:261::-;14865:4;14884:77;14904:7;14913:19;14934:11;14947:13;14884:19;:77::i;:::-;14877:84;14705:261;-1:-1:-1;;;;14705:261:26:o;4538:543::-;4688:4;4701:19;4722:9;4733;4746:15;:33;4780:11;4746:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4700:92;;-1:-1:-1;4700:92:26;-1:-1:-1;4700:92:26;-1:-1:-1;4806:73:26;4700:92;4841:37;;4806:21;:73::i;:::-;4798:161;;;;-1:-1:-1;;;4798:161:26;;;;;;;:::i;:::-;4973:8;;;;4965:85;;;;;-1:-1:-1;;;4965:85:26;;21204:2:34;4965:85:26;;;21186:21:34;21223:18;;;21216:30;;;;21282:34;21262:18;;;21255:62;21353:34;21333:18;;;21326:62;21405:19;;4965:85:26;21002:428:34;4965:85:26;-1:-1:-1;5063:13:26;;;;;;;;-1:-1:-1;;4538:543:26;;;;;:::o;14091:279::-;14266:4;14285:80;14299:7;14308;14317:19;14338:11;14351:13;14285;:80::i;:::-;14278:87;14091:279;-1:-1:-1;;;;;14091:279:26:o;15830:247::-;15979:4;15998:74;16012:4;16018;16024:19;16045:11;16058:13;15998;:74::i;17636:282::-;17812:4;17831:82;17845:7;17854;17863:21;17886:11;17899:13;17831;:82::i;20526:220::-;20647:4;20666:75;20683:11;20696:31;20729:11;20666:16;:75::i;:::-;20659:82;;20526:220;;;;;:::o;22299:228::-;22424:4;22443:79;22460:11;22473:35;22510:11;22443:16;:79::i;2294:229::-;2157:5;;-1:-1:-1;;;;;2157:5:26;2143:10;:19;2135:58;;;;-1:-1:-1;;;2135:58:26;;;;;;;:::i;:::-;-1:-1:-1;;;;;2368:22:26;::::1;2360:63;;;::::0;-1:-1:-1;;;2360:63:26;;21637:2:34;2360:63:26::1;::::0;::::1;21619:21:34::0;21676:2;21656:18;;;21649:30;21715;21695:18;;;21688:58;21763:18;;2360:63:26::1;21435:352:34::0;2360:63:26::1;2429:16;2448:5:::0;;-1:-1:-1;;;;;2459:16:26;;::::1;-1:-1:-1::0;;;;;;2459:16:26;::::1;::::0;::::1;::::0;;2486:32:::1;::::0;2448:5;;;::::1;::::0;;;2486:32:::1;::::0;2429:16;2486:32:::1;2354:169;2294:229:::0;:::o;21065:227::-;21189:4;21208:79;21225:11;21238:35;21275:11;21208:16;:79::i;7831:283::-;7974:4;8003:1;7994:6;:10;;;7986:53;;;;-1:-1:-1;;;7986:53:26;;21994:2:34;7986:53:26;;;21976:21:34;22033:2;22013:18;;;22006:30;22072:32;22052:18;;;22045:60;22122:18;;7986:53:26;21792:354:34;7986:53:26;8052:57;8070:10;8079:1;8070:6;:10;:::i;:::-;8082:11;8095:13;8052:17;:57::i;25010:706::-;25149:4;25263:17;25283:27;25303:6;;25283:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25283:19:26;;-1:-1:-1;;;25283:27:26:i;:::-;:92;;25374:1;25338:32;25362:6;;25345:24;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;25345:24:26;;;;;;;;;;25338:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;;25283:92;;;25327:1;25283:92;25263:112;;25475:20;25498:26;25518:5;;25498:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25498:19:26;;-1:-1:-1;;;25498:26:26:i;:::-;:90;;25587:1;25552:31;25576:5;;25559:23;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;25559:23:26;;;;;;;;;;25552:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;25498:90;;;25541:1;25498:90;25475:113;;25642:9;25601:12;;1108:1:19;25601:37:26;;;;;;;:::i;:::-;;;;;;;:50;:110;;;;;25699:12;25655;;1147:1:19;25655:40:26;;;;;;;:::i;:::-;;;;;;;:56;25601:110;25594:117;25010:706;-1:-1:-1;;;;;;;;;25010:706:26:o;19402:250::-;19552:4;19571:76;19585:4;19591;19597:21;19620:11;19633:13;19571;:76::i;2943:231::-;2157:5;;-1:-1:-1;;;;;2157:5:26;2143:10;:19;2135:58;;;;-1:-1:-1;;;2135:58:26;;;;;;;:::i;:::-;3029:9:::1;3024:146;3044:21:::0;;::::1;3024:146;;;3087:18;:33;3106:10;;3117:1;3106:13;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;3087:33:::0;;-1:-1:-1;3087:33:26;::::1;::::0;;;;;;-1:-1:-1;3087:33:26;3080:40;;-1:-1:-1;;;;;;3080:40:26::1;::::0;;3149:10;;3160:1;3149:13;;::::1;;;;;:::i;:::-;;;;;;;3133:30;;;;;;;;;;3067:3;;3024:146;;;;2943:231:::0;;:::o;18259:264::-;18420:4;18439:79;18459:7;18468:21;18491:11;18504:13;18439:19;:79::i;22680:300::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;22819:47:26;;-1:-1:-1;;;22819:47:26;;22799:17;;22819:15;;:34;;:47;;22854:11;;22819:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22819:47:26;;;;;;;;;;;;:::i;:::-;22941:34;;-1:-1:-1;;;22941:34:26;;22799:67;;-1:-1:-1;22941:15:26;;:28;;:34;;22799:67;;22941:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22941:34:26;;;;;;;;;;;;:::i;:::-;22917:20;;;22872:103;22898:17;;;22872:103;-1:-1:-1;;;;;22872:103:26;;;-1:-1:-1;22873:9:26;22680:300;-1:-1:-1;22680:300:26:o;15265:263::-;15418:4;15437:86;15457:16;15467:6;15457:7;:16;:::i;:::-;15475:19;15496:11;15509:13;15437:19;:86::i;2649:290::-;2157:5;;-1:-1:-1;;;;;2157:5:26;2143:10;:19;2135:58;;;;-1:-1:-1;;;2135:58:26;;;;;;;:::i;:::-;2774:9:::1;2769:166;2789:21:::0;;::::1;2769:166;;;2861:9;;2871:1;2861:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2825:18;:33;2844:10;;2855:1;2844:13;;;;;;;:::i;:::-;;;;;;;2825:33;;;;;;;;;;;;:48;;;;;-1:-1:-1::0;;;;;2825:48:26::1;;;;;-1:-1:-1::0;;;;;2825:48:26::1;;;;;;2915:9;;2925:1;2915:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2886:42:26::1;2900:10;;2911:1;2900:13;;;;;;;:::i;:::-;;;;;;;2886:42;;;;;;;;;;2812:3;;2769:166;;;;2649:290:::0;;;;:::o;16979:264::-;17132:4;17151:87;17170:16;:7;17180:6;17170:16;:::i;:::-;17188:21;17211:11;17224:13;17151:18;:87::i;13445:261::-;13597:4;13616:85;13635:16;:7;13645:6;13635:16;:::i;:::-;13653:19;13674:11;13687:13;13616:18;:85::i;12890:259::-;13049:4;13068:76;13087:7;13096:19;13117:11;13130:13;13068:18;:76::i;5355:224::-;5498:4;5517:57;5535:10;:6;5544:1;5535:10;:::i;:::-;5547:11;5560:13;5517:17;:57::i;16415:262::-;16575:4;16594:78;16613:7;16622:21;16645:11;16658:13;16594:18;:78::i;5936:768::-;6099:4;6112:19;6133:9;6144;6157:15;:33;6191:11;6157:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6111:92;;-1:-1:-1;6111:92:26;-1:-1:-1;6111:92:26;-1:-1:-1;6217:73:26;6111:92;6252:37;;6217:21;:73::i;:::-;6209:161;;;;-1:-1:-1;;;6209:161:26;;;;;;;:::i;:::-;6394:6;6384:16;;:6;:16;;;;6376:74;;;;-1:-1:-1;;;6376:74:26;;25445:2:34;6376:74:26;;;25427:21:34;25484:2;25464:18;;;25457:30;25523:34;25503:18;;;25496:62;-1:-1:-1;;;25574:18:34;;;25567:43;25627:19;;6376:74:26;25243:409:34;6376:74:26;6464:3;:8;;6471:1;6464:8;6456:97;;;;-1:-1:-1;;;6456:97:26;;25859:2:34;6456:97:26;;;25841:21:34;25898:2;25878:18;;;25871:30;25937:34;25917:18;;;25910:62;26008:34;25988:18;;;25981:62;-1:-1:-1;;;26059:19:34;;;26052:43;26112:19;;6456:97:26;25657:480:34;6456:97:26;6567:3;:8;;6574:1;6567:8;6559:97;;;;-1:-1:-1;;;6559:97:26;;26344:2:34;6559:97:26;;;26326:21:34;26383:2;26363:18;;;26356:30;26422:34;26402:18;;;26395:62;26493:34;26473:18;;;26466:62;-1:-1:-1;;;26544:19:34;;;26537:43;26597:19;;6559:97:26;26142:480:34;6559:97:26;6679:3;6669:13;;:6;:13;;;:30;;;;;6696:3;6686:13;;:6;:13;;;6669:30;6662:37;5936:768;-1:-1:-1;;;;;;;;5936:768:26:o;21681:221::-;21803:4;21822:75;21839:11;21852:31;21885:11;21822:16;:75::i;7014:543::-;7164:4;7177:19;7198:9;7209;7222:15;:33;7256:11;7222:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7176:92;;-1:-1:-1;7176:92:26;-1:-1:-1;7176:92:26;-1:-1:-1;7282:73:26;7176:92;7317:37;;7282:21;:73::i;:::-;7274:161;;;;-1:-1:-1;;;7274:161:26;;;;;;;:::i;:::-;7449:8;;;;7441:85;;;;;-1:-1:-1;;;7441:85:26;;26829:2:34;7441:85:26;;;26811:21:34;26848:18;;;26841:30;;;;26907:34;26887:18;;;26880:62;26978:34;26958:18;;;26951:62;27030:19;;7441:85:26;26627:428:34;7441:85:26;7539:13;;;;;;;;-1:-1:-1;;;7014:543:26;;;;;:::o;18828:266::-;18982:4;19001:88;19021:16;19031:6;19021:7;:16;:::i;:::-;19039:21;19062:11;19075:13;19001:19;:88::i;27654:3557::-;27761:12;2249:6;;27761:12;;-1:-1:-1;;;2249:6:26;;;;2248:7;2240:38;;;;-1:-1:-1;;;2240:38:26;;27262:2:34;2240:38:26;;;27244:21:34;27301:2;27281:18;;;27274:30;-1:-1:-1;;;27320:18:34;;;27313:48;27378:18;;2240:38:26;27060:342:34;2240:38:26;27884:16:::1;27903:51;27916:28;:6:::0;;:28:::1;:::i;:::-;:37;27903:12;:51::i;:::-;27884:70:::0;-1:-1:-1;28003:112:26::1;28028:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;977:1:19;28028:86:26;;;;;;;:::i;:::-;;;;;;;28003:24;:112::i;:::-;28160:104;28181:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;1029:1:19;28181:82:26;;;;;;;:::i;:::-;;;;;;;28160:20;:104::i;:::-;28322:98;28332:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;28322:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28375:20:26::1;::::0;-1:-1:-1;;;28375:20:26::1;::::0;::::1;::::0;::::1;:::i;:::-;:44;28322:9;:98::i;:::-;28307:180;;;::::0;-1:-1:-1;;;28307:180:26;;28840:2:34;28307:180:26::1;::::0;::::1;28822:21:34::0;28879:2;28859:18;;;28852:30;28918:34;28898:18;;;28891:62;-1:-1:-1;;;28969:18:34;;;28962:49;29028:19;;28307:180:26::1;28638:415:34::0;28307:180:26::1;28831:112;28844:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;28887:20;;::::0;::::1;:6:::0;:20:::1;:::i;:::-;:27;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;28916:20;;::::0;::::1;:6:::0;:20:::1;:::i;:::-;:26;::::0;::::1;::::0;::::1;::::0;::::1;:::i;28831:112::-;28823:148;;;::::0;-1:-1:-1;;;28823:148:26;;29787:2:34;28823:148:26::1;::::0;::::1;29769:21:34::0;29826:2;29806:18;;;29799:30;29865:25;29845:18;;;29838:53;29908:18;;28823:148:26::1;29585:347:34::0;28823:148:26::1;29039:249;29125:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;1195:1:19;::::0;29254::26::1;29203:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:52;::::0;;-1:-1:-1;29203:52:26::1;:::i;:::-;29125:131;;;;;;;:::i;:::-;29039:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29264:18:26::1;::::0;-1:-1:-1;;;29264:18:26::1;::::0;::::1;::::0;::::1;:::i;:::-;29039:21;:249::i;:::-;29295:27;29347:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;29440:1;29389:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:52;::::0;;-1:-1:-1;29389:52:26::1;:::i;:::-;29347:95;;;;;;;:::i;:::-;;;;;;;29339:104;;29325:119;;;;;;;;:::i;:::-;29295:149:::0;-1:-1:-1;29708:39:26::1;29691:13;:56;;;;;;;;:::i;:::-;;;:112;;;;-1:-1:-1::0;29768:35:26::1;29751:13;:52;;;;;;;;:::i;:::-;;;29691:112;29690:152;;;-1:-1:-1::0;29814:20:26::1;;::::0;::::1;:6:::0;:20:::1;:::i;:::-;:28;::::0;;;;;::::1;;;:::i;:::-;29675:223;;;::::0;-1:-1:-1;;;29675:223:26;;30833:2:34;29675:223:26::1;::::0;::::1;30815:21:34::0;30872:2;30852:18;;;30845:30;30911:34;30891:18;;;30884:62;-1:-1:-1;;;30962:18:34;;;30955:38;31010:19;;29675:223:26::1;30631:404:34::0;29675:223:26::1;30129:34;30112:13;:51;;;;;;;;:::i;:::-;;:83;;;-1:-1:-1::0;30167:20:26::1;;::::0;::::1;:6:::0;:20:::1;:::i;:::-;:28;::::0;;;;;::::1;;;:::i;:::-;30097:157;;;::::0;-1:-1:-1;;;30097:157:26;;31242:2:34;30097:157:26::1;::::0;::::1;31224:21:34::0;31281:2;31261:18;;;31254:30;31320:34;31300:18;;;31293:62;-1:-1:-1;;;31371:18:34;;;31364:41;31422:19;;30097:157:26::1;31040:407:34::0;30097:157:26::1;1337:1:19;30484:28:26;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:111;::::0;;-1:-1:-1;30484:111:26::1;:::i;:::-;30434:18;;::::0;::::1;:6:::0;:18:::1;:::i;:::-;:39;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:46;;:161;30426:211;;;::::0;-1:-1:-1;;;30426:211:26;;32204:2:34;30426:211:26::1;::::0;::::1;32186:21:34::0;32243:2;32223:18;;;32216:30;32282:34;32262:18;;;32255:62;-1:-1:-1;;;32333:18:34;;;32326:35;32378:19;;30426:211:26::1;32002:401:34::0;30426:211:26::1;-1:-1:-1::0;;;;;30756:26:26;::::1;;30783:28;:6:::0;;:28:::1;:::i;:::-;:34;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;30819:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;30756:105;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30746:115:::0;-1:-1:-1;30924:29:26::1;31007:1;30956:28;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:52;::::0;;-1:-1:-1;30956:52:26::1;:::i;:::-;30924:84:::0;-1:-1:-1;31033:28:26::1;:6:::0;;:28:::1;:::i;:::-;:41;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;31075:21;31033:64;;;;;;;:::i;:::-;;;;;;;31014:83;;31172:34;;;27654:3557:::0;;;:::o;3906:322::-;4018:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4018:34:26;4093:51;;-1:-1:-1;;;4093:51:26;;4063:26;;4093:15;;:38;;:51;;4132:11;;4093:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4093:51:26;;;;;;;;;;;;:::i;:::-;4166:57;;-1:-1:-1;;;4166:57:26;;4060:84;;-1:-1:-1;4166:15:26;;-1:-1:-1;4166:32:26;;:57;;4060:84;;4214:8;;4166:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4166:57:26;;;;;;;;;;;;:::i;8394:214::-;8534:4;8553:50;8566:3;8571;8576:11;8589:13;8553:12;:50::i;27157:204::-;27247:12;;:62;;-1:-1:-1;;;27247:62:26;;944:1;27247:62;;;36685:25:34;36726:18;;;36719:34;;;-1:-1:-1;;;;;27247:12:26;;;;:24;;36658:18:34;;27247:62:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27232:124;;;;-1:-1:-1;;;27232:124:26;;36966:2:34;27232:124:26;;;36948:21:34;37005:2;36985:18;;;36978:30;37044:33;37024:18;;;37017:61;37095:18;;27232:124:26;36764:355:34;27232:124:26;27157:204;:::o;11306:1252::-;11487:4;11500:19;11521:11;11534;11549:15;:34;11584:11;11597:9;11549:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11499:108;;-1:-1:-1;11499:108:26;-1:-1:-1;11499:108:26;-1:-1:-1;11621:73:26;11499:108;11656:37;;11621:21;:73::i;:::-;11613:161;;;;-1:-1:-1;;;11613:161:26;;;;;;;:::i;:::-;11788:8;;11780:86;;;;-1:-1:-1;;;11780:86:26;;38321:2:34;11780:86:26;;;38303:21:34;38360:2;38340:18;;;38333:30;38399:34;38379:18;;;38372:62;38470:34;38450:18;;;38443:62;-1:-1:-1;;;38521:19:34;;;38514:32;38563:19;;11780:86:26;38119:469:34;11780:86:26;11893:19;11880:9;:32;;;;;;;;:::i;:::-;;:70;;;-1:-1:-1;11929:21:26;11916:9;:34;;;;;;;;:::i;:::-;;11880:70;11872:101;;;;-1:-1:-1;;;11872:101:26;;;;;;;:::i;:::-;11996:19;11983:9;:32;;;;;;;;:::i;:::-;;11979:575;;12033:3;12040:1;12033:8;12025:103;;;;-1:-1:-1;;;12025:103:26;;;;;;;:::i;:::-;12358:35;144:10:19;12358:3:26;:35;:::i;:::-;12347:7;:46;12340:53;;;;;;;11979:575;12422:3;12429:1;12422:8;12414:104;;;;-1:-1:-1;;;12414:104:26;;;;;;;:::i;:::-;12533:14;;;-1:-1:-1;12526:21:26;;-1:-1:-1;;12526:21:26;392:337:20;500:4;;546:35;558:23;546:9;:35;:::i;:::-;512:69;;619:9;600:15;:28;;:73;;;;;664:9;638:23;:35;600:73;:124;;;;-1:-1:-1;709:15:20;-1:-1:-1;683:41:20;392:337;-1:-1:-1;;;392:337:20:o;9751:1551:26:-;9947:4;9960:19;9981:11;9994;10009:15;:34;10044:11;10057:9;10009:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9959:108;;-1:-1:-1;9959:108:26;-1:-1:-1;9959:108:26;-1:-1:-1;10081:73:26;9959:108;10116:37;;10081:21;:73::i;:::-;10073:161;;;;-1:-1:-1;;;10073:161:26;;;;;;;:::i;:::-;10259:7;10248;:18;;10240:78;;;;-1:-1:-1;;;10240:78:26;;40125:2:34;10240:78:26;;;40107:21:34;40164:2;40144:18;;;40137:30;40203:34;40183:18;;;40176:62;-1:-1:-1;;;40254:18:34;;;40247:45;40309:19;;10240:78:26;39923:411:34;10240:78:26;10345:19;10332:9;:32;;;;;;;;:::i;:::-;;:70;;;-1:-1:-1;10381:21:26;10368:9;:34;;;;;;;;:::i;:::-;;10332:70;10324:101;;;;-1:-1:-1;;;10324:101:26;;;;;;;:::i;:::-;10448:19;10435:9;:32;;;;;;;;:::i;:::-;;10431:867;;10485:3;10492:1;10485:8;10477:103;;;;-1:-1:-1;;;10477:103:26;;40541:2:34;10477:103:26;;;40523:21:34;40580:2;40560:18;;;40553:30;40619:34;40599:18;;;40592:62;40690:34;40670:18;;;40663:62;-1:-1:-1;;;40741:19:34;;;40734:49;40800:19;;10477:103:26;40339:486:34;10477:103:26;10596:3;10603:1;10596:8;10588:103;;;;-1:-1:-1;;;10588:103:26;;;;;;;:::i;:::-;10922:35;144:10:19;10922:3:26;:35;:::i;:::-;10911:7;:46;:96;;;;-1:-1:-1;10972:35:26;144:10:19;10972:3:26;:35;:::i;:::-;10961:7;:46;10911:96;10904:103;;;;;;;10431:867;11036:3;11043:1;11036:8;11028:104;;;;-1:-1:-1;;;11028:104:26;;41032:2:34;11028:104:26;;;41014:21:34;41071:2;41051:18;;;41044:30;41110:34;41090:18;;;41083:62;41181:34;41161:18;;;41154:62;-1:-1:-1;;;41232:19:34;;;41225:50;41292:19;;11028:104:26;40830:487:34;11028:104:26;11148:3;11155:1;11148:8;11140:104;;;;-1:-1:-1;;;11140:104:26;;;;;;;:::i;:::-;11270:3;11259:7;:14;:32;;;;-1:-1:-1;11277:14:26;;;;9751:1551;-1:-1:-1;;;;;;;9751:1551:26:o;19656:559::-;19804:4;19817:32;19851:30;19885:15;:37;19923:11;19936:9;19885:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19885:61:26;;;;;;;;;;;;:::i;:::-;19816:130;;;;19978:22;19956:11;:18;:44;19952:77;;20017:5;20010:12;;;;;;19952:77;20039:9;20034:160;20058:22;20054:1;:26;20034:160;;;20100:55;20119:11;20131:1;20119:14;;;;;;;;:::i;:::-;;;;;;;20135:16;20152:1;20135:19;;;;;;;;:::i;:::-;;;;;;;234::24;;;;;;;211;;;;;;;;;;:42;;119:139;20100:55:26;20095:93;;20174:5;20167:12;;;;;;;20095:93;20082:3;;20034:160;;;-1:-1:-1;20206:4:26;;19656:559;-1:-1:-1;;;;;;19656:559:26:o;262:101:24:-;338:15;:20;;262:101::o;8612:1135:26:-;8792:4;8805:19;8826:11;8839;8854:15;:34;8889:11;8902:9;8854:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8804:108;;-1:-1:-1;8804:108:26;-1:-1:-1;8804:108:26;-1:-1:-1;8926:73:26;8804:108;8961:37;;8926:21;:73::i;:::-;8918:161;;;;-1:-1:-1;;;8918:161:26;;;;;;;:::i;:::-;9106:19;9093:9;:32;;;;;;;;:::i;:::-;;:70;;;-1:-1:-1;9142:21:26;9129:9;:34;;;;;;;;:::i;:::-;;9093:70;9085:101;;;;-1:-1:-1;;;9085:101:26;;;;;;;:::i;:::-;9209:19;9196:9;:32;;;;;;;;:::i;:::-;;9192:551;;9246:8;;9238:91;;;;-1:-1:-1;;;9238:91:26;;42702:2:34;9238:91:26;;;42684:21:34;42741:2;42721:18;;;42714:30;42780:34;42760:18;;;42753:62;42851:34;42831:18;;;42824:62;-1:-1:-1;;;42902:19:34;;;42895:37;42949:19;;9238:91:26;42500:474:34;9238:91:26;9559:35;144:10:19;9559:3:26;:35;:::i;9192:551::-;9623:8;;9615:92;;;;-1:-1:-1;;;9615:92:26;;43181:2:34;9615:92:26;;;43163:21:34;43220:2;43200:18;;;43193:30;43259:34;43239:18;;;43232:62;43330:34;43310:18;;;43303:62;-1:-1:-1;;;43381:19:34;;;43374:38;43429:19;;9615:92:26;42979:475:34;9615:92:26;-1:-1:-1;9722:14:26;;;-1:-1:-1;9715:21:26;;-1:-1:-1;9715:21:26;26527:210;26590:7;26624:28;;;:18;:28;;;;;;-1:-1:-1;;;;;26624:28:26;;26658:53;;;;-1:-1:-1;;;26658:53:26;;43661:2:34;26658:53:26;;;43643:21:34;43700:2;43680:18;;;43673:30;-1:-1:-1;;;43719:18:34;;;43712:48;43777:18;;26658:53:26;43459:342:34;26741:214:26;26835:12;;:66;;-1:-1:-1;;;26835:66:26;;:12;:66;;;36685:25:34;36726:18;;;36719:34;;;-1:-1:-1;;;;;26835:12:26;;;;:24;;36658:18:34;;26835:66:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26820:130;;;;-1:-1:-1;;;26820:130:26;;44008:2:34;26820:130:26;;;43990:21:34;44047:2;44027:18;;;44020:30;44086:34;44066:18;;;44059:62;-1:-1:-1;;;44137:18:34;;;44130:31;44178:19;;26820:130:26;43806:397:34;26959:194:26;27045:12;;;:58;;-1:-1:-1;;;27045:58:26;;;;;36685:25:34;;;;36726:18;;;36719:34;;;-1:-1:-1;;;;;27045:12:26;;:24;;36658:18:34;;27045:58:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27030:118;;;;-1:-1:-1;;;27030:118:26;;44410:2:34;27030:118:26;;;44392:21:34;44449:2;44429:18;;;44422:30;44488:31;44468:18;;;44461:59;44537:18;;27030:118:26;44208:353:34;3388:300:26;3506:4;3518:28;3557:12;1072:1:19;3557:44:26;;;;;;;;:::i;:::-;;;;;;;3549:53;;3518:84;;3615:68;3637:20;3659:23;3615:21;:68::i;25720:803::-;25852:14;;25876:458;25900:32;;;;:11;:32;:::i;:::-;:39;;25896:1;:43;25876:458;;;26034:28;26191:1;26065:122;26098:27;:11;;:27;:::i;:::-;26126:6;;26142:32;;;;:11;:32;:::i;:::-;26175:1;26142:35;;;;;;;:::i;:::-;;;;;;;26133:6;:44;;;;:::i;:::-;26098:80;;;;;;;:::i;:::-;26081:98;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26081:98:26;;;;;;;;;;26065:122;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:127;;26034:158;;26232:16;26249:1;26232:19;;;;;;;;:::i;:::-;;;;;;;26208:20;:43;26200:74;;;;-1:-1:-1;;;26200:74:26;;45386:2:34;26200:74:26;;;45368:21:34;45425:2;45405:18;;;45398:30;-1:-1:-1;;;45444:18:34;;;45437:48;45502:18;;26200:74:26;45184:342:34;26200:74:26;26292:32;;;;:11;:32;:::i;:::-;26325:1;26292:35;;;;;;;:::i;:::-;;;;;;;26282:45;;;;;:::i;:::-;;-1:-1:-1;;25941:3:26;;25876:458;;;-1:-1:-1;26448:27:26;:11;;:27;:::i;:::-;:34;;26438:6;:44;26430:88;;;;-1:-1:-1;;;26430:88:26;;45733:2:34;26430:88:26;;;45715:21:34;45772:2;45752:18;;;45745:30;45811:33;45791:18;;;45784:61;45862:18;;26430:88:26;45531:355:34;14:112;100:1;93:5;90:12;80:40;;116:1;113;106:12;131:159;195:5;240:2;231:6;226:3;222:16;218:25;215:45;;;256:1;253;246:12;215:45;-1:-1:-1;278:6:34;131:159;-1:-1:-1;131:159:34:o;295:690::-;431:6;439;447;500:2;488:9;479:7;475:23;471:32;468:52;;;516:1;513;506:12;468:52;555:9;542:23;574:42;610:5;574:42;:::i;:::-;635:5;-1:-1:-1;692:2:34;677:18;;664:32;705:44;664:32;705:44;:::i;:::-;768:7;-1:-1:-1;826:2:34;811:18;;798:32;-1:-1:-1;;;;;842:30:34;;839:50;;;885:1;882;875:12;839:50;908:71;971:7;962:6;951:9;947:22;908:71;:::i;:::-;898:81;;;295:690;;;;;:::o;1182:118::-;1268:5;1261:13;1254:21;1247:5;1244:32;1234:60;;1290:1;1287;1280:12;1305:241;1361:6;1414:2;1402:9;1393:7;1389:23;1385:32;1382:52;;;1430:1;1427;1420:12;1382:52;1469:9;1456:23;1488:28;1510:5;1488:28;:::i;1551:365::-;1642:6;1695:2;1683:9;1674:7;1670:23;1666:32;1663:52;;;1711:1;1708;1701:12;1663:52;1751:9;1738:23;-1:-1:-1;;;;;1776:6:34;1773:30;1770:50;;;1816:1;1813;1806:12;1770:50;1839:71;1902:7;1893:6;1882:9;1878:22;1839:71;:::i;1921:131::-;-1:-1:-1;;;;;1996:31:34;;1986:42;;1976:70;;2042:1;2039;2032:12;2057:247;2116:6;2169:2;2157:9;2148:7;2144:23;2140:32;2137:52;;;2185:1;2182;2175:12;2137:52;2224:9;2211:23;2243:31;2268:5;2243:31;:::i;2309:162::-;2375:5;2420:3;2411:6;2406:3;2402:16;2398:26;2395:46;;;2437:1;2434;2427:12;2476:742;2619:6;2627;2635;2688:2;2676:9;2667:7;2663:23;2659:32;2656:52;;;2704:1;2701;2694:12;2656:52;2749:23;;;-1:-1:-1;2847:2:34;2832:18;;2819:32;-1:-1:-1;;;;;2863:30:34;;2860:50;;;2906:1;2903;2896:12;2860:50;2929:71;2992:7;2983:6;2972:9;2968:22;2929:71;:::i;:::-;2919:81;;;3053:2;3042:9;3038:18;3025:32;-1:-1:-1;;;;;3072:8:34;3069:32;3066:52;;;3114:1;3111;3104:12;3066:52;3137:75;3204:7;3193:8;3182:9;3178:24;3137:75;:::i;3223:114::-;3307:4;3300:5;3296:16;3289:5;3286:27;3276:55;;3327:1;3324;3317:12;3342:759;3483:6;3491;3499;3552:2;3540:9;3531:7;3527:23;3523:32;3520:52;;;3568:1;3565;3558:12;3520:52;3607:9;3594:23;3626:29;3649:5;3626:29;:::i;:::-;3674:5;-1:-1:-1;3730:2:34;3715:18;;3702:32;-1:-1:-1;;;;;3746:30:34;;3743:50;;;3789:1;3786;3779:12;4106:863;4258:6;4266;4274;4282;4335:3;4323:9;4314:7;4310:23;4306:33;4303:53;;;4352:1;4349;4342:12;4303:53;4397:23;;;-1:-1:-1;4517:2:34;4502:18;;4489:32;;-1:-1:-1;4598:2:34;4583:18;;4570:32;-1:-1:-1;;;;;4614:30:34;;4611:50;;;4657:1;4654;4647:12;4611:50;4680:71;4743:7;4734:6;4723:9;4719:22;4680:71;:::i;:::-;4670:81;;;4804:2;4793:9;4789:18;4776:32;-1:-1:-1;;;;;4823:8:34;4820:32;4817:52;;;4865:1;4862;4855:12;4817:52;4888:75;4955:7;4944:8;4933:9;4929:24;4888:75;:::i;:::-;4878:85;;;4106:863;;;;;;;:::o;5156:127::-;5217:10;5212:3;5208:20;5205:1;5198:31;5248:4;5245:1;5238:15;5272:4;5269:1;5262:15;5288:255;5360:2;5354:9;5402:6;5390:19;;-1:-1:-1;;;;;5424:34:34;;5460:22;;;5421:62;5418:88;;;5486:18;;:::i;:::-;5522:2;5515:22;5288:255;:::o;5548:275::-;5619:2;5613:9;5684:2;5665:13;;-1:-1:-1;;5661:27:34;5649:40;;-1:-1:-1;;;;;5704:34:34;;5740:22;;;5701:62;5698:88;;;5766:18;;:::i;:::-;5802:2;5795:22;5548:275;;-1:-1:-1;5548:275:34:o;5828:182::-;5887:4;-1:-1:-1;;;;;5912:6:34;5909:30;5906:56;;;5942:18;;:::i;:::-;-1:-1:-1;5987:1:34;5983:14;5999:4;5979:25;;5828:182::o;6015:187::-;6064:4;-1:-1:-1;;;;;6089:6:34;6086:30;6083:56;;;6119:18;;:::i;:::-;-1:-1:-1;6185:2:34;6164:15;-1:-1:-1;;6160:29:34;6191:4;6156:40;;6015:187::o;6207:1769::-;6342:6;6350;6403:2;6391:9;6382:7;6378:23;6374:32;6371:52;;;6419:1;6416;6409:12;6371:52;6459:9;6446:23;-1:-1:-1;;;;;6484:6:34;6481:30;6478:50;;;6524:1;6521;6514:12;6478:50;6547:22;;6600:4;6592:13;;6588:27;-1:-1:-1;6578:55:34;;6629:1;6626;6619:12;6578:55;6669:2;6656:16;6692:63;6708:46;6747:6;6708:46;:::i;:::-;6692:63;:::i;:::-;6777:3;6801:6;6796:3;6789:19;6833:4;6828:3;6824:14;6817:21;;6890:4;6880:6;6877:1;6873:14;6869:2;6865:23;6861:34;6847:48;;6918:7;6910:6;6907:19;6904:39;;;6939:1;6936;6929:12;6904:39;6971:4;6967:2;6963:13;6985:749;7001:6;6996:3;6993:15;6985:749;;;7089:3;7076:17;-1:-1:-1;;;;;7112:11:34;7109:35;7106:55;;;7157:1;7154;7147:12;7106:55;7184:20;;7239:2;7231:11;;7227:25;-1:-1:-1;7217:53:34;;7266:1;7263;7256:12;7217:53;7320:4;7316:2;7312:13;7299:27;7354:55;7370:38;7399:8;7370:38;:::i;7354:55::-;7422:25;;;7466:39;7474:17;;;7466:39;7463:52;-1:-1:-1;7460:72:34;;;7528:1;7525;7518:12;7460:72;7591:8;7586:2;7582;7578:11;7571:4;7562:7;7558:18;7545:55;7655:1;7648:4;7637:8;7628:7;7624:22;7620:33;7613:44;7682:7;7677:3;7670:20;;;;7719:4;7714:3;7710:14;7703:21;;7027:4;7022:3;7018:14;7011:21;;6985:749;;;-1:-1:-1;7753:5:34;-1:-1:-1;;;;7811:4:34;7796:20;;7783:34;-1:-1:-1;;;;;7829:32:34;;7826:52;;;7874:1;7871;7864:12;7826:52;7897:73;7962:7;7951:8;7940:9;7936:24;7897:73;:::i;:::-;7887:83;;;6207:1769;;;;;:::o;7981:180::-;8040:6;8093:2;8081:9;8072:7;8068:23;8064:32;8061:52;;;8109:1;8106;8099:12;8061:52;-1:-1:-1;8132:23:34;;7981:180;-1:-1:-1;7981:180:34:o;8374:367::-;8437:8;8447:6;8501:3;8494:4;8486:6;8482:17;8478:27;8468:55;;8519:1;8516;8509:12;8468:55;-1:-1:-1;8542:20:34;;-1:-1:-1;;;;;8574:30:34;;8571:50;;;8617:1;8614;8607:12;8571:50;8654:4;8646:6;8642:17;8630:29;;8714:3;8707:4;8697:6;8694:1;8690:14;8682:6;8678:27;8674:38;8671:47;8668:67;;;8731:1;8728;8721:12;8668:67;8374:367;;;;;:::o;8746:348::-;8798:8;8808:6;8862:3;8855:4;8847:6;8843:17;8839:27;8829:55;;8880:1;8877;8870:12;8829:55;-1:-1:-1;8903:20:34;;-1:-1:-1;;;;;8935:30:34;;8932:50;;;8978:1;8975;8968:12;8932:50;9015:4;9007:6;9003:17;8991:29;;9067:3;9060:4;9051:6;9043;9039:19;9035:30;9032:39;9029:59;;;9084:1;9081;9074:12;9099:1047;9227:6;9235;9243;9251;9259;9267;9320:2;9308:9;9299:7;9295:23;9291:32;9288:52;;;9336:1;9333;9326:12;9288:52;9376:9;9363:23;-1:-1:-1;;;;;9401:6:34;9398:30;9395:50;;;9441:1;9438;9431:12;9395:50;9480:70;9542:7;9533:6;9522:9;9518:22;9480:70;:::i;:::-;9569:8;;-1:-1:-1;9454:96:34;-1:-1:-1;;9657:2:34;9642:18;;9629:32;-1:-1:-1;;;;;9673:32:34;;9670:52;;;9718:1;9715;9708:12;9670:52;9757:61;9810:7;9799:8;9788:9;9784:24;9757:61;:::i;:::-;9837:8;;-1:-1:-1;9731:87:34;-1:-1:-1;;9925:2:34;9910:18;;9897:32;-1:-1:-1;;;;;9941:32:34;;9938:52;;;9986:1;9983;9976:12;9938:52;10025:61;10078:7;10067:8;10056:9;10052:24;10025:61;:::i;:::-;9099:1047;;;;-1:-1:-1;9099:1047:34;;-1:-1:-1;9099:1047:34;;10105:8;;9099:1047;-1:-1:-1;;;9099:1047:34:o;10151:437::-;10237:6;10245;10298:2;10286:9;10277:7;10273:23;10269:32;10266:52;;;10314:1;10311;10304:12;10266:52;10354:9;10341:23;-1:-1:-1;;;;;10379:6:34;10376:30;10373:50;;;10419:1;10416;10409:12;10373:50;10458:70;10520:7;10511:6;10500:9;10496:22;10458:70;:::i;:::-;10547:8;;10432:96;;-1:-1:-1;10151:437:34;-1:-1:-1;;;;10151:437:34:o;10593:289::-;10635:3;10673:5;10667:12;10700:6;10695:3;10688:19;10756:6;10749:4;10742:5;10738:16;10731:4;10726:3;10722:14;10716:47;10808:1;10801:4;10792:6;10787:3;10783:16;10779:27;10772:38;10871:4;10864:2;10860:7;10855:2;10847:6;10843:15;10839:29;10834:3;10830:39;10826:50;10819:57;;;10593:289;;;;:::o;10887:492::-;11072:2;11061:9;11054:21;11147:1;11143;11138:3;11134:11;11130:19;11121:6;11115:13;11111:39;11106:2;11095:9;11091:18;11084:67;11205:2;11197:6;11193:15;11187:22;11182:2;11171:9;11167:18;11160:50;11035:4;11257:2;11249:6;11245:15;11239:22;11299:4;11292;11281:9;11277:20;11270:34;11321:52;11368:3;11357:9;11353:19;11339:12;11321:52;:::i;11384:768::-;11506:6;11514;11522;11530;11583:2;11571:9;11562:7;11558:23;11554:32;11551:52;;;11599:1;11596;11589:12;11551:52;11639:9;11626:23;-1:-1:-1;;;;;11664:6:34;11661:30;11658:50;;;11704:1;11701;11694:12;11658:50;11743:70;11805:7;11796:6;11785:9;11781:22;11743:70;:::i;:::-;11832:8;;-1:-1:-1;11717:96:34;-1:-1:-1;;11920:2:34;11905:18;;11892:32;-1:-1:-1;;;;;11936:32:34;;11933:52;;;11981:1;11978;11971:12;11933:52;12020:72;12084:7;12073:8;12062:9;12058:24;12020:72;:::i;:::-;11384:768;;;;-1:-1:-1;12111:8:34;-1:-1:-1;;;;11384:768:34:o;12388:897::-;12536:6;12544;12552;12560;12613:3;12601:9;12592:7;12588:23;12584:33;12581:53;;;12630:1;12627;12620:12;12581:53;12669:9;12656:23;12688:29;12711:5;12688:29;:::i;:::-;12736:5;-1:-1:-1;12793:2:34;12778:18;;12765:32;12806:31;12765:32;12806:31;:::i;:::-;12856:7;-1:-1:-1;12914:2:34;12899:18;;12886:32;-1:-1:-1;;;;;12930:30:34;;12927:50;;;12973:1;12970;12963:12;13290:403;13393:6;13446:2;13434:9;13425:7;13421:23;13417:32;13414:52;;;13462:1;13459;13452:12;13414:52;13502:9;13489:23;-1:-1:-1;;;;;13527:6:34;13524:30;13521:50;;;13567:1;13564;13557:12;13521:50;13590:22;;13646:2;13628:16;;;13624:25;13621:45;;;13662:1;13659;13652:12;13961:494;14058:6;14066;14119:2;14107:9;14098:7;14094:23;14090:32;14087:52;;;14135:1;14132;14125:12;14087:52;14175:9;14162:23;-1:-1:-1;;;;;14200:6:34;14197:30;14194:50;;;14240:1;14237;14230:12;14194:50;14263:71;14326:7;14317:6;14306:9;14302:22;14263:71;:::i;:::-;14253:81;;;14384:2;14373:9;14369:18;14356:32;14397:28;14419:5;14397:28;:::i;:::-;14444:5;14434:15;;;13961:494;;;;;:::o;14460:1698::-;14653:2;14642:9;14635:21;14616:4;14691:6;14685:13;14734:6;14729:2;14718:9;14714:18;14707:34;14764:52;14811:3;14800:9;14796:19;14782:12;14764:52;:::i;:::-;14750:66;;14865:2;14857:6;14853:15;14847:22;14937:2;14933:7;14921:9;14913:6;14909:22;14905:36;14900:2;14889:9;14885:18;14878:64;14965:41;14999:6;14983:14;14965:41;:::i;:::-;14951:55;;;15055:2;15047:6;15043:15;15037:22;15127:2;15123:7;15111:9;15103:6;15099:22;15095:36;15090:2;15079:9;15075:18;15068:64;15155:41;15189:6;15173:14;15155:41;:::i;:::-;15141:55;;;15245:2;15237:6;15233:15;15227:22;15318:2;15314:7;15302:9;15294:6;15290:22;15286:36;15280:3;15269:9;15265:19;15258:65;15346:41;15380:6;15364:14;15346:41;:::i;:::-;15332:55;;;15436:3;15428:6;15424:16;15418:23;15510:2;15506:7;15494:9;15486:6;15482:22;15478:36;15472:3;15461:9;15457:19;15450:65;15538:41;15572:6;15556:14;15538:41;:::i;:::-;15524:55;;;15628:3;15620:6;15616:16;15610:23;15702:2;15698:7;15686:9;15678:6;15674:22;15670:36;15664:3;15653:9;15649:19;15642:65;15730:41;15764:6;15748:14;15730:41;:::i;:::-;15716:55;;;15820:3;15812:6;15808:16;15802:23;15894:2;15890:7;15878:9;15870:6;15866:22;15862:36;15856:3;15845:9;15841:19;15834:65;15922:41;15956:6;15940:14;15922:41;:::i;:::-;15908:55;;;16012:3;16004:6;16000:16;15994:23;16089:2;16085:7;16073:9;16065:6;16061:22;16057:36;16048:6;16037:9;16033:22;16026:68;16111:41;16145:6;16129:14;16111:41;:::i;16163:266::-;16251:6;16246:3;16239:19;16303:6;16296:5;16289:4;16284:3;16280:14;16267:43;-1:-1:-1;16355:1:34;16330:16;;;16348:4;16326:27;;;16319:38;;;;16411:2;16390:15;;;-1:-1:-1;;16386:29:34;16377:39;;;16373:50;;16163:266::o;16434:311::-;16522:19;;;16504:3;-1:-1:-1;;;;;16553:31:34;;16550:51;;;16597:1;16594;16587:12;16550:51;16633:6;16630:1;16626:14;16685:8;16678:5;16671:4;16666:3;16662:14;16649:45;16714:18;;;;16734:4;16710:29;;16434:311;-1:-1:-1;;;16434:311:34:o;16750:1172::-;16813:3;16870:5;16857:19;16931:2;16927:7;16919:5;16903:14;16899:26;16895:40;16978:2;16958:18;16954:27;16944:55;;16995:1;16992;16985:12;16944:55;17134:4;17023:30;;;17121:18;;;;17076:21;-1:-1:-1;;;;;17151:30:34;;17148:50;;;17194:1;17191;17184:12;17148:50;17243:6;17227:14;17223:27;17214:7;17210:41;17207:61;;;17264:1;17261;17254:12;17207:61;17289:4;17284:3;17277:17;17315:58;17367:4;17362:3;17358:14;17350:6;17341:7;17315:58;:::i;:::-;17303:70;;;17434:4;17427:5;17423:16;17410:30;17485:2;17463:20;17459:29;17449:57;;17502:1;17499;17492:12;17449:57;17530:32;;17645:4;17632:18;;;-1:-1:-1;17587:21:34;-1:-1:-1;;;;;17662:32:34;;17659:52;;;17707:1;17704;17697:12;17659:52;17763:8;17760:1;17756:16;17740:14;17736:37;17727:7;17723:51;17720:71;;;17787:1;17784;17777:12;17720:71;17833:3;17827:4;17823:14;17816:4;17811:3;17807:14;17800:38;17854:62;17911:4;17901:8;17892:7;17854:62;:::i;:::-;17847:69;16750:1172;-1:-1:-1;;;;;;16750:1172:34:o;17927:291::-;18126:2;18115:9;18108:21;18089:4;18146:66;18208:2;18197:9;18193:18;18185:6;18146:66;:::i;18223:668::-;18356:6;18364;18372;18380;18433:3;18421:9;18412:7;18408:23;18404:33;18401:53;;;18450:1;18447;18440:12;18401:53;18495:16;;18580:2;18565:18;;18559:25;18495:16;;-1:-1:-1;18615:1:34;18603:14;;18593:42;;18631:1;18628;18621:12;18593:42;18727:2;18712:18;;18706:25;18802:2;18787:18;;18781:25;18654:7;;-1:-1:-1;18706:25:34;-1:-1:-1;18815:44:34;18781:25;18815:44;:::i;:::-;18223:668;;;;-1:-1:-1;18223:668:34;;-1:-1:-1;;18223:668:34:o;18896:127::-;18957:10;18952:3;18948:20;18945:1;18938:31;18988:4;18985:1;18978:15;19012:4;19009:1;19002:15;19028:350;19230:2;19212:21;;;19269:2;19249:18;;;19242:30;19308:28;19303:2;19288:18;;19281:56;19369:2;19354:18;;19028:350::o;19383:230::-;19453:6;19506:2;19494:9;19485:7;19481:23;19477:32;19474:52;;;19522:1;19519;19512:12;19474:52;-1:-1:-1;19567:16:34;;19383:230;-1:-1:-1;19383:230:34:o;20023:490::-;20107:6;20115;20123;20176:2;20164:9;20155:7;20151:23;20147:32;20144:52;;;20192:1;20189;20182:12;20144:52;20237:16;;20322:2;20307:18;;20301:25;20237:16;;-1:-1:-1;20335:31:34;20301:25;20335:31;:::i;:::-;20437:2;20422:18;;20416:25;20385:7;;-1:-1:-1;20450:31:34;20416:25;20450:31;:::i;:::-;20500:7;20490:17;;;20023:490;;;;;:::o;20518:479::-;20720:2;20702:21;;;20759:2;20739:18;;;20732:30;20798:34;20793:2;20778:18;;20771:62;20869:34;20864:2;20849:18;;20842:62;-1:-1:-1;;;20935:3:34;20920:19;;20913:42;20987:3;20972:19;;20518:479::o;22151:127::-;22212:10;22207:3;22203:20;22200:1;22193:31;22243:4;22240:1;22233:15;22267:4;22264:1;22257:15;22283:151;22373:4;22366:12;;;22352;;;22348:31;;22391:14;;22388:40;;;22408:18;;:::i;22439:273::-;22624:6;22616;22611:3;22598:33;22580:3;22650:16;;22675:13;;;22650:16;22439:273;-1:-1:-1;22439:273:34:o;22717:301::-;22846:3;22884:6;22878:13;22930:6;22923:4;22915:6;22911:17;22906:3;22900:37;22992:1;22956:16;;22981:13;;;-1:-1:-1;22956:16:34;22717:301;-1:-1:-1;22717:301:34:o;23023:127::-;23084:10;23079:3;23075:20;23072:1;23065:31;23115:4;23112:1;23105:15;23139:4;23136:1;23129:15;23155:514;23208:5;23261:3;23254:4;23246:6;23242:17;23238:27;23228:55;;23279:1;23276;23269:12;23228:55;23312:6;23306:13;23351:4;23343:6;23339:17;23380:1;23401:53;23417:36;23446:6;23417:36;:::i;23401:53::-;23390:64;;23479:6;23470:7;23463:23;23519:3;23510:6;23505:3;23501:16;23498:25;23495:45;;;23536:1;23533;23526:12;23495:45;23580:6;23575:3;23568:4;23559:7;23555:18;23549:38;23636:1;23607:20;;;23629:4;23603:31;23596:42;;;;-1:-1:-1;23611:7:34;23155:514;-1:-1:-1;;;23155:514:34:o;23674:335::-;23753:6;23806:2;23794:9;23785:7;23781:23;23777:32;23774:52;;;23822:1;23819;23812:12;23774:52;23855:9;23849:16;-1:-1:-1;;;;;23880:6:34;23877:30;23874:50;;;23920:1;23917;23910:12;23874:50;23943:60;23995:7;23986:6;23975:9;23971:22;23943:60;:::i;24014:226::-;24169:2;24158:9;24151:21;24132:4;24189:45;24230:2;24219:9;24215:18;24207:6;24189:45;:::i;24245:577::-;24343:6;24351;24359;24412:2;24400:9;24391:7;24387:23;24383:32;24380:52;;;24428:1;24425;24418:12;24380:52;24460:9;24454:16;24479:31;24504:5;24479:31;:::i;:::-;24600:2;24585:18;;24579:25;24674:2;24659:18;;24653:25;24529:5;;-1:-1:-1;24579:25:34;-1:-1:-1;;;;;;24690:30:34;;24687:50;;;24733:1;24730;24723:12;24687:50;24756:60;24808:7;24799:6;24788:9;24784:22;24756:60;:::i;24827:128::-;24894:9;;;24915:11;;;24912:37;;;24929:18;;:::i;24960:125::-;25025:9;;;25046:10;;;25043:36;;;25059:18;;:::i;25090:148::-;25178:4;25157:12;;;25171;;;25153:31;;25196:13;;25193:39;;;25212:18;;:::i;27407:339::-;27515:4;27573:11;27560:25;27667:2;27663:7;27652:8;27636:14;27632:29;27628:43;27608:18;27604:68;27594:96;;27686:1;27683;27676:12;27594:96;27707:33;;;;;27407:339;-1:-1:-1;;27407:339:34:o;27751:545::-;27844:4;27850:6;27910:11;27897:25;28004:2;28000:7;27989:8;27973:14;27969:29;27965:43;27945:18;27941:68;27931:96;;28023:1;28020;28013:12;27931:96;28050:33;;28102:20;;;-1:-1:-1;;;;;;28134:30:34;;28131:50;;;28177:1;28174;28167:12;28131:50;28210:4;28198:17;;-1:-1:-1;28261:1:34;28257:14;;;28241;28237:35;28227:46;;28224:66;;;28286:1;28283;28276:12;28301:332;28401:4;28459:11;28446:25;28553:3;28549:8;28538;28522:14;28518:29;28514:44;28494:18;28490:69;28480:97;;28573:1;28570;28563:12;29058:522;29136:4;29142:6;29202:11;29189:25;29296:2;29292:7;29281:8;29265:14;29261:29;29257:43;29237:18;29233:68;29223:96;;29315:1;29312;29305:12;29223:96;29342:33;;29394:20;;;-1:-1:-1;;;;;;29426:30:34;;29423:50;;;29469:1;29466;29459:12;29423:50;29502:4;29490:17;;-1:-1:-1;29533:14:34;29529:27;;;29519:38;;29516:58;;;29570:1;29567;29560:12;29937:355;30058:9;30069;30111:8;30099:10;30096:24;30093:44;;;30133:1;30130;30123:12;30093:44;30162:6;30152:8;30149:20;30146:40;;;30182:1;30179;30172:12;30146:40;-1:-1:-1;;30224:1:34;30220:18;;;30208:31;;30261:25;;;;;-1:-1:-1;29937:355:34:o;30297:329::-;30395:4;30453:11;30440:25;30547:2;30543:7;30532:8;30516:14;30512:29;30508:43;30488:18;30484:68;30474:96;;30566:1;30563;30556:12;32934:475;33179:2;33168:9;33161:21;33142:4;33205:61;33262:2;33251:9;33247:18;33239:6;33231;33205:61;:::i;:::-;33314:9;33306:6;33302:22;33297:2;33286:9;33282:18;33275:50;33342:61;33396:6;33388;33380;33342:61;:::i;:::-;33334:69;32934:475;-1:-1:-1;;;;;;;32934:475:34:o;33414:245::-;33481:6;33534:2;33522:9;33513:7;33509:23;33505:32;33502:52;;;33550:1;33547;33540:12;33502:52;33582:9;33576:16;33601:28;33623:5;33601:28;:::i;33664:553::-;33761:6;33769;33822:2;33810:9;33801:7;33797:23;33793:32;33790:52;;;33838:1;33835;33828:12;33790:52;33871:9;33865:16;-1:-1:-1;;;;;33896:6:34;33893:30;33890:50;;;33936:1;33933;33926:12;33890:50;33959:60;34011:7;34002:6;33991:9;33987:22;33959:60;:::i;:::-;33949:70;;;34065:2;34054:9;34050:18;34044:25;-1:-1:-1;;;;;34084:8:34;34081:32;34078:52;;;34126:1;34123;34116:12;34078:52;34149:62;34203:7;34192:8;34181:9;34177:24;34149:62;:::i;34222:307::-;34399:2;34388:9;34381:21;34362:4;34419:45;34460:2;34449:9;34445:18;34437:6;34419:45;:::i;:::-;34411:53;;34514:6;34507:14;34500:22;34495:2;34484:9;34480:18;34473:50;34222:307;;;;;:::o;34534:1972::-;34636:6;34689:2;34677:9;34668:7;34664:23;34660:32;34657:52;;;34705:1;34702;34695:12;34657:52;34738:9;34732:16;-1:-1:-1;;;;;34763:6:34;34760:30;34757:50;;;34803:1;34800;34793:12;34757:50;34826:22;;34882:6;34864:16;;;34860:29;34857:49;;;34902:1;34899;34892:12;34857:49;34928:22;;:::i;:::-;34981:2;34975:9;-1:-1:-1;;;;;34999:8:34;34996:32;34993:52;;;35041:1;35038;35031:12;34993:52;35068:55;35115:7;35104:8;35100:2;35096:17;35068:55;:::i;:::-;35061:5;35054:70;;35163:2;35159;35155:11;35149:18;-1:-1:-1;;;;;35182:8:34;35179:32;35176:52;;;35224:1;35221;35214:12;35176:52;35260:55;35307:7;35296:8;35292:2;35288:17;35260:55;:::i;:::-;35255:2;35248:5;35244:14;35237:79;;35355:2;35351;35347:11;35341:18;-1:-1:-1;;;;;35374:8:34;35371:32;35368:52;;;35416:1;35413;35406:12;35368:52;35452:55;35499:7;35488:8;35484:2;35480:17;35452:55;:::i;:::-;35447:2;35440:5;35436:14;35429:79;;35547:2;35543;35539:11;35533:18;-1:-1:-1;;;;;35566:8:34;35563:32;35560:52;;;35608:1;35605;35598:12;35560:52;35644:55;35691:7;35680:8;35676:2;35672:17;35644:55;:::i;:::-;35639:2;35632:5;35628:14;35621:79;;35739:3;35735:2;35731:12;35725:19;-1:-1:-1;;;;;35759:8:34;35756:32;35753:52;;;35801:1;35798;35791:12;35753:52;35838:55;35885:7;35874:8;35870:2;35866:17;35838:55;:::i;:::-;35832:3;35825:5;35821:15;35814:80;;35933:3;35929:2;35925:12;35919:19;-1:-1:-1;;;;;35953:8:34;35950:32;35947:52;;;35995:1;35992;35985:12;35947:52;36032:55;36079:7;36068:8;36064:2;36060:17;36032:55;:::i;:::-;36026:3;36019:5;36015:15;36008:80;;36127:3;36123:2;36119:12;36113:19;-1:-1:-1;;;;;36147:8:34;36144:32;36141:52;;;36189:1;36186;36179:12;36141:52;36226:55;36273:7;36262:8;36258:2;36254:17;36226:55;:::i;:::-;36220:3;36213:5;36209:15;36202:80;;36321:3;36317:2;36313:12;36307:19;-1:-1:-1;;;;;36341:8:34;36338:32;36335:52;;;36383:1;36380;36373:12;36335:52;36420:55;36467:7;36456:8;36452:2;36448:17;36420:55;:::i;:::-;36414:3;36403:15;;36396:80;-1:-1:-1;36407:5:34;34534:1972;-1:-1:-1;;;;34534:1972:34:o;37124:529::-;37364:2;37353:9;37346:21;37327:4;37384:66;37446:2;37435:9;37431:18;37423:6;37384:66;:::i;:::-;37376:74;;37480:2;37472:6;37469:14;37459:145;;37526:10;37521:3;37517:20;37514:1;37507:31;37561:4;37558:1;37551:15;37589:4;37586:1;37579:15;37459:145;37640:6;37635:2;37624:9;37620:18;37613:34;37124:529;;;;;:::o;37658:456::-;37746:6;37754;37762;37815:2;37803:9;37794:7;37790:23;37786:32;37783:52;;;37831:1;37828;37821:12;37783:52;-1:-1:-1;;37876:16:34;;37982:2;37967:18;;37961:25;38078:2;38063:18;;;38057:25;37876:16;;37961:25;;-1:-1:-1;38057:25:34;37658:456;-1:-1:-1;37658:456:34:o;38593:342::-;38795:2;38777:21;;;38834:2;38814:18;;;38807:30;-1:-1:-1;;;38868:2:34;38853:18;;38846:48;38926:2;38911:18;;38593:342::o;38940:486::-;39142:2;39124:21;;;39181:2;39161:18;;;39154:30;39220:34;39215:2;39200:18;;39193:62;39291:34;39286:2;39271:18;;39264:62;-1:-1:-1;;;39357:3:34;39342:19;;39335:49;39416:3;39401:19;;38940:486::o;39431:487::-;39633:2;39615:21;;;39672:2;39652:18;;;39645:30;39711:34;39706:2;39691:18;;39684:62;39782:34;39777:2;39762:18;;39755:62;-1:-1:-1;;;39848:3:34;39833:19;;39826:50;39908:3;39893:19;;39431:487::o;41322:1173::-;41436:6;41444;41497:2;41485:9;41476:7;41472:23;41468:32;41465:52;;;41513:1;41510;41503:12;41465:52;41546:9;41540:16;-1:-1:-1;;;;;41571:6:34;41568:30;41565:50;;;41611:1;41608;41601:12;41565:50;41634:22;;41687:4;41679:13;;41675:27;-1:-1:-1;41665:55:34;;41716:1;41713;41706:12;41665:55;41749:2;41743:9;41772:63;41788:46;41827:6;41788:46;:::i;41772:63::-;41857:3;41881:6;41876:3;41869:19;41913:4;41908:3;41904:14;41897:21;;41970:4;41960:6;41957:1;41953:14;41949:2;41945:23;41941:34;41927:48;;41998:7;41990:6;41987:19;41984:39;;;42019:1;42016;42009:12;41984:39;42051:4;42047:2;42043:13;42065:308;42081:6;42076:3;42073:15;42065:308;;;42162:3;42156:10;-1:-1:-1;;;;;42185:11:34;42182:35;42179:55;;;42230:1;42227;42220:12;42179:55;42259:69;42320:7;42313:4;42299:11;42295:2;42291:20;42287:31;42259:69;:::i;:::-;42247:82;;-1:-1:-1;42358:4:34;42349:14;;;;42098;42065:308;;;-1:-1:-1;42459:4:34;42444:20;;;;42438:27;42392:5;;42438:27;;-1:-1:-1;;;;;;41322:1173:34:o;44566:331::-;44671:9;44682;44724:8;44712:10;44709:24;44706:44;;;44746:1;44743;44736:12;44706:44;44775:6;44765:8;44762:20;44759:40;;;44795:1;44792;44785:12;44759:40;-1:-1:-1;;44821:23:34;;;44866:25;;;;;-1:-1:-1;44566:331:34:o",
975
- linkReferences: {
976
- "src/InputsExtractor.sol": {
977
- InputsExtractor: [
978
- { start: 1443, length: 20 },
979
- { start: 2211, length: 20 },
980
- { start: 2530, length: 20 },
981
- { start: 3965, length: 20 },
982
- { start: 4088, length: 20 },
983
- { start: 4652, length: 20 },
984
- { start: 5261, length: 20 },
985
- { start: 7246, length: 20 },
986
- { start: 7369, length: 20 },
987
- { start: 7689, length: 20 },
988
- { start: 8232, length: 20 },
989
- { start: 9032, length: 20 },
990
- { start: 9308, length: 20 }
991
- ]
992
- }
993
- }
994
- },
995
- methodIdentifiers: {
996
- "CERTIFICATE_REGISTRY_ID()": "41a0e2c2",
997
- "CIRCUIT_REGISTRY_ID()": "6c40d5d6",
998
- "SANCTIONS_REGISTRY_ID()": "652ba33d",
999
- "addVerifiers(bytes32[],address[])": "a6df2c01",
1000
- "admin()": "f851a440",
1001
- "enforceSanctionsRoot((bytes,uint256[]))": "16e3d729",
1002
- "getBoundData((bytes,uint256[]))": "98e73ac3",
1003
- "getDisclosedData((bytes,uint256[]),bool)": "f3757ad4",
1004
- "isAgeAbove(uint8,(bytes,uint256[]),(uint256,string,string,bool))": "c3fa6f22",
1005
- "isAgeAboveOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))": "2e5ce77f",
1006
- "isAgeBelow(uint8,(bytes,uint256[]),(uint256,string,string,bool))": "818694f1",
1007
- "isAgeBelowOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))": "d4932b4e",
1008
- "isAgeBetween(uint8,uint8,(bytes,uint256[]),(uint256,string,string,bool))": "cf515d37",
1009
- "isAgeEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))": "ff203707",
1010
- "isBirthdateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "b8bd4879",
1011
- "isBirthdateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "c1b77162",
1012
- "isBirthdateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "9c1a81a3",
1013
- "isBirthdateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "1fac4345",
1014
- "isBirthdateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))": "311a335c",
1015
- "isBirthdateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "320d3b55",
1016
- "isExpiryDateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "ac20d678",
1017
- "isExpiryDateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "ca4051f2",
1018
- "isExpiryDateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "ddd8f8e3",
1019
- "isExpiryDateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "8e2e2e62",
1020
- "isExpiryDateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))": "3d6ed975",
1021
- "isExpiryDateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": "8b2ec611",
1022
- "isFaceMatchVerified(uint8,uint8,(bytes,uint256[]))": "106a2f6d",
1023
- "isIssuingCountryIn(string[],(bytes,uint256[]))": "7e5a88f3",
1024
- "isIssuingCountryOut(string[],(bytes,uint256[]))": "5b7ab929",
1025
- "isNationalityIn(string[],(bytes,uint256[]))": "46b758a0",
1026
- "isNationalityOut(string[],(bytes,uint256[]))": "d39a5cf9",
1027
- "paused()": "5c975abb",
1028
- "removeVerifiers(bytes32[])": "8d6937b8",
1029
- "rootRegistry()": "b96b161c",
1030
- "setPaused(bool)": "16c38b3c",
1031
- "transferAdmin(address)": "75829def",
1032
- "updateRootRegistry(address)": "18677f2a",
1033
- "verifyProof(((bytes32,bytes,bytes32[]),(bytes,uint256[]),(uint256,string,string,bool)))": "ec8e0729",
1034
- "verifyScopes(bytes32[],string,string)": "847755e3",
1035
- "vkeyHashToVerifier(bytes32)": "8163f231"
1036
- },
1037
- rawMetadata: '{"compiler":{"version":"0.8.29+commit.ab55807c"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_rootRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"certificateRegistryRoot","type":"bytes32"}],"name":"CertificateRegistryRootAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"certificateRegistryRoot","type":"bytes32"}],"name":"CertificateRegistryRootRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PausedStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_sanctionsTreesRoot","type":"bytes32"}],"name":"SanctionsTreesRootUpdates","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"}],"name":"VerifierAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"vkeyHash","type":"bytes32"}],"name":"VerifierRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ZKPassportVerifierDeployed","type":"event"},{"inputs":[],"name":"CERTIFICATE_REGISTRY_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CIRCUIT_REGISTRY_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SANCTIONS_REGISTRY_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"vkeyHashes","type":"bytes32[]"},{"internalType":"address[]","name":"verifiers","type":"address[]"}],"name":"addVerifiers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"}],"name":"enforceSanctionsRoot","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"}],"name":"getBoundData","outputs":[{"components":[{"internalType":"address","name":"senderAddress","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"customData","type":"string"}],"internalType":"struct BoundData","name":"boundData","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"internalType":"bool","name":"isIDCard","type":"bool"}],"name":"getDisclosedData","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"issuingCountry","type":"string"},{"internalType":"string","name":"nationality","type":"string"},{"internalType":"string","name":"gender","type":"string"},{"internalType":"string","name":"birthDate","type":"string"},{"internalType":"string","name":"expiryDate","type":"string"},{"internalType":"string","name":"documentNumber","type":"string"},{"internalType":"string","name":"documentType","type":"string"}],"internalType":"struct DisclosedData","name":"disclosedData","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"minAge","type":"uint8"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isAgeAbove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"minAge","type":"uint8"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isAgeAboveOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"maxAge","type":"uint8"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isAgeBelow","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"maxAge","type":"uint8"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isAgeBelowOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"minAge","type":"uint8"},{"internalType":"uint8","name":"maxAge","type":"uint8"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isAgeBetween","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"age","type":"uint8"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isAgeEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isBirthdateAfter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isBirthdateAfterOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isBirthdateBefore","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isBirthdateBeforeOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isBirthdateBetween","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"date","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isBirthdateEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isExpiryDateAfter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isExpiryDateAfterOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isExpiryDateBefore","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isExpiryDateBeforeOrEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDate","type":"uint256"},{"internalType":"uint256","name":"maxDate","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isExpiryDateBetween","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"date","type":"uint256"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"name":"isExpiryDateEqual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum FaceMatchMode","name":"faceMatchMode","type":"uint8"},{"internalType":"enum OS","name":"os","type":"uint8"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"}],"name":"isFaceMatchVerified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string[]","name":"countryList","type":"string[]"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"}],"name":"isIssuingCountryIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string[]","name":"countryList","type":"string[]"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"}],"name":"isIssuingCountryOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string[]","name":"countryList","type":"string[]"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"}],"name":"isNationalityIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string[]","name":"countryList","type":"string[]"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"}],"name":"isNationalityOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"vkeyHashes","type":"bytes32[]"}],"name":"removeVerifiers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rootRegistry","outputs":[{"internalType":"contract IRootRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rootRegistry","type":"address"}],"name":"updateRootRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes32","name":"vkeyHash","type":"bytes32"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"}],"internalType":"struct ProofVerificationData","name":"proofVerificationData","type":"tuple"},{"components":[{"internalType":"bytes","name":"committedInputs","type":"bytes"},{"internalType":"uint256[]","name":"committedInputCounts","type":"uint256[]"}],"internalType":"struct Commitments","name":"commitments","type":"tuple"},{"components":[{"internalType":"uint256","name":"validityPeriodInSeconds","type":"uint256"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"},{"internalType":"bool","name":"devMode","type":"bool"}],"internalType":"struct ServiceConfig","name":"serviceConfig","type":"tuple"}],"internalType":"struct ProofVerificationParams","name":"params","type":"tuple"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"isValid","type":"bool"},{"internalType":"bytes32","name":"uniqueIdentifier","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"publicInputs","type":"bytes32[]"},{"internalType":"string","name":"domain","type":"string"},{"internalType":"string","name":"scope","type":"string"}],"name":"verifyScopes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"vkeyHashToVerifier","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{"constructor":{"details":"Constructor"},"enforceSanctionsRoot((bytes,uint256[]))":{"params":{"commitments":"The commitments"}},"getBoundData((bytes,uint256[]))":{"params":{"commitments":"The commitments"},"returns":{"boundData":"The data bound to the proof"}},"getDisclosedData((bytes,uint256[]),bool)":{"params":{"commitments":"The commitments","isIDCard":"Whether the proof is an ID card"},"returns":{"disclosedData":"The data disclosed by the proof"}},"isAgeAbove(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","minAge":"The age must be above this age","serviceConfig":"The service config"},"returns":{"_0":"True if the age is above the given age, false otherwise"}},"isAgeAboveOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","minAge":"The age must be above or equal to this age","serviceConfig":"The service config"},"returns":{"_0":"True if the age is above or equal to the given age, false otherwise"}},"isAgeBelow(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","maxAge":"The age must be below this age","serviceConfig":"The service config"},"returns":{"_0":"True if the age is below the given age, false otherwise"}},"isAgeBelowOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","maxAge":"The age must be below or equal to this age","serviceConfig":"The service config"},"returns":{"_0":"True if the age is below or equal to the given age, false otherwise"}},"isAgeBetween(uint8,uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","maxAge":"The age must be less than or equal to this age","minAge":"The age must be greater than or equal to this age","serviceConfig":"The service config"},"returns":{"_0":"True if the age is in the given range, false otherwise"}},"isAgeEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"age":"The age must be equal to this age","commitments":"The commitments","serviceConfig":"The service config"},"returns":{"_0":"True if the age is equal to the given age, false otherwise"}},"isBirthdateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","minDate":"The birthdate must be after this date","serviceConfig":"The service config"},"returns":{"_0":"True if the birthdate is after the given date, false otherwise"}},"isBirthdateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","minDate":"The birthdate must be after or equal to this date","serviceConfig":"The service config"},"returns":{"_0":"True if the birthdate is after or equal to the given date, false otherwise"}},"isBirthdateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","maxDate":"The birthdate must be before this date","serviceConfig":"The service config"},"returns":{"_0":"True if the birthdate is before the given date, false otherwise"}},"isBirthdateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","maxDate":"The birthdate must be before or equal to this date","serviceConfig":"The service config"},"returns":{"_0":"True if the birthdate is before or equal to the given date, false otherwise"}},"isBirthdateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","maxDate":"The birthdate must be before or equal to this date","minDate":"The birthdate must be after or equal to this date","serviceConfig":"The service config"},"returns":{"_0":"True if the birthdate is between the given dates, false otherwise"}},"isBirthdateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","date":"The birthdate must be equal to this date","serviceConfig":"The service config"},"returns":{"_0":"True if the birthdate is equal to the given date, false otherwise"}},"isExpiryDateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","minDate":"The expiry date must be after this date","serviceConfig":"The service config"},"returns":{"_0":"True if the expiry date is after the given date, false otherwise"}},"isExpiryDateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","minDate":"The expiry date must be after or equal to this date","serviceConfig":"The service config"},"returns":{"_0":"True if the expiry date is after or equal to the given date, false otherwise"}},"isExpiryDateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","maxDate":"The expiry date must be before this date","serviceConfig":"The service config"},"returns":{"_0":"True if the expiry date is before the given date, false otherwise"}},"isExpiryDateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","maxDate":"The expiry date must be before or equal to this date","serviceConfig":"The service config"},"returns":{"_0":"True if the expiry date is before or equal to the given date, false otherwise"}},"isExpiryDateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","maxDate":"The expiry date must be before or equal to this date","minDate":"The expiry date must be after or equal to this date","serviceConfig":"The service config"},"returns":{"_0":"True if the expiry date is between the given dates, false otherwise"}},"isExpiryDateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"params":{"commitments":"The commitments","date":"The expiry date must be equal to this date","serviceConfig":"The service config"},"returns":{"_0":"True if the expiry date is equal to the given date, false otherwise"}},"isFaceMatchVerified(uint8,uint8,(bytes,uint256[]))":{"params":{"commitments":"The commitments","faceMatchMode":"The FaceMatch mode expected to be used in the verification","os":"The operating system on which the proof should have been generated (Any (0), iOS (1), Android (2))"},"returns":{"_0":"True if the proof is tied to a valid FaceMatch verification, false otherwise"}},"isIssuingCountryIn(string[],(bytes,uint256[]))":{"params":{"commitments":"The commitments","countryList":"The list of countries (needs to match exactly the list of countries in the proof)"},"returns":{"_0":"True if the issuing country is in the list of countries, false otherwise"}},"isIssuingCountryOut(string[],(bytes,uint256[]))":{"params":{"commitments":"The commitments","countryList":"The list of countries (needs to match exactly the list of countries in the proof) Note: The list of countries must be sorted in alphabetical order"},"returns":{"_0":"True if the issuing country is not in the list of countries, false otherwise"}},"isNationalityIn(string[],(bytes,uint256[]))":{"params":{"commitments":"The commitments","countryList":"The list of countries (needs to match exactly the list of countries in the proof)"},"returns":{"_0":"True if the nationality is in the list of countries, false otherwise"}},"isNationalityOut(string[],(bytes,uint256[]))":{"params":{"commitments":"The commitments","countryList":"The list of countries (needs to match exactly the list of countries in the proof) Note: The list of countries must be sorted in alphabetical order"},"returns":{"_0":"True if the nationality is not in the list of countries, false otherwise"}},"verifyProof(((bytes32,bytes,bytes32[]),(bytes,uint256[]),(uint256,string,string,bool)))":{"params":{"params":"The proof verification parameters"},"returns":{"isValid":"True if the proof is valid, false otherwise","uniqueIdentifier":"The unique identifier associated to the identity document that generated the proof"}},"verifyScopes(bytes32[],string,string)":{"params":{"domain":"The domain to check against","publicInputs":"The public inputs of the proof","scope":"The scope to check against"},"returns":{"_0":"True if the proof was generated for the given domain and scope, false otherwise"}}},"version":1},"userdoc":{"kind":"user","methods":{"enforceSanctionsRoot((bytes,uint256[]))":{"notice":"Enforces that the proof checks against the expected sanction list(s)"},"getBoundData((bytes,uint256[]))":{"notice":"Gets the data bound to the proof"},"getDisclosedData((bytes,uint256[]),bool)":{"notice":"Gets the data disclosed by the proof"},"isAgeAbove(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the age is above the given age"},"isAgeAboveOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the age is above or equal to the given age"},"isAgeBelow(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the age is below the given age"},"isAgeBelowOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the age is below or equal to the given age"},"isAgeBetween(uint8,uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the age is in the given range"},"isAgeEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the age is equal to the given age"},"isBirthdateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the birthdate is after the given date"},"isBirthdateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the birthdate is after or equal to the given date"},"isBirthdateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the birthdate is before the given date"},"isBirthdateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the birthdate is before or equal to the given date"},"isBirthdateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the birthdate is between the given dates"},"isBirthdateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the birthdate is equal to the given date"},"isExpiryDateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the expiry date is after the given date"},"isExpiryDateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the expiry date is after or equal to the given date"},"isExpiryDateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the expiry date is before the given date"},"isExpiryDateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the expiry date is before or equal to the given date"},"isExpiryDateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the expiry date is between the given dates"},"isExpiryDateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))":{"notice":"Checks if the expiry date is equal to the given date"},"isFaceMatchVerified(uint8,uint8,(bytes,uint256[]))":{"notice":"Checks if the proof is tied to a FaceMatch verification"},"isIssuingCountryIn(string[],(bytes,uint256[]))":{"notice":"Checks if the issuing country is in the list of countries"},"isIssuingCountryOut(string[],(bytes,uint256[]))":{"notice":"Checks if the issuing country is not in the list of countries"},"isNationalityIn(string[],(bytes,uint256[]))":{"notice":"Checks if the nationality is in the list of countries"},"isNationalityOut(string[],(bytes,uint256[]))":{"notice":"Checks if the nationality is not in the list of countries"},"verifyProof(((bytes32,bytes,bytes32[]),(bytes,uint256[]),(uint256,string,string,bool)))":{"notice":"Verifies a proof from ZKPassport"},"verifyScopes(bytes32[],string,string)":{"notice":"Verifies that the proof was generated for the given domain and scope"}},"version":1}},"settings":{"compilationTarget":{"src/ZKPassportVerifier.sol":"ZKPassportVerifier"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[":forge-std/=lib/forge-std/src/"]},"sources":{"src/Constants.sol":{"keccak256":"0x6f011f7c9038b4552283dd9801d5686ad4047ad6c281cf0a8620bfec503a9060","license":"Apache-2.0","urls":["bzz-raw://d4052ca894163688d25d78d297f86dd1c562cfd4e9de7253f2c1da30796a538c","dweb:/ipfs/QmbMJ9gCMsqo22f6ih8Sk3MTxCwBJfPEFAMbYoBVXMydAW"]},"src/DateUtils.sol":{"keccak256":"0xc04aef2f5732f8c3b28077a0af19e2fbbdec2f9178f3800563bf64ccdecefc77","license":"Apache-2.0","urls":["bzz-raw://bcc2610f3bdd3411fc040d39efe9e68f826b48986b2df7987f3adb6a1467c833","dweb:/ipfs/Qmc7uyW8Y7ekaKEdjd3kU9e1eDcCiAqsujGc5ZavuzGx4w"]},"src/IRootRegistry.sol":{"keccak256":"0xa9955e80821ca9ccbdf7d05a8ce9a3e237b4771e1f6e09190ed1c803a5e1e516","license":"MIT","urls":["bzz-raw://fd9fc9fbd7057a6bcc16a682e52be9ebd012954898626a11f0a0e8788644789d","dweb:/ipfs/QmZYpMRHdv4gMCNXCQtGQu8XqRVtNR9Kgkzh7u1YMpvrEB"]},"src/InputsExtractor.sol":{"keccak256":"0xca3a90807b75bff710d97a53c65838a19a87d0bc96c3e1f7a7caa2eb831ef373","license":"Apache-2.0","urls":["bzz-raw://7e1360632f22afd864807ae616cd29c80f90142f2065a131dc996758b9388650","dweb:/ipfs/QmSaRNmHoZs8pLKgfrgBhe9oMrNX82huzDXq1K5TvTwWad"]},"src/StringUtils.sol":{"keccak256":"0x0174454c28003f489bcdf636c93ccb512d80f3dbdca7485e11b51cf2c8ebfff1","license":"Apache-2.0","urls":["bzz-raw://92ea71064b8199c9a05cbe279cf42adaaa7b29604d960a84754d3d997b1c2342","dweb:/ipfs/QmcsrqRJ2YZABCZHzS782RqKmWEegSK1LCmTTjJ94gdh5q"]},"src/Types.sol":{"keccak256":"0x1cb492c099b71287da0349afef0c72c430e2476ad7373a0ea1456e7145207a06","license":"Apache-2.0","urls":["bzz-raw://a158753948b82917aa802c4b475a1ffb4b5f09b2a86ebcb64db11437ab297047","dweb:/ipfs/QmPgGhT59MzcG4TA5PmKjzaoNMZ4VRmcLJH6w5LkWQYjxV"]},"src/ZKPassportVerifier.sol":{"keccak256":"0x12322e58cc69dcc634b07dca3715b81b08aeb1618bcbfcf3de9edbe120f08de9","license":"Apache-2.0","urls":["bzz-raw://769194840e10dd878e1fcac248d386ba6cdb8e0fd96915111133c7f122265bf2","dweb:/ipfs/QmR5ML1N26F8bPMZd2GgSKrGxtUfbLtpKp4dN1FbBMXDNG"]},"src/ultra-honk-verifiers/OuterCount4.sol":{"keccak256":"0xc0b2358f1cb49d10ab783b6ccf321e8bde6eb8ce70efe325fdf49987f1688b94","license":"Apache-2.0","urls":["bzz-raw://c5ddd3b3c3e2522e766c5ab95d2559ce4e79fe54e9aeb50b1c995ad1d8ed18ee","dweb:/ipfs/Qmcu7WhWMk3TPxb3HuwEPiXF95F6eD8KmJ12RXxFBdCYgM"]}},"version":1}',
1038
- metadata: {
1039
- compiler: { version: "0.8.29+commit.ab55807c" },
1040
- language: "Solidity",
1041
- output: {
1042
- abi: [
1043
- {
1044
- inputs: [{ internalType: "address", name: "_rootRegistry", type: "address" }],
1045
- stateMutability: "nonpayable",
1046
- type: "constructor"
1047
- },
1048
- {
1049
- inputs: [
1050
- { internalType: "address", name: "oldAdmin", type: "address", indexed: true },
1051
- { internalType: "address", name: "newAdmin", type: "address", indexed: true }
1052
- ],
1053
- type: "event",
1054
- name: "AdminUpdated",
1055
- anonymous: false
1056
- },
1057
- {
1058
- inputs: [
1059
- {
1060
- internalType: "bytes32",
1061
- name: "certificateRegistryRoot",
1062
- type: "bytes32",
1063
- indexed: true
1064
- }
1065
- ],
1066
- type: "event",
1067
- name: "CertificateRegistryRootAdded",
1068
- anonymous: false
1069
- },
1070
- {
1071
- inputs: [
1072
- {
1073
- internalType: "bytes32",
1074
- name: "certificateRegistryRoot",
1075
- type: "bytes32",
1076
- indexed: true
1077
- }
1078
- ],
1079
- type: "event",
1080
- name: "CertificateRegistryRootRemoved",
1081
- anonymous: false
1082
- },
1083
- {
1084
- inputs: [
1085
- { internalType: "bool", name: "paused", type: "bool", indexed: false }
1086
- ],
1087
- type: "event",
1088
- name: "PausedStatusChanged",
1089
- anonymous: false
1090
- },
1091
- {
1092
- inputs: [
1093
- {
1094
- internalType: "bytes32",
1095
- name: "_sanctionsTreesRoot",
1096
- type: "bytes32",
1097
- indexed: true
1098
- }
1099
- ],
1100
- type: "event",
1101
- name: "SanctionsTreesRootUpdates",
1102
- anonymous: false
1103
- },
1104
- {
1105
- inputs: [
1106
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32", indexed: true },
1107
- { internalType: "address", name: "verifier", type: "address", indexed: true }
1108
- ],
1109
- type: "event",
1110
- name: "VerifierAdded",
1111
- anonymous: false
1112
- },
1113
- {
1114
- inputs: [
1115
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32", indexed: true }
1116
- ],
1117
- type: "event",
1118
- name: "VerifierRemoved",
1119
- anonymous: false
1120
- },
1121
- {
1122
- inputs: [
1123
- { internalType: "address", name: "admin", type: "address", indexed: true },
1124
- { internalType: "uint256", name: "timestamp", type: "uint256", indexed: false }
1125
- ],
1126
- type: "event",
1127
- name: "ZKPassportVerifierDeployed",
1128
- anonymous: false
1129
- },
1130
- {
1131
- inputs: [],
1132
- stateMutability: "view",
1133
- type: "function",
1134
- name: "CERTIFICATE_REGISTRY_ID",
1135
- outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }]
1136
- },
1137
- {
1138
- inputs: [],
1139
- stateMutability: "view",
1140
- type: "function",
1141
- name: "CIRCUIT_REGISTRY_ID",
1142
- outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }]
1143
- },
1144
- {
1145
- inputs: [],
1146
- stateMutability: "view",
1147
- type: "function",
1148
- name: "SANCTIONS_REGISTRY_ID",
1149
- outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }]
1150
- },
1151
- {
1152
- inputs: [
1153
- { internalType: "bytes32[]", name: "vkeyHashes", type: "bytes32[]" },
1154
- { internalType: "address[]", name: "verifiers", type: "address[]" }
1155
- ],
1156
- stateMutability: "nonpayable",
1157
- type: "function",
1158
- name: "addVerifiers"
1159
- },
1160
- {
1161
- inputs: [],
1162
- stateMutability: "view",
1163
- type: "function",
1164
- name: "admin",
1165
- outputs: [{ internalType: "address", name: "", type: "address" }]
1166
- },
1167
- {
1168
- inputs: [
1169
- {
1170
- internalType: "struct Commitments",
1171
- name: "commitments",
1172
- type: "tuple",
1173
- components: [
1174
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1175
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1176
- ]
1177
- }
1178
- ],
1179
- stateMutability: "view",
1180
- type: "function",
1181
- name: "enforceSanctionsRoot"
1182
- },
1183
- {
1184
- inputs: [
1185
- {
1186
- internalType: "struct Commitments",
1187
- name: "commitments",
1188
- type: "tuple",
1189
- components: [
1190
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1191
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1192
- ]
1193
- }
1194
- ],
1195
- stateMutability: "pure",
1196
- type: "function",
1197
- name: "getBoundData",
1198
- outputs: [
1199
- {
1200
- internalType: "struct BoundData",
1201
- name: "boundData",
1202
- type: "tuple",
1203
- components: [
1204
- { internalType: "address", name: "senderAddress", type: "address" },
1205
- { internalType: "uint256", name: "chainId", type: "uint256" },
1206
- { internalType: "string", name: "customData", type: "string" }
1207
- ]
1208
- }
1209
- ]
1210
- },
1211
- {
1212
- inputs: [
1213
- {
1214
- internalType: "struct Commitments",
1215
- name: "commitments",
1216
- type: "tuple",
1217
- components: [
1218
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1219
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1220
- ]
1221
- },
1222
- { internalType: "bool", name: "isIDCard", type: "bool" }
1223
- ],
1224
- stateMutability: "pure",
1225
- type: "function",
1226
- name: "getDisclosedData",
1227
- outputs: [
1228
- {
1229
- internalType: "struct DisclosedData",
1230
- name: "disclosedData",
1231
- type: "tuple",
1232
- components: [
1233
- { internalType: "string", name: "name", type: "string" },
1234
- { internalType: "string", name: "issuingCountry", type: "string" },
1235
- { internalType: "string", name: "nationality", type: "string" },
1236
- { internalType: "string", name: "gender", type: "string" },
1237
- { internalType: "string", name: "birthDate", type: "string" },
1238
- { internalType: "string", name: "expiryDate", type: "string" },
1239
- { internalType: "string", name: "documentNumber", type: "string" },
1240
- { internalType: "string", name: "documentType", type: "string" }
1241
- ]
1242
- }
1243
- ]
1244
- },
1245
- {
1246
- inputs: [
1247
- { internalType: "uint8", name: "minAge", type: "uint8" },
1248
- {
1249
- internalType: "struct Commitments",
1250
- name: "commitments",
1251
- type: "tuple",
1252
- components: [
1253
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1254
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1255
- ]
1256
- },
1257
- {
1258
- internalType: "struct ServiceConfig",
1259
- name: "serviceConfig",
1260
- type: "tuple",
1261
- components: [
1262
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1263
- { internalType: "string", name: "domain", type: "string" },
1264
- { internalType: "string", name: "scope", type: "string" },
1265
- { internalType: "bool", name: "devMode", type: "bool" }
1266
- ]
1267
- }
1268
- ],
1269
- stateMutability: "view",
1270
- type: "function",
1271
- name: "isAgeAbove",
1272
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1273
- },
1274
- {
1275
- inputs: [
1276
- { internalType: "uint8", name: "minAge", type: "uint8" },
1277
- {
1278
- internalType: "struct Commitments",
1279
- name: "commitments",
1280
- type: "tuple",
1281
- components: [
1282
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1283
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1284
- ]
1285
- },
1286
- {
1287
- internalType: "struct ServiceConfig",
1288
- name: "serviceConfig",
1289
- type: "tuple",
1290
- components: [
1291
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1292
- { internalType: "string", name: "domain", type: "string" },
1293
- { internalType: "string", name: "scope", type: "string" },
1294
- { internalType: "bool", name: "devMode", type: "bool" }
1295
- ]
1296
- }
1297
- ],
1298
- stateMutability: "view",
1299
- type: "function",
1300
- name: "isAgeAboveOrEqual",
1301
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1302
- },
1303
- {
1304
- inputs: [
1305
- { internalType: "uint8", name: "maxAge", type: "uint8" },
1306
- {
1307
- internalType: "struct Commitments",
1308
- name: "commitments",
1309
- type: "tuple",
1310
- components: [
1311
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1312
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1313
- ]
1314
- },
1315
- {
1316
- internalType: "struct ServiceConfig",
1317
- name: "serviceConfig",
1318
- type: "tuple",
1319
- components: [
1320
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1321
- { internalType: "string", name: "domain", type: "string" },
1322
- { internalType: "string", name: "scope", type: "string" },
1323
- { internalType: "bool", name: "devMode", type: "bool" }
1324
- ]
1325
- }
1326
- ],
1327
- stateMutability: "view",
1328
- type: "function",
1329
- name: "isAgeBelow",
1330
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1331
- },
1332
- {
1333
- inputs: [
1334
- { internalType: "uint8", name: "maxAge", type: "uint8" },
1335
- {
1336
- internalType: "struct Commitments",
1337
- name: "commitments",
1338
- type: "tuple",
1339
- components: [
1340
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1341
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1342
- ]
1343
- },
1344
- {
1345
- internalType: "struct ServiceConfig",
1346
- name: "serviceConfig",
1347
- type: "tuple",
1348
- components: [
1349
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1350
- { internalType: "string", name: "domain", type: "string" },
1351
- { internalType: "string", name: "scope", type: "string" },
1352
- { internalType: "bool", name: "devMode", type: "bool" }
1353
- ]
1354
- }
1355
- ],
1356
- stateMutability: "view",
1357
- type: "function",
1358
- name: "isAgeBelowOrEqual",
1359
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1360
- },
1361
- {
1362
- inputs: [
1363
- { internalType: "uint8", name: "minAge", type: "uint8" },
1364
- { internalType: "uint8", name: "maxAge", type: "uint8" },
1365
- {
1366
- internalType: "struct Commitments",
1367
- name: "commitments",
1368
- type: "tuple",
1369
- components: [
1370
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1371
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1372
- ]
1373
- },
1374
- {
1375
- internalType: "struct ServiceConfig",
1376
- name: "serviceConfig",
1377
- type: "tuple",
1378
- components: [
1379
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1380
- { internalType: "string", name: "domain", type: "string" },
1381
- { internalType: "string", name: "scope", type: "string" },
1382
- { internalType: "bool", name: "devMode", type: "bool" }
1383
- ]
1384
- }
1385
- ],
1386
- stateMutability: "view",
1387
- type: "function",
1388
- name: "isAgeBetween",
1389
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1390
- },
1391
- {
1392
- inputs: [
1393
- { internalType: "uint8", name: "age", type: "uint8" },
1394
- {
1395
- internalType: "struct Commitments",
1396
- name: "commitments",
1397
- type: "tuple",
1398
- components: [
1399
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1400
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1401
- ]
1402
- },
1403
- {
1404
- internalType: "struct ServiceConfig",
1405
- name: "serviceConfig",
1406
- type: "tuple",
1407
- components: [
1408
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1409
- { internalType: "string", name: "domain", type: "string" },
1410
- { internalType: "string", name: "scope", type: "string" },
1411
- { internalType: "bool", name: "devMode", type: "bool" }
1412
- ]
1413
- }
1414
- ],
1415
- stateMutability: "view",
1416
- type: "function",
1417
- name: "isAgeEqual",
1418
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1419
- },
1420
- {
1421
- inputs: [
1422
- { internalType: "uint256", name: "minDate", type: "uint256" },
1423
- {
1424
- internalType: "struct Commitments",
1425
- name: "commitments",
1426
- type: "tuple",
1427
- components: [
1428
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1429
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1430
- ]
1431
- },
1432
- {
1433
- internalType: "struct ServiceConfig",
1434
- name: "serviceConfig",
1435
- type: "tuple",
1436
- components: [
1437
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1438
- { internalType: "string", name: "domain", type: "string" },
1439
- { internalType: "string", name: "scope", type: "string" },
1440
- { internalType: "bool", name: "devMode", type: "bool" }
1441
- ]
1442
- }
1443
- ],
1444
- stateMutability: "view",
1445
- type: "function",
1446
- name: "isBirthdateAfter",
1447
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1448
- },
1449
- {
1450
- inputs: [
1451
- { internalType: "uint256", name: "minDate", type: "uint256" },
1452
- {
1453
- internalType: "struct Commitments",
1454
- name: "commitments",
1455
- type: "tuple",
1456
- components: [
1457
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1458
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1459
- ]
1460
- },
1461
- {
1462
- internalType: "struct ServiceConfig",
1463
- name: "serviceConfig",
1464
- type: "tuple",
1465
- components: [
1466
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1467
- { internalType: "string", name: "domain", type: "string" },
1468
- { internalType: "string", name: "scope", type: "string" },
1469
- { internalType: "bool", name: "devMode", type: "bool" }
1470
- ]
1471
- }
1472
- ],
1473
- stateMutability: "view",
1474
- type: "function",
1475
- name: "isBirthdateAfterOrEqual",
1476
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1477
- },
1478
- {
1479
- inputs: [
1480
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1481
- {
1482
- internalType: "struct Commitments",
1483
- name: "commitments",
1484
- type: "tuple",
1485
- components: [
1486
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1487
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1488
- ]
1489
- },
1490
- {
1491
- internalType: "struct ServiceConfig",
1492
- name: "serviceConfig",
1493
- type: "tuple",
1494
- components: [
1495
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1496
- { internalType: "string", name: "domain", type: "string" },
1497
- { internalType: "string", name: "scope", type: "string" },
1498
- { internalType: "bool", name: "devMode", type: "bool" }
1499
- ]
1500
- }
1501
- ],
1502
- stateMutability: "view",
1503
- type: "function",
1504
- name: "isBirthdateBefore",
1505
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1506
- },
1507
- {
1508
- inputs: [
1509
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1510
- {
1511
- internalType: "struct Commitments",
1512
- name: "commitments",
1513
- type: "tuple",
1514
- components: [
1515
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1516
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1517
- ]
1518
- },
1519
- {
1520
- internalType: "struct ServiceConfig",
1521
- name: "serviceConfig",
1522
- type: "tuple",
1523
- components: [
1524
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1525
- { internalType: "string", name: "domain", type: "string" },
1526
- { internalType: "string", name: "scope", type: "string" },
1527
- { internalType: "bool", name: "devMode", type: "bool" }
1528
- ]
1529
- }
1530
- ],
1531
- stateMutability: "view",
1532
- type: "function",
1533
- name: "isBirthdateBeforeOrEqual",
1534
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1535
- },
1536
- {
1537
- inputs: [
1538
- { internalType: "uint256", name: "minDate", type: "uint256" },
1539
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1540
- {
1541
- internalType: "struct Commitments",
1542
- name: "commitments",
1543
- type: "tuple",
1544
- components: [
1545
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1546
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1547
- ]
1548
- },
1549
- {
1550
- internalType: "struct ServiceConfig",
1551
- name: "serviceConfig",
1552
- type: "tuple",
1553
- components: [
1554
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1555
- { internalType: "string", name: "domain", type: "string" },
1556
- { internalType: "string", name: "scope", type: "string" },
1557
- { internalType: "bool", name: "devMode", type: "bool" }
1558
- ]
1559
- }
1560
- ],
1561
- stateMutability: "view",
1562
- type: "function",
1563
- name: "isBirthdateBetween",
1564
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1565
- },
1566
- {
1567
- inputs: [
1568
- { internalType: "uint256", name: "date", type: "uint256" },
1569
- {
1570
- internalType: "struct Commitments",
1571
- name: "commitments",
1572
- type: "tuple",
1573
- components: [
1574
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1575
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1576
- ]
1577
- },
1578
- {
1579
- internalType: "struct ServiceConfig",
1580
- name: "serviceConfig",
1581
- type: "tuple",
1582
- components: [
1583
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1584
- { internalType: "string", name: "domain", type: "string" },
1585
- { internalType: "string", name: "scope", type: "string" },
1586
- { internalType: "bool", name: "devMode", type: "bool" }
1587
- ]
1588
- }
1589
- ],
1590
- stateMutability: "view",
1591
- type: "function",
1592
- name: "isBirthdateEqual",
1593
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1594
- },
1595
- {
1596
- inputs: [
1597
- { internalType: "uint256", name: "minDate", type: "uint256" },
1598
- {
1599
- internalType: "struct Commitments",
1600
- name: "commitments",
1601
- type: "tuple",
1602
- components: [
1603
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1604
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1605
- ]
1606
- },
1607
- {
1608
- internalType: "struct ServiceConfig",
1609
- name: "serviceConfig",
1610
- type: "tuple",
1611
- components: [
1612
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1613
- { internalType: "string", name: "domain", type: "string" },
1614
- { internalType: "string", name: "scope", type: "string" },
1615
- { internalType: "bool", name: "devMode", type: "bool" }
1616
- ]
1617
- }
1618
- ],
1619
- stateMutability: "view",
1620
- type: "function",
1621
- name: "isExpiryDateAfter",
1622
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1623
- },
1624
- {
1625
- inputs: [
1626
- { internalType: "uint256", name: "minDate", type: "uint256" },
1627
- {
1628
- internalType: "struct Commitments",
1629
- name: "commitments",
1630
- type: "tuple",
1631
- components: [
1632
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1633
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1634
- ]
1635
- },
1636
- {
1637
- internalType: "struct ServiceConfig",
1638
- name: "serviceConfig",
1639
- type: "tuple",
1640
- components: [
1641
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1642
- { internalType: "string", name: "domain", type: "string" },
1643
- { internalType: "string", name: "scope", type: "string" },
1644
- { internalType: "bool", name: "devMode", type: "bool" }
1645
- ]
1646
- }
1647
- ],
1648
- stateMutability: "view",
1649
- type: "function",
1650
- name: "isExpiryDateAfterOrEqual",
1651
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1652
- },
1653
- {
1654
- inputs: [
1655
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1656
- {
1657
- internalType: "struct Commitments",
1658
- name: "commitments",
1659
- type: "tuple",
1660
- components: [
1661
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1662
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1663
- ]
1664
- },
1665
- {
1666
- internalType: "struct ServiceConfig",
1667
- name: "serviceConfig",
1668
- type: "tuple",
1669
- components: [
1670
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1671
- { internalType: "string", name: "domain", type: "string" },
1672
- { internalType: "string", name: "scope", type: "string" },
1673
- { internalType: "bool", name: "devMode", type: "bool" }
1674
- ]
1675
- }
1676
- ],
1677
- stateMutability: "view",
1678
- type: "function",
1679
- name: "isExpiryDateBefore",
1680
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1681
- },
1682
- {
1683
- inputs: [
1684
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1685
- {
1686
- internalType: "struct Commitments",
1687
- name: "commitments",
1688
- type: "tuple",
1689
- components: [
1690
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1691
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1692
- ]
1693
- },
1694
- {
1695
- internalType: "struct ServiceConfig",
1696
- name: "serviceConfig",
1697
- type: "tuple",
1698
- components: [
1699
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1700
- { internalType: "string", name: "domain", type: "string" },
1701
- { internalType: "string", name: "scope", type: "string" },
1702
- { internalType: "bool", name: "devMode", type: "bool" }
1703
- ]
1704
- }
1705
- ],
1706
- stateMutability: "view",
1707
- type: "function",
1708
- name: "isExpiryDateBeforeOrEqual",
1709
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1710
- },
1711
- {
1712
- inputs: [
1713
- { internalType: "uint256", name: "minDate", type: "uint256" },
1714
- { internalType: "uint256", name: "maxDate", type: "uint256" },
1715
- {
1716
- internalType: "struct Commitments",
1717
- name: "commitments",
1718
- type: "tuple",
1719
- components: [
1720
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1721
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1722
- ]
1723
- },
1724
- {
1725
- internalType: "struct ServiceConfig",
1726
- name: "serviceConfig",
1727
- type: "tuple",
1728
- components: [
1729
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1730
- { internalType: "string", name: "domain", type: "string" },
1731
- { internalType: "string", name: "scope", type: "string" },
1732
- { internalType: "bool", name: "devMode", type: "bool" }
1733
- ]
1734
- }
1735
- ],
1736
- stateMutability: "view",
1737
- type: "function",
1738
- name: "isExpiryDateBetween",
1739
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1740
- },
1741
- {
1742
- inputs: [
1743
- { internalType: "uint256", name: "date", type: "uint256" },
1744
- {
1745
- internalType: "struct Commitments",
1746
- name: "commitments",
1747
- type: "tuple",
1748
- components: [
1749
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1750
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1751
- ]
1752
- },
1753
- {
1754
- internalType: "struct ServiceConfig",
1755
- name: "serviceConfig",
1756
- type: "tuple",
1757
- components: [
1758
- { internalType: "uint256", name: "validityPeriodInSeconds", type: "uint256" },
1759
- { internalType: "string", name: "domain", type: "string" },
1760
- { internalType: "string", name: "scope", type: "string" },
1761
- { internalType: "bool", name: "devMode", type: "bool" }
1762
- ]
1763
- }
1764
- ],
1765
- stateMutability: "view",
1766
- type: "function",
1767
- name: "isExpiryDateEqual",
1768
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1769
- },
1770
- {
1771
- inputs: [
1772
- { internalType: "enum FaceMatchMode", name: "faceMatchMode", type: "uint8" },
1773
- { internalType: "enum OS", name: "os", type: "uint8" },
1774
- {
1775
- internalType: "struct Commitments",
1776
- name: "commitments",
1777
- type: "tuple",
1778
- components: [
1779
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1780
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1781
- ]
1782
- }
1783
- ],
1784
- stateMutability: "pure",
1785
- type: "function",
1786
- name: "isFaceMatchVerified",
1787
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1788
- },
1789
- {
1790
- inputs: [
1791
- { internalType: "string[]", name: "countryList", type: "string[]" },
1792
- {
1793
- internalType: "struct Commitments",
1794
- name: "commitments",
1795
- type: "tuple",
1796
- components: [
1797
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1798
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1799
- ]
1800
- }
1801
- ],
1802
- stateMutability: "pure",
1803
- type: "function",
1804
- name: "isIssuingCountryIn",
1805
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1806
- },
1807
- {
1808
- inputs: [
1809
- { internalType: "string[]", name: "countryList", type: "string[]" },
1810
- {
1811
- internalType: "struct Commitments",
1812
- name: "commitments",
1813
- type: "tuple",
1814
- components: [
1815
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1816
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1817
- ]
1818
- }
1819
- ],
1820
- stateMutability: "pure",
1821
- type: "function",
1822
- name: "isIssuingCountryOut",
1823
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1824
- },
1825
- {
1826
- inputs: [
1827
- { internalType: "string[]", name: "countryList", type: "string[]" },
1828
- {
1829
- internalType: "struct Commitments",
1830
- name: "commitments",
1831
- type: "tuple",
1832
- components: [
1833
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1834
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1835
- ]
1836
- }
1837
- ],
1838
- stateMutability: "pure",
1839
- type: "function",
1840
- name: "isNationalityIn",
1841
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1842
- },
1843
- {
1844
- inputs: [
1845
- { internalType: "string[]", name: "countryList", type: "string[]" },
1846
- {
1847
- internalType: "struct Commitments",
1848
- name: "commitments",
1849
- type: "tuple",
1850
- components: [
1851
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1852
- { internalType: "uint256[]", name: "committedInputCounts", type: "uint256[]" }
1853
- ]
1854
- }
1855
- ],
1856
- stateMutability: "pure",
1857
- type: "function",
1858
- name: "isNationalityOut",
1859
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1860
- },
1861
- {
1862
- inputs: [],
1863
- stateMutability: "view",
1864
- type: "function",
1865
- name: "paused",
1866
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1867
- },
1868
- {
1869
- inputs: [{ internalType: "bytes32[]", name: "vkeyHashes", type: "bytes32[]" }],
1870
- stateMutability: "nonpayable",
1871
- type: "function",
1872
- name: "removeVerifiers"
1873
- },
1874
- {
1875
- inputs: [],
1876
- stateMutability: "view",
1877
- type: "function",
1878
- name: "rootRegistry",
1879
- outputs: [{ internalType: "contract IRootRegistry", name: "", type: "address" }]
1880
- },
1881
- {
1882
- inputs: [{ internalType: "bool", name: "_paused", type: "bool" }],
1883
- stateMutability: "nonpayable",
1884
- type: "function",
1885
- name: "setPaused"
1886
- },
1887
- {
1888
- inputs: [{ internalType: "address", name: "newAdmin", type: "address" }],
1889
- stateMutability: "nonpayable",
1890
- type: "function",
1891
- name: "transferAdmin"
1892
- },
1893
- {
1894
- inputs: [{ internalType: "address", name: "_rootRegistry", type: "address" }],
1895
- stateMutability: "nonpayable",
1896
- type: "function",
1897
- name: "updateRootRegistry"
1898
- },
1899
- {
1900
- inputs: [
1901
- {
1902
- internalType: "struct ProofVerificationParams",
1903
- name: "params",
1904
- type: "tuple",
1905
- components: [
1906
- {
1907
- internalType: "struct ProofVerificationData",
1908
- name: "proofVerificationData",
1909
- type: "tuple",
1910
- components: [
1911
- { internalType: "bytes32", name: "vkeyHash", type: "bytes32" },
1912
- { internalType: "bytes", name: "proof", type: "bytes" },
1913
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" }
1914
- ]
1915
- },
1916
- {
1917
- internalType: "struct Commitments",
1918
- name: "commitments",
1919
- type: "tuple",
1920
- components: [
1921
- { internalType: "bytes", name: "committedInputs", type: "bytes" },
1922
- {
1923
- internalType: "uint256[]",
1924
- name: "committedInputCounts",
1925
- type: "uint256[]"
1926
- }
1927
- ]
1928
- },
1929
- {
1930
- internalType: "struct ServiceConfig",
1931
- name: "serviceConfig",
1932
- type: "tuple",
1933
- components: [
1934
- {
1935
- internalType: "uint256",
1936
- name: "validityPeriodInSeconds",
1937
- type: "uint256"
1938
- },
1939
- { internalType: "string", name: "domain", type: "string" },
1940
- { internalType: "string", name: "scope", type: "string" },
1941
- { internalType: "bool", name: "devMode", type: "bool" }
1942
- ]
1943
- }
1944
- ]
1945
- }
1946
- ],
1947
- stateMutability: "view",
1948
- type: "function",
1949
- name: "verifyProof",
1950
- outputs: [
1951
- { internalType: "bool", name: "isValid", type: "bool" },
1952
- { internalType: "bytes32", name: "uniqueIdentifier", type: "bytes32" }
1953
- ]
1954
- },
1955
- {
1956
- inputs: [
1957
- { internalType: "bytes32[]", name: "publicInputs", type: "bytes32[]" },
1958
- { internalType: "string", name: "domain", type: "string" },
1959
- { internalType: "string", name: "scope", type: "string" }
1960
- ],
1961
- stateMutability: "pure",
1962
- type: "function",
1963
- name: "verifyScopes",
1964
- outputs: [{ internalType: "bool", name: "", type: "bool" }]
1965
- },
1966
- {
1967
- inputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
1968
- stateMutability: "view",
1969
- type: "function",
1970
- name: "vkeyHashToVerifier",
1971
- outputs: [{ internalType: "address", name: "", type: "address" }]
1972
- }
1973
- ],
1974
- devdoc: {
1975
- kind: "dev",
1976
- methods: {
1977
- constructor: { details: "Constructor" },
1978
- "enforceSanctionsRoot((bytes,uint256[]))": {
1979
- params: { commitments: "The commitments" }
1980
- },
1981
- "getBoundData((bytes,uint256[]))": {
1982
- params: { commitments: "The commitments" },
1983
- returns: { boundData: "The data bound to the proof" }
1984
- },
1985
- "getDisclosedData((bytes,uint256[]),bool)": {
1986
- params: {
1987
- commitments: "The commitments",
1988
- isIDCard: "Whether the proof is an ID card"
1989
- },
1990
- returns: { disclosedData: "The data disclosed by the proof" }
1991
- },
1992
- "isAgeAbove(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
1993
- params: {
1994
- commitments: "The commitments",
1995
- minAge: "The age must be above this age",
1996
- serviceConfig: "The service config"
1997
- },
1998
- returns: { _0: "True if the age is above the given age, false otherwise" }
1999
- },
2000
- "isAgeAboveOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2001
- params: {
2002
- commitments: "The commitments",
2003
- minAge: "The age must be above or equal to this age",
2004
- serviceConfig: "The service config"
2005
- },
2006
- returns: {
2007
- _0: "True if the age is above or equal to the given age, false otherwise"
2008
- }
2009
- },
2010
- "isAgeBelow(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2011
- params: {
2012
- commitments: "The commitments",
2013
- maxAge: "The age must be below this age",
2014
- serviceConfig: "The service config"
2015
- },
2016
- returns: { _0: "True if the age is below the given age, false otherwise" }
2017
- },
2018
- "isAgeBelowOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2019
- params: {
2020
- commitments: "The commitments",
2021
- maxAge: "The age must be below or equal to this age",
2022
- serviceConfig: "The service config"
2023
- },
2024
- returns: {
2025
- _0: "True if the age is below or equal to the given age, false otherwise"
2026
- }
2027
- },
2028
- "isAgeBetween(uint8,uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2029
- params: {
2030
- commitments: "The commitments",
2031
- maxAge: "The age must be less than or equal to this age",
2032
- minAge: "The age must be greater than or equal to this age",
2033
- serviceConfig: "The service config"
2034
- },
2035
- returns: { _0: "True if the age is in the given range, false otherwise" }
2036
- },
2037
- "isAgeEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2038
- params: {
2039
- age: "The age must be equal to this age",
2040
- commitments: "The commitments",
2041
- serviceConfig: "The service config"
2042
- },
2043
- returns: { _0: "True if the age is equal to the given age, false otherwise" }
2044
- },
2045
- "isBirthdateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2046
- params: {
2047
- commitments: "The commitments",
2048
- minDate: "The birthdate must be after this date",
2049
- serviceConfig: "The service config"
2050
- },
2051
- returns: { _0: "True if the birthdate is after the given date, false otherwise" }
2052
- },
2053
- "isBirthdateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2054
- params: {
2055
- commitments: "The commitments",
2056
- minDate: "The birthdate must be after or equal to this date",
2057
- serviceConfig: "The service config"
2058
- },
2059
- returns: {
2060
- _0: "True if the birthdate is after or equal to the given date, false otherwise"
2061
- }
2062
- },
2063
- "isBirthdateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2064
- params: {
2065
- commitments: "The commitments",
2066
- maxDate: "The birthdate must be before this date",
2067
- serviceConfig: "The service config"
2068
- },
2069
- returns: { _0: "True if the birthdate is before the given date, false otherwise" }
2070
- },
2071
- "isBirthdateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2072
- params: {
2073
- commitments: "The commitments",
2074
- maxDate: "The birthdate must be before or equal to this date",
2075
- serviceConfig: "The service config"
2076
- },
2077
- returns: {
2078
- _0: "True if the birthdate is before or equal to the given date, false otherwise"
2079
- }
2080
- },
2081
- "isBirthdateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2082
- params: {
2083
- commitments: "The commitments",
2084
- maxDate: "The birthdate must be before or equal to this date",
2085
- minDate: "The birthdate must be after or equal to this date",
2086
- serviceConfig: "The service config"
2087
- },
2088
- returns: { _0: "True if the birthdate is between the given dates, false otherwise" }
2089
- },
2090
- "isBirthdateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2091
- params: {
2092
- commitments: "The commitments",
2093
- date: "The birthdate must be equal to this date",
2094
- serviceConfig: "The service config"
2095
- },
2096
- returns: { _0: "True if the birthdate is equal to the given date, false otherwise" }
2097
- },
2098
- "isExpiryDateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2099
- params: {
2100
- commitments: "The commitments",
2101
- minDate: "The expiry date must be after this date",
2102
- serviceConfig: "The service config"
2103
- },
2104
- returns: { _0: "True if the expiry date is after the given date, false otherwise" }
2105
- },
2106
- "isExpiryDateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2107
- params: {
2108
- commitments: "The commitments",
2109
- minDate: "The expiry date must be after or equal to this date",
2110
- serviceConfig: "The service config"
2111
- },
2112
- returns: {
2113
- _0: "True if the expiry date is after or equal to the given date, false otherwise"
2114
- }
2115
- },
2116
- "isExpiryDateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2117
- params: {
2118
- commitments: "The commitments",
2119
- maxDate: "The expiry date must be before this date",
2120
- serviceConfig: "The service config"
2121
- },
2122
- returns: { _0: "True if the expiry date is before the given date, false otherwise" }
2123
- },
2124
- "isExpiryDateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2125
- params: {
2126
- commitments: "The commitments",
2127
- maxDate: "The expiry date must be before or equal to this date",
2128
- serviceConfig: "The service config"
2129
- },
2130
- returns: {
2131
- _0: "True if the expiry date is before or equal to the given date, false otherwise"
2132
- }
2133
- },
2134
- "isExpiryDateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2135
- params: {
2136
- commitments: "The commitments",
2137
- maxDate: "The expiry date must be before or equal to this date",
2138
- minDate: "The expiry date must be after or equal to this date",
2139
- serviceConfig: "The service config"
2140
- },
2141
- returns: {
2142
- _0: "True if the expiry date is between the given dates, false otherwise"
2143
- }
2144
- },
2145
- "isExpiryDateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2146
- params: {
2147
- commitments: "The commitments",
2148
- date: "The expiry date must be equal to this date",
2149
- serviceConfig: "The service config"
2150
- },
2151
- returns: {
2152
- _0: "True if the expiry date is equal to the given date, false otherwise"
2153
- }
2154
- },
2155
- "isFaceMatchVerified(uint8,uint8,(bytes,uint256[]))": {
2156
- params: {
2157
- commitments: "The commitments",
2158
- faceMatchMode: "The FaceMatch mode expected to be used in the verification",
2159
- os: "The operating system on which the proof should have been generated (Any (0), iOS (1), Android (2))"
2160
- },
2161
- returns: {
2162
- _0: "True if the proof is tied to a valid FaceMatch verification, false otherwise"
2163
- }
2164
- },
2165
- "isIssuingCountryIn(string[],(bytes,uint256[]))": {
2166
- params: {
2167
- commitments: "The commitments",
2168
- countryList: "The list of countries (needs to match exactly the list of countries in the proof)"
2169
- },
2170
- returns: {
2171
- _0: "True if the issuing country is in the list of countries, false otherwise"
2172
- }
2173
- },
2174
- "isIssuingCountryOut(string[],(bytes,uint256[]))": {
2175
- params: {
2176
- commitments: "The commitments",
2177
- countryList: "The list of countries (needs to match exactly the list of countries in the proof) Note: The list of countries must be sorted in alphabetical order"
2178
- },
2179
- returns: {
2180
- _0: "True if the issuing country is not in the list of countries, false otherwise"
2181
- }
2182
- },
2183
- "isNationalityIn(string[],(bytes,uint256[]))": {
2184
- params: {
2185
- commitments: "The commitments",
2186
- countryList: "The list of countries (needs to match exactly the list of countries in the proof)"
2187
- },
2188
- returns: {
2189
- _0: "True if the nationality is in the list of countries, false otherwise"
2190
- }
2191
- },
2192
- "isNationalityOut(string[],(bytes,uint256[]))": {
2193
- params: {
2194
- commitments: "The commitments",
2195
- countryList: "The list of countries (needs to match exactly the list of countries in the proof) Note: The list of countries must be sorted in alphabetical order"
2196
- },
2197
- returns: {
2198
- _0: "True if the nationality is not in the list of countries, false otherwise"
2199
- }
2200
- },
2201
- "verifyProof(((bytes32,bytes,bytes32[]),(bytes,uint256[]),(uint256,string,string,bool)))": {
2202
- params: { params: "The proof verification parameters" },
2203
- returns: {
2204
- isValid: "True if the proof is valid, false otherwise",
2205
- uniqueIdentifier: "The unique identifier associated to the identity document that generated the proof"
2206
- }
2207
- },
2208
- "verifyScopes(bytes32[],string,string)": {
2209
- params: {
2210
- domain: "The domain to check against",
2211
- publicInputs: "The public inputs of the proof",
2212
- scope: "The scope to check against"
2213
- },
2214
- returns: {
2215
- _0: "True if the proof was generated for the given domain and scope, false otherwise"
2216
- }
2217
- }
2218
- },
2219
- version: 1
2220
- },
2221
- userdoc: {
2222
- kind: "user",
2223
- methods: {
2224
- "enforceSanctionsRoot((bytes,uint256[]))": {
2225
- notice: "Enforces that the proof checks against the expected sanction list(s)"
2226
- },
2227
- "getBoundData((bytes,uint256[]))": { notice: "Gets the data bound to the proof" },
2228
- "getDisclosedData((bytes,uint256[]),bool)": {
2229
- notice: "Gets the data disclosed by the proof"
2230
- },
2231
- "isAgeAbove(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2232
- notice: "Checks if the age is above the given age"
2233
- },
2234
- "isAgeAboveOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2235
- notice: "Checks if the age is above or equal to the given age"
2236
- },
2237
- "isAgeBelow(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2238
- notice: "Checks if the age is below the given age"
2239
- },
2240
- "isAgeBelowOrEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2241
- notice: "Checks if the age is below or equal to the given age"
2242
- },
2243
- "isAgeBetween(uint8,uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2244
- notice: "Checks if the age is in the given range"
2245
- },
2246
- "isAgeEqual(uint8,(bytes,uint256[]),(uint256,string,string,bool))": {
2247
- notice: "Checks if the age is equal to the given age"
2248
- },
2249
- "isBirthdateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2250
- notice: "Checks if the birthdate is after the given date"
2251
- },
2252
- "isBirthdateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2253
- notice: "Checks if the birthdate is after or equal to the given date"
2254
- },
2255
- "isBirthdateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2256
- notice: "Checks if the birthdate is before the given date"
2257
- },
2258
- "isBirthdateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2259
- notice: "Checks if the birthdate is before or equal to the given date"
2260
- },
2261
- "isBirthdateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2262
- notice: "Checks if the birthdate is between the given dates"
2263
- },
2264
- "isBirthdateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2265
- notice: "Checks if the birthdate is equal to the given date"
2266
- },
2267
- "isExpiryDateAfter(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2268
- notice: "Checks if the expiry date is after the given date"
2269
- },
2270
- "isExpiryDateAfterOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2271
- notice: "Checks if the expiry date is after or equal to the given date"
2272
- },
2273
- "isExpiryDateBefore(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2274
- notice: "Checks if the expiry date is before the given date"
2275
- },
2276
- "isExpiryDateBeforeOrEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2277
- notice: "Checks if the expiry date is before or equal to the given date"
2278
- },
2279
- "isExpiryDateBetween(uint256,uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2280
- notice: "Checks if the expiry date is between the given dates"
2281
- },
2282
- "isExpiryDateEqual(uint256,(bytes,uint256[]),(uint256,string,string,bool))": {
2283
- notice: "Checks if the expiry date is equal to the given date"
2284
- },
2285
- "isFaceMatchVerified(uint8,uint8,(bytes,uint256[]))": {
2286
- notice: "Checks if the proof is tied to a FaceMatch verification"
2287
- },
2288
- "isIssuingCountryIn(string[],(bytes,uint256[]))": {
2289
- notice: "Checks if the issuing country is in the list of countries"
2290
- },
2291
- "isIssuingCountryOut(string[],(bytes,uint256[]))": {
2292
- notice: "Checks if the issuing country is not in the list of countries"
2293
- },
2294
- "isNationalityIn(string[],(bytes,uint256[]))": {
2295
- notice: "Checks if the nationality is in the list of countries"
2296
- },
2297
- "isNationalityOut(string[],(bytes,uint256[]))": {
2298
- notice: "Checks if the nationality is not in the list of countries"
2299
- },
2300
- "verifyProof(((bytes32,bytes,bytes32[]),(bytes,uint256[]),(uint256,string,string,bool)))": {
2301
- notice: "Verifies a proof from ZKPassport"
2302
- },
2303
- "verifyScopes(bytes32[],string,string)": {
2304
- notice: "Verifies that the proof was generated for the given domain and scope"
2305
- }
2306
- },
2307
- version: 1
2308
- }
2309
- },
2310
- settings: {
2311
- remappings: ["forge-std/=lib/forge-std/src/"],
2312
- optimizer: { enabled: true, runs: 200 },
2313
- metadata: { bytecodeHash: "ipfs" },
2314
- compilationTarget: { "src/ZKPassportVerifier.sol": "ZKPassportVerifier" },
2315
- evmVersion: "cancun",
2316
- libraries: {}
2317
- },
2318
- sources: {
2319
- "src/Constants.sol": {
2320
- keccak256: "0x6f011f7c9038b4552283dd9801d5686ad4047ad6c281cf0a8620bfec503a9060",
2321
- urls: [
2322
- "bzz-raw://d4052ca894163688d25d78d297f86dd1c562cfd4e9de7253f2c1da30796a538c",
2323
- "dweb:/ipfs/QmbMJ9gCMsqo22f6ih8Sk3MTxCwBJfPEFAMbYoBVXMydAW"
2324
- ],
2325
- license: "Apache-2.0"
2326
- },
2327
- "src/DateUtils.sol": {
2328
- keccak256: "0xc04aef2f5732f8c3b28077a0af19e2fbbdec2f9178f3800563bf64ccdecefc77",
2329
- urls: [
2330
- "bzz-raw://bcc2610f3bdd3411fc040d39efe9e68f826b48986b2df7987f3adb6a1467c833",
2331
- "dweb:/ipfs/Qmc7uyW8Y7ekaKEdjd3kU9e1eDcCiAqsujGc5ZavuzGx4w"
2332
- ],
2333
- license: "Apache-2.0"
2334
- },
2335
- "src/IRootRegistry.sol": {
2336
- keccak256: "0xa9955e80821ca9ccbdf7d05a8ce9a3e237b4771e1f6e09190ed1c803a5e1e516",
2337
- urls: [
2338
- "bzz-raw://fd9fc9fbd7057a6bcc16a682e52be9ebd012954898626a11f0a0e8788644789d",
2339
- "dweb:/ipfs/QmZYpMRHdv4gMCNXCQtGQu8XqRVtNR9Kgkzh7u1YMpvrEB"
2340
- ],
2341
- license: "MIT"
2342
- },
2343
- "src/InputsExtractor.sol": {
2344
- keccak256: "0xca3a90807b75bff710d97a53c65838a19a87d0bc96c3e1f7a7caa2eb831ef373",
2345
- urls: [
2346
- "bzz-raw://7e1360632f22afd864807ae616cd29c80f90142f2065a131dc996758b9388650",
2347
- "dweb:/ipfs/QmSaRNmHoZs8pLKgfrgBhe9oMrNX82huzDXq1K5TvTwWad"
2348
- ],
2349
- license: "Apache-2.0"
2350
- },
2351
- "src/StringUtils.sol": {
2352
- keccak256: "0x0174454c28003f489bcdf636c93ccb512d80f3dbdca7485e11b51cf2c8ebfff1",
2353
- urls: [
2354
- "bzz-raw://92ea71064b8199c9a05cbe279cf42adaaa7b29604d960a84754d3d997b1c2342",
2355
- "dweb:/ipfs/QmcsrqRJ2YZABCZHzS782RqKmWEegSK1LCmTTjJ94gdh5q"
2356
- ],
2357
- license: "Apache-2.0"
2358
- },
2359
- "src/Types.sol": {
2360
- keccak256: "0x1cb492c099b71287da0349afef0c72c430e2476ad7373a0ea1456e7145207a06",
2361
- urls: [
2362
- "bzz-raw://a158753948b82917aa802c4b475a1ffb4b5f09b2a86ebcb64db11437ab297047",
2363
- "dweb:/ipfs/QmPgGhT59MzcG4TA5PmKjzaoNMZ4VRmcLJH6w5LkWQYjxV"
2364
- ],
2365
- license: "Apache-2.0"
2366
- },
2367
- "src/ZKPassportVerifier.sol": {
2368
- keccak256: "0x12322e58cc69dcc634b07dca3715b81b08aeb1618bcbfcf3de9edbe120f08de9",
2369
- urls: [
2370
- "bzz-raw://769194840e10dd878e1fcac248d386ba6cdb8e0fd96915111133c7f122265bf2",
2371
- "dweb:/ipfs/QmR5ML1N26F8bPMZd2GgSKrGxtUfbLtpKp4dN1FbBMXDNG"
2372
- ],
2373
- license: "Apache-2.0"
2374
- },
2375
- "src/ultra-honk-verifiers/OuterCount4.sol": {
2376
- keccak256: "0xc0b2358f1cb49d10ab783b6ccf321e8bde6eb8ce70efe325fdf49987f1688b94",
2377
- urls: [
2378
- "bzz-raw://c5ddd3b3c3e2522e766c5ab95d2559ce4e79fe54e9aeb50b1c995ad1d8ed18ee",
2379
- "dweb:/ipfs/Qmcu7WhWMk3TPxb3HuwEPiXF95F6eD8KmJ12RXxFBdCYgM"
2380
- ],
2381
- license: "Apache-2.0"
2382
- }
2383
- },
2384
- version: 1
2385
- },
2386
- id: 26
2387
- };
2388
-
2389
- // src/solidity-verifier.ts
2390
- var SolidityVerifier = class {
2391
- static getDetails(network) {
2392
- const baseConfig = {
2393
- functionName: "verifyProof",
2394
- abi: ZKPassportVerifier_default.abi
2395
- };
2396
- if (network === "ethereum_sepolia") {
2397
- return {
2398
- ...baseConfig,
2399
- address: "0xf36cdd408d28fe57Ee7060951098a84F72945705"
2400
- };
2401
- } else if (network === "local_anvil") {
2402
- return {
2403
- ...baseConfig,
2404
- address: "0x0"
2405
- };
2406
- }
2407
- throw new Error(`Unsupported network: ${network}`);
2408
- }
2409
- static getParameters({
2410
- proof,
2411
- validityPeriodInSeconds = DEFAULT_VALIDITY,
2412
- domain,
2413
- scope,
2414
- devMode = false
2415
- }) {
2416
- if (!proof.name?.startsWith("outer_evm")) {
2417
- throw new Error(
2418
- "This proof cannot be verified on an EVM chain. Please make sure to use the `compressed-evm` mode."
2419
- );
2420
- }
2421
- const proofData = getProofData(proof.proof, getNumberOfPublicInputs(proof.name));
2422
- let committedInputCounts = [];
2423
- let committedInputs = [];
2424
- for (const key in proof.committedInputs) {
2425
- const committedInputCount = getCommittedInputCount(key);
2426
- const circuitName = key;
2427
- committedInputCounts.push({ circuitName, count: committedInputCount });
2428
- let compressedCommittedInputs2 = "";
2429
- if (circuitName === "inclusion_check_issuing_country_evm" || circuitName === "inclusion_check_nationality_evm" || circuitName === "exclusion_check_issuing_country_evm" || circuitName === "exclusion_check_nationality_evm") {
2430
- const value = proof.committedInputs[circuitName];
2431
- const formattedCountries = value.countries;
2432
- if (circuitName === "exclusion_check_issuing_country_evm" || circuitName === "exclusion_check_nationality_evm") {
2433
- formattedCountries.sort((a, b) => a.localeCompare(b));
2434
- }
2435
- const proofType = (() => {
2436
- switch (circuitName) {
2437
- case "exclusion_check_issuing_country_evm":
2438
- return ProofType.ISSUING_COUNTRY_EXCLUSION;
2439
- case "exclusion_check_nationality_evm":
2440
- return ProofType.NATIONALITY_EXCLUSION;
2441
- case "inclusion_check_issuing_country_evm":
2442
- return ProofType.ISSUING_COUNTRY_INCLUSION;
2443
- case "inclusion_check_nationality_evm":
2444
- return ProofType.NATIONALITY_INCLUSION;
2445
- }
2446
- })();
2447
- compressedCommittedInputs2 = proofType.toString(16).padStart(2, "0") + rightPadArrayWithZeros(
2448
- formattedCountries.map((c) => Array.from(new TextEncoder().encode(c))).flat(),
2449
- 600
2450
- ).map((x) => x.toString(16).padStart(2, "0")).join("");
2451
- } else if (circuitName === "compare_age_evm") {
2452
- const value = proof.committedInputs[circuitName];
2453
- const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
2454
- compressedCommittedInputs2 = ProofType.AGE.toString(16).padStart(2, "0") + currentDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + value.minAge.toString(16).padStart(2, "0") + value.maxAge.toString(16).padStart(2, "0");
2455
- } else if (circuitName === "compare_birthdate_evm") {
2456
- const value = proof.committedInputs[circuitName];
2457
- const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
2458
- const minDateBytes = Array.from(numberToBytesBE(value.minDateTimestamp, 8));
2459
- const maxDateBytes = Array.from(numberToBytesBE(value.maxDateTimestamp, 8));
2460
- compressedCommittedInputs2 = ProofType.BIRTHDATE.toString(16).padStart(2, "0") + currentDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
2461
- } else if (circuitName === "compare_expiry_evm") {
2462
- const value = proof.committedInputs[circuitName];
2463
- const currentDateBytes = Array.from(numberToBytesBE(value.currentDateTimestamp, 8));
2464
- const minDateBytes = Array.from(numberToBytesBE(value.minDateTimestamp, 8));
2465
- const maxDateBytes = Array.from(numberToBytesBE(value.maxDateTimestamp, 8));
2466
- compressedCommittedInputs2 = ProofType.EXPIRY_DATE.toString(16).padStart(2, "0") + currentDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + minDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("") + maxDateBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
2467
- } else if (circuitName === "disclose_bytes_evm") {
2468
- const value = proof.committedInputs[circuitName];
2469
- compressedCommittedInputs2 = ProofType.DISCLOSE.toString(16).padStart(2, "0") + value.discloseMask.map((x) => x.toString(16).padStart(2, "0")).join("") + value.disclosedBytes.map((x) => x.toString(16).padStart(2, "0")).join("");
2470
- } else if (circuitName === "bind_evm") {
2471
- const value = proof.committedInputs[circuitName];
2472
- compressedCommittedInputs2 = ProofType.BIND.toString(16).padStart(2, "0") + rightPadArrayWithZeros(formatBoundData(value.data), 500).map((x) => x.toString(16).padStart(2, "0")).join("");
2473
- } else if (circuitName === "exclusion_check_sanctions_evm") {
2474
- const value = proof.committedInputs[circuitName];
2475
- compressedCommittedInputs2 = ProofType.SANCTIONS_EXCLUSION.toString(16).padStart(2, "0") + Array.from(numberToBytesBE(BigInt(value.rootHash), 32)).map((x) => x.toString(16).padStart(2, "0")).join("");
2476
- } else if (circuitName.startsWith("facematch") && circuitName.endsWith("_evm")) {
2477
- const value = proof.committedInputs[circuitName];
2478
- compressedCommittedInputs2 += ProofType.FACEMATCH.toString(16).padStart(2, "0");
2479
- compressedCommittedInputs2 += Array.from(numberToBytesBE(BigInt(value.rootKeyLeaf), 32)).map((x) => x.toString(16).padStart(2, "0")).join("");
2480
- compressedCommittedInputs2 += value.environment === "development" ? "00" : "01";
2481
- compressedCommittedInputs2 += Array.from(numberToBytesBE(BigInt(value.appId), 32)).map((x) => x.toString(16).padStart(2, "0")).join("");
2482
- compressedCommittedInputs2 += value.mode === "regular" ? "01" : "02";
2483
- } else {
2484
- throw new Error(`Unsupported circuit for EVM verification: ${circuitName}`);
2485
- }
2486
- committedInputs.push({ circuitName, inputs: compressedCommittedInputs2 });
2487
- }
2488
- const parameterCommitments = getParamCommitmentsFromOuterProof(proofData).map(
2489
- (x) => x.toString(16).padStart(64, "0")
2490
- );
2491
- let compressedCommittedInputs = "";
2492
- let committedInputCountsArray = [];
2493
- for (const commitment of parameterCommitments) {
2494
- const committedInput = committedInputs.find((x) => {
2495
- const rawHashedInputs = sha256(hexToBytes(x.inputs));
2496
- const hashedInputs = new Uint8Array(rawHashedInputs.length);
2497
- for (let i = 0; i < rawHashedInputs.length - 1; i++) {
2498
- hashedInputs[i + 1] = rawHashedInputs[i];
2499
- }
2500
- hashedInputs[0] = 0;
2501
- return bytesToHex(hashedInputs) === commitment.replace("0x", "");
2502
- });
2503
- if (committedInput) {
2504
- const count = committedInputCounts.find(
2505
- (x) => x.circuitName === committedInput.circuitName
2506
- )?.count;
2507
- if (count) {
2508
- committedInputCountsArray.push(count);
2509
- compressedCommittedInputs += committedInput.inputs;
2510
- } else {
2511
- throw new Error(`Unknown circuit name: ${committedInput.circuitName}`);
2512
- }
2513
- } else {
2514
- throw new Error(`Invalid commitment: ${commitment}`);
2515
- }
2516
- }
2517
- const params = {
2518
- proofVerificationData: {
2519
- // Make sure the vkeyHash is 32 bytes
2520
- vkeyHash: `0x${proof.vkeyHash.replace("0x", "").padStart(64, "0")}`,
2521
- proof: `0x${proofData.proof.join("")}`,
2522
- publicInputs: proofData.publicInputs
2523
- },
2524
- commitments: {
2525
- committedInputs: `0x${compressedCommittedInputs}`,
2526
- committedInputCounts: committedInputCountsArray
2527
- },
2528
- serviceConfig: {
2529
- validityPeriodInSeconds,
2530
- domain,
2531
- scope: scope ?? "",
2532
- devMode
2533
- }
2534
- };
2535
- return params;
2536
- }
2537
- };
2538
-
2539
- export {
2540
- SolidityVerifier
2541
- };