@aztec/accounts 0.76.0 → 0.76.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,30 +4,101 @@
4
4
  "name": "SchnorrSingleKeyAccount",
5
5
  "functions": [
6
6
  {
7
- "name": "sync_notes",
7
+ "name": "compute_note_hash_and_optionally_a_nullifier",
8
8
  "is_unconstrained": true,
9
9
  "custom_attributes": [],
10
10
  "abi": {
11
11
  "error_types": {
12
+ "16541607464495309456": {
13
+ "error_kind": "fmtstring",
14
+ "item_types": [],
15
+ "length": 16
16
+ },
12
17
  "17843811134343075018": {
13
18
  "error_kind": "string",
14
19
  "string": "Stack too deep"
15
20
  }
16
21
  },
17
- "parameters": [],
18
- "return_type": null
22
+ "parameters": [
23
+ {
24
+ "name": "contract_address",
25
+ "type": {
26
+ "fields": [
27
+ {
28
+ "name": "inner",
29
+ "type": {
30
+ "kind": "field"
31
+ }
32
+ }
33
+ ],
34
+ "kind": "struct",
35
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
36
+ },
37
+ "visibility": "private"
38
+ },
39
+ {
40
+ "name": "nonce",
41
+ "type": {
42
+ "kind": "field"
43
+ },
44
+ "visibility": "private"
45
+ },
46
+ {
47
+ "name": "storage_slot",
48
+ "type": {
49
+ "kind": "field"
50
+ },
51
+ "visibility": "private"
52
+ },
53
+ {
54
+ "name": "note_type_id",
55
+ "type": {
56
+ "kind": "field"
57
+ },
58
+ "visibility": "private"
59
+ },
60
+ {
61
+ "name": "compute_nullifier",
62
+ "type": {
63
+ "kind": "boolean"
64
+ },
65
+ "visibility": "private"
66
+ },
67
+ {
68
+ "name": "packed_note_content",
69
+ "type": {
70
+ "kind": "array",
71
+ "length": 0,
72
+ "type": {
73
+ "kind": "field"
74
+ }
75
+ },
76
+ "visibility": "private"
77
+ }
78
+ ],
79
+ "return_type": {
80
+ "abi_type": {
81
+ "kind": "array",
82
+ "length": 4,
83
+ "type": {
84
+ "kind": "field"
85
+ }
86
+ },
87
+ "visibility": "public"
88
+ }
19
89
  },
20
- "bytecode": "H4sIAAAAAAAA/7WTyw7CIBBFqcUo0sTEx39MU0y7dOHafyCtLHVRN+766dZkJkyI0QVwEzJMgMNcHoXwKjBKESGCHDEqjAs2Xs7tjDnEqVbBvin5HRijvvhLWH+jkFnk4QPxM50/rJBzmTyfe6F913PTrF8J/z5y+af7y+l//8OzRq9bzCvh/8P4uvfXx/M2ij/SbJGc0ptoOwAqvkT+EvmhJBvn8w+Yb4Svj6KMqNO1tnaNdfZkh8H0dhfwP+KH/QbzqHp4zgQAAA==",
21
- "debug_symbols": "bY/RCoMwDEX/Jc99SCqO6a/IkKpRCqWVWgdD/PfFIeI2X8K94eSSu0DHzTzU1vdhgrJawIXWJBu8uGVV0ETrnB3q8xpwG5R9+Gk0frNTMjFBeUMF7DsRd7nurWOR2ar+QEJCvbOidXHglOM1X9DBa8Iv/rGKfZpoTeN4f72ffXtqkl4j/5QaY2i5myNv9U7NZFaUK40SK9Fv",
90
+ "bytecode": "H4sIAAAAAAAA/9VZy67aQAwdSEJIuAEKn3Cl7tomXJ47Fn3c30AFPqHrrLppP7qMGCcH46siYVfFEpoknhyfOXZmJqHjztY//TrhOA5tz10b9dmGtrzPKkWs0pJn50F4dh+EZ/QgPGNFnh2Bp2/peUvc+ZlL3fl5bC7iTT7BEdzk/gYAwX6HNgttF/yKCakyYZBa+Otyvs/cpSnzf8kCZmqDvyD8vg1+Sbw/1y0+joXiRqF9rVstX+Eeb0U4xuIlXPJ1wfeF+SLwfWU+rOFvzId1T5xIN1qYlOtqY50XGlsKY+u80TrXaofXSOvcmdZoRTnPGB/On/gU1Kdu+fSYLwZfxnwJ+Eh/3z5DP577FPp9hONP0IfXZ+Su65n8lH/U3aK+YgP8k82lHPD8xPVlbPRhDmLQ85npY7FuoD4W+nt9pm/wp2Nvae0ai5ieqBFp1sf+zJeBL64v4+ThPIY4iEU8Etb/QzgfhbYH99D9YyF+j8W/4C1cQ404ViRco/7++Xwfjgfh52voJ93jructvc31ci7N4Xr4qwY/s+F/JPzcBn9J+AMb/GZv82SCPysJv7Dh38xBQ5v6afaWIxv+B8Ifm+DPD7QOv3OtNXNEOJ7Adb35u6pu2SNh/JxxtdojTRgfrg+uwd43FbiOBR/P4VSIMxXiSFiZItaTItboPx1jXxFroIg1VMTSzGOqiKWpV66IVShiada9pl6UR2mf5m0b2vJOk/ZpiviVtE/TfJcnram+YkFDHF/C+v9gOg9MeFYzWnPoWacYGLswin3rek3xC4EP8c4F3z0fZw+L9XGzXmxOW7JqOds0+SwYV34N34twPsb+0tov7fsUtS6ld/8h6OotBl/BfAn4iKP07j804n+L/hh/LPj4+n9rLifuej0csHHjN6+typjb74HSt3rj+Wtx67NJ8XN3PV//q++NqA/fS+cC17Hg4/uTXIiTC3EeEYt/s0cNfV2TTnHd+rVyuVq3f3TRXJS4y/8BHIufsP6/wjmOjdp75vzjalcdX3bH3WK338+/7yYM31sXdPoDg5oBSR0fAAA=",
91
+ "debug_symbols": "tZfBisMgFEX/xbULn8YY+yvDUExiiiAmmGRgCPn3MSVMS7ssdxN84XrceMC7sd636+0a0jDO7PK1sTh2bgljKtO2c9bmEGO4XZ9/M3F8rL7n58mlY5wXlxd2qQVnPvVl0ZTdQ4i+LNXO34JGnkFj/oNa7t+c2RoFNihwgwJbEJiEgJEJRpYwsoKRKxhZw8g1jGxg5AZGhjlIMAcJ5iDBHCSYgwRzkGAOEsxBgjlInzlo1RksV+ENbWFoKXBowqElDq1w6AqH1jh0jUMbHBpno8TZqHA2KpCNe5l+XA6ujf5sTcOauqcStfxO/qVPTXnsfL9mfzSrR6k61FOaV/r+8igDqYqTsuWQctAf",
22
92
  "brillig_names": [
23
- "sync_notes"
93
+ "compute_note_hash_and_optionally_a_nullifier"
24
94
  ]
25
95
  },
26
96
  {
27
- "name": "entrypoint",
97
+ "name": "verify_private_authwit",
28
98
  "is_unconstrained": false,
29
99
  "custom_attributes": [
30
- "private"
100
+ "private",
101
+ "view"
31
102
  ],
32
103
  "abi": {
33
104
  "error_types": {
@@ -39,13 +110,17 @@
39
110
  "error_kind": "string",
40
111
  "string": "Stack too deep"
41
112
  },
42
- "5019202896831570965": {
113
+ "19458536156181958": {
43
114
  "error_kind": "string",
44
- "string": "attempt to add with overflow"
115
+ "string": "Function verify_private_authwit can only be called statically"
45
116
  },
46
- "5727012404371710682": {
117
+ "4939791462094160055": {
47
118
  "error_kind": "string",
48
- "string": "push out of bounds"
119
+ "string": "Message not authorized by account"
120
+ },
121
+ "5019202896831570965": {
122
+ "error_kind": "string",
123
+ "string": "attempt to add with overflow"
49
124
  },
50
125
  "6485997221020871071": {
51
126
  "error_kind": "string",
@@ -535,240 +610,76 @@
535
610
  "visibility": "private"
536
611
  },
537
612
  {
538
- "name": "app_payload",
613
+ "name": "inner_hash",
539
614
  "type": {
540
- "fields": [
541
- {
542
- "name": "function_calls",
543
- "type": {
544
- "kind": "array",
545
- "length": 4,
546
- "type": {
547
- "fields": [
548
- {
549
- "name": "args_hash",
550
- "type": {
551
- "kind": "field"
552
- }
553
- },
554
- {
555
- "name": "function_selector",
556
- "type": {
557
- "fields": [
558
- {
559
- "name": "inner",
560
- "type": {
561
- "kind": "integer",
562
- "sign": "unsigned",
563
- "width": 32
564
- }
565
- }
566
- ],
567
- "kind": "struct",
568
- "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
569
- }
570
- },
571
- {
572
- "name": "target_address",
573
- "type": {
574
- "fields": [
575
- {
576
- "name": "inner",
577
- "type": {
578
- "kind": "field"
579
- }
580
- }
581
- ],
582
- "kind": "struct",
583
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
615
+ "kind": "field"
616
+ },
617
+ "visibility": "private"
618
+ }
619
+ ],
620
+ "return_type": {
621
+ "abi_type": {
622
+ "fields": [
623
+ {
624
+ "name": "call_context",
625
+ "type": {
626
+ "fields": [
627
+ {
628
+ "name": "msg_sender",
629
+ "type": {
630
+ "fields": [
631
+ {
632
+ "name": "inner",
633
+ "type": {
634
+ "kind": "field"
635
+ }
584
636
  }
585
- },
586
- {
587
- "name": "is_public",
588
- "type": {
589
- "kind": "boolean"
637
+ ],
638
+ "kind": "struct",
639
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
640
+ }
641
+ },
642
+ {
643
+ "name": "contract_address",
644
+ "type": {
645
+ "fields": [
646
+ {
647
+ "name": "inner",
648
+ "type": {
649
+ "kind": "field"
650
+ }
590
651
  }
591
- },
592
- {
593
- "name": "is_static",
594
- "type": {
595
- "kind": "boolean"
652
+ ],
653
+ "kind": "struct",
654
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
655
+ }
656
+ },
657
+ {
658
+ "name": "function_selector",
659
+ "type": {
660
+ "fields": [
661
+ {
662
+ "name": "inner",
663
+ "type": {
664
+ "kind": "integer",
665
+ "sign": "unsigned",
666
+ "width": 32
667
+ }
596
668
  }
597
- }
598
- ],
599
- "kind": "struct",
600
- "path": "authwit::entrypoint::function_call::FunctionCall"
669
+ ],
670
+ "kind": "struct",
671
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
672
+ }
673
+ },
674
+ {
675
+ "name": "is_static_call",
676
+ "type": {
677
+ "kind": "boolean"
678
+ }
601
679
  }
602
- }
603
- },
604
- {
605
- "name": "nonce",
606
- "type": {
607
- "kind": "field"
608
- }
609
- }
610
- ],
611
- "kind": "struct",
612
- "path": "authwit::entrypoint::app::AppPayload"
613
- },
614
- "visibility": "private"
615
- },
616
- {
617
- "name": "fee_payload",
618
- "type": {
619
- "fields": [
620
- {
621
- "name": "function_calls",
622
- "type": {
623
- "kind": "array",
624
- "length": 2,
625
- "type": {
626
- "fields": [
627
- {
628
- "name": "args_hash",
629
- "type": {
630
- "kind": "field"
631
- }
632
- },
633
- {
634
- "name": "function_selector",
635
- "type": {
636
- "fields": [
637
- {
638
- "name": "inner",
639
- "type": {
640
- "kind": "integer",
641
- "sign": "unsigned",
642
- "width": 32
643
- }
644
- }
645
- ],
646
- "kind": "struct",
647
- "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
648
- }
649
- },
650
- {
651
- "name": "target_address",
652
- "type": {
653
- "fields": [
654
- {
655
- "name": "inner",
656
- "type": {
657
- "kind": "field"
658
- }
659
- }
660
- ],
661
- "kind": "struct",
662
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
663
- }
664
- },
665
- {
666
- "name": "is_public",
667
- "type": {
668
- "kind": "boolean"
669
- }
670
- },
671
- {
672
- "name": "is_static",
673
- "type": {
674
- "kind": "boolean"
675
- }
676
- }
677
- ],
678
- "kind": "struct",
679
- "path": "authwit::entrypoint::function_call::FunctionCall"
680
- }
681
- }
682
- },
683
- {
684
- "name": "nonce",
685
- "type": {
686
- "kind": "field"
687
- }
688
- },
689
- {
690
- "name": "is_fee_payer",
691
- "type": {
692
- "kind": "boolean"
693
- }
694
- }
695
- ],
696
- "kind": "struct",
697
- "path": "authwit::entrypoint::fee::FeePayload"
698
- },
699
- "visibility": "private"
700
- },
701
- {
702
- "name": "cancellable",
703
- "type": {
704
- "kind": "boolean"
705
- },
706
- "visibility": "private"
707
- }
708
- ],
709
- "return_type": {
710
- "abi_type": {
711
- "fields": [
712
- {
713
- "name": "call_context",
714
- "type": {
715
- "fields": [
716
- {
717
- "name": "msg_sender",
718
- "type": {
719
- "fields": [
720
- {
721
- "name": "inner",
722
- "type": {
723
- "kind": "field"
724
- }
725
- }
726
- ],
727
- "kind": "struct",
728
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
729
- }
730
- },
731
- {
732
- "name": "contract_address",
733
- "type": {
734
- "fields": [
735
- {
736
- "name": "inner",
737
- "type": {
738
- "kind": "field"
739
- }
740
- }
741
- ],
742
- "kind": "struct",
743
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
744
- }
745
- },
746
- {
747
- "name": "function_selector",
748
- "type": {
749
- "fields": [
750
- {
751
- "name": "inner",
752
- "type": {
753
- "kind": "integer",
754
- "sign": "unsigned",
755
- "width": 32
756
- }
757
- }
758
- ],
759
- "kind": "struct",
760
- "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
761
- }
762
- },
763
- {
764
- "name": "is_static_call",
765
- "type": {
766
- "kind": "boolean"
767
- }
768
- }
769
- ],
770
- "kind": "struct",
771
- "path": "authwit::aztec::protocol_types::abis::call_context::CallContext"
680
+ ],
681
+ "kind": "struct",
682
+ "path": "authwit::aztec::protocol_types::abis::call_context::CallContext"
772
683
  }
773
684
  },
774
685
  {
@@ -1811,29 +1722,136 @@
1811
1722
  "visibility": "databus"
1812
1723
  }
1813
1724
  },
1814
- "bytecode": "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",
1815
- "debug_symbols": "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",
1725
+ "bytecode": "H4sIAAAAAAAA/+1dB5QUxfPeu9s9chZzABUUDExvXhEkSpCck8pGkpJzPIIKKphzzjnnnHPOIghIEpAkIJjAf5XMQu/Qe4St3l/X+9vvfW/neuZ6v+qurq5vZnamwLWzPFHscvUus3O7AFBkfxYCajnqPIq6Coq6Soq6Koq6aoq6gwFNHHXHKI6rpairrag7VlF3gl0nlwL7s4n96bOCfn8y5E0Kn4ha3kgsHLD8gVgwLMIiEA4kvGGfLxn2h0ORWCRkRYTflxSpQMSXsnaWykW727JyKt64Tp5VyHhalk6eVQ+cp9dZgdyqA9wSVxyvHfb2ia7d21Wk+qr2dvr/qsHf1QE1AAcV7a5Pl0JHH1i5FXECYX/WpBt3Ic8tbLeWox8KiPuhiLAfXBp99mC6GJDUyfOQA+cZcFao5tbB0hzCkt4+Sto+xDG3DoW/DwMcDjhCMbeKiH3qaMK2Di2iG5sjNcVn6v47kbCtwwj77yjC/lP59pGSbx8lbR8ubR/h8O2j4e9jME4Catu+LbfpLNTx82jCPqks8TzWdqrj7M/j7c869mdd+/ME+/NE+7Oe/Vnf/jzJ/jzZ/jylaGcfNLG/51T4uwHAAuBi4AX4AH5AABAEhABhQARwGqAh4HRAI0BjwBnYB4CmgGaA5oAWgJaAMwGtAK0BbQBtAWcB2gHaAzoAOgI6AToDugC6AroBugN6AHoCegF6A/oA+gL6Ac4GnAM4F9AfEAXEAHFAApAEpAADAAMBgwCDAUMA5wHOt/tkaHrBTX8eb3dSRqKrqKuvqDtFUYedXNZR10BRZynqhKLOq6jzKer8irqAoi6oqAsp6sKKuoii7jRFXUNF3emKukaKusaKujMUdU0UdU0Vdc0Udc0VdS0UdS0VdWcq6lop6lor6too6toq6s5S1LVT1LVX1HVQ1HVU1HVS1HVW1HVR1HVV1HVT1HVX1PVQ1PVU1PVS1PVW1PVR1PVV1PVT1J2tqDtHUXeuoq6/oi6qqIsp6uKKuoSiLqmoSynqBijqBirqBinqBivqhijqzlPUnW/XpRdirHeWAvuzif1p5VZIF2EFXSrhoa9tsTOhSvdtLXt7GPTLcMAIwEjAKMBowBjAWMA4wHjABMBEwCTAZMAUwFTANEAJYDpgBmAmYBbgAsCFgIsAswFzABcDLgFcCpgLmFfkcIxhCmcZrqgboagbqagbpagbragbo6gbq6gbp6gbr6iboKibqKibpKibrKiboqibqqibpqgrUdRNV9TNUNTNVNTNUtRdoKi7UFF3kaJutqJujqLuYkXdJYq6SxV1cxV18+w6udS2P5vYn1ZuJSPo5KqshhG0lUxhscRworbQxhEkbe3sr5G5t+W1+0uMyrUt/66+F6Nza8uSxlGMyaUtb4ZPiLEH3pbl8C8x7gDbCqb28FUx/sDaCiv8Xkw4kLbCyjkkJu5/W6Es81FM2t+2Qlnntpi8f215S4kTYsr+tBUqNeaIqfveVnwv8UtM29e2QnuNhaJk39qy9iGuiun70pa1TzFazNh7W4F9jPdi5t7a8u/z2iFmldqWP7Uf65C4oLS2Qvu1pokLs7cV3s/1UVyUpa1Iar/XWjFb3ZZ1AOu2mKNqyzqgHEBcvGdb4gDzCXGJs63EAecm4tLMtnw55DlirtSWN5VTziTmFdGJPhSqeEU+LaLkQi1W55Hlegkh872sSCNhbNx5CTZX8pfRDaC4nDAZ19WHyLGAuA8vJ54Exa7d45yvSWDlVBJaz6rIfXGFPcGudJ7ZuMIeWLnuSoUCLdLYibmqxisIJ9CVxINL7Xw4aa4gnIxpu69guiLNJfOjSELme1WRRsJXka9IkcRVhCvS1YavSNiHV5OvSJHE1UxXpLlkvCNxBV0tK9I19gS71rkiXaNYka7Nw4o0l3BFuoZwAl2raXCpAlCaJ6XN1xEGM5eLfrW83A5A1Hd2UkqB6wmDmaoPrdyKwDG+XkMmcz3TTOZSsvgT88l8byjSSPgG8kwm5ruBcPLfaHgmg314I3kmE/PdqHnyUwTQ6w0PoDcR92G6UC+8lD5+M+Hcy2cGfCkZ75hXQVdLBnyLHZhvdWbAtygy4FvzkAHTrUCWuIXQKW/VNLjUE5HS5ts0Z8BWbkVgcLxZQ/Z2u+FZK47L7Qzs1uXjtxP6+B2G+3i2JIUi+aFq607iBTtfaucSsrUmnJL53lWkkfBd5GonnLqLcADvNlztYB/eTa52wqm7DVc7GOjuLDI7GN9DHIzThdpmSh+/l6nauYSMdzipoKtF7dxnB+b7nWrnPoXauT8PaoduBbLEfYROeb+mwaWeiJQ2P2B4JojB8V4NWf+DhqsdHJcHGdity8cfJPTxhwz38WxJipVbEZRJysNMr+1cTLbWeC2Z7yNFGgk/Qq52vNYjhJPgUcPVDvbho+Rqx2s9arjawUD3cJHZwfgxJmqH0scfZ6p2LibjLVIKulrUzhN2YH7SqXaeUKidJ/OgduhWIEs8QeiUT2oaXOqJSGnzU4ZnghgcH9eQ9T9tuNrBcXmagd26fPxpQh9/xnAfz5akWLkVQZmkPMtU7cwhW2sSGWrnuSKNhJ8jVzsJ6znCSfC84WoH+/B5crWTsJ43XO1goHu2yOxg/AITtUPp4y8yVTtzyHjH86Z2XrID88tOtfOSQu28nAe1Q7cCWeIlQqd8WdPgUk9ESptfMTwTxOD4ooas/1XD1Q6Oy6sM7Nbl468S+vhrhvt4tiTFyq0IyiTldaZqZzbZWhPMeCbGG0UaCb9BrnaC4g3CSfCm4WoH+/BNcrUTzLDbyrGo7KYIdK8XmR2M32Kidih9/G2mamc2Ge9g3p6l8o4dmN91qp13FGrn3TyoHboVyBLvEDrlu5oGl3oiUtr8nuGZIAbHtzVk/e8brnZwXN5nYLcuH3+f0Mc/MNzHsyUpVm5FUCYpHzJVOxfRXdsJy3w/KtJI+CP6azvhjwgnwceGqx3sw4/pr+2EPzZc7WCg+7DI7GD8CRO1Q+njnzJVOxeR8U6EFHS1qJ3P7MD8uVPtfKZQO5/nQe3QrUCW+IzQKT/XNLjUE5HS5i8MzwQxOH6qIev/0nC1g+PyJQO7dfn4l4Q+/pXhPp4tSbFyK4IySfmaqdq5kGyt8Udkvt8UaST8Dbna8Ue+IZwE3xqudrAPvyVXO/7It4arHQx0XxeZHYy/Y6J2KH38e6Zq50Iy3v6wgq4WtTPfDsw/ONXOfIXa+SEPaoduBbLEfEKn/EHT4FJPREqbFxieCWJw/F5D1r/QcLWD47KQgd26fHwhoY//aLiPZ0tSrNyKoExSFjFVOxeQrTWxjDvZFhdpJLyYXO3ExGLCSbDEcLWDfbiEXO3EMuy2ciwquykC3aIis4PxT0zUDqWPL2Wqdi4g4x3L251sy+zAvNypdpYp1M7yPKgduhXIEssInXK5psGlnoiUNq8wPBPE4LhUQ9a/0nC1g+OykoHdunx8JaGP/2y4j2dLUqzciqBMUlYxVTuz6NROXOa7ukgj4dX0aie+mnASrDFc7WAfrqFXO/E1hqsdDHSriswOxr8wUTuUPr6WqdqZRZcQxxR0taiddXZgXu9UO+sUamd9HtQO3QpkiXWETrle0+BST0RKmzcYnglicFyrIevfaLjawXHZyMBuXT6+kdDHfzXcx7MlKVZuRVAmKZuYqp2ZdHeyxWS+m4s0Et5MfydbbDPhJNhiuNrBPtxCfydbbIvhagcD3aYis4Pxb0zUDqWPb2WqdmbS3ewUVdDVona22YH5d6fa2aZQO7/nQe3QrUCW2EbolL9rGlzqiUhp8x+GZ4IYHLdqyPr/NFzt4Lj8ycBuXT7+J6GP/2W4j2dLUqzciqBMUv5mqnZmkK014YwnUG8v0kh4O7naCVvbCSfBDsPVDvbhDnK1E7Z2GK52MND9XWR2MP6Hidoh9XE3T7Uzg2ysQnl7AnWB2/YHtytT2eAOp9rBg3SrHboVyBIFbjqnLHTrGVzqiUhpc5GbNvhQTzgMji43/cLgdutduKzcisBxcTOwW5ePuwl93GO4j2dLUqzciqBMUooJ/Safame6JrVTxq2RMDZOrXbKEE6CsoSTU1cflnXTq52ymhcNikBX7DY7GJcjDsbpQm0zpY+XZ6p2pjNUOxXswFzRqXYqKNROxTyonemEaqcCoVNWZKJ2KG2uZHgmiMGxvIasv7LhagfHpTIDu3X5eGVCH69iuI9nS1Ks3IqgTFKqMlU7JWRrTTTjmWzV3BoJVyNXO9FINcJJUN1wtYN9WJ1c7UQj1Q1XOxjoqrrNDsY1mKgdSh8/iKnaKSFTO9G8PZOtph2YD3aqnZoKtXNwHtROCaHaqUnolAe79Qwu9USktPkQwzNBDI4Hacj6DzVc7eC4HMrAbl0+fiihjx9muI9nS1Ks3IqgTFIOZ6p2ptGpHb/M9wi3RsJH0Ksd/xGEk+BIw9UO9uGR9GrHf6ThagcD3eFus4PxUUzUDqWPH81U7UyjUzs+BV0taucYOzDXcqqdYxRqp1Ye1M40QrVzDKFT1nLrGVzqiUhpc23DM0EMjkdryPqPNVzt4Lgcy8BuXT5+LKGPH2e4j2dLUqzciqBMUo5nqnamkq01iYxrO3XcGgnXIVc7iUgdwklQ13C1g31Yl1ztJCJ1DVc7GOiOd5sdjE9gonYoffxEpmpnKpnaSeTt2k49OzDXd6qdegq1Uz8PamcqodqpR+iU9d16Bpd6IlLafJLhmSAGxxM1ZP0nG652cFxOZmC3Lh8/mdDHTzHcx7MlKVZuRVAmKacyVTtTyNaaeFLm28CtkXADcrUTTzYgnASW4WoH+9AiVzvxpGW42sFAd6rb7GAsmKgdSh/3MlU7U8jUTjyhoKtF7fjswOx3qh2fQu3486B2phCqHR+hU/rdegaXeiJS2hwwPBPE2e3VkPUHDVc7OC5BBnbr8vEgoY+HDPfxbEmKlVsRlElKmKnamUy21oiMazsRt0bCEXK1IyIRwklwmuFqB/vwNHK1IyKnGa52MNCF3WYH44ZM1A6lj5/OVO1MJlM7Im/XdhrZgbmxU+00UqidxnlQO5MJ1U4jQqds7NYzuNQTkdLmMwzPBDE4nq4h629iuNr5d1wY2K3Lx5sQ+nhTw308W5Ji5VYEZZLSjKnamUS21sQy1E5zt0bCzcnVTizSnHAStDBc7WAftiBXO7FIC8PVDga6Zm6zg3FLJmqH0sfPZKp2JpGpnVje1E4rOzC3dqqdVgq10zoPamcSodppReiUrd16Bpd6IlLa3MbwTBCD45kasv62hqsdHJe2DOzW5eNtCX38LMN9PFuSYuVWBGWS0o6p2plI9wTqsMy3vVsj4fbkaiccbk84CToYrnawDzuQq51wuIPhagcDXTu32cG4IxO1Q+njnZiqnYlkaiccUtDVonY624G5i1PtdFaonS55UDsTCdVOZ0Kn7OLWM7jUE5HS5q6GZ4IYHDtpyPq7Ga52cFy6MbBbl493I/Tx7ob7eLYkxcqtCMokpQdTtTOBbK3xZ6idnm6NhHuSqx1/uCfhJOhluNrBPuxFrnb84V6Gqx0MdD3cZgfj3kzUDqWP92GqdiaQqR1/3tROXzsw93Oqnb4KtdMvD2pnAqHa6UvolP3cegaXeiJS2ny24ZkgBsc+GrL+cwxXOzgu5zCwW5ePn0Po4+ca7uPZkhQrtyIok5T+TNXOeLK1JiJkvlG3RsJRcrUTEVHCSRAzXO1gH8bI1U4kw24rx6KymyLQ9XebHYzjTNQOpY8nmKqd8WRqJ2Ip6GpRO0k7MKecaiepUDupPKid8YRqJ0nolCm3nsGlnoiUNg8wPBPE4JjQkPUPNFzt4LgMZGC3Lh8fSOjjgwz38WxJipVbEZRJymCmamcc2VoTsmS+Q9waCQ8hVzshawjhJDjPcLWDfXgeudoJWecZrnYw0A12mx2Mz2eidih9fChTtTOOTO0EUwq6WtTOMDswD3eqnWEKtTM8D2pnHKHaGUbolMPdegaXeiJS2jzC8EwQg+NQDVn/SMPVDo7LSAZ26/LxkYQ+PspwH8+WpFi5FUGZpIxmqnbG0j2lIOMJ1GPcGgmPIVc7seQYwkkw1nC1g304llztxJJjDVc7GOhGu80OxuOYqB1KHx/PVO2MpXtKQUJBV4vamWAH5olOtTNBoXYm5kHtjCVUOxMInXKiW8/gUk9ESpsnGZ4JYnAcryHrn2y42sFxmczAbl0+PpnQx6cY7uPZkhQrtyIok5SpTNXOGLK1xptxbWeaWyPhaeRqx2tNI5wEJYarHezDEnK147VKDFc7GOimus0OxtOZqB1KH5/BVO2MoXsCdd6u7cy0A/Msp9qZqVA7s/KgdsYQqp2ZhE45y61ncKknIqXNFxieCWJwnKEh67/QcLWD43IhA7t1+fiFhD5+keE+ni1JsXIrgjJJmc1U7YymW2viMt85bo2E55CrHSs+h3ASXGy42sE+vJhc7Vjxiw1XOxjoZrvNDsaXMFE7lD5+KVO1M5pM7VgxBV0tameuHZjnOdXOXIXamZcHtUO4Aom5hE45z61ncKknIqXNlxmeCWJwvFRD1n+54WoHx+VyBnbr8vHLCX38CsN9PFuSYuVWBGWSciVTtTOKbK0JZtzJdpVbI+GryNVOMHkV4SS42nC1g314NbnaCSavNlztYKC70m12ML6Gidqh9PFrmaqdUXS/20ko6GpRO9fZgfl6p9q5TqF2rs+D2hlFqHauI3TK6916Bpd6IlLafIPhmSAGx2s1ZP03Gq52cFxuZGC3Lh+/kdDHbzLcx7MlKVZuRVAmKTczVTsjydYakfFMtlvcGgnfQq52hLiFcBLcarjawT68lVztiAy7rRyLym6KQHez2+xgfBsTtUPp47czVTsj6e5ky9sz2e6wA/OdTrVzh0Lt3JkHtTOSUO3cQeiUd7r1DC71RKS0+S7DM0EMjrdryPrvNlzt4LjczcBuXT5+N6GP32O4j2dLUqzciqBMUu5lqnZG0N2MkfG7nfvcGgnf56Zv937DFQrafb97dwcTtatFVWBAuddtdtB7gImqoPTLBzUHeooxeVCDj+czoA7XFFAfcmsk/JCGgPqw4QEV7X74v4BK1tYjTAIqpV8+anhAxTF5lHlAHVZE1x8y38fcGgk/pmGyPkbobI8bHpyxDx/XIO8fN/x8PIdA/wSTQE/p408afooEx+RJDfPlKcNPA2KceEpTEqfLL58i9MunDffLbPHMyq0Iynj2jOE+jmP8jAaB9pThOUAdmNsI6pj2LPF4U8cHtJmQo6gL7dVNX6MkGx+RsXaX3d+2Rem7G+/fWZRSWztjf8/IlNJak/0/u5O1taYHcqYoS2vNDuysk7K15nRnsER7QvF2U7Ge9b38/vpuhoV7VrU48P7bo7WWuYyFo7UzcxvXjNZa5eojUmutc/e3Xa21ofBdu7W2NPPg39bOoppT0Fo7wjl1s6Y55bwlJleezxGuh4RxRFD2Xz5PqhH2Z8ZJtefdGgk/ryEJfsHwJBjtfkGzwKVO3k4lTN4aECZvFmHyJgiTNy9h8uYjTN4aES40dzJJ3vyEyVuAMHkLEiZvIcLkLUyYvEUIk7fTCJO3hoTJ2+mEc+ouJsnbi4TJG2EcEXcxTd5e1JS8veTWSPglDcnby4Ynb2j3y0xuMXlBI9d0oU40zyFMNM8lTDT7EyaaUcJEM0aYaMYJE83zCRfFB5gkmgnCRDNJmGimCBPNAYSJ5kDCRHMQYaI5mDDRHEKYaJ5HOKceZJJovkKYaBLGEfEg00TzFU2J5qtujYRf1ZBovmZ4ool2v8YseetAmLx1JEzeOhEmb50Jk7cuhMlbV8Lk7WzCheZxJslbN8LkrTth8taDMHnrSZi89SJM3noTJm99CJO3voTJWz/COfUEk+Ttdcrb2wmTtyeYJm+va0re3nBrJPyGhuTtTcOTN7T7TSZnCV/TyDVdqAPLW/8P7h3R2X9v/z+4fKOz/975f3BWQmf/vfv/IDHAOI0Cu1jqRyqeO0pvzxtPCV8gGQpYwag/kAj6vAlvyEr4AykBA+SN+GF4UnF/OBH2+lLekDe+g5aflX7EFt73vsPermtvU3+PnLvgupD+vrel7Xek7Xft7ffg833AB+6dbeTreWofuPXMUWIf88p98aHdyR+5XZnPTsMd2x0EqJ+d9gFBsrfz2Wmp1IeEieNH/6PnA+XKW+4DEfZ5vSEfHhdOWMKfiHvDXm8i5rfiVjTuTUb8IpLye/2+eCIegzajImWlovFIKryzLZnvx26NhD9W/OIsV/IfE65Cn2hWJBR9+IlCieXah58Y/uvrj7LYnWu7nxJL8XRA/dT283SgzcdphfcIbZFXjc/sgPC522EA9QrxHuHk+2zf24rvpS3xOfEKkS+HqFOkxyG+sB3hS90OUYfwZOsXhA7xJVOHqKvJIb6yHeFr3Q5Rl9AhviJ0iK+JlxEUnBWlftzVdtiXDEWESIR9ASsSCnojwCAYCvhEKi4C8WgqEYpEw5FYMhmP+SIRy5cKRgIgDIO+YMofDUSdwk1EQ6lAMhWNJkIpHzTgDUQjIpzyWfF4OBHyobyMR2Mh2B2PWClIK5JhEYvHA95wKhLxBRI6hGBGewF/NBoORkM+yFqiPn/AG0gGYrFkIpj0+2JRISLhZDhopQIpXyRgeYPhVEgkUv5ARMQSSb/ldfLzWpFEPBVLgbKOBUKpSCpo+aFn/ImQiMaDqWgqHPLCV6biIb8Vilv+ZCzoFdGgNxyKR+PCG9Rtr4j7/SlvNOCFbw8LcLso5HUiGgAvjCfDMfBOYXn92AGwGRaRWCwRTQWi3mgiGvaH/OE9+Pmi0WTSF0wG/V5vVEBmGBFwGgFsDUQi0WQkGQOniHvjIhQNxyNeKxr1gROFY+FIPJCCL9dtrzcBXxbxW8lAOGIl/TD9QqGkFfCFfKloMhgBxqGAH3wYzoKAE4StWDAYjICh4O9eyGT38D9vMp4IhxMiEAmGYvGALxYOgy94k1ZCBMPBoICxjceCUTA54UuFA0kvjGsomUzFoAsiMLl02Ju+OwO3P5NOYHwubX8hbX8pbX8lbX/tJj/xQm4vtvcN8PwW8J19QgaRXgfkQr24fcPihIxX68PzC6S+rWVvfw/9Mh/wA2ABYCHgR8AiwGLAEsBPgKWAZYDlgBWAlYCfAasAqwFrAL8A1gLWAdYDNgA2An4FbAJsBmwB/AbYCtjmPNGEZMo66uYr6n5Q1C1Q1C1U1P2oqFukqFusqFuiqPtJUbdUUbdMUbdcUbdCUbdSUfezom6Vom61om6Nou4XRd1aRd06Rd16Rd0GRd1GRd2virpNirrNirotirrfFHVbFXXb3Hu+EKK2/dnE/rRyKxlBJ9eE9HuyE6SWmE/UFtr4A0lbO/trQe5tedNJ98Jc2/LvTuB/zK0tSxYDi3Jpy5spLBYfeFuWU6QsOcC2gqk9Bc9PB9ZWWCWelh5IW2G1EFu2/22Fsom65fvbVii7QFyxf215SxObK/enrVDpwvVnQhG8al/bCu01ForV+9aWtQ9xVazZl7asfYrR4pe9txXYx3gv1u6tLf8+rx1iXalt+VP7sQ6J9aW1FdqvNU1syN5WeD/XR7ExS1uR1H6vteJXdVvWAazbYpOqLeuAcgCxec+2xAHmE2KLs63EAecm4rfMtnw55Dliq9SWN5VTziS2EZ+JzdctoNvIcr1Exqssf3drJIyNOy/e5kr+d7oBFH8QJuO6+hA5Ul3ETPfhH8STIF+30NBN3kTeXkn4pz3B/nKe2fjTvfs6TrruL7f+VxLSRRJL/Ek4gf4iHlxq58NJ8yfhZEzb/SfTFWkrmR9FEjLfv90aCf9NviJFEn8TrkjbDV+RsA+3k69IkcR2pivSVjLekbiCrpYVaYc9wf5xrkg7FCvSP3lYkbYSrkg7CCfQP5oGlyoApXlS2ozLB9W4ulz0q+UfdgAqJPZBSilQQNeHWoI4jjFypB4bSrvzmcn8RhZ/Yj6Zb6FHI2FsnDaTifkKCSd/kcfsTAb7sMhDncnEfEWaJz9FAC3wmB1A3cR9uGtCEvclpY97COdePjPg38iSpJhXQVdLBlxsB+Yy6RUmne0We/bMgPEg3Rnwb4QZcDGhU5bx6Blc6olIaXNZzRmwlVsRGBw9GrK3coZnrTgu5RjYrcvHyxH6eHnDfTxbkkKR/FC1VYF4wc6X2tlCttaEUzLfih6NhCuSq51wqiLhAFYyXO1gH1YiVzvhVCXD1Q4Gugoes4NxZeJgnC7UNlP6eBWmamcLmdoJJxV0taidqnZgruZUO1UVaqdaHtTOFkK1U5XQKat59Awu9USktLm64ZkgBscqGrL+GoarHRyXGgzs1uXjNQh9/CDDfTxbkmLlVgRlklKT6bWdzWRrjTfjoTcHezQSPphc7XitgwknwSGGqx3sw0PI1Y7XOsRwtYOBrqbH7GB8KBO1Q+njhzFVO5vJ1I5IKehqUTuH24H5CKfaOVyhdo7Ig9rZTKh2Did0yiM8egaXeiJS2nyk4ZkgBsfDNGT9RxmudnBcjmJgty4fP4rQx4823MezJSlWbkVQJinHMFU7m+h+JZahdmp5NBKuRa52ElYtwklQ23C1g31Ym1ztJKzahqsdDHTHeMwOxscyUTuUPn4cU7WziUztxPOmdo63A3Mdp9o5XqF26uRB7WwiVDvHEzplHY+ewaWeiJQ21zU8E8TgeJyGrP8Ew9UOjssJDOzW5eMnEPr4iYb7eLYkxcqtCMokpR5TtfMr2VoTzHgmRn2PRsL1ydVOUNQnnAQnGa52sA9PIlc7wQy7rRyLym6KQFfPY3YwPpmJ2qH08VOYqp1fydROMG/PUjnVDswNnGrnVIXaaZAHtfMrodo5ldApG3j0DC71RKS02TI8E8TgeIqGrF8YrnZwXAQDu3X5uCD0ca/hPp4tSbFyK4IySfExVTsb6a7thGW+fo9Gwn76azthP+EkCBiudrAPA/TXdsIBw9UOBjqfx+xgHGSidih9PMRU7Wyke7hgSEFXi9oJ24E54lQ7YYXaieRB7WwkVDthQqeMePQMLvVEpLT5NMMzQQyOIQ1Zf0PD1Q6OS0MGduvy8YaEPn664T6eLUmxciuCMklpxFTtbCBba/wRmW9jj0bCjcnVjj/SmHASnGG42sE+PINc7fgjZxiudjDQNfKYHYybMFE7lD7elKna2UCmdvxhBV0taqeZHZibO9VOM4XaaZ4HtbOBUO00I3TK5h49g0s9ESltbmF4JojBsamGrL+l4WoHx6UlA7t1+XhLQh8/03Afz5akWLkVQZmktGKqdtbTPYE640621h6NhFuTq52YaE04CdoYrnawD9uQq51Yht1WjkVlN0Wga+UxOxi3ZaJ2KH38LKZqZz3dE6jzdidbOzswt3eqnXYKtdM+D2pnPaHaaUfolO09egaXeiJS2tzB8EwQg+NZGrL+joarHRyXjgzs1uXjHQl9vJPhPp4tSbFyK4IySenMVO2so1M7cZlvF49Gwl3o1U68C+Ek6Gq42sE+7EqvduJdDVc7GOg6e8wOxt2YqB1KH+/OVO2so1M7MQVdLWqnhx2YezrVTg+F2umZB7WzjlDt9CB0yp4ePYNLPREpbe5leCaIwbG7hqy/t+FqB8elNwO7dfl4b0If72O4j2dLUqzciqBMUvoyVTtr6e5ki8l8+3k0Eu5HfydbrB/hJDjbcLWDfXg2/Z1ssbMNVzsY6Pp6zA7G5zBRO5Q+fi5TtbOW7k62qIKuFrXT3w7MUafa6a9QO9E8qJ21hGqnP6FTRj16Bpd6IlLaHDM8E8TgeK6GrD9uuNrBcYkzsFuXj8cJfTxhuI9nS1Ks3IqgTFKSTNXOL3RvF814AnXKo5FwilzthK0U4SQYYLjawT4cQK52wtYAw9UOBrqkx+xgPJCJ2qH08UFM1c4vZGonlLcnUA+2A/MQp9oZrFA7Q/Kgdn4hVDuDCZ1yiEfP4FJPREqbzzM8E8TgOEhD1n++4WoHx+V8Bnbr8vHzCX18qOE+ni1JsXIrgjJJGcZU7azRpHaGezQSHq5B7QwnnAQjDFc72IcjNKidEYarHQx0wzxmB+ORTNQOpY+PYqp21jBUO6PtwDzGqXZGK9TOmDyonTWEamc0oVOOYaJ2KG0ea3gmiMFxlIasf5zhagfHZRwDu3X5+DhCHx9vuI9nS1Ks3IqgTFImMFU7q8nWmmjGM9kmejQSnkiudqKRiYSTYJLhagf7cBK52olGJhmudjDQTfCYHYwnM1E7lD4+hanaWU2mdqJ5eybbVDswT3OqnakKtTMtD2pnNaHamUrolNM8egaXeiJS2lxieCaIwXGKhqx/uuFqB8dlOgO7dfn4dEIfn2G4j2dLUqzciqBMUmYyVTur6NSOX+Y7y6OR8Cx6teOfRTgJLjBc7WAfXkCvdvwXGK52MNDN9JgdjC9konYoffwipmpnFZ3a8SnoalE7s+3APMepdmYr1M6cPKidVYRqZzahU87x6Blc6olIafPFhmeCGBwv0pD1X2K42sFxuYSB3bp8/BJCH7/UcB/PlqRYuRVBmaTMZap2fqZ7u2jGtZ15Ho2E55GrnURkHuEkuMxwtYN9eBm52klELjNc7WCgm+sxOxhfzkTtUPr4FUzVzs90bxfN27WdK+3AfJVT7VypUDtX5UHt/Eyodq4kdMqrPHoGl3oiUtp8teGZIAbHKzRk/dcYrnZwXK5hYLcuH7+G0MevNdzHsyUpVm5FUCYp1zFVOyvJ1pp4UuZ7vUcj4evJ1U48eT3hJLjBcLWDfXgDudqJJ28wXO1goLvOY3YwvpGJ2qH08ZuYqp2VZGonnlDQ1aJ2brYD8y1OtXOzQu3ckge1s5JQ7dxM6JS3ePQMLvVEpLT5VsMzQQyON2nI+m8zXO3guNzGwG5dPn4boY/fbriPZ0tSrNyKoExS7mCqdlaQrTUi49rOnR6NhO8kVzsicifhJLjLcLWDfXgXudoRkbsMVzsY6O7wmB2M72aidih9/B6mamcFmdoRebu2c68dmO9zqp17FWrnvjyonRWEaudeQqe8z6NncKknIqXN9xueCWJwvEdD1v+A4WoHx+UBBnbr8vEHCH38QcN9PFuSYuVWBGWS8hBTtbOc7u2iGWrnYY9Gwg+Tq51Y5GHCSfCI4WoH+/ARcrUTizxiuNrBQPeQx+xg/CgTtUPp448xVTvL6d4umje187gdmJ9wqp3HFWrniTyoneWEaudxQqd8wqNncKknIqXNTxqeCWJwfExD1v+U4WoHx+UpBnbr8vGnCH38acN9PFuSYuVWBGWS8gxTtbOM7gnUYZnvsx6NhJ8lVzvh8LOEk+A5w9UO9uFz5GonHH7OcLWDge4Zj9nB+HkmaofSx19gqnaWkamdcEhBV4vaedEOzC851c6LCrXzUh7UzjJCtfMioVO+5NEzuNQTkdLmlw3PBDE4vqAh63/FcLWD4/IKA7t1+fgrhD7+quE+ni1JsXIrgjJJeY2p2llKttb4M9TO6x6NhF8nVzv+8OuEk+ANw9UO9uEb5GrHH37DcLWDge41j9nB+E0maofSx99iqnaWkqkdf97Uztt2YH7HqXbeVqidd/KgdpYSqp23CZ3yHY+ewaWeiJQ2v2t4JojB8S0NWf97hqsdHJf3GNity8ffI/Tx9w338WxJipVbEZRJygdM1c5PZGtNRMh8P/RoJPwhudqJiA8JJ8FHhqsd7MOPyNVOJMNuK8eispsi0H3gMTsYf8xE7VD6+CdM1c5PZGonYinoalE7n9qB+TOn2vlUoXY+y4Pa+YlQ7XxK6JSfefQMLvVEpLT5c8MzQQyOn2jI+r8wXO3guHzBwG5dPv4FoY9/abiPZ0tSrNyKoExSvmKqdpaQrTUhS+b7tUcj4a/J1U7I+ppwEnxjuNrBPvyGXO2ErG8MVzsY6L7ymB2Mv2Widih9/DumamcJmdoJphR0taid7+3APN+pdr5XqJ35eVA7SwjVzveETjnfo2dwqScipc0/GJ4JYnD8TkPWv8BwtYPjsoCB3bp8fAGhjy803MezJSlWbkVQJik/MlU7i+meUpDxBOpFHo2EF5GrnVhyEeEkWGy42sE+XEyudmLJxYarHQx0P3rMDsZLmKgdSh//ianaWUz3lIKEgq4WtbPUDszLnGpnqULtLMuD2llMqHaWEjrlMo+ewaWeiJQ2Lzc8E8Tg+JOGrH+F4WoHx2UFA7t1+fgKQh9fabiPZ0tSrNyKoExSfmaqdhaRrTXejGs7qzwaCa8iVzteaxXhJFhtuNrBPlxNrna81mrD1Q4Gup89ZgfjNUzUDqWP/8JU7SyiewJ13q7trLUD8zqn2lmrUDvr8qB2FhGqnbWETrnOo2dwqScipc3rDc8EMTj+oiHr32C42sFx2cDAbl0+voHQxzca7uPZkhQrtyIok5RfmaqdH+nWmrjMd5NHI+FN5GrHim8inASbDVc72IebydWOFd9suNrBQPerx+xgvIWJ2qH08d+Yqp0fydSOFVPQ1aJ2ttqBeZtT7WxVqJ1teVA7hCuQ2ErolNs8egaXeiJS2vy74ZkgBsffNGT9fxiudnBc/mBgty4f/4PQx/803MezJSlWbkVQJil/MVU7C8nWmmDGnWx/ezQS/ptc7QSTfxNOgu2Gqx3sw+3kaieY3G642sFA95fH7GC8g4naofTxf5iqnYV0v9vJ251s/3YO9kWxK1PZ4A6n2sGDdKudhYRqB23Ita20UxYU6xlc6olIaXNhMW3woZ5wGBz/0ZD1FxXrXbis3IrAcSkqNt9uXT5eROjjbsN9PFuSYuVWBGWS4iH0m3yqnQVka43IeCZbcbFGwtg4rdoRophwEpQhnJy6+rBMMbXaERl2WzkWld0Ugc5TbHYwLkscjNOF2mZKHy9HaHM+1c4CujvZ8vZMtvJ2YK7gVDvlFWqnQh7UzgJCtVOe0CkrFOsZXOqJSGlzRcMzQQyO5TRk/ZUMVzs4LpUY2K3LxysR+nhlw308W5Ji5VYEZZJShana+YHuZoyM3+1ULdZIuGoxfbvVDFcoaHe14t0dTNSuFlWBAaVKsdlBrzoTVUHplzU0B3qKMamhwcfzGVDnawqoBxVrJHyQhoBa0/CAinbX/C+gkrV1MJOASumXhxgeUHFMDmEeUL930/WHzPfQYo2ED9UwWQ8ldLbDDA/O2IeHaZD3hxl+Pp5DoD+cSaCn9PEjDD9FgmNyhIb5cqThpwExThypKYnT5ZdHEvrlUYb7ZbZ4ZuVWBGU8O9pwH8cxPlqDQKP0Q+Tmlrj9+zMo985LZf/+TEra/k3a3iJtb5a2N0nbv0rbG6XtDdL2eml7nbS9Vtr+RdpeI22vlrZXSds/S9srpe0V0vZyaXuZtL1U2v5J2l4ibS+WthdJ2z9K2wul7QXS9g/S9nxp+3tpe17R7u250val0vYl0vbF0vYcaXu2tH2RtH2htH2BtD1L2p4pbc+QtqdL2yXS9jRpe6q0PUXanixtT5K2J0rbE6Tt8dL2OGl7rLQ9RtoeLW2PkrZHStsjpO3h0vYwe/sYmFu1ALUBxwKOAxwPqAOoCzgBcCKgHqA+4CTAyYBTAKcCGgAsgAB4AT6AHxAABAEhQBgQAZwGaAg4HdAI0FhaD10u+rjxkZvHOtuhiM7mY5hcFuxIaHMtJjZ3IrS5NhObOxPafCwTm7sQ2nwcE5u7Etp8PBObuxHaXIeJzd0Jba7LxOYehDafwMTmnoQ2n8jE5l6ENtdjYnNvQpvrM7G5D6HNJzGxuS+hzSczsbkfoc2nMLH5bEKbT2Vi8zmENjdgYvO5hDZbTGzuT2izYGJzlNBmLxObY4Q2+5jYHCe02c/E5gShzQEmNicJbQ4ysTlFaHOIic0DCG0OM7F5IKHNESY2DyK0+TQmNg8mtLkhE5uHENp8OhObzyO0uRETm88ntLmxJpup7507g4ynz6+TZ5MD55lwViC36q6d9wKluWI/7LC3jy3avX2ctN3EPib9f03h72aA5oAWxbvr04X6J/fHE/pnU8L7qlpq8nXq/qtD2H/NCPvvTCb9V5ew/5oT9l8rwv5TxYaWUmw4U9puJW23cMSG1vB3G0BbwFl5iA0nEI5Na8KxacfEt08k7L82hP3Xnkn/1SPsv7aE/ddBc2xoJ8WA9tJ2B2n7LEds6Ah/dwJ0BnTJQ2yoTzg2HQnHpisT3z6JsP86EfZfNyb9dzJh/3Um7L/ummNDVykGdJO2u0vbXRyxoQf83RPQC9A7D7HhFMKx6UE4Nn00j00faQx6Stu9pO3ejrHpC3/3A5wNOEcxNtSa91y6Pkjp5Nn/wHn6nBWqsTpXGpO+0vZQSZv3d4xVFP6OAeKAhD1WbtfuR+W59jJ2Vm5FRAn9t1DimbR/N5EqdmU+8w93lDjqUnadXKgDSJRw0if3va34XtoSKcIBQMcpdKkfTunaz/7cG2+XRqdMEgfVdBngdEasKNiL41E6y164ir3stwYQOvHAYjJnsOQ+HbgPkznnq7WE/UDZp4P2o0/39l1ynw6SgmZZqT/lPrVyK2JH6e154ynhCyRDASsY9QcSQZ834Q1ZCX8gJYCwN+KHrknF/eFE2OtLeUPe+A5afv/6WDqwpReS9KqasrcHw+cQwHn2Slrsys+Tes/TpHCIx9gr98X59go91BkUccd2R93QfQiUVm4loxNze1JvKnU+4aQeSrxC7+uzfnK+TCjxFmGf1xvy4XHhhCX8CchLvN5EzG/FrWjcm4z4RSTl9/p98UQ8Bm1GRcpKReORVHhnWzLfYcUaCWPjzuuluZIfRjeAYjihY+nqw+HFe7abax8OJ45w1HYPzWJ3ru2OIE5F0wF1RPGeKxN1lkR5HXEwod+P/B8FVCu3IkYS+0K6jCrWSHhUMX27ozUHQSu38q/do4t3dzBRu6WefM61HygvWg8hHJ8xTCfrGE2TdWyxRsJjNUzWcYZPVrR7XJ4nq5VbyVgNrdwKaTAdT+z05ezxHi9p7SHS9uji3Weq60hnuetK23jHx79PEYJjJwIm2f+TbntwlraHSm3v7ZjJ8DkFMLVYz9wcbfsodXY5zfCsWpfdJYTzxyWVQmKeQwnn5nRim522WrkVgfOTclxwTk7T4DszNJ1ro/Yd+U63XNuaabjvYOwnPE0mcK7M0OA7s4h9h7of0Wcocwv0m1ka+rGAzuZ/RUGRi+ai5V6KyHZVneI7/KFENJ4I+ZSNUwcXyk6p5+IRUAmdTtRnYnMhoc0nabKZOtk+mXieZBsbK7ciTiHkWa2Ix9icKrXlDUQD8WQgFA/5wvFo0heO+UKJoD8aDiZjvoRlJQKxVNLyRZNBAVeLfVFfIuKzIv5AMhpMWhFvVCfPBi4e/Wkx4SmY8PQy4eljwtPPhGeACc8gE54hJjzDTHhGmPA8jQnPhkx4ns6EZyMmPBsz4XkGE55NmPBsyoRnMyY8mzPh2YIJz5ZMeJ7JhGcrJjxbM+HZhgnPtkx4nsWEZzsmPNsz4dmBCc+OTHh2YsKzMxOeXZjw7MqEZzcmPLsz4dmDCc+eTHj2YsKzNxOefZjw7MuEZz8mPM9mwvMcJjzPZcKzPxOeUSY8Y0x4xpnwTDDhmWTCM8WE5wAmPAcy4TmICc/BTHgOYcLzPCY8z2fCcygTnsOY8BzOhOcIJjxHMuE5ignP0Ux4jmHCcywTnuOY8BzPhOcEJjwnMuE5iQnPyUx4TmHCc6qLB89pTHiWMOE5nQnPGUx4zmTCcxYTnhcw4XkhE54XMeE5mwnPOUx4XsyE5yVMeF7KhOdcJjznMeF5GROelzPheQUTnlcy4XkVE55XM+F5DROe1zLheR0Tntcz4XkDE543MuF5ExOeNzPheQsTnrcy4XkbE563M+F5BxOedzLheRcTnncz4XkPE573MuF5HxOe9zPh+QATng8y4fkQE54PM+H5CBOejzLh+RgTno8z4fkEE55PMuH5FBOeTzPh+QwTns8y4fkcE57PM+H5AhOeLzLh+RITni8z4fkKE56vMuH5GhOerzPh+QYTnm8y4fkWE55vM+H5DhOe7zLh+R4Tnu8z4fkBE54fMuH5EROeHzPh+QkTnp8y4fkZE56fM+H5BROeXzLh+RUTnl8z4fkNE57fMuH5HROe3zPhOZ8Jzx+Y8FzAhOdCJjx/ZMJzEROei5nwXMKE509MeC5lwnMZE57LmfBcwYTnSiY8f2bCcxUTnquZ8FzDhOcvTHiuZcJzHROe65nw3MCE50YmPH9lwnMTE56bmfDcwoTnb0x4bmXCcxsTnr8z4fkHE55/MuH5FxOefzPhuZ0Jzx1MeP7DhCc2yIFnAROehUx4FjHh6WbC08OEZzETnmWY8CzLhGc5JjzLM+FZgQnPikx4VmLCszITnlWY8KzKhGc1JjyrM+FZgwnPg5jwrMmE58FMeB7ChOehTHgexoTn4Ux4HsGE55FMeB7FhOfRTHgew4RnLSY8azPheSwTnscx4Xk8E551mPCsy4TnCUx4nsiEZz0mPOsz4XkSE54nM+F5ChOepzLh2YAJT4sJT8GEp5cJTx8Tnn4mPANMeAaZ8Awx4RlmwjPChOdpTHg2ZMLzdCY8GzHh2ZgJzzOY8GzChGdTJjybMeHZnAnPFkx4tmTC80wmPFsx4dmaCc82THi2ZcLzLCY82zHh2Z4Jzw5MeHZkwrMTE56dmfDswoRnVyY8uzHh2Z0Jzx5MePZkwrMXE569mfDsw4RnXyY8+zHheTYTnucw4XkuE579mfCMMuEZY8IzzoRnggnPJBOeKSY8BzDhOZAJz0FMeA5mwnMIE57nMeF5PhOeQ5nwHMaE53AmPEcw4TmSCc9RTHiOZsJzDBOeY5nwHMeE53gmPCcw4TmRCc9JTHhOZsJzChOeU5nwnMaEZwkTntOZ8JzBhOdMJjxnMeF5AROeFzLheRETnrOZ8JzDhOfFTHhewoTnpUx4zmXCcx4Tnpcx4Xk5E55XMOF5JROeVzHheTUTntcw4XktE57XMeF5PROeNzDheSMTnjcx4XkzE563MOF5KxOetzHheTsTnncw4XknE553MeF5NxOe9zDheS8Tnvcx4Xk/E54PMOH5IBOeDzHh+TATno8w4fkoE56PMeH5OBOeTzDh+SQTnk8x4fk0E57PMOH5LBOezzHh+TwTni8w4fkiE54vMeH5MhOerzDh+SoTnq8x4fk6E55vMOH5JhOebzHh+TYTnu8w4fkuE57vMeH5PhOeHzDh+SETnh8x4fkxE56fMOH5KROenzHh+TkTnl8w4fklE55fMeH5NROe3zDh+S0Tnt8x4fk9E57zmfD8gQnPBUx4LmTC80cmPBcx4bmYCc8lTHj+xITnUiY8lzHhuZwJzxVMeK5kwvNnJjxXMeG5mgnPNUx4/sKE51omPNcx4bmeCc8NTHhuZMLzVyY8NzHhuZkJzy1MeP7GhOdWJjy3MeH5OxOefzDh+ScTnn8x4fk3E57bmfDcwYTnP0x4ugp58CxgwrOQCc8iJjzdhTx4epjwLGbCswwTnmWZ8CzHhGd5JjwrMOFZkQnPSkx4VmbCswoTnlWZ8KzGhGd1JjxrMOF5EBOeNZnwPJgJz0OY8DyUCc/DmPA8nAnPI5jwPJIJz6OY8DyaCc9jmPCsxYRnbSY8j2XC8zgmPI9nwrMOE551mfA8gQnPE5nwrMeEZ30mPE9iwvNkJjxPYcLzVCY8GzDhaTHhKZjw9DLh6WPC08+EZ4AJzyATniEmPMNMeEaY8DyNCc+GTHiezoRnIyY8GzPheQYTnk2Y8GzKhGczJjybM+HZggnPlkx4nsmEZysmPFsz4dmGCc+2THiexYRnOyY82zPh2YEJz45MeHZiwrMzE55dmPDsyoRnNyY8uzPh2YMJz55MePZiwrM3E559mPDsy4RnPyY8z2bC8xwmPM9lwrM/E55RJjxjTHjGmfBMMOGZZMIzxYTnACY8BzLhOYgJz8FMeA5hwvM8JjzPZ8JzKBOew5jwHM6E5wgmPEcy4TmKCc/RTHiOYcJzLBOe45jwHM+E5wQmPCcy4TmJCc/JTHhOYcJzKhOe05jwLGHCczoTnjOY8JzJhOcsJjwvYMLzQiY8L2LCczYTnnOY8LyYCc9LmPC8lAnPuUx4zmPC8zImPC9nwvMKJjyvZMLzKiY8r2bC8xomPK9lwvM6JjyvZ8LzBiY8b2TC8yYmPG9mwvMWJjxvZcLzNiY8b2fC8w4mPO9kwvMuJjzvZsLzHiY872XC8z4mPO9nwvMBJjwfZMLzISY8H2bC8xEmPB9lwvMxJjwfZ8LzCSY8n2TC8ykmPJ9mwvMZJjyfZcLzOSY8n2fC8wUmPF9kwvMlJjxfZsLzFSY8X2XC8zUmPF9nwvMNJjzfZMLzLSY832bC8x0mPN9lwvM9JjzfZ8LzAyY8P2TC8yMmPD9mwvMTJjw/ZcLzMyY8P2fC8wsmPL9kwvMrJjy/ZsLzGyY8v2XC8zsmPL9nwnM+E54/MOG5gAnPhUx4/siE5yImPBcz4bmECc+fmPBcyoTnMiY8lzPhuYIJz5VMeP7MhOcqTTwLHTx9VtDvT4a8SeETUcsbiYUDlj8QC4ZFWATCgYQ37PMlw/5wKBKLhKyI8PuSIhWI+FJ22ycQ2rw6TzZbuRWxppCu/2oW8RhnN2H//cLEtz2ENq9lYnMxoc3rmNhchtDm9UxsLkto8wYmNpcjtHkjE5vLE9r8KxObKxDavImJzRUJbd7MxOZKhDZvYWJzZUKbf2NicxVCm7cysbkqoc3bmNhcjdDm35nYXJ3Q5j+Y2FyD0OY/mdh8EKHNfzGxuSahzX8zsflgQpu3M7H5EEKbdzCx+VBCm/9hYvNhhDa7mJz3PJzQ5gImNh9BaHMhE5uPJLS5iInNRxHa7GZi89GENnuY2HwMoc3FTGyuRWhzGSY21ya0uSwTm48ltLkcE5uPI7S5PBObjye0uQITm+sQ2lyRic11CW2uRGgzNPXvPT4rbIPrAeoDTgKcDDgFcCqgAX4XQAC82B8APyAACAJCgDAgAjgN0BBwOqARoDHgDNv+poBmgOaAFoCWgDMBrQCtAW0AbQFnAdoB2gM6ADoCOgE6A7oAugK6AboDegB6AnoBegP6APoC+gHOBpwDOBfQHxAFxABxQAKQBKQAAwADAYMAgwFDAOcBzgcMBQwDDAeMAIwEjAKMBowBjAWMA4wHTABMBEwCTAZMAUwFTAOUAKYDZgBmAmYBLgBcCLgIMBswB3Ax4BLApYC5gHmAywCXA64AXAm4CnA14BrAtYDrANcDbgDcCLgJcDPgFsCtgNsAtwPuANwJuAtwN+AewL2A+wD3Ax4APAh4CPAw4BHAo4DHAI8DngA8CXgK8DTgGcCzgOcAzwNeALwIeAnwMuAVwKuA1wCvA94AvAl4C/A24B3Au4D3AO8DPgB8CPgI8DHgE8CngM8AnwO+AHwJ+ArwNeAbwLeA7wDfA+YDfgAsACwE/AhYBFgMWAL4CbAUsAywHLACsBLwM2AVYDVgDeAXwFrAOsB6wAbARsCvgE2AzYAtgN8AWwHbAL8D/gD8CfgL8DdgO2AH4B8ATrQCQCGgCOAGeADFgDKAsoBygPKACoCKgEqAyoAqgKqAaoDqgBqAgwA1AQcDDgEcCjgMcDjgCMCRgKMARwOOAdQC1AYcCzgOcDygDqAu4ATAiYB6gPqAkwAnA04BnApoALAAAuAF+AB+QAAQBIQAYUAEcBqgIeB0QCNAY8AZgCaApoBmgOaAFoCWgDMBrQCtAW0AbQFnAdoB2gM6ADoCOgE6A7oAugK6AboDegB6AnoBegP6APoC+gHOBpwDOBfQHxAFxABxQAKQBKQAAwADAYMAgwFDAOcBzgcMBQwDDAeMAIwEjAKMBowBjAWMA4wHTABMBEwCTAZMAUwFTAOUAKYDZgBmAmYBLgBcCLgIMBswB3Ax4BLApYC5gHmAywCXA64AXAm4CnA14BrAtYDrANcDbgDcCLgJcDPgFsCtgNsAtwPuANwJuAtwN+AewL2A+wD3Ax4APAh4CPAw4BHAo4DHAI8DngA8CXgK8DTgGcCzgOcAzwNeALwIeAnwMuAVwKuA1wCvA94AvAl4C/A24B3Au4D3AO8DPgB8CPgI8DHgE8CngM8AnwO+AHwJ+ArwNeAbwLeA7wDfA+YDfgAsACwE/AhYBFgMWAL4CbAUsAywHLACsBLwM2AVYDVgDeAXwFrAOsB6wAbARsCvgE2AzYAtgN8AWwHbAL8D/gD8CfgL8DdgO2AH4B8AJhUFgEJAEcAN8ACKAWUAZQHlAOUBFQAVAZUAlQFVAFUB1QDVATUABwFqAg4GHAI4FHAY4HDAEYAjAUcBjgYcA6gFqA04FnAc4HhAHUBdwAmAEwH1APUBJwFOBpwCOBXQAGABBMAL8AH8gAAgCAgBwoAI4DRAQ8DpgEaAxoAzAE0ATQHNAM0BLQAtAWcCWgFaA9oA2gLOArQDtAd0AHQEdAJ0BnQBdAV0A3QH9AD0BPQC9Ab0AfQF9AOcDTgHcC6gPyAKiAHigAQgCUgBBgAGAgYBBgPwffX4Lnh8zzq+wxzfD47v3sb3WuM7o/F9zPiuY3yPML6jF99/i++Wxfe24jtR8X2j+C5PfE8mvoMS3+9YAsD3EuI7//B9eviuOnwPHL5jDd9fhu8Gw/du4Tut8H1R+C4mfM8RvkMI38+D777B98rgO1vwfSj4rhF8jwe+IwPfP4HvdsD3JuA7CfB5//gsfXxOPT4DHp+vfjsAnwuOz9zG51njs6LxOcz4jGN8fjA+mxefe4vPlMXnteKzUPE5o/gMT3w+Jj57Ep/riM9MxOcR4rP+8Dl6+Iw6fP4bPlsNn1uGzwTD523hs6zwOVH4DCZ8vtHrAHwuDz7zBp8ng89qweeg4DNG8Pkd+GwMfO4EPtMBn5eAzyLA3/njb+jx9+n422/8XTX+Zhl/D4y/tcXfseJvRPH3l/jbRvzdIP4mD3/vhr8lw99p4W+g8PdFSwD4uxj8zQn+ngN/K4F5L97jj/fP473peK823geN9/Liva14ryfe+4j3AuK9cXivGN47hfcS4b01eK8J3nuB9yLgtXm8Vo3XbvFaJl7bw2tdeO0Hr4XgtQE8V47njvFcKp5bxHNteO4Jz8XguQnU6qhdUcuhtsFcv3Bn6uDCe5Wx1HPtLnZYwab/3Y/39uK9rnjvJ94LifcG4r1yeO8Y3kuF9xbhvTZ47wnei4H3JuC1erx2jddy8domXuvDa194LQivjeC1Ajx3jueS8dwqnmvEc2+1ALUBxwJQu6OWRW2HWgfvnz/RtWcpI21Xsz9rLm962IgP72spH1fd/nw3MHzasNoZu1zt7Y647YGjnzlieWEfeV+HUvZ1LWVf91L2jbD3PdfkjjvrPTi3hdMWzMuwlLP/LrQ/sRrHpYn9t5VbEeWkdqnbD1sRfzlXZiHm7yvn2u2vuvon3aaG9q30eJ9Zsrt9py1YKtl/F0h9mf4fnJO1XLu3j5f+B0srqe0Cx77Wiu9N72tTouaBpa20z+3Yd5a0z+PY107aV+zY117aV8axr4O0r6xjX0dpXznHvk7SvvKOfZ2lfRUc+7pI+yq6dm8jqrh2l/S5jkpSXbof075TVfp/urkV2OX71TS0b1l+K21TUcnu9qs4+skt7avq2OeR9qU54tgtcxx3lXRcZUffVdHSd/6QzrGBvkvUUPCvKtmGpXmJa1c5wO8Vzop02y1KdNhlxdPtt9TTvq+C7SPrJR+R40/6O2UfcesZw2SB4/tcrsx1wOX4/vIurWuFKHB8X5qPs3/S8QfjVno+DUiObjpm9MCeg0YPTY4aJbOXW2wv1cv75eI8xnmc8/hyiv0FdL1iVXLt2StOD/FI9YQeIvbVQ9LfX96l02N3e4jHwcfZP84VqlhP/1gFjvZlPsWK/kmPZRnFvnRb6dXfI7UlH18s2SgfL2+n/1+uO83+rKpo0+m7ZRT2yHXp/kUufodtznmj+ky366wrdHBURSG9UXHnCqNxTll6fRKudLn2zLLd0ng1k+rlcZX9Tf5fj7RfPv4dqc2WjrGR52cTGrss59xJ85O/t6yePk3saxxMf395155zTEccLOvgk22epvunnB4+8QJH+zKfcor+SY9lecW+dFtpxSL7pXy8fOZAPl7eTv+/XNfN/qyqaNMZi8u79rRHrpPjYAeHbfIcyDUOyrzKOL4n2zzv7cq0pbR5jqVFye798vGPSm32s7eruLLHidLWkEKFjfviy7JtVRTfV1bzdxc7vtut+G7Ncd1bGtfSbFPNybKl2CbbXa6U/5OPk48pVvSNvF/VrwUOzpQ2YmlZ4sqwsVhho+Y1xF9aTCnNtgqK41Vxs4prz3hbIT+2BUrjWpptFRXHVyjFNtnuiqX8n3ycfExZRd/I+7OtR1g092GwtD4prQ8rKY6vqLCjiqKfKuXHtlBpXEuzrbLi+Eql2CbbXTk/toVL41qabaqzrJVLsU22u0op/ycfJx9TVtE38n5Vv+bJ9yOl9UlpfVhVcXwVhR1VFP1UNT+2RUvjWppt1RTHVy3FNtnuavmxLVYa19Jsq644vloptsl2V3f8n2ybfJyKi3x8tjYKHW2ocl3nvoIs/y/vk79PrnPm+qrvUZ1jJDwnES9tHFVnXvd1HJ39pBrHSq7s419JYbfzXJqsA8o59sm5UCXHPjneFTr2qTSV8zwsbhc79sl5ZXnHPjm3qOzYp4pLlVx7+mZFxz55vavm2CfrSqdmlHPwCo59cn6QjikVXGp9kO57vecX/IkCRx9mO1dVTtovH/+U/Yl9uUU6Xv4fl2vffF6Vv8t2p49P95c8fuUd/VVeS3/tPh9TYS/9JfenfPyLiv5SXS0tI9mDxV2ixZ4E8tgm8XCOm0f63r2Nkcu1/xrLGaNVGkV1rqac43tKOy+hiifyvvT/yud2VHOywLG9Ny3doiTz+HLS95S2fnocx39of+L+SjYJvX6+Oy6o/Fw175x+/qnE2RkXVD5UWlyg0OmlnecskDhks09uQ3XeVR5jjeNi5Rp/vrc/zYg/fqGKPxnX2koy+1c1HvLxlPGnnGOfPP/357zo/sSfZlI9ljIlme3++ynVpfsnPYZl5eMd+8pJ+9wlmd9T3v7bLX2P3Faah8dx/Dr773Q+Uyz9T/r/qyq+v9jx/Rm8FXVO7VBOcXw5xfHYpyvtbRxbnf4cCltWml+67z2uzNjmcny/x3H8Zvtv53k2/Mzl6cCpUFSkfNFUNBBNJPzxaHVH+3KfVdDw/clwJGFFUsmoEMKbsJJ7+36VP8nxCUvaJ2WflY9Pt+dxHP9X+ljXzl9EYXHeeSZ/Hx5XsSD7cQVZPv9tQ1HnLsmsU/myPMfTx6e/u3zJnhzT+ypI++TYiaWi/bfcX3JbaR4ex/Hl7AbSYyLPy/T/V1V8f1nH92fwVtQ553gFxfEVFMfj+BTa/7Rr3ZO+m/r68L/f6WhfrnNyS/uOjnnlD0RD8WhIiIhfJP0isLd5Vdfe5n13uD/y393hpRequ8PT509wWz6vhKWV1HaBY5/q7nCdNst35mq6f8lbQ8FfvncKy3935u5Rdt2ZW8tur0jRj854qMqhnXmUqg25nULHsbtyM0V76XErcu3pQ9m4qfzApahTcSvaCze3gpuz3cJS7Mj2PTKn0s7NFjj2qbhzyKfr2H//r/Pp9C9r/lt3Sy0+zeuiV/c9rqp1VxUnSlt3nfMRS3qt3duaLK+7u/SFS18uAz4R1jxmooYr+1rw37qbtexad4/e3TUZPpg+N6haMz2OYw+zP1HPHJylveJS2lNdO5P/70h7W3U91kXXJ0LFo0DBg/u6d5z99/963WtobzNf98L/rXull31d94ocx6n+p7S1UfNapltDCs33MvvS/Vba77jk7y/tV5LOT5drz/OZ8nfl61eMKttU1w9V142dmkzVlmc/2/pfjqnc185fxcvnywsd+9zSPucv7T0le9qIecQx0nHZ8jE8rr60faqjj3TGZ11xAUsNV/bcJl1n+rW6evbfJl+rO9belnOs/3L7Pcqu3D4g9XW2GCHrSOc9VHI8dN5zpvv3NkUKrnJ8TX8/3otX094eNXrYyGSboS3HJ+NjRg8aNrR5ND4wKS9QzkZcCuPT+wqk+mwJi/N/iqTj5cJBFKR/qPy/FgXyTdQyT+qgLd9wpaH9XaJD049RffJNJS7Hd8n95kzK5O00J/nHWBq4RnctghIH50kaJ0f5GOcJdCyFjr+dc7JoH451fp+8z/lYFdX/OW9iddY5ky6X4vhdC6f96cnSlvxDUvl4581YusawhoJTQZbvrqmHw645dZCe9i3VnKopbR/ksFP2qyZEHNLtpX3A49qzOG9ekRNsmV8BPT/h5KKKL+mS9pmDpLqaWbhquinbm26/gp72lT4j34hYwbEvPXaqmFaQ5e9Cx2dpxxaU0q4qDqXbTI+VzDdtx/8BIsTMc/QWBgA=",
1726
+ "debug_symbols": "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2HX3uOvuadfd0fpVFqvekvtq97zr7mXX3eueux/65dDR92TCod8OXRwBSivrSIqaSKqaSJqaSLqWSA79iug4kqAmEi1fdwuHfkt0HImoiSSriaSoiaSqiaSpiaRriaRPaiIJaiJRU2O7mhrb1dRY+Luzoz88DPDXYa/em5a82r3vuHuEv7M63j3sujv6mZN0efZcVrunXXeXXXfPu+5edt297rp723X3/nK7XzvNfNsd/p7jePew6+7wZzUu3xW4GjI875523V123T3vunvZdfe66+5t1937nrvD340b7x523X3Xz2rc9bMa9/usnn4I54X3D06YFh/CMKV81YLe+UcuLzFriNdLv95E9t0+4NunuSmr0m+3jy+w/dzK15Jut0/49m1+9F5Xk4/vn56X2z7D27fF1a/J6tKWF9h+np3bcrndvuLb1/nStjWc9oLb95tzf/ohDj67YRkTeZ52+v8d6dMr9eV3ysa0yPNw28vqqV/9E/1rcOm8+P676LyMoM/X9qbpa2z3XxmPf6V/96/cfwE7/pXwnb/y5fTjf958evfml/dvz06H5//1zw+/zsaHpx8///f3+X+ZrRF///Tx17e//fnp7dkk8eKPeA43Sn0dS/v5K9t/xHj6KdWfz3+5dP7xdD+Iks4/nuOMpb+ONVwq/HnNqQqdfmE5OF//q+l1ysvlOu+bwmsJ866nt9i5nRI5JfM/",
1816
1727
  "brillig_names": [
1817
1728
  "get_auth_witness",
1818
1729
  "decompose_hint",
1819
1730
  "lte_hint",
1820
- "enqueue_public_function_call_internal",
1821
- "call_private_function_internal",
1822
- "debug_log_oracle_wrapper",
1823
- "notify_set_min_revertible_side_effect_counter_oracle_wrapper",
1824
- "notify_created_nullifier_oracle_wrapper",
1731
+ "store_in_execution_cache_oracle_wrapper",
1825
1732
  "directive_to_radix",
1826
1733
  "directive_invert",
1827
1734
  "directive_integer_quotient"
1828
1735
  ],
1829
- "verification_key": "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"
1736
+ "verification_key": "AAAAAAAQAAAAAAAAAAAAFAAAAAAAAAAQAAAAAAADKLEBAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAAAAAAAAAACiPlV8hjnKRdGhPUZHUZgYpY1545ebNTWU7wnpm6YI1LSjJqLFoYUq6DVDUeGYw7cAEfeYcHgs8C7lQR8jGiOQm1onSGQ0igOFVdSfW7vugawIel99cf/5lYMYXU5Sv+yeCWG1HA50eXDM7E2lIC41aouqzHnmhBQM1x8XMmbJ/DWooGAzxKFSL/6gwa6J7dDw6O1sbnO7rlz2ppbhXh98rfBbHtwUvryaApXOZl5GIXycZAn2iWRB96KYtuiZb8gbiddPauRNq14ZXskcLyKd+ElgF2nS7mbPQSCOpF+SuBLmn33jNtBvnO7O29Qh6yeLeE8r0ljDx0VpfrdeLVmoqsvUVlfIGRVtx7qTbt87erkrrv0uj2huc4fSGWjxBFhYvq7cImP/V8MNIMD/Ge/8pu0da85dGSJXjkOTDu092L4Xc7ZBFghtWreFD09dL93eDckaxDAFTjgf4BpTi0iUkdxStWtf4fcPMeJZ0hBGwMKz2ZFNniLLZCejecJ5kXQRWu3AbWwtGO7zwxP5xkFUjk9CVM+GyAEvYTp+KU6iPA4D05rswR3a/1Psi4gmHdBVkgemj+PCR0w2xADptqrQNVrvvFHJ4/cBX+aM22YTQoACAzY80ug43VGwQJmXI/ikfu+C39vKCPVRpz5gaHvEfPq7YcmAmIR0u4Pg+MuRTJFneFFyD919tXO+hj2U4DEgO9grPnhHaakksrwCqJforSIOtHNTfUmm1eKctW6qQcv+sUkawTIOQiUVRLGJ9oSHg0Yy0nhk7HbkPxqvEeM+Wj3Ld4RsQfQDWzmCdEI28J8BHSR/uwq3NIAZ2AYAghogPw2PFjAMT9S3dB42VxkgL8tk8RlWiMnZAHemXBl5+Bn3K7Ey/nwDDDvP12aZ7hgZXScNkI75sewVh9PzCUKT5vUC4zboBHeMLUiMq2WJyJVUIHpC+NywbUxAv6gU7IJpihfVdfTpwNN3r+dCKDaYHbL6FYXV0gaZPUfxv0EcYYu6pAgzMQ5OCNjEAZlyZ0xLZ8guns9X8N9VuyBRf5UByz5gr0skY9TOdWe5FOK50AHPtO7NoyGCb8JFn0KLn8wpuu3oh0ENsb9UQLXxCwvAK8L1gS0e3t2rLeKNfxRMimEoOh+BKsJC5g7Mmy19c4SP7Yd6m5JkYl/R6IUnZFLk7Mdydra5I0rlUM7PhFM5FFU0cv4YQP6DXrPRreiFHuvkOIm/B1i/cDUzl2CGaw/8PoybtbTV77tyTXARQ3R2SzGEHHbcpAUIgxZNPGmsygiDKVgQkmwXAP2b/dz4QvSL3AMnzyk7z1RMrFUSj5gpbHR0PbcO9Vu5FsQTDv5MuUhiMiS8/TFHPtTo6eOrZr6MQ0InMEgKPJtXyi0ufKHw8XwDWlQqaRY/KQvdKtd1pHRtQ6WZxduYORCY7SbOI1py88Giq87VLC+dFvsAvsNgsCOULc9qzmvSeL3QT8R3yq7ly4Y4sXC8jG1YmhXOqZ0wn6DTIXbEk1WnHtzfdGAM2vdGVkkmnFXIQyliGQ45EmAAM4h096VkmFojAqzbjYoo3j5+3tW5m+v6AKL+03aSiC02dxRNuR1bFqtV4kgRjta9u7qzSZ0qVRMCA49zyhnUSRxxz2b/lnjJG1ywkns0221yIWTOCkk0jCgyds/RumxUQQC1Dv1CMeWPUEXpSfsz8dn/sBiTJoRJbE8mmvWPhBDHNyXfKyeTrdAvx6z/pZqyICm5p79+CCSZBmzZEytYAk8Hgb94hwvCmwMEm1ole13dVzjJlRFv35u5IRj4YSAK/RM8EEneR3YKZOsonm7N0vC/Q4YOrssNPFfCMWZVbBdq3lYs72TzVNnMFypsj+OKSn6WBhJDHX9nmjprghnwKhQGeElJpkxLL1exqI7KEqbNSfNLr/2KyRaBKqyWPkhu6Gm5J8LpmZD6LMv0JDgC17ucjNkMMP+t9pri1fhVRALNOAIK8Wu2BmoG7NnRMTWEsgPyRommqqql1yEyOWNYAE66jvMCEHsbZSyhfG+u+uWng8seFYnDcX9osXTmdzALZ8EZe9LKxFtS4hiU0TyZxeCqTNyqtNpUwrkt1wivbJl8McFNuwC98m+TOGcKdJumDmULXKSAUH+vasH5MIMMngHpPeyPZzByGXvmTCZk6M56MuMZI0Hw03ctO9EUngwy/nW4Lb6pgndvVgX9dELxP2BDHgdeyOaR6CGNhaG7cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhN89ebDOTmbb5Oc8VbcYl7eq01OyuvYaethFsMK69N1HofN404S/fYzJEmvB0jSEdB1hdj9h3Wf8XX2Z/CshccPy7+dPPQCuqPu2l8Knkm1werJWyZMMC3IVObyLXMw3yg+39qJyUgFl/CzRC6XUt751Y/Ckgg2GUJh97Fj/vuvHViqYcZK1SIEPXnEgCIZ5Vuhl1Gt/mw2Mk0/tsLaCYktfBipPD2uWICfqu7GqGp49LO8YfGdbnBpNZu/R+f5Bw=="
1830
1737
  },
1831
1738
  {
1832
- "name": "verify_private_authwit",
1739
+ "name": "process_log",
1740
+ "is_unconstrained": true,
1741
+ "custom_attributes": [],
1742
+ "abi": {
1743
+ "error_types": {
1744
+ "16541607464495309456": {
1745
+ "error_kind": "fmtstring",
1746
+ "item_types": [],
1747
+ "length": 16
1748
+ },
1749
+ "17843811134343075018": {
1750
+ "error_kind": "string",
1751
+ "string": "Stack too deep"
1752
+ }
1753
+ },
1754
+ "parameters": [
1755
+ {
1756
+ "name": "log_plaintext",
1757
+ "type": {
1758
+ "fields": [
1759
+ {
1760
+ "name": "storage",
1761
+ "type": {
1762
+ "kind": "array",
1763
+ "length": 18,
1764
+ "type": {
1765
+ "kind": "field"
1766
+ }
1767
+ }
1768
+ },
1769
+ {
1770
+ "name": "len",
1771
+ "type": {
1772
+ "kind": "integer",
1773
+ "sign": "unsigned",
1774
+ "width": 32
1775
+ }
1776
+ }
1777
+ ],
1778
+ "kind": "struct",
1779
+ "path": "std::collections::bounded_vec::BoundedVec"
1780
+ },
1781
+ "visibility": "private"
1782
+ },
1783
+ {
1784
+ "name": "tx_hash",
1785
+ "type": {
1786
+ "kind": "field"
1787
+ },
1788
+ "visibility": "private"
1789
+ },
1790
+ {
1791
+ "name": "unique_note_hashes_in_tx",
1792
+ "type": {
1793
+ "fields": [
1794
+ {
1795
+ "name": "storage",
1796
+ "type": {
1797
+ "kind": "array",
1798
+ "length": 64,
1799
+ "type": {
1800
+ "kind": "field"
1801
+ }
1802
+ }
1803
+ },
1804
+ {
1805
+ "name": "len",
1806
+ "type": {
1807
+ "kind": "integer",
1808
+ "sign": "unsigned",
1809
+ "width": 32
1810
+ }
1811
+ }
1812
+ ],
1813
+ "kind": "struct",
1814
+ "path": "std::collections::bounded_vec::BoundedVec"
1815
+ },
1816
+ "visibility": "private"
1817
+ },
1818
+ {
1819
+ "name": "first_nullifier_in_tx",
1820
+ "type": {
1821
+ "kind": "field"
1822
+ },
1823
+ "visibility": "private"
1824
+ },
1825
+ {
1826
+ "name": "recipient",
1827
+ "type": {
1828
+ "fields": [
1829
+ {
1830
+ "name": "inner",
1831
+ "type": {
1832
+ "kind": "field"
1833
+ }
1834
+ }
1835
+ ],
1836
+ "kind": "struct",
1837
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
1838
+ },
1839
+ "visibility": "private"
1840
+ }
1841
+ ],
1842
+ "return_type": null
1843
+ },
1844
+ "bytecode": "H4sIAAAAAAAA/92c927bMBDG5URKIieOndG9927leHeme+/W/dsdfosWAtqHSPu09Zfw7DPDAilCovkqQJCto+9+PFHUiTy6EG1s3cFeMJ9jc5w2R5xfjMY3Kbtqjtn2tqpHXVkoxgIB4wQB4yQBY0zAmBAwThEwThMwzhAwpgSMRQLGWQLGOQLGEgHjPAFjmYCxQsC4EIAxBOciCeeSR04d24fiXY52fhvdRcC4m4BxDwHjXgLGfQSM+wkYDxAwHiRgPETAeJiA8QgB41ECxmMEjMcJGE8QMJ4kYDxFwHiagPEMAeNZAsZzBIznCRgvEDBeJGC8RMB4mYDxCgFjRsBYJWBcIWCsETDWCRgbBIxNAsYWAWObgLFDwHiVgPEaAeN1AsYbBIw3CRhvETCuEjDeJmC8Q8B4l4DxHgHjfQLGBwSMDwkYHxEwPiZgfELA+JSA8RkB43MCxhcEjC8JGF8RML4mYHxDwPg2AGMIzncknO9JOLuBOKMPFvTEYMfCLSyMwsIjLOzBwhksTMHCDyyswMIFLAxA4j0S25E4XhnsSHxGUjESdpEEiyRTJHEiSRJJiEjyQxIdktSQBIYkKyQxIUno6GA/NtiRRIIkDSRBIMkAk/iYJMckNCZ5MYmKSUpMAmKSDZNYmCRCrTDJgUkEDNJjEByDzBjExSApBiExyIdBNAxSYRAIgywYxJBBArzk4iUSL2l4CcJLBoJ4BMkIQhHkIYhCkIIgAA9ZPMTwkEAnjE4OnQhuUtwAaFzd6M+bNJIf5pia44SSe1xEV00tuz71t7POx9RRP4/8tdTonAmiv9ES/WkY/kwW2t7LR/p1XcTupDl285Evu/k4k5RZU2XWrDJSnzDXu14P66/qSsnyUaTqIraLYWzXCpY9fV20TOwXo5Btc2NRsrYnPLZ/pO8oSZl8xFOwZHG+uR4iS5RMri/snFfl7LY1Y8mEBZu035LyjWwfjEyuaax0+muvjXbY9lrP/l17rVf/x/YaW7I431yPv22vum3Z7TWJRpv0pSKbUrKflmxayX7lI9sNxdE0n8P2yRvPYH3v+X6GLTn4tS1s0/nIH9IGJ9W5RPlv3T+6vCVLlSzOx+0UzfdY2dG6hCOxytfN97I5TqnfyO8rDvtTlv0xbsc52y+po3zqKI+2dsl8njU72tA3+U20+d7Fvmq+Z9vamh1XP+lPf6vm6gs98n8R/bNB9NeH+ufC8A/jqlIY/w/1z4fh74v+chj9TdFfCaO/IfoXguhfGcYJ+s927DhhSZ33GNduOU4Q+0WLNVScsGTx2P7RcQJkyw7WikNm9wHLDjvLDjsuXfMedS141FXcoXUsedRV8agr9ajL53Wc86jLp7/KHnXNeNTls9379Jdcx7DjVVnmitOiAPqLYfQP+37po/W7ma6T2E+s8l8tP88F8fNoHEr6M+0LVyzl0/ZWn9div+TgEe6iQ7adP0D70mj3O+1GZxDSV5srnaxg6RdW+5x+L9L9iy7veva74j6Pvs5cYxBl5VdssZLNW7JEyYRRj0G44mKf/Fvxv7Zfccjs/nmr13IxGm9r+n6cjUb3c5z7r3urvfHHLuuMRn8SjY8xRpb9xCr/3Xy3+7rt3iP9Vq/ar/X6vUbv8+f6p96ipV/7EH76DXVGL3ipUwAA",
1845
+ "debug_symbols": "tZZBCoMwEEXvknUWzli17VVKKVGjBEKUqIUi3r2jSCvt+m9CJkzekMULf1a1Laf24ULTDep6m5XvKjO6Lkg1L1qV0Xnv2sfxWCXrQglvF4behLUeRhNHdc0TrWyoZXOW643zVrbpov8aC94bi+LTmPFy10JOYeQTjJzByDmMXMDIZxj5giJTAiMTjAxzkGAOEsxBgjlIMAcJ5iDBHCSYgwxzkGEOMsxBhjnIGAcXqZ4mOlN6uweIZgrVIU+Mr97+RIs+dpWtp2jXkPHNF+vbT6wz3n59KYhzTSnJEBn0Bg==",
1846
+ "brillig_names": [
1847
+ "process_log"
1848
+ ]
1849
+ },
1850
+ {
1851
+ "name": "entrypoint",
1833
1852
  "is_unconstrained": false,
1834
1853
  "custom_attributes": [
1835
- "private",
1836
- "view"
1854
+ "private"
1837
1855
  ],
1838
1856
  "abi": {
1839
1857
  "error_types": {
@@ -1845,18 +1863,14 @@
1845
1863
  "error_kind": "string",
1846
1864
  "string": "Stack too deep"
1847
1865
  },
1848
- "19458536156181958": {
1849
- "error_kind": "string",
1850
- "string": "Function verify_private_authwit can only be called statically"
1851
- },
1852
- "4939791462094160055": {
1853
- "error_kind": "string",
1854
- "string": "Message not authorized by account"
1855
- },
1856
1866
  "5019202896831570965": {
1857
1867
  "error_kind": "string",
1858
1868
  "string": "attempt to add with overflow"
1859
1869
  },
1870
+ "5727012404371710682": {
1871
+ "error_kind": "string",
1872
+ "string": "push out of bounds"
1873
+ },
1860
1874
  "6485997221020871071": {
1861
1875
  "error_kind": "string",
1862
1876
  "string": "call to assert_max_bit_size"
@@ -2319,35 +2333,199 @@
2319
2333
  "kind": "struct",
2320
2334
  "path": "authwit::aztec::protocol_types::abis::gas_fees::GasFees"
2321
2335
  }
2322
- }
2323
- ],
2324
- "kind": "struct",
2325
- "path": "authwit::aztec::protocol_types::abis::gas_settings::GasSettings"
2336
+ }
2337
+ ],
2338
+ "kind": "struct",
2339
+ "path": "authwit::aztec::protocol_types::abis::gas_settings::GasSettings"
2340
+ }
2341
+ }
2342
+ ],
2343
+ "kind": "struct",
2344
+ "path": "authwit::aztec::protocol_types::transaction::tx_context::TxContext"
2345
+ }
2346
+ },
2347
+ {
2348
+ "name": "start_side_effect_counter",
2349
+ "type": {
2350
+ "kind": "integer",
2351
+ "sign": "unsigned",
2352
+ "width": 32
2353
+ }
2354
+ }
2355
+ ],
2356
+ "kind": "struct",
2357
+ "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
2358
+ },
2359
+ "visibility": "private"
2360
+ },
2361
+ {
2362
+ "name": "app_payload",
2363
+ "type": {
2364
+ "fields": [
2365
+ {
2366
+ "name": "function_calls",
2367
+ "type": {
2368
+ "kind": "array",
2369
+ "length": 4,
2370
+ "type": {
2371
+ "fields": [
2372
+ {
2373
+ "name": "args_hash",
2374
+ "type": {
2375
+ "kind": "field"
2376
+ }
2377
+ },
2378
+ {
2379
+ "name": "function_selector",
2380
+ "type": {
2381
+ "fields": [
2382
+ {
2383
+ "name": "inner",
2384
+ "type": {
2385
+ "kind": "integer",
2386
+ "sign": "unsigned",
2387
+ "width": 32
2388
+ }
2389
+ }
2390
+ ],
2391
+ "kind": "struct",
2392
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
2393
+ }
2394
+ },
2395
+ {
2396
+ "name": "target_address",
2397
+ "type": {
2398
+ "fields": [
2399
+ {
2400
+ "name": "inner",
2401
+ "type": {
2402
+ "kind": "field"
2403
+ }
2404
+ }
2405
+ ],
2406
+ "kind": "struct",
2407
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
2408
+ }
2409
+ },
2410
+ {
2411
+ "name": "is_public",
2412
+ "type": {
2413
+ "kind": "boolean"
2414
+ }
2415
+ },
2416
+ {
2417
+ "name": "is_static",
2418
+ "type": {
2419
+ "kind": "boolean"
2420
+ }
2421
+ }
2422
+ ],
2423
+ "kind": "struct",
2424
+ "path": "authwit::entrypoint::function_call::FunctionCall"
2425
+ }
2426
+ }
2427
+ },
2428
+ {
2429
+ "name": "nonce",
2430
+ "type": {
2431
+ "kind": "field"
2432
+ }
2433
+ }
2434
+ ],
2435
+ "kind": "struct",
2436
+ "path": "authwit::entrypoint::app::AppPayload"
2437
+ },
2438
+ "visibility": "private"
2439
+ },
2440
+ {
2441
+ "name": "fee_payload",
2442
+ "type": {
2443
+ "fields": [
2444
+ {
2445
+ "name": "function_calls",
2446
+ "type": {
2447
+ "kind": "array",
2448
+ "length": 2,
2449
+ "type": {
2450
+ "fields": [
2451
+ {
2452
+ "name": "args_hash",
2453
+ "type": {
2454
+ "kind": "field"
2455
+ }
2456
+ },
2457
+ {
2458
+ "name": "function_selector",
2459
+ "type": {
2460
+ "fields": [
2461
+ {
2462
+ "name": "inner",
2463
+ "type": {
2464
+ "kind": "integer",
2465
+ "sign": "unsigned",
2466
+ "width": 32
2467
+ }
2468
+ }
2469
+ ],
2470
+ "kind": "struct",
2471
+ "path": "authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"
2472
+ }
2473
+ },
2474
+ {
2475
+ "name": "target_address",
2476
+ "type": {
2477
+ "fields": [
2478
+ {
2479
+ "name": "inner",
2480
+ "type": {
2481
+ "kind": "field"
2482
+ }
2483
+ }
2484
+ ],
2485
+ "kind": "struct",
2486
+ "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
2487
+ }
2488
+ },
2489
+ {
2490
+ "name": "is_public",
2491
+ "type": {
2492
+ "kind": "boolean"
2493
+ }
2494
+ },
2495
+ {
2496
+ "name": "is_static",
2497
+ "type": {
2498
+ "kind": "boolean"
2499
+ }
2326
2500
  }
2327
- }
2328
- ],
2329
- "kind": "struct",
2330
- "path": "authwit::aztec::protocol_types::transaction::tx_context::TxContext"
2501
+ ],
2502
+ "kind": "struct",
2503
+ "path": "authwit::entrypoint::function_call::FunctionCall"
2504
+ }
2331
2505
  }
2332
2506
  },
2333
2507
  {
2334
- "name": "start_side_effect_counter",
2508
+ "name": "nonce",
2335
2509
  "type": {
2336
- "kind": "integer",
2337
- "sign": "unsigned",
2338
- "width": 32
2510
+ "kind": "field"
2511
+ }
2512
+ },
2513
+ {
2514
+ "name": "is_fee_payer",
2515
+ "type": {
2516
+ "kind": "boolean"
2339
2517
  }
2340
2518
  }
2341
2519
  ],
2342
2520
  "kind": "struct",
2343
- "path": "aztec::context::inputs::private_context_inputs::PrivateContextInputs"
2521
+ "path": "authwit::entrypoint::fee::FeePayload"
2344
2522
  },
2345
2523
  "visibility": "private"
2346
2524
  },
2347
2525
  {
2348
- "name": "inner_hash",
2526
+ "name": "cancellable",
2349
2527
  "type": {
2350
- "kind": "field"
2528
+ "kind": "boolean"
2351
2529
  },
2352
2530
  "visibility": "private"
2353
2531
  }
@@ -3457,219 +3635,41 @@
3457
3635
  "visibility": "databus"
3458
3636
  }
3459
3637
  },
3460
- "bytecode": "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",
3461
- "debug_symbols": "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",
3638
+ "bytecode": "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",
3639
+ "debug_symbols": "7Z3djuTMcabv5Tv+DpiZkX++lYWxkG3ZECBIhiwvsDB071s9M1Xd09WduT1ZP5HxhA8MjURy4g2ymE8Uax7+z2//9sd/+e//+N9/+su///W/fvun//U/v/35r//6h7//6a9/Of3pf35L6dt/91//+Ye/vPzxv/7+h7/9/bd/CqXE33/741/+7eU/1viP33/79z/9+Y+//VNJ//j9auMYS/2xcYytXzbu5aONu7QfG6cjhvHGoaTeLnVIeN08lv7h9vl181pft24fHj2VdN5awvHT1v/8+29JvDOfdCZ7Zz7pTPHOfNKZ6p35pDPNO/NJZ7p35uPOyOGd+aQzwTvzSWeid+aTzjgDf9YZ8c580hln4M864wz8WWecgT/rjDPwZ51xBv6kM9kZ+LPOOAN/1hln4M864wz8WWfEO/NJZ5yBP+uMM/BnnXEG/qwzzsCfdcYZ+JPOFGfgzzrjDPxZZ5yBP+uMM/BnnRHvzCedcQb+rDPOwJ91xhn4s844A3/WGWfgTzpTnYE/64wz8GedcQb+rDPOwJ91Rrwzn3TGGfizzuhmYEn5tTPSJ52JIZZzJUHyYmd0M/AzO6ObgZ/ZmXUGlqOfN5YQ22XjFl7+gnbc+y/4kMhOB/2xS+nH+PAh50uHcnntfskfbFwv3WxSXjf96Dy10s/nqdWUJme1yeWsNqky2Trl88YS35zTD6/FeOleTEcebxxSuJyXlMJk4yP088ZHaW83fjkv0c+LyvOS/LyoPC/i50Xlecl+XlSel+LnReV5qX5eVJ6X5udF5Xnpfl40npd++HlReV583td5Xnze13lefN7XeV7Ez4vK8+Lzvs7z4vO+zvPi877O8+Lzvs7z4vO+yvMSDh/4lZ4Yn/iVnhgf+ZWeGJ/5lZ4Y8ROj88T41K/0xPjYr/TE+Nyv9MT44D8+MfXSvvhzGR/1otbzgUPtee3E+OSv88SE9cm/vp6YNjkxpcuPbWt9/aTXw29l1ycm+InReWKinxidJyb5idF5YsRPjM4Tk/3E6DwxxU+MzhNT/cToPDHNT4zOE9P9xKg8MdEnf6Unxid/pSfGJ3+lJ8Ynf6UnRvzE6DwxPvmPT8yznsdEn/yVnpj1yf+4HL/kY3xi8N1u3u0Hdrt7tx/X7bQ8eJeLjy/UEMfdPn2ULpWnIG+P/K2YoKmYqKmYpKkY0VRM1lRM0VRM1VRM01RMV1SMaLoDi6Y7sGi6A4umO7BougOLpjuwaLoDi6Y7sGi6A4umO3DWdAfOmu7AWdMdOGu6A2dNd+Cs6Q6cNd2Bs6Y7cNZ0B86a7sBF0x24aLoDF0134KLpDlw03YGLpjtw0XQHLpruwEXTHbhougNXTXfgqukOXDXdgaumO3DVdAeumu7AVdMduGq6A1dNd+Cq6Q7cNN2Bm6Y7cNN0B26a7sBN0x24aboDN0134KbpDtw03YGbpjtw13QH7pruwF3THbhrugN3TXfgrukO3DXdgbumO3DXdAfuj70Dp/haTJm96lXOPwiOb364VuSDTU9VhkvB4fXNxuHDX/G9HrjFN0WcNj51JB6Hd+RdR4J35F1HonfkXUeSd+RdR8Q78q4j2TvyriPFO/KuI9U78q4jzTvyriPOrO86EpxZ33fEmfV9R5xZ33fEmfV9R8Q78q4jzqzvO+LM+r4jzqzvO+LM+r4jzqzvOhKdWd93xJn1fUecWd93xJn1fUfEO/KuI86s7zvizPq+I86s7zvizPq+I86s7zqSnFnfd8SZ9X1HnFnfd8QEs9Yo7ce2NRa5CimEkCbIchbSBCzW2M/it/r2d3/nkCb4bxbSBNLNQpqgtElIMQFes5AmWGpydxUTeDQLSSCeB1vInvSZNEI845AE4hEC8QiBeIRAPJlAPJlAPJlAPJlAPA+2/j0pJOE7nkwgnkwgnkwgnkwgnkIgnmKEeMYhjRDPOKQR4hmHFEJIAvEUI8QzDmmEeMYhjRDPOKQR4hmGrATiqQTiqQTiqQTiebDV9kkhCU+1KuE7nkr4jqcSvuOpBOJpRohnHJLwVKsRnmo1wlOtB1ukn3N3bQTiaQTiaQTiaQTiaYSnWp3wHU8nfMfTCd/xdALxPNja/qSQhKdanfBUqxOeanUC8diw7Y9DJhsC/VlIAPEkG5r7WUjAU610CCEk4DueZEMZPwsJIJ5kQ+w+Cwl4qpVs6NdnIQFPtZINSfrk7mrDez4LKYSQBOKxIRyfhQQ81Uo2tOCzkITveGzIu2chCcRjQ7E9Cwl4qpVsiLBnIQFPtZINXfXs7kogHhtS6VlIAvHYUD/PQhKeatkQNM9CEr7jseJcHockEI8V5/I4JOGplhXn8jgk4akWwbmcrDiXxyEJxGPFuTwOKYSQhKdaBOdyIjiXE8G5nKw4l4fEY8W5PA5JeKpFcC4ngnM5WXEuD++uVpzL45AE4iE4lxPBuZwIzuVEcC4ngnM5EZzLyYpzeUg8VpzL45CEp1oE53IiOJeTFefy+O5KIB6CczkRnMuJ4FxOBOdyIjiXE8G5nAjO5WTFuTwkHivO5XFIwlMtgnM5EZzLyYpzeXh3teJcHocUQkgC8RCcy4ngXE4E53IiOJcTwbmcrDiXh8Rjxbk8Dkl4qkVwLieCczlZcS6P764E4iE4lxPBuSwE57IQnMtCcC4LwbkshxBCAohHrDiXxyEBT7WE4FwWgnNZrDiXh3dXK87lcUgC8RCcy0JwLgvBuSwE57IQnMtCcC6LFefykHisOJfHIQFPtYTgXBaCc1msOJeHd1crzuVxSALxEJzLQnAuC8G5LATnshCcy0JwLosV5/KQeKw4l8chCU+1CM5lITiXxYpzeXx3JRAPwbksBOeyEJzLQnAuC8G5LATnshCcy2LFuTwkHivO5XFIwlMtgnNZCM5lseJcHt5drTiXxyGFEJJAPATnshCcy0JwLgvBuSwE57JYcS4PiceKc3kckvBUi+BcFoJzWaw4l8d3VwLxEJzLQnAuC8G5LATnshCcy0JwLgvBuSxWnMtD4rHiXB6HJDzVIjiXheBcFivO5eHd1YpzeRySQDwE57IQnMtCcC4LwbksBOeyEJzLYsW5PCQeK87lcUjCUy2Cc1kIzmWx4lwe3l2tOJfHIQnEQ3AuC8G5LATnciY4lzPBuZwJzuVsxbk8Ip58CCEk4KlWJjiXM8G5nK04l8d3VwLxEJzLmeBczgTnciY4lzPBuZwJzuVMcC5nK87lIfFYcS6PQwKeamWCczkTnMvZinN5eHe14lwehxRCSALxEJzLmeBczgTnciY4lzPBuZytOJeHxGPFuTwOSXiqRXAuZ4JzOVtxLo/vrgTiITiXM8G5nAnO5UxwLmeCczkTnMuZ4FzOVpzLQ+Kx4lwehyQ81SI4lzPBuZytOJeHd1crzuVxSALxEJzLmeBczgTnciY4lzPBuZwJzuVsxbk8JB4rzuVxSMJTLYJzOROcy9mKc3l4d7XiXB6HJBAPwbmcCc7lTHAuZ4JzOROcy5ngXM5WnMtD4rHiXB6HJDzVIjiXM8G5nK04l8d3VwLxEJzLmeBczgTnciY4lzPBuZwJzuVMcC5nK87lIfFYcS6PQxKeahGcy5ngXM5WnMvDu6sV5/I4pBBCEoiH4FzOBOdyJjiXM8G5XAjO5WLFuTwinmLFuTwOCXiqVQ4hhAQ81SpWnMvjuyuAeArBuVwIzuVCcC4XgnO5EJzLheBcLgTncrHiXB4SjxXn8jgk4KlWITiXC8G5XKw4l4d3VyvO5XFIAvEQnMuF4FwuBOdyITiXC8G5XAjO5WLFuTwkHivO5XFIwlMtgnO5EJzLxYpzeXh3JTiXixXn8jgk4TseK87lcUgC8RCcy8WKc3l8JgnEY8W5PA4phJAE4rHiXB7fXQnf8VhxLo9DEn7HY8S5LDGfQ0qsVyH1Ek8+zgfOTcYhQ2z9ctwULhsnqd9T6kWeL6XM7TVluU6pl3m+klLSueAgkq9TCiKlXuq5ZUq92HPLlHq555Yp9YLPLVPqJZ8vpczHJeXLwd6lVCxfvmVKG+wzS2mDfWYpjbDPJKUgUlphn/CaUq5TGmGfepm8pMfrlEbYZ5LSCPtMUhphn3FKxRrmW6Y0wj6TlEbYp1+KyOG4TmmEfSYpBZHSCPtMUhphn0lKI+wzSWmFfdpryusnCIp9zF9JmeWyXpbw8+T1wVOmo50nmBjePVW53jrVS8DU3hw7fG+gYtfzJg20QWxPbKANGHxiA21w5hMbKN7ASQNbP2+d+gcNtEHHT2ygDfB+YgNtMP0TG2hjXHhiA30SWWugYgf7Jg30SWSxgcRJJMZLA2Ppk61PX8fk169jXo8dw4fnJlwOfaQ23jjFfj5ySj9v/O3UEGccLadGjnQ+NZLz1akRPzVaPzXEuWyTTw1x4tvkU0OcJTf51BCn1DuemhTPT9diqtcfBOJI+3pvOHXnmGx96kC4NCP89K+4rjdur/88rMU3Ab//k6+q+I0cFrtNHJaf123kZP20biOH5ad1W7zbD+w2cqR9WreRU+rTuo0cPJ/WbeQs+bRu+yz5wG4rfteRxW77LPnIbvss+chu+yz5yG6Ld/uB3fZZ8pHd9lnykd32WfKR3fZZ8pHd9lnygd1W/BY5i932WfKR3fZZ8pHd9lnykd0W7/YDu+2z5CO77bPkI7vts+Qju+2z5CO77bPkA7ut+P2cFrvts+Qju+2z5CO77bPkZOvxq62q4teybtJAn/gWG+hD3LSBozdhVcWvqt2kgT5qLTbQp6e1Bip+fe8mDfQZZ20VVvza4U0a6JPIYgPFG7h2D/RJZLGBPoksNtAnkcUG+iSy2ECfRNYaqPi12ps00CeRNQ408jbwJzbQJ5HFBoo3cK2BPoksNtAnkcVV2CeRxQb6JLLYQJ9E1hpo5C33T2ygTyKLDfRJZLGBPoksNlC8gWsN9ElkbRIpPoksNtAnkcUG+iSy2ECfRNYaWH0SWVuFq08iiw30SWSxgT6JLDZQvIFrDfRJZLGBPoksNtAnkcUG+iSy2ECfRNYmkeaTyGIDfRJZbKBPIosN9ElksYHiDVxahZtPIosN9ElksYE+iSw20CeRxQb6JLLWwO6TyGIDfRJZbKBPIosN9ElkbRLp4g1ca6BPIosN9ElksYE+iSw20CeRxVXYJ5GlBrbDJ5HFBvoksthAn0QWG+iTyGIDxRu41kCfRBYb6JPIYgN9ElmaRNrhk8hiA30SWWtg8ElksYE+iSw20CeRtVU4+CSy2EDxBq410CeRxQb6JLLYQJ9EFhvok8hiA30SWWtg9ElksYE+iaxNItEnkcUG+iSy2EDxBq410CeRxQb6JLK4CvsksthAn0QWG+iTyFoD/VXvqw30SWSxgT6JLDbQJ5HFBoo3cK2BPomsTSL+jvXVBvoksthAn0QWG+iTyFoD/R3ri6uwv2N9tYE+iSw20CeRxQaKN3CtgT6JLDbQJ5HFBvoksthAn0QWG+iTyNok4u9YX22gTyKLDfRJZLGBPoksNlC8gUursL9jfbWBPoksNtAnkcUG+iSy2ECfRNYa6O9YX22gTyKLDfRJZLGBPomsTSL+jvXVBvoksthAn0QWG+iTyGIDfRJZXIV9EllroL9jfbWBPoksNtAnkcUG+iSy2EDxBq410CeRxQb6JLLYQJ9E1iYRf8f6agN9EllroL9jfbWBPoksNtAnkbVV2N+xvtpA8QauNdAnkcUG+iSy2ECfRBYb6JPIYgN9EllroL9jfbWBPomsTSL+jvXVBvoksthA8QauNdAnkcUG+iSyuAr7JLLYQJ9EFhvok8hSA7u/Y321gT6JLDbQJ5HFBvoksthA8QauNdAnkaVJpPs71lcb6JPIYgN9EllsoE8iaw30d6wvrsL+jvXVBvoksthAn0QWGyjewLUG+iSy2ECfRBYb6JPIYgN9EllsoE8ia5OIv2N9tYE+iSw20CeRxQb6JLLYQPEGLq3C/o711Qb6JLLYQJ9EFhvok8hiA30SWWugv2N9tYE+iSw20CeRxQb6JLI2ifg71lcb6JPIYgN9EllsoE8iiw30SWRxFfZJZK2B/o711Qb6JLLYQJ9EFhvok8hiA8UbuNZAn0QWG+iTyGIDfRJZm0T8HeurDfRJZK2B/o711Qb6JLLYQJ9E1lZhf8f6agPFG7jWQJ9EFhvok8hiA30SWWygTyKLDfRJZK2B/o711Qb6JLI2ifg71lcb6JPIYgPFG7jWQJ9EFhvok8jiKuyTyGIDfRJZbKBPImsN9HesrzbQJ5HFBvoksthAn0QWGyjewLUG+iSyNon4O9ZXG+iTyGIDfRJZbKBPImsN9HesL67C/o711Qb6JLLYQJ9EFhso3sC1BvoksthAn0QWG+iTyGIDfRJZbKBPImuTiL9jfbWBPoksNtAnkcUG+iSy2EDxBi6twv6O9dUG+iSy2ECfRBYb6JPIYgN9EllqYDj8JevLHfRZZLWDPoysdtCnkaVp5NRB8Q4udtDnkdUO+kCy2kGfSFY76CPJ6lrsM8liB/1168sd9JlktYM+k6x20GeS1Q6Kd3Cxgz6TrHbQZ5LVDvpMsjiT+GvXlzvoM8liB/3F68sd9JlktYM+kyyuxf7u9eUOindwsYM+k6x20GeS1Q76TLLaQZ9JVjvoM8liB/0V7Msd9JlkcSbxl7Avd9BnktUOindwsYM+k6x20GeS1bXYZ5LVDvpMstpBn0kWO+gvY1/uoM8kqx30mWS1gz6TrHZQvIOLHfSZZHEm8VeyL3fQZ5LVDvpMstpBn0kWO+ivZV9di/297Msd9JlktYM+k6x2ULyDix30mWS1gz6TrHbQZ5LVDvpMstpBn0kWZxJ/QftyB30mWe2gzySrHfSZZLWD4h1cW4v9Le3LHfSZZLWDPpOsdtBnktUO+kyy2EF/VftyB30mWe2gzySrHfSZZHEm8de1L3fQZ5LVDvpMstpBn0lWO+gzyepa7DPJYgf9pe3LHfSZZLWDPpOsdtBnktUOindwsYM+k6x20GeS1Q76TLI4k/jL25c76DPJYgf99e3LHfSZZLWDPpMsrsX+BvflDop3cLGDPpOsdtBnktUO+kyy2kGfSVY76DPJWgeDv8d9uYM+k6zNJMHf477cQZ9JVjso3sHFDvpMstpBn0lW12KfSVY76DPJagd9JlnsoL/HfbmDPpOsdtBnktUO+kyy2kHxDi520GeSxZnE3+O+3EGfSVY76DPJagd9JlnsoL/HfXUt9ve4L3fQZ5LVDvpMstpB8Q4udtBnktUO+kyy2kGfSVY76DPJagd9JlmcSfw97ssd9JlktYM+k6x20GeS1Q6Kd3BtLfb3uC9fgz6TrHbQZ5LVDvpMstpBn0kWO+jvcV9di/097svXoM8kqx30mWS1g+IdXOygzySrHfSZZHUt9plktYM+k6x20GeSxQ76e9ynHZR43vr0H+t1B4kzyeuRY47lp62/N8XGmFHipYgi4YOYNmaB0o7XIo4PYgojpg2qnsa0gb7TmDb4dBrTBkROY9ogvVlMI6+wnsa0wUzTmEYoaBaTQUFGXqs8jcmgICMvKJ7GZFCQkVf9TmMyKMjIS3OnMRkUZOT1s9OYDAoy8iLXaUwGBRl5Jeo0JoOCjLxcdBqTQUFGXtM5jcmgICMvvJzGZFCQkVdHTmMqpqAezkXkMI6Z0pF+bJvS6bH9eePTo+uPtj7iOV4K0l637h/V3Eo/19xqen1uHkv/aGu5JGxSZbJ1yueN5c2vFF4et19tGmM/Fx3TkccbhxTipc8pTDY+wuWHAUdpbzf+fokoJki/RHRcIorp2y8RHZeI4snFLxEdl4jiqc8vERWXiOaXyPolouMSUfxtg18iOi4Rxd/U+CWi4xJR/C2XXyI6LhHxS8QvkfEl4t+u+iUyuUT821W/RCaXiH+76pfI5BLxb1f9EplcIv7t6iaXSL2cyPhzGR/1udZLn2vPS5dIPPzbVb9EJpeIkW9X8/lnMSmHMLlE/KQb+b7UT/pXTrqNb0BzuZz0csjkpEe5OFKitDcmmA8VKUHkvHEor3WE9qOB4g0cNzCG80IdYypvG/hByfW8be6va/oPRU88bHzRds9e58vGscWlXtv4xuqOvU41XGa8Xq9vDDa+z7ljA/NxGZKzhPHFGnI727tCOdJ1t218NbJLt218y6Cl2zWFSzOy/GPhrh1szPYGT4yNiVrNibk0+zQCLTFlsDH1GjwxRiZTia8nJk9OjMjlUYCc/m98YlK95Evtjeoz1B8NFG/guIHtUkbqHzXQyLj5vAYamSGf10AjM+TzGmhkLHxeA41Mek9rYDQykT2vgUYmp+c10MiE87wGGpxEZj+YCIdclBJHDeMG5tDPz8hyDHLdQPEGrjXQ4CTy2AYanEQe20CDk8htGxilXBpYynUDDU4ij22gwUnkoQ1MBieRxzbQ4CRy2waWy08icg0T6q4lnfPV0q6pOxkcWxR322ecSbdbuHS75bjYbfFu37Lb/dyMWkO47rZPT4/s9mNHrdheu/3mJng68vdqqqpq/HHEPyZfxcnlX/W0XK8vLn8csdZAueMQ8P0vWIbkGuXyF0ifnaFUX8/Qa2/q8cHGJcjlFIVcfmr799rjxrWnjWuXh9b++iLgIG/+ScyHtYee0+Uf0PT8pvoWPtj89DVPf/0Ffo/t7ebfs2ZQ1gLKWkFZm9qs8QgXBIvH6XHedfFd84m6fAsfesnHVfHrr3n/UvH1tfha+qT4IsfrPxoo8brzOexcfNRbfK391f/fQr0uPu1cvOxcfN65+LJz8XXn4h+7SMXLgn/62uKnRepbNeXYeMksYWNY+fjN0y8r1GWxqpPvJeS4uIhOXyRcw1zZeHBcf5XzE2vPG9cOGuwKaLArege722dVPQfeNmtVvYDfOKve9f72WSMoawJllY2Zter9hjsetbdL8e3nzn/AQS2fCyntzUP0H8/Sql4KunFQvQh046Cav9i+aVC98HPboE0v+Xw1aL98Q116rFdBNX/NcdOgepnnxkH1As+NgwolqB0ymgS1Q0aToHbIaBLUDhlNgtoho3HQTiGjTiGjTiGjTiGj9ZfP7RKUQkadQkadQkadQkYdQkbpgJBROiBklA4IGaUDQkbpEEpQCBmlA0JG6YCQUTogZJQOChkFChkFChkFChkFChmta993CUoho0Aho0Aho0Aho2CIjC7vgSw9XwWNhshoHNQQGY2DGiKjcVBDZDQOKpSghshoHNQQGY2DGiKjcVBDZDQOSiGjRCGjRCGjRCGjRCGjdR/tLkEpZJQoZJQoZJQoZJQoZCQUMhIKGQmFjIRCRorVtDcOSiEjxVLaGwelkJFqHe1Ng1LIKFPIKFPIKFPIKFPI6MFa3icGpZBRppBRppBRppBRppCRYhXzjYNSyKhQyKhQyOjBVuonBqWQkWLf9Y2DUshIsen6xkEpZKTYcX3joBQyUmy3vnFQChmp9lrfNCiFjAw5sCdBKWRkyIE9CUohI0sO7HFQChlZcmCPg1LIyJIDexyUQkaWHNjjoBQysuTAHgelkJElB/Y4KIWMLDmwx0EpZGTJgT0OSiEjSw7scVAKGVlyYI+DQshILDmwx0EhZCSWHNjjoBAykkMoQSFkJJYc2OOgEDISSw7scVAKGVlyYI+DUsjIkgN7HJRCRpYc2OOgFDKy5MAeB6WQkSUH9jgohYwoDmyhOLCF4sAWigNbKA5soTiwheLAFooDWygObKE4sIXiwBaKA1soDmyhOLCF4sAWigNbKA5soTiwheLAFooDWygObKE4sIXiwBaKA1soDmyhOLCF4sAWigNbKA5soTiwheLAFooDWygObKE4sIXiwBaKA1soDmyhOLCF4sAWigNbKA5soTiwheLAFooDWygObKE4sIXiwBaKA1soDmyhOLCF4sAWigNbKA5soTiwheLAFooDWygObKE4sIXiwBaKA1soDmyhOLCF4sAWigNbKA5soTiwheLAFooDWygObKE4sIXiwBaKA1soDmyhOLCF4sAWigNbKA5soTiwheLAFooDO1Mc2JniwM4UB3amOLDzIZSgEDLKFAd2pjiwM8WBnSkO7ExxYGeKAztTHNj5wQ7s+hq0lj4OGoocl61LieFt0O/Fy87FZ8XFF4mvxdc0ucRavlxirYarS6xQglZK0EYJ2iFBH+yqfmLQQAkaKUE1E8xNg4qZoP3CRqXHKyaNdshoEtQOGU2C2iGjSVA7ZDQJaoeMxkGTHTKaBLVDRpOgdshoEtQOGU2CCiUohYwShYwShYwShYwShYyEQkZCISOhkJFQyOjBruonBqWQkVDISChkJBQyEgoZZQoZZQoZZQoZZQoZPdhV/cSgFDLKFDLKFDLKFDLKFDIqFDIqFDIqFDIqFDJ6sKv6iUEpZFQoZFQoZFQoZFQoZFQpZFQpZFQpZFQpZPRgV/Vdgw7/VWA1REbjoIbIaBxUMRnV2o/L1i3Ut0G/F6+YdubFKyaYafFNMZXMi1dMGvPiFdPDvHjFRDAvXnYuXvHKPS9e8Wo8L37nFbbtvMK2nVfYvvMK23deYfvOK2zfeYV9sL/3xsXvvML2nVfYvvMK23deYfvGK2w5Nl5hy7HxCluOjVfYcmy8wpZj4xW2HBuvsOXYeIUtx8YrbDk2XmHLsfMKG3ZeYcPOK2zYeYXV7B6dF7/zCqvZPTovfucVVrMjdF78ziusZpfntHjNfs558TuvsJo9mvPid15hNfsu58XvvMJq9lLOi995hdXsj5wXv/MKq9nzOC9+5xVWs49xXvzOK6xmb+K8+J1XWM1+w3nxO6+wmj2E8+J3XmE1+wLnxe+8wmr2+s2L33mF1ezfmxe/8wqr2ZM3L37nFVazz25e/M4rrGbv3Lz4nVdYzX64efE7r7CWPG6jf8FZLHncxkE3/Te534t/6Modj3w+cDxqGRffejtv3EOs43PUjvJj2yavbyKLpf2I2dTGHGz8vfS+bemPtafdtvT11b2mS+k9j0vvUs6rRs9Sxpf6qbhyOXJ6PXJI5Ufty4t7O+r5b2gpTm5IOV3OUS6vn72Xe9N1EUHCuYrT1q8f1Bx/1J42rl02rj0/tPYS3yxLeVx76Dn189Y958nHI8bWz5vH2H9+3/j3rAWUtYKyNlDWrjZrPEIrl7U19atXyZd1d9gdi6+9XYpvP3f+g/vq8BW4Zd0dtkvQSAmaKEGFElQv+Xw16NAGV6pe7LlxUL3Mc+OgeoHnxkE1084tgzY7ZDQJaoeMJkHtkNEkqB0ymgQVSlAKGTUKGTUKGTUKGTUKGXUKGXUKGXUKGXUKGa178nYJSiGjTiGjTiGjTiGjDiGjekDIqB4QMqoHhIzqASGjegglKISM6gEho3pAyKgeEDKqB4WMAoWMAoWMAoWMAoWM1r2UuwSlkFGgkFGgkFGgkFGgkFGkkFGkkFGkkFGkkNG6T3SXoBQyihQyihQyihQyihQyShQyShQyShQyShQyWvfA7hKUQkaJQkaJQkaJQkaJQkZCISOhkJFQyEgoZLTu790lKIWMhEJGQiEjoZCRUMgoU8goU8goU8goU8ho3bu8S1AKGWUKGWUKGWUKGWUKGRUKGRUKGRUKGRUKGT1YW/3EoBQyUiy4vnFQChkpVlvfOCiFjAw5sCdBKWRkyIE9CUohI0MO7ElQChlRHNiV4sCuFAd2pTiwK8WBXSkO7EpxYFeKA7tSHNiV4sCuFAd2pTiwK8WBXSkO7EpxYFeKA7tSHNiV4sCuFAd2pTiwK8WBXSkO7GrJgS2Xdxv2fB3UEBmNgjZLDuxxUENkNA5qiIzGQQ2R0TioUIIaIqNxUENkNA5qiIzGQSFk1Cw5sIdBLTmwx0EpZGTJgT0OSiEjSw7scVAKGVlyYI+DUsjIkgN7HJRCRpYc2OOgFDKy5MAeB6WQkSUH9jgohYwsObDHQSlkZMmBPQ5KISNLDuxxUAoZWXJgj4NSyMiSA3sclEJGlhzY46AUMrLkwB4HpZCRJQf2OCiFjCw5sMdBKWRkyYE9DkohI0sO7HFQChlZcmCPg1LIyJIDexyUQkaWHNjjoBQysuTAHgelkJElB/Y4KIWMLDmwx0EpZGTJgT0OSiEjSw7scVAKGVlyYI+DUsjIkgN7HJRCRpYc2OOgFDKy5MAeB6WQkSUH9jgohYwsObDHQSlkZMmBPQ5KISNLDuxxUAoZWXJgj4NSyMiSA3sclEJGlhzY46AUMrLkwB4HpZCRJQf2OCiFjCw5sMdBKWRkyYE9DkohI0sO7HFQChlZcmCPg1LIiOLAbhQHdqc4sDvFgd0pDuxOcWD3QyhBIWTUKQ7sTnFgd4oDu1Mc2J3iwO4UB3anOLA7xYHdKQ7sTnFgd4oDu1Mc2J3iwO4UB3anOLA7xYHdKQ7sTnFgd4oDu1Mc2J3iwO4UB3anOLA7xYHdKQ7sTnFgd4oDu1Mc2J3iwO4UB3anOLA7xYHdKQ7sTnFgd4oDu1Mc2J3iwO4UB3anOLA7xYHdKQ7sTnFgd4oDu1Mc2J3iwO4UB3anOLA7xYHdKQ7sTnFgd4oDu1Mc2J3iwO4UB3anOLA7xYHdKQ7sTnFgd4oDu1Mc2J3iwO4UB3anOLA7xYHdKQ7sTnFgd4oDu1Mc2J3iwO4UB3Z/sAO7vwY9Qdk4aChy5Ne2xPA26Pfi687FN8XFF3lzQdY0ucRavlxirYarS6xDgj7YVf3EoIESNFKCJkpQoQTNZoL2y0paerwimKaZYG4aVDPt3DSoHTKaBLVDRuOg3Q4ZTYLaIaNJUDtkNAlqh4wmQYUSlEJGnUJGnUJGnUJGnUFG8TgYZHQKyiCjU1AGGZ2CMsjoFFQoQRlkdArKIKNTUAYZnYIyyOgUlEJGgUJGgUJGgUJGgUJGD3ZVPzEohYwChYwChYwChYwChYwihYwihYwihYwihYwe7Kp+YlAKGUUKGUUKGUUKGUUKGSUKGSUKGSUKGSUKGT3YVf3EoBQyShQyShQyShQyShQyEgoZCYWMhEJGQiGjB7uqnxiUQkZCISOhkJFQyEgoZJQpZJQpZJQpZJQpZPRgV/UTg1LIKFPIKFPIKFPIKBsio4EbLB7FEBmNgyomo1r7cd66tlDfBv1evGLamRevmGDmxcvOxSsmjXnxiulhXrxiIpgXr3iVnxeveOWeFl8Vr8bz4ndeYevOK2zdeYV9sG/4xsXvvMJq9gLPi995hdXsBZ4Xv/MKq9nfOy9+5xVWs2d3XvzOK6xmH+68+J1XWM3e2nnxO6+wmv2y8+J3XmE1e2Dnxe+8wmr2tc6L33mF1exVnRe/8wqr2X86L37nFVazp3Re/MYrbNDsE50Xv/EKGzR7P+fFb7zChmPjFTZodm7Oi994hQ2a3Zjz4jdeYYNmh+W0eM1eynnxO6+wmv2R8+J3XmE1ex7nxe+8wmr2Mc6L33mF1exNnBe/8wqr2W84L37nFVazh3Be/M4rrGZf4Lz4nVdYzV6/efE7r7Ca/Xvz4ndeYTV78ubF77zCavbZzYvfeYXV7J2bF7/zCqvZDzcvfucVVrPHbV78zivsum+tRrn8DdInxUs8/4vlIKVdNq7HBxu//Eq7/dj65ae37W3x15uP/+1sWPet7RI0UoImSlChBM2UoIUStFKCNkrQDgmaKWSUKWSUKWSUKWS07lvbJSiFjDKFjDKFjDKFjDKFjAqFjAqFjAqFjAqFjNadb7sEpZBRoZBRoZBRoZBRoZBRpZBRpZBRpZBRpZDRuqtvl6AUMqoUMqoUMqoUMqoUMmoUMmoUMmoUMmoUMlp3LO4SlEJGjUJGjUJGjUJGjUJGnUJGnUJGnUJGnUJG627MXYJSyKhTyKhTyKhTyKhDyCgeEDKKB4SM4gEho3hAyCgeQgkKIaN4QMgoHhAyigeEjOJBIaNAIaNAIaNAIaNAIaN1F+0uQSlkFChkFChkFChkFChkFClkFClkFClkFClktO4Q3iUohYwihYwihYwihYwihYwShYwShYwShYwShYzW3c+7BKWQ0bpTutZ0CdrzOGgJEs4HDvlVDhxz/FHOYy3ROV1OUi7hdeP+S7W3jWvv+9Yuj30JQ3n1W5eSx7WHnlM/b93zm+o//KyeqLafNz+B388f7e9ZAyhrBGVNoKwCyppBWQsoa7WStZy2ORd9elR6nbSpTRqP0MqFhFMP18V3xcV/DeNbvmB8q+E9xme9DHTjoHoB6MZB9dLPjYPqRZ8bBxVKUL3Qc+Ogeonny98SHRcK6PHqW6KsF3duHFQz7dw0qB0yGgctdshoEtQOGU2C2iGjSVA7ZDQJKpSgdshoEpRCRoVCRoVCRoVCRpVCRpVCRpVCRpVCRusy6F2CUsioUsioUsioUsioUsioUcioUcioUcioUchoXQa9S1AKGTUKGTUKGTUKGTUKGXUKGXUKGXUKGXUKGa3LoHcJSiGjTiGjTiGjTiGjDiGjdEDIKB0QMkoHhIzSASGjdAglKISM0gEho3RAyCgdEDJKB4WMAoWMAoWMAoWMAoWM1mXQuwSlkFGgkFGgkFGgkFGgkFGkkFGkkFGkkFGkkNG6DHqXoBQyihQyihQyihQyihQyShQyShQyShQyShQyWpdB7xKUQkaJQkaJQkaJQkaJQkaKbdc3DkohI8We6xsHpZCRYsP1jYNSyEix2/rGQSlkpNprfdOgFDIy5MCeBKWQkSEH9iQohYwMObAnQSlkRHFgJ4oDO1Ec2IniwE4UB3aiOLATxYGdKA7sRHFgJ4oDO1Ec2IniwE4UB3aiOLATxYGdKA7sRHFgJ4oDO1Ec2IniwE4UB3aiOLATxYGdKA7sRHFgJ4oDO1Ec2IniwE6WHNhyedFqz9dBDZHROKghMhoHNURG46CGyGgc1BAZDYNacmCPgxoio3FQQ2Q0DmqIjMZBhRKUQkaWHNjjoBQysuTAHgeFkJFYcmCPg0LISCw5sMdBIWQkh1CCQshILDmwx0EhZCSWHNjjoBQysuTAHgelkJElB/Y4KIWMLDmwx0EpZGTJgT0OSiEjSw7scVAKGVlyYI+DUsjIkgN7HJRCRpYc2OOgFDKy5MAeB6WQkSUH9jgohYwsObDHQSlkZMmBPQ5KISNLDuxxUAoZWXJgj4NSyMiSA3sclEJGlhzY46AUMrLkwB4HpZCRJQf2OCiFjCw5sMdBKWRkyYE9DkohI0sO7HFQChlZcmCPg1LIyJIDexyUQkaWHNjjoBQysuTAHgelkJElB/Y4KIWMLDmwx0EpZGTJgT0OSiEjSw7scVAKGVlyYI+DUsjIkgN7HJRCRpYc2OOgFDKy5MAeB6WQkSUH9jgohYwsObDHQSlkZMmBPQ5KISNLDuxxUAoZURzYQnFgC8WBLRQHtlAc2EJxYAvFgS0UB7ZQHNhCcWALxYEtFAe2UBzYQnFgC8WBLRQHdqY4sDPFgZ0pDuxMcWDnQyhBIWSUKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFg5wc7sPtr0F7KOGgocuTXtsTwNuj34vPOxRfFxRd5c0HWNLnEWr5cYq2Gq0usUoI2StAOCfpgV/UTgwZK0EgJmihBhRJUM+18LWi/sFHp8YpJqx0ymgS1Q0aToHbIaBLUDhmNgzY7ZDQJaoeMJkHtkNEkqB0ymgQVSlAKGTUKGTUKGTUKGTUKGXUKGXUKGXUKGXUKGT3YVf3EoBQy6hQy6hQy6hQy6hAyKgeEjMoBIaNyQMioHBAyKodQgkLIqBwQMioHhIzKASGjclDIKFDIKFDIKFDIKFDI6MGu6icGpZBRoJBRoJBRoJBRoJBRpJBRpJBRpJBRpJDRg13VTwxKIaNIIaNIIaNIIaNIIaNEIaNEIaNEIaNEIaMHu6qfGJRCRolCRolCRolCRolCRkIhI6GQkVDISChk9GBX9RODUshIKGQkFDISChkJhYwyhYwyhYwyhYwyhYwe7Kp+YlAKGWUKGWVDZDSyppZsiIzGQQ2R0TBoUUxGtfbjvHVtob4N+r14xbQzL14xwcyLV0wl8+Jl5+IV08O8eMVEMC9e8So/L17xyj0vXvFqPC1es0t5XvzOK6xm5/G8+J1XWM1u4nnxO6+wmh3C8+J3XmE1u37nxe+8wmp28s6L33mF1ezOnRe/8wqr2XE7L37nFVazi3Ze/M4rrGZn7Lz4nVdYzW7XefE7r7CaHazz4ndeYTW7UufF77zCanaazovfeYXV7B6dF7/xCls1O0LnxW+8wlbNLs958RuvsPXYeIWtmj2a8+I3XmGrZt/lvPiNV9iq2Us5LV6za3Je/M4rrGYn5Lz4nVdYze7GefE7r7CaHYvz4ndeYTW7EOfF77zCanYWzovfeYXV7BacF7/zCqvZATgvfucVVrOrb178ziusZqfevPidV1jN7rt58TuvsJoddfPid15hNbvk5sXvvMJqdr7Ni4f8m9xqyeM2Drrpv8n9VvyD3Ww5nTsZcgnj4kuQcK7itPVl45jjj9rDxrXHjWt/7LJd4ptLOE8u+J5Tv3w88pvqP/xkx9j6efMYe2zXnw8BZc2grAWUtYKyNlDWzsn6YFPaHbOW0zbnomPI10mD2qTxCK2cT9ORerguPiouvvZ2Kb79fI19cJpavkB/q+E99Ge9DHTjoEIJqpd+bhxUL/rcOKhe7rlxUL3Qc+Ogeonnq0GH5r5a9OLOjYNqpp2bBrVDRpOgdshoElQoQe2Q0SSoHTKaBLVDRpOgdshoEpRCRpVCRpVCRpVCRpVCRg/W7D0xKIWMKoWMKoWMKoWMKoWMGoWMGoWMGoWMGoWMHqxHfGJQChk1Chk1Chk1Chk1Chl1Chl1Chl1Chl1Chk9WGv5xKAUMuoUMuoUMuoUMuoQMmoHhIzaASGjdkDIqB0QMmqHUIJCyKgdEDJqB4SM2gEho3ZQyChQyChQyChQyChQyOjBGtknBqWQUaCQUaCQUaCQUaCQUaSQUaSQUaSQUaSQ0YP1v08MSiGjSCGjSCGjSCGjSCGjRCGjRCGjRCGjRCGjB2ubnxiUQkaJQkaJQkaJQkaJQkZCISOhkJFQyEix7frGQYUSlEJGiiXXNw5KISPFeusbB6WQkWKx9Y2DUsjIkAN7EpRCRoYc2JOgFDIy5MCeBKWQkSEH9iQohYwoDuxGcWA3igO7URzYjeLAbhQHdqM4sBvFgd0oDuxGcWA3igO7URzYjeLAbhQHdqM4sBvFgd0oDuxGcWA3igO7URzYjeLAbhQHdqM4sBvFgd0oDuxGcWA3igO7WXJgy+VFqz1fBzVERuOghshoGNSSA3sc1BAZjYMaIqNxUENkNA4qlKCGyGgc1BAZjYNSyMiSA3scFEJG3ZIDexwUQkbdkgN7HBRCRv0QSlAIGXVLDuxxUAgZdUsO7HFQChlZcmCPg1LIyJIDexyUQkaWHNjjoBQysuTAHgelkJElB/Y4KIWMLDmwx0EpZGTJgT0OSiEjSw7scVAKGVlyYI+DUsjIkgN7HJRCRpYc2OOgFDKy5MAeB6WQkSUH9jgohYwsObDHQSlkZMmBPQ5KISNLDuxxUAoZWXJgj4NSyMiSA3sclEJGlhzY46AUMrLkwB4HpZCRJQf2OCiFjCw5sMdBKWRkyYE9DkohI0sO7HFQChlZcmCPg1LIyJIDexyUQkaWHNjjoBQysuTAHgelkJElB/Y4KIWMLDmwx0EpZGTJgT0OSiEjSw7scVAKGVlyYI+DUsjIkgN7HJRCRpYc2OOgFDKy5MAeB6WQkSUH9jgohYwsObDHQSlkZMmBPQ5KISOKA7tTHNid4sDuFAd2pziwO8WB3SkO7E5xYHeKA7tTHNid4sDuEAd2OiAO7FNQBhmdgjLI6BSUQUanoEIJyiCjU1AGGZ2CMsjoFJRBRqegFDKCOLBPQSlkBHFgn4JSyAjiwD4FpZARxIF9CkohI4gD+xSUQkYQB/YpKIWMIA7sU1AKGUEc2KegFDKCOLBPQSlkBHFgn4JSyAjiwD4FpZARxIF9CkohI4gD+xSUQkYQB/YpKIWMIA7sU1AKGUEc2KegFDKCOLBPQSlkBHFgn4JSyAjiwD4FpZARxIF9CkohI4gD+xSUQkYQB/YpKIWMIA7sU1AKGUEc2KegFDKCOLBPQSlkBHFgn4JSyAjiwD4FpZARxIF9CkohI4gD+xT0sWTUX4P2UsZBQ5Ejv7YlhrdBvxffdi6+Ky6+yJsLsqbJJdby5RJrNby/xB7sqn5i0EAJGilBEyWoUIJmStBCCaqZYG4aVDPtfC1ov7BR6fGKSasdMhoHbXbIaBLUDhlNgtoho0lQO2Q0CSqUoHbIaBLUDhlNgtoho0lQChk1Chl1Chl1Chl1Chl1Chk92FX9xKAUMuoUMuoUMuoUMuoQMgoHhIzCASGjcEDIKBwQMgqHUIJCyCgcEDIKB4SMwgEho3BQyChQyChQyChQyChQyOjBruonBqWQUaCQUaCQUaCQUaCQUaSQUaSQUaSQUaSQ0YNd1U8MSiGjSCGjSCGjSCGjSCGjRCGjRCGjRCGjRCGjB7uqnxiUQkaJQkaJQkaJQkaJQkZCISOhkJFQyEgoZPRgV/UTg1LISChkJBQyEgoZCYWMMoWMMoWMMoWMMoWMHuyqfmJQChllChllChllChllChkVQ2Q0sqaGYoiMxkENkdE4qGIyqrUf561rC/Vt0O/Fy87FKyaYefGKqWRevGLSmBevmB7mxSsmgmnxmn3O8+IVr9zz4hWvxvPid15hNfuR58XvvMJq9hjPi995hdXsG54Xv/MKq9kLPC9+5xVWs793XvzOK6xmz+68+J1XWM0+3HnxO6+wmr218+J3XmE1+2Xnxe+8wmr2wM6L33mF1exrnRe/8wqr2as6L37nFVaz/3Re/MYrbNTsKZ0Xv/EKGzX7ROfFb7zCxmPjFTZqdnnOi994hY2anZvz4jdeYaNmN+a0eM2+y3nxO6+wmr2U8+J3XmE1+yPnxe+8wmr2PM6L33mF1exjnBe/8wqr2Zs4L37nFVaz33Be/M4rrGYP4bz4nVdYzb7AefE7r7CavX7z4ndeYTX79+bF77zCavbkzYvfeYXV7LObF7/zCqvZOzcvfucVVrMfbl78ziusJY/b6F9wRkset3HQTf9N7vfiH7ty53TuZMgljIsvQcK5itPWl41jjj9ql41rzxvX/thlu8Q3l3CeXPA9p375eOQ31X/4yT5Nmv28+Wlwi+3681FBWRsoa+dkfbAg7blZAyhrBGVNVrKW0zbnok+PoK+Titqk8QitnE/TkXq4Lj4rLr72dim+/XyNfXCaWr5Af6vhPfRnvQx046B6AejGQfXSz42D6kWf2wYternnxkH1Qs+Ng+olnq8GHZr7YtGLOzcOKpSgdshoEtQOGU2C2iGjSVA7ZDQJaoeMxkGrHTKaBLVDRpOgFDKqFDJ6sOLuiUEpZFQpZFQpZFQpZFQpZNQoZNQoZNQoZNQoZPRgNeETg1LIqFHIqFHIqFHIqFHIqFPIqFPIqFPIqFPI6MFKyScGpZBRp5BRp5BRp5BRh5BROiBklA4IGaUDQkbpgJBROoQSFEJG6YCQUTogZJQOCBmlg0JGgUJGgUJGgUJGgUJGD1a4PjEohYwChYwChYwChYwChYwihYwihYwihYwihYwerN59YlAKGUUKGUUKGUUKGUUKGSUKGSUKGSUKGSUKGT1YmfzEoBQyShQyShQyShQyShQyEgoZCYWMhEJGQiGjBzupnxiUQkaKbdc3DkohI8We6xsHpZCRYsP1jYNSyEix2/rGQSlkpNprfdOgFDIy5MCeBKWQkSEH9iQohYwMObAnQSlkRHFgJ4oDO1Ec2IniwE4UB3aiOLATxYGdKA7sRHFgJ4oDO1Ec2IniwE4UB3aiOLATxYGdKA7sRHFgJ4oDO1Ec2IniwE4UB3aiOLATxYGdKA7sRHFgJ4oDO1Ec2IniwE6WHNhyedFqz9dBDZHROKghMhoHNURG46BCCWqIjMZBDZHROKghMhoHNURG46CGyGgUVCw5sMdBIWQklhzY46AQMpJDKEEhZCSWHNjjoBAyEksO7HFQChlZcmCPg1LIyJIDexyUQkaWHNjjoBQysuTAHgelkJElB/Y4KIWMLDmwx0EpZGTJgT0OSiEjSw7scVAKGVlyYI+DUsjIkgN7HJRCRpYc2OOgFDKy5MAeB6WQkSUH9jgohYwsObDHQSlkZMmBPQ5KISNLDuxxUAoZWXJgj4NSyMiSA3sclEJGlhzY46AUMrLkwB4HpZCRJQf2OCiFjCw5sMdBKWRkyYE9DkohI0sO7HFQChlZcmCPg1LIyJIDexyUQkaWHNjjoBQysuTAHgelkJElB/Y4KIWMLDmwx0EpZGTJgT0OSiEjSw7scVAKGVlyYI+DUsjIkgN7HJRCRpYc2OOgFDKy5MAeB6WQkSUH9jgohYwsObDHQSlkZMmBPQ5KISNLDuxxUAoZURzYQnFgC8WBLRQHtlAc2EJxYAvFgS0UB7ZQHNhCcWBnigM7UxzYmeLAzhQHdj6EEhRCRpniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdKQ7sTHFgZ4oDO1Mc2JniwM4UB3amOLAzxYGdH+zA7q9BeynjoKHIkV/bEsPboN+LrzsX3xQXX+TNBVnT5BJr+XKJtRquLrEOCfpgV/UTgwZK0EgJmihBhRI0U4JqJpibBtVMO18L2i9sVHq8YtJqh4wmQe2Q0Thos0NGk6B2yGgS1A4ZTYLaIaNJUKEEtUNGk6B2yGgSlEJGjUJGjUJGnUJGnUJGnUJGnUJGD3ZVPzEohYw6hYw6hYw6hYw6hIzKASGjckDIqBwQMioHhIzKIZSgEDIqB4SMygEho3JAyKgcFDIKFDIKFDIKFDIKFDJ6sKv6iUEpZBQoZBQoZBQoZBQoZBQpZBQpZBQpZBQpZPRgV/UTg1LIKFLIKFLIKFLIKFLIKFHIKFHIKFHIKFHI6MGu6icGpZBRopBRopBRopBRopCRUMhIKGQkFDISChk92FX9xKAUMhIKGQmFjIRCRkIho0who0who0who0whowe7qp8YlEJGmUJGmUJGmUJGWTEZ1dqP89a1hfo26Lfii2LamRevmGDmxSumknnxikljXrzsXLxiIpgXr3iVnxeveOWeF694NZ4Xv/MKq9mPPC9+5xVWs8d4XvzOK6xm3/C8+J1XWM1e4HnxO6+wmv298+J3XmE1e3bnxe+8wmr24c6L33mF1eytnRe/8wqr2S87L37nFVazB3Ze/M4rrGZf67z4nVdYzV7VefE7r7Ca/afz4ndeYTV7SufF77zCavaJzovfeIWtmr2f8+I3XmGrZj/nvPiNV9h6bLzCVs1uzHnxG6+wVbPDcl78xits1eyanBav2R85L37nFVaz53Fe/M4rrGYf47z4nVdYzd7EefE7r7Ca/Ybz4ndeYTV7COfF77zCavYFzovfeYXV7PWbF7/zCqvZvzcvfucVVrMnb178ziusZp/dvPidV1jN3rl58TuvsJr9cPPid15h1z1uPZ7/hngcYVx8Oz33/bFxO12xl43jh9U3iZetpcpk65TPG0s83mz7wabxNIOda/65jI97WC4t7Hmy8XE5cjhKe7vx93ZXb/cj29283Y9s9yp3xSPkS7tlcicsIZ/PTQktv721fXSPfS29vXT4x8ZB+vfal2V5X6s9tsuBY+/j2mNs/XJGY4/t6i6+LMB7avFx5+LTzsXLzsXnTYs//eFf/vanP//5T//xv//813/9w9//9Ne//NfLzsfL//sYEGpr56XiLR/GD/5uudzPc3i995fvHot2z4P3Ox7847vzrQ4e7nnweM+Df3j3aely8BrGB0+Xg6da3276cnC558HzPQ9e7nnwes+Dt3sevN/x4B8r9W518HDPg8d7Hvyen9B8z09ovucnNN/zE5rv+QnN9/yE5nt+Qss9P6Fl9YTKIecB9yjvD77alizhvIaWOt60HO3Cea91hCYvhdRDSyFBSyFRSyFJSyGipZCspZCipZCqpZCmpRAtd9am5c7atNxZm5Y7a9NyZ21a7qxNy521abmztkfeR+RMiiWH94X0R35qyuUrwTcPQ86FLH9qQr0U0iZg3nu6wPMbeo6nBzovpYieUrKeUsrjSpEjhUspIlelVD2lND2l9EeWUvullB7flxKOQ1EtQVEtUVEt6Tm1nC6O61pEUS1ZUS2PvOnGcD6sxBSua6mKammKannkfTe++V3Lm59lnGsJh6JagqJaoqJaHnnfTa9fE6c3P2e81CKKasmKaimKaqlPqiXm61qaolq6nlriI++7Ipc5TXK5riUoqiUqqiUpquWR911pl7FRulzXkhXVUhTVUhXV8sj7bo6XmSTL9dwYu55a0qGolqColvikWvL1DJuSolpEUS2PvO+WcplJSr2eSVJRVEtVVEtTVMsj77v1lXdraFe1yKGolqColqiolkfed2u+8G4t1zOsiKJasqJaiqJa6pNqqdfztDRFtXQ9teS73Xe/HT3c9ejxrkdPdz366v2ryJkFS+5XR893PXq569HrPY/+0B+Hjn4nEx7669B63rS0cl1JUVNJVVNJU1NJ11LJQ38iOq4kqKlEy8/dwkN/JTquRNRUktVUUtRUUtVU0tRU0rVU0g81lQQ1lai5x3Y199iu5h67/NvZ0T88DMs/h33z3LTkq6P3Ox49Lv9mdXz0cNejr37mJL1+91yujp7uenS569HzXY9e7nr0etejt7sevd/u6DW+P/ry7xzHRw93PfryZzVefivwRld2Pnq669HlrkfPdz16uevR612P3u569H7Poy//Nm589HDXo9/1sxrv+lmN9/usnv4QXjb8+MIJRzjvGI6U3yDoB3/J60PMGuLbTb8tIvc9fFg/fDpDWZX+/vDxBoc/o3wt6f3h0/rh2/mr99rr+8PLfQ+flw/f3vhAr05tucHhz7a7lsv7w9f1w1/Ee+26Oe2Gh+/vrvvTH+LgsxuOiy45HO3/75I+PVK/7FPKuLDTUevr1kd/81f0b8Wll40/vjxyv3wc3jwqCql821G+7fixnzmdr8R2vGlcyp+fzPEu7eu79C/v8onZfrhL+PouHy9xl9+uNWlXu6Sv7yJf3yV/fZfy9V3q13dpX9+lf3mXT35iNdwlfH2Xj89+k8vNqf+0y/UHOpXzxzm9sTKnH4dP9z283Pfw+b6HL/c9fL3v4dt9D9/vevhPfkjza4dv6erw4b6Hj/c9/Ief2n7hrZ7q+/vIxz+QGe+Sv75L+fou9eu7tK/v0r+8y8d6weEuH1vsxrvEr+/y4dmPF8aLbx5A/LhgPv6ZzniX/PVdytd3qV/fpX19l/7lXT7+cUas59+gxX71qfz4VxTjXeLXd0lf30W+vkv++i7li7uc/pRftvz4SusXo3R4+6KKWNrnl9pkn/oL+7Rf2Kd/fZ+PL7fJPuEX9om/sE/6hX3kF/b5heug/cJ10H7hOmi/cB20X7gO+i9cB/0XroP+C9fBx0/r++UfxZz2kat95Bf2yb+wT/mFfeov7NN+YZ/+1X1OfyrfvgL6+HumdvkhbOg/fV/w/XuW+m3XjxfWfpHexf7mn7x9e2vMP05//D9/+Nuf/vAvf/7jywscXv7X//7Lv57f53D649//73+e/5fzGx/+829//dc//tt//+2PL+9+eH3tw8tlHKX+forzz9++MvpfMZ7+lOo/vwhZXv54+po7Snr548vlG0v/Pdbw+sX1yzanL1dPO/zj/H3Yt//q+D3ly7dQ34/Ufk/p8v3St/+qyO+lnw99+k6qy2WxeSkl9x//88u2p2/tfg9Hee35t2Mev8f82stv250KPB3mH6c+/T8=",
3462
3640
  "brillig_names": [
3463
3641
  "get_auth_witness",
3464
3642
  "decompose_hint",
3465
3643
  "lte_hint",
3466
- "store_in_execution_cache_oracle_wrapper",
3644
+ "enqueue_public_function_call_internal",
3645
+ "call_private_function_internal",
3646
+ "debug_log_oracle_wrapper",
3647
+ "notify_set_min_revertible_side_effect_counter_oracle_wrapper",
3648
+ "notify_created_nullifier_oracle_wrapper",
3467
3649
  "directive_to_radix",
3468
3650
  "directive_invert",
3469
3651
  "directive_integer_quotient"
3470
3652
  ],
3471
- "verification_key": "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"
3653
+ "verification_key": "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"
3472
3654
  },
3473
3655
  {
3474
- "name": "process_log",
3656
+ "name": "sync_notes",
3475
3657
  "is_unconstrained": true,
3476
3658
  "custom_attributes": [],
3477
3659
  "abi": {
3478
3660
  "error_types": {
3479
- "16541607464495309456": {
3480
- "error_kind": "fmtstring",
3481
- "item_types": [],
3482
- "length": 16
3483
- },
3484
3661
  "17843811134343075018": {
3485
3662
  "error_kind": "string",
3486
3663
  "string": "Stack too deep"
3487
3664
  }
3488
3665
  },
3489
- "parameters": [
3490
- {
3491
- "name": "log_plaintext",
3492
- "type": {
3493
- "fields": [
3494
- {
3495
- "name": "storage",
3496
- "type": {
3497
- "kind": "array",
3498
- "length": 18,
3499
- "type": {
3500
- "kind": "field"
3501
- }
3502
- }
3503
- },
3504
- {
3505
- "name": "len",
3506
- "type": {
3507
- "kind": "integer",
3508
- "sign": "unsigned",
3509
- "width": 32
3510
- }
3511
- }
3512
- ],
3513
- "kind": "struct",
3514
- "path": "std::collections::bounded_vec::BoundedVec"
3515
- },
3516
- "visibility": "private"
3517
- },
3518
- {
3519
- "name": "tx_hash",
3520
- "type": {
3521
- "kind": "field"
3522
- },
3523
- "visibility": "private"
3524
- },
3525
- {
3526
- "name": "unique_note_hashes_in_tx",
3527
- "type": {
3528
- "fields": [
3529
- {
3530
- "name": "storage",
3531
- "type": {
3532
- "kind": "array",
3533
- "length": 64,
3534
- "type": {
3535
- "kind": "field"
3536
- }
3537
- }
3538
- },
3539
- {
3540
- "name": "len",
3541
- "type": {
3542
- "kind": "integer",
3543
- "sign": "unsigned",
3544
- "width": 32
3545
- }
3546
- }
3547
- ],
3548
- "kind": "struct",
3549
- "path": "std::collections::bounded_vec::BoundedVec"
3550
- },
3551
- "visibility": "private"
3552
- },
3553
- {
3554
- "name": "first_nullifier_in_tx",
3555
- "type": {
3556
- "kind": "field"
3557
- },
3558
- "visibility": "private"
3559
- },
3560
- {
3561
- "name": "recipient",
3562
- "type": {
3563
- "fields": [
3564
- {
3565
- "name": "inner",
3566
- "type": {
3567
- "kind": "field"
3568
- }
3569
- }
3570
- ],
3571
- "kind": "struct",
3572
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
3573
- },
3574
- "visibility": "private"
3575
- }
3576
- ],
3666
+ "parameters": [],
3577
3667
  "return_type": null
3578
3668
  },
3579
- "bytecode": "H4sIAAAAAAAA/92c927bMBDG5URKIieOndG9927leHeme+/W/dsdfosWAtqHSPu09Zfw7DPDAilCovkqQJCto+9+PFHUiTy6EG1s3cFeMJ9jc5w2R5xfjMY3Kbtqjtn2tqpHXVkoxgIB4wQB4yQBY0zAmBAwThEwThMwzhAwpgSMRQLGWQLGOQLGEgHjPAFjmYCxQsC4EIAxBOciCeeSR04d24fiXY52fhvdRcC4m4BxDwHjXgLGfQSM+wkYDxAwHiRgPETAeJiA8QgB41ECxmMEjMcJGE8QMJ4kYDxFwHiagPEMAeNZAsZzBIznCRgvEDBeJGC8RMB4mYDxCgFjRsBYJWBcIWCsETDWCRgbBIxNAsYWAWObgLFDwHiVgPEaAeN1AsYbBIw3CRhvETCuEjDeJmC8Q8B4l4DxHgHjfQLGBwSMDwkYHxEwPiZgfELA+JSA8RkB43MCxhcEjC8JGF8RML4mYHxDwPg2AGMIzncknO9JOLuBOKMPFvTEYMfCLSyMwsIjLOzBwhksTMHCDyyswMIFLAxA4j0S25E4XhnsSHxGUjESdpEEiyRTJHEiSRJJiEjyQxIdktSQBIYkKyQxIUno6GA/NtiRRIIkDSRBIMkAk/iYJMckNCZ5MYmKSUpMAmKSDZNYmCRCrTDJgUkEDNJjEByDzBjExSApBiExyIdBNAxSYRAIgywYxJBBArzk4iUSL2l4CcJLBoJ4BMkIQhHkIYhCkIIgAA9ZPMTwkEAnjE4OnQhuUtwAaFzd6M+bNJIf5pia44SSe1xEV00tuz71t7POx9RRP4/8tdTonAmiv9ES/WkY/kwW2t7LR/p1XcTupDl285Evu/k4k5RZU2XWrDJSnzDXu14P66/qSsnyUaTqIraLYWzXCpY9fV20TOwXo5Btc2NRsrYnPLZ/pO8oSZl8xFOwZHG+uR4iS5RMri/snFfl7LY1Y8mEBZu035LyjWwfjEyuaax0+muvjXbY9lrP/l17rVf/x/YaW7I431yPv22vum3Z7TWJRpv0pSKbUrKflmxayX7lI9sNxdE0n8P2yRvPYH3v+X6GLTn4tS1s0/nIH9IGJ9W5RPlv3T+6vCVLlSzOx+0UzfdY2dG6hCOxytfN97I5TqnfyO8rDvtTlv0xbsc52y+po3zqKI+2dsl8njU72tA3+U20+d7Fvmq+Z9vamh1XP+lPf6vm6gs98n8R/bNB9NeH+ufC8A/jqlIY/w/1z4fh74v+chj9TdFfCaO/IfoXguhfGcYJ+s927DhhSZ33GNduOU4Q+0WLNVScsGTx2P7RcQJkyw7WikNm9wHLDjvLDjsuXfMedS141FXcoXUsedRV8agr9ajL53Wc86jLp7/KHnXNeNTls9379Jdcx7DjVVnmitOiAPqLYfQP+37po/W7ma6T2E+s8l8tP88F8fNoHEr6M+0LVyzl0/ZWn9div+TgEe6iQ7adP0D70mj3O+1GZxDSV5srnaxg6RdW+5x+L9L9iy7veva74j6Pvs5cYxBl5VdssZLNW7JEyYRRj0G44mKf/Fvxv7Zfccjs/nmr13IxGm9r+n6cjUb3c5z7r3urvfHHLuuMRn8SjY8xRpb9xCr/3Xy3+7rt3iP9Vq/ar/X6vUbv8+f6p96ipV/7EH76DXVGL3ipUwAA",
3580
- "debug_symbols": "tZZBCoMwEEXvknUWzli17VVKKVGjBEKUqIUi3r2jSCvt+m9CJkzekMULf1a1Laf24ULTDep6m5XvKjO6Lkg1L1qV0Xnv2sfxWCXrQglvF4behLUeRhNHdc0TrWyoZXOW643zVrbpov8aC94bi+LTmPFy10JOYeQTjJzByDmMXMDIZxj5giJTAiMTjAxzkGAOEsxBgjlIMAcJ5iDBHCSYgwxzkGEOMsxBhjnIGAcXqZ4mOlN6uweIZgrVIU+Mr97+RIs+dpWtp2jXkPHNF+vbT6wz3n59KYhzTSnJEBn0Bg==",
3581
- "brillig_names": [
3582
- "process_log"
3583
- ]
3584
- },
3585
- {
3586
- "name": "compute_note_hash_and_optionally_a_nullifier",
3587
- "is_unconstrained": true,
3588
- "custom_attributes": [],
3589
- "abi": {
3590
- "error_types": {
3591
- "16541607464495309456": {
3592
- "error_kind": "fmtstring",
3593
- "item_types": [],
3594
- "length": 16
3595
- },
3596
- "17843811134343075018": {
3597
- "error_kind": "string",
3598
- "string": "Stack too deep"
3599
- }
3600
- },
3601
- "parameters": [
3602
- {
3603
- "name": "contract_address",
3604
- "type": {
3605
- "fields": [
3606
- {
3607
- "name": "inner",
3608
- "type": {
3609
- "kind": "field"
3610
- }
3611
- }
3612
- ],
3613
- "kind": "struct",
3614
- "path": "authwit::aztec::protocol_types::address::aztec_address::AztecAddress"
3615
- },
3616
- "visibility": "private"
3617
- },
3618
- {
3619
- "name": "nonce",
3620
- "type": {
3621
- "kind": "field"
3622
- },
3623
- "visibility": "private"
3624
- },
3625
- {
3626
- "name": "storage_slot",
3627
- "type": {
3628
- "kind": "field"
3629
- },
3630
- "visibility": "private"
3631
- },
3632
- {
3633
- "name": "note_type_id",
3634
- "type": {
3635
- "kind": "field"
3636
- },
3637
- "visibility": "private"
3638
- },
3639
- {
3640
- "name": "compute_nullifier",
3641
- "type": {
3642
- "kind": "boolean"
3643
- },
3644
- "visibility": "private"
3645
- },
3646
- {
3647
- "name": "packed_note_content",
3648
- "type": {
3649
- "kind": "array",
3650
- "length": 0,
3651
- "type": {
3652
- "kind": "field"
3653
- }
3654
- },
3655
- "visibility": "private"
3656
- }
3657
- ],
3658
- "return_type": {
3659
- "abi_type": {
3660
- "kind": "array",
3661
- "length": 4,
3662
- "type": {
3663
- "kind": "field"
3664
- }
3665
- },
3666
- "visibility": "public"
3667
- }
3668
- },
3669
- "bytecode": "H4sIAAAAAAAA/9VZy67aQAwdSEJIuAEKn3Cl7tomXJ47Fn3c30AFPqHrrLppP7qMGCcH46siYVfFEpoknhyfOXZmJqHjztY//TrhOA5tz10b9dmGtrzPKkWs0pJn50F4dh+EZ/QgPGNFnh2Bp2/peUvc+ZlL3fl5bC7iTT7BEdzk/gYAwX6HNgttF/yKCakyYZBa+Otyvs/cpSnzf8kCZmqDvyD8vg1+Sbw/1y0+joXiRqF9rVstX+Eeb0U4xuIlXPJ1wfeF+SLwfWU+rOFvzId1T5xIN1qYlOtqY50XGlsKY+u80TrXaofXSOvcmdZoRTnPGB/On/gU1Kdu+fSYLwZfxnwJ+Eh/3z5DP577FPp9hONP0IfXZ+Su65n8lH/U3aK+YgP8k82lHPD8xPVlbPRhDmLQ85npY7FuoD4W+nt9pm/wp2Nvae0ai5ieqBFp1sf+zJeBL64v4+ThPIY4iEU8Etb/QzgfhbYH99D9YyF+j8W/4C1cQ404ViRco/7++Xwfjgfh52voJ93jructvc31ci7N4Xr4qwY/s+F/JPzcBn9J+AMb/GZv82SCPysJv7Dh38xBQ5v6afaWIxv+B8Ifm+DPD7QOv3OtNXNEOJ7Adb35u6pu2SNh/JxxtdojTRgfrg+uwd43FbiOBR/P4VSIMxXiSFiZItaTItboPx1jXxFroIg1VMTSzGOqiKWpV66IVShiada9pl6UR2mf5m0b2vJOk/ZpiviVtE/TfJcnram+YkFDHF/C+v9gOg9MeFYzWnPoWacYGLswin3rek3xC4EP8c4F3z0fZw+L9XGzXmxOW7JqOds0+SwYV34N34twPsb+0tov7fsUtS6ld/8h6OotBl/BfAn4iKP07j804n+L/hh/LPj4+n9rLifuej0csHHjN6+typjb74HSt3rj+Wtx67NJ8XN3PV//q++NqA/fS+cC17Hg4/uTXIiTC3EeEYt/s0cNfV2TTnHd+rVyuVq3f3TRXJS4y/8BHIufsP6/wjmOjdp75vzjalcdX3bH3WK338+/7yYM31sXdPoDg5oBSR0fAAA=",
3670
- "debug_symbols": "tZfBisMgFEX/xbULn8YY+yvDUExiiiAmmGRgCPn3MSVMS7ssdxN84XrceMC7sd636+0a0jDO7PK1sTh2bgljKtO2c9bmEGO4XZ9/M3F8rL7n58mlY5wXlxd2qQVnPvVl0ZTdQ4i+LNXO34JGnkFj/oNa7t+c2RoFNihwgwJbEJiEgJEJRpYwsoKRKxhZw8g1jGxg5AZGhjlIMAcJ5iDBHCSYgwRzkGAOEsxBgjlInzlo1RksV+ENbWFoKXBowqElDq1w6AqH1jh0jUMbHBpno8TZqHA2KpCNe5l+XA6ujf5sTcOauqcStfxO/qVPTXnsfL9mfzSrR6k61FOaV/r+8igDqYqTsuWQctAf",
3669
+ "bytecode": "H4sIAAAAAAAA/7WTyw7CIBBFqcUo0sTEx39MU0y7dOHafyCtLHVRN+766dZkJkyI0QVwEzJMgMNcHoXwKjBKESGCHDEqjAs2Xs7tjDnEqVbBvin5HRijvvhLWH+jkFnk4QPxM50/rJBzmTyfe6F913PTrF8J/z5y+af7y+l//8OzRq9bzCvh/8P4uvfXx/M2ij/SbJGc0ptoOwAqvkT+EvmhJBvn8w+Yb4Svj6KMqNO1tnaNdfZkh8H0dhfwP+KH/QbzqHp4zgQAAA==",
3670
+ "debug_symbols": "bY/RCoMwDEX/Jc99aOo2pr8iQ6pGKZRWah0M8d+XDpFu8yXcG04uuSv01C5jY9zgZ6jqFazvdDTesVs3AW0w1pqxydcg08Diw8+TdsnOUYcI1U0KINezuPP1YCyxLDbxB6JEqXaWtSoPHC/lOV/iwSuUX/xjY/vUwejW0v76sLguaxJfE/2UmoLvqF8CpXpZM541XoWSHMvRbw==",
3671
3671
  "brillig_names": [
3672
- "compute_note_hash_and_optionally_a_nullifier"
3672
+ "sync_notes"
3673
3673
  ]
3674
3674
  }
3675
3675
  ],
@@ -3891,19 +3891,19 @@
3891
3891
  }
3892
3892
  },
3893
3893
  "file_map": {
3894
- "136": {
3894
+ "135": {
3895
3895
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr",
3896
3896
  "source": "use dep::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader,\n};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n) -> [Field; 2] {}\n\npub unconstrained fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"
3897
3897
  },
3898
- "137": {
3898
+ "136": {
3899
3899
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr",
3900
3900
  "source": "use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n) -> Field {}\n\npub unconstrained fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n) -> Field {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n )\n}\n\npub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call.\n unsafe { notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter) };\n}\n\npub unconstrained fn notify_set_min_revertible_side_effect_counter_oracle_wrapper(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n"
3901
3901
  },
3902
- "139": {
3902
+ "138": {
3903
3903
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/execution_cache.nr",
3904
3904
  "source": "/// Stores values represented as slice in execution cache to be later obtained by its hash.\npub fn store(values: [Field]) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call. When loading the values, however, the caller must check that the values are indeed the preimage.\n unsafe { store_in_execution_cache_oracle_wrapper(values) };\n}\n\npub unconstrained fn store_in_execution_cache_oracle_wrapper(values: [Field]) {\n let _ = store_in_execution_cache_oracle(values);\n}\n\npub unconstrained fn load<let N: u32>(hash: Field) -> [Field; N] {\n load_from_execution_cache_oracle(hash)\n}\n\n#[oracle(storeInExecutionCache)]\nunconstrained fn store_in_execution_cache_oracle(_values: [Field]) -> Field {}\n\n#[oracle(loadFromExecutionCache)]\nunconstrained fn load_from_execution_cache_oracle<let N: u32>(_hash: Field) -> [Field; N] {}\n"
3905
3905
  },
3906
- "150": {
3906
+ "149": {
3907
3907
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/oracle/notes.nr",
3908
3908
  "source": "use crate::{note::{note_header::NoteHeader, note_interface::NoteInterface}, utils::array};\n\nuse dep::protocol_types::{\n address::AztecAddress,\n indexed_tagging_secret::{INDEXED_TAGGING_SECRET_LENGTH, IndexedTaggingSecret},\n};\n\n/// Notifies the simulator that a note has been created, so that it can be returned in future read requests in the same\n/// transaction. This note should only be added to the non-volatile database if found in an actual block.\npub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n packed_note_content: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call.\n unsafe {\n notify_created_note_oracle_wrapper(\n storage_slot,\n note_type_id,\n packed_note_content,\n note_hash,\n counter,\n )\n };\n}\n\n/// Notifies the simulator that a note has been nullified, so that it is no longer returned in future read requests in\n/// the same transaction. This note should only be removed to the non-volatile database if its nullifier is found in an\n/// actual block.\npub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call.\n unsafe { notify_nullified_note_oracle_wrapper(nullifier, note_hash, counter) };\n}\n\n/// Notifies the simulator that a non-note nullifier has been created, so that it can be used for note nonces.\npub fn notify_created_nullifier(nullifier: Field) {\n // This oracle call returns nothing: we only call it for its side effects. It is therefore always safe to call.\n unsafe { notify_created_nullifier_oracle_wrapper(nullifier) };\n}\n\nunconstrained fn notify_created_note_oracle_wrapper<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n packed_note_content: [Field; N],\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_created_note_oracle(\n storage_slot,\n note_type_id,\n packed_note_content,\n note_hash,\n counter,\n );\n}\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _packed_note_content: [Field; N],\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\nunconstrained fn notify_nullified_note_oracle_wrapper(\n nullifier: Field,\n note_hash: Field,\n counter: u32,\n) {\n let _ = notify_nullified_note_oracle(nullifier, note_hash, counter);\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(\n _nullifier: Field,\n _note_hash: Field,\n _counter: u32,\n) -> Field {}\n\nunconstrained fn notify_created_nullifier_oracle_wrapper(nullifier: Field) {\n let _ = notify_created_nullifier_oracle(nullifier);\n}\n\n#[oracle(notifyCreatedNullifier)]\nunconstrained fn notify_created_nullifier_oracle(_nullifier: Field) -> Field {}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S],\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S],\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields,\n )\n}\n\npub unconstrained fn get_notes<Note, let N: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N], // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S]\nwhere\n Note: NoteInterface<N>,\n{\n sync_notes_oracle_wrapper();\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields,\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let note_content = array::subarray(fields, read_offset + 2);\n\n let mut note = Note::unpack_content(note_content);\n note.set_header(NoteHeader { contract_address, nonce, storage_slot, note_hash_counter });\n\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n/// Returns true if the nullifier exists. Note that a `true` value can be constrained by proving existence of the\n/// nullifier, but a `false` value should not be relied upon since other transactions may emit this nullifier before the\n/// current transaction is included in a block. While this might seem of little use at first, certain design patterns\n/// benefit from this abstraction (see e.g. `PrivateMutable`).\npub unconstrained fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n/// Same as `get_indexed_tagging_secret_as_sender`, except it returns the derived tag, ready to be included in a log.\npub unconstrained fn get_app_tag_as_sender(sender: AztecAddress, recipient: AztecAddress) -> Field {\n get_indexed_tagging_secret_as_sender(sender, recipient).compute_tag(recipient)\n}\n\n/// Returns the tagging secret for a given sender and recipient pair, siloed for the current contract address.\n/// Includes the last known index used to send a note tagged with this secret.\n/// For this to work, PXE must know the ivsk_m of the sender.\n/// For the recipient's side, only the address is needed.\npub unconstrained fn get_indexed_tagging_secret_as_sender(\n sender: AztecAddress,\n recipient: AztecAddress,\n) -> IndexedTaggingSecret {\n let result = get_indexed_tagging_secret_as_sender_oracle(sender, recipient);\n IndexedTaggingSecret::deserialize(result)\n}\n\n#[oracle(getIndexedTaggingSecretAsSender)]\nunconstrained fn get_indexed_tagging_secret_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) -> [Field; INDEXED_TAGGING_SECRET_LENGTH] {}\n\n/// Notifies the simulator that a tag has been used in a note, and to therefore increment the associated index so that\n/// future notes get a different tag and can be discovered by the recipient.\n/// This change should only be persisted in a non-volatile database if the tagged log is found in an actual block -\n/// otherwise e.g. a reverting transaction can cause the sender to accidentally skip indices and later produce notes\n/// that are not found by the recipient.\npub fn increment_app_tagging_secret_index_as_sender(sender: AztecAddress, recipient: AztecAddress) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call.\n unsafe {\n increment_app_tagging_secret_index_as_sender_wrapper(sender, recipient);\n }\n}\n\nunconstrained fn increment_app_tagging_secret_index_as_sender_wrapper(\n sender: AztecAddress,\n recipient: AztecAddress,\n) {\n increment_app_tagging_secret_index_as_sender_oracle(sender, recipient);\n}\n\n#[oracle(incrementAppTaggingSecretIndexAsSender)]\nunconstrained fn increment_app_tagging_secret_index_as_sender_oracle(\n _sender: AztecAddress,\n _recipient: AztecAddress,\n) {}\n\n/// Finds new notes that may have been sent to all registered accounts in PXE in the current contract and makes them available\n/// for later querying via the `get_notes` oracle.\npub fn sync_notes() {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call.\n unsafe {\n sync_notes_oracle_wrapper();\n }\n}\n\nunconstrained fn sync_notes_oracle_wrapper() {\n sync_notes_oracle();\n}\n\n#[oracle(syncNotes)]\nunconstrained fn sync_notes_oracle() {}\n"
3909
3909
  },
@@ -3915,7 +3915,7 @@
3915
3915
  "path": "std/field/bn254.nr",
3916
3916
  "source": "use crate::field::field_less_than;\nuse crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\npub(crate) global TWO_POW_128: Field = 0x100000000000000000000000000000000;\nglobal TWO_POW_64: Field = 0x10000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(mut x: Field) -> (Field, Field) {\n // Here's we're taking advantage of truncating 64 bit limbs from the input field\n // and then subtracting them from the input such the field division is equivalent to integer division.\n let low_lower_64 = (x as u64) as Field;\n x = (x - low_lower_64) / TWO_POW_64;\n let low_upper_64 = (x as u64) as Field;\n\n let high = (x - low_upper_64) / TWO_POW_64;\n let low = low_upper_64 * TWO_POW_64 + low_lower_64;\n\n (low, high)\n}\n\npub(crate) unconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nunconstrained fn lte_hint(x: Field, y: Field) -> bool {\n if x == y {\n true\n } else {\n field_less_than(x, y)\n }\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n /// Safety: borrow is enforced to be boolean due to its type.\n /// if borrow is 0, it asserts that (alo > blo && ahi >= bhi)\n /// if borrow is 1, it asserts that (alo <= blo && ahi > bhi)\n unsafe {\n let borrow = lte_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size::<128>();\n rhi.assert_max_bit_size::<128>();\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n /// Safety: decomposition is properly checked below\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size::<128>();\n xhi.assert_max_bit_size::<128>();\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(\n /// Safety: already unconstrained\n unsafe { field_less_than(b, a) },\n );\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n /// Safety: unsafe in unconstrained\n unsafe {\n field_less_than(b, a)\n }\n } else if a == b {\n false\n } else {\n /// Safety: Take a hint of the comparison and verify it\n unsafe {\n if field_less_than(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{assert_gt, decompose, gt, lte_hint, PHI, PLO, TWO_POW_128};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_lte_hint() {\n assert(lte_hint(0, 1));\n assert(lte_hint(0, 0x100));\n assert(lte_hint(0x100, TWO_POW_128 - 1));\n assert(!lte_hint(0 - 1, 0));\n\n assert(lte_hint(0, 0));\n assert(lte_hint(0x100, 0x100));\n assert(lte_hint(0 - 1, 0 - 1));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"
3917
3917
  },
3918
- "185": {
3918
+ "184": {
3919
3919
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/utils/array/subarray.nr",
3920
3920
  "source": "/// Returns `DST_LEN` elements from a source array, starting at `offset`. `DST_LEN` must not be larger than the number\n/// of elements past `offset`.\n///\n/// Examples:\n/// ```\n/// let foo: [Field; 2] = subarray([1, 2, 3, 4, 5], 2);\n/// assert_eq(foo, [3, 4]);\n///\n/// let bar: [Field; 5] = subarray([1, 2, 3, 4, 5], 2); // fails - we can't return 5 elements since only 3 remain\n/// ```\npub fn subarray<T, let SRC_LEN: u32, let DST_LEN: u32>(\n src: [T; SRC_LEN],\n offset: u32,\n) -> [T; DST_LEN] {\n assert(offset + DST_LEN <= SRC_LEN, \"DST_LEN too large for offset\");\n\n let mut dst: [T; DST_LEN] = std::mem::zeroed();\n for i in 0..DST_LEN {\n dst[i] = src[i + offset];\n }\n\n dst\n}\n\nmod test {\n use super::subarray;\n\n #[test]\n unconstrained fn subarray_into_empty() {\n // In all of these cases we're setting DST_LEN to be 0, so we always get back an emtpy array.\n assert_eq(subarray::<Field, _, _>([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 2), []);\n }\n\n #[test]\n unconstrained fn subarray_complete() {\n assert_eq(subarray::<Field, _, _>([], 0), []);\n assert_eq(subarray([1, 2, 3, 4, 5], 0), [1, 2, 3, 4, 5]);\n }\n\n #[test]\n unconstrained fn subarray_different_end_sizes() {\n // We implicitly select how many values to read in the size of the return array\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4, 5]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3, 4]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2, 3]);\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [2]);\n }\n\n #[test(should_fail_with = \"DST_LEN too large for offset\")]\n unconstrained fn subarray_offset_too_large() {\n // With an offset of 1 we can only request up to 4 elements\n let _: [_; 5] = subarray([1, 2, 3, 4, 5], 1);\n }\n\n #[test(should_fail)]\n unconstrained fn subarray_bad_return_value() {\n assert_eq(subarray([1, 2, 3, 4, 5], 1), [3, 3, 4, 5]);\n }\n}\n"
3921
3921
  },
@@ -3927,7 +3927,7 @@
3927
3927
  "path": "std/hash/mod.nr",
3928
3928
  "source": "pub mod poseidon;\npub mod poseidon2;\npub mod keccak;\npub mod sha256;\npub mod sha512;\n\nuse crate::default::Default;\nuse crate::embedded_curve_ops::{\n EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_array_return,\n};\nuse crate::meta::derive_via;\nuse crate::uint128::U128;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[inline_always]\npub fn pedersen_commitment_with_separator<let N: u32>(\n input: [Field; N],\n separator: u32,\n) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[no_predicates]\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: [EmbeddedCurveScalar; N + 1] = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N + 1];\n let mut generators: [EmbeddedCurvePoint; N + 1] =\n [EmbeddedCurvePoint::point_at_infinity(); N + 1];\n let domain_generators: [EmbeddedCurvePoint; N] =\n derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n\n for i in 0..N {\n scalars[i] = from_field_unsafe(input[i]);\n generators[i] = domain_generators[i];\n }\n scalars[N] = EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field };\n\n let length_generator: [EmbeddedCurvePoint; 1] =\n derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n generators[N] = length_generator[0];\n multi_scalar_mul_array_return(generators, scalars)[0]\n}\n\n#[field(bn254)]\n#[inline_always]\npub fn derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32,\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n// Same as from_field but:\n// does not assert the limbs are 128 bits\n// does not assert the decomposition does not overflow the EmbeddedCurveScalar\nfn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n /// Safety: xlo and xhi decomposition is checked below\n let (xlo, xhi) = unsafe { crate::field::bn254::decompose_hint(scalar) };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(\n s,\n name,\n signature,\n for_each_field,\n quote {},\n |fields| fields,\n )\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n fn finish(self) -> Field;\n\n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher<H>\nwhere\n H: Hasher,\n{\n fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n H: Hasher + Default,\n{\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H)\n where\n H: Hasher,\n {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, let N: u32> Hash for [T; N]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T]\nwhere\n T: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B)\nwhere\n A: Hash,\n B: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E)\nwhere\n A: Hash,\n B: Hash,\n C: Hash,\n D: Hash,\n E: Hash,\n{\n fn hash<H>(self, state: &mut H)\n where\n H: Hasher,\n {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1),\n 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f,\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1),\n EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false,\n },\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2),\n 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2),\n EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3),\n 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3),\n EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4),\n 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4),\n EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5),\n 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5),\n EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6),\n 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6),\n EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7),\n EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8),\n EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9),\n EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false,\n },\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94,\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10),\n EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false,\n },\n );\n}\n"
3929
3929
  },
3930
- "253": {
3930
+ "252": {
3931
3931
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
3932
3932
  "source": "use crate::{\n abis::function_selector::FunctionSelector,\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{\n AZTEC_ADDRESS_LENGTH, FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n MAX_FIELD_VALUE,\n },\n contract_class_id::ContractClassId,\n hash::{poseidon2_hash_with_separator, private_functions_root_from_siblings},\n merkle_tree::membership::MembershipWitness,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, ToPoint, TpkM},\n traits::{Deserialize, Empty, FromField, Packable, Serialize, ToField},\n};\n\n// We do below because `use crate::point::Point;` does not work\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\n\nuse crate::public_keys::AddressPoint;\nuse ec::{pow, sqrt};\nuse std::{\n embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key},\n ops::Add,\n};\n\n// Aztec address\npub struct AztecAddress {\n pub inner: Field,\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\n/// We implement the Packable trait for AztecAddress because it can be stored in contract's storage (and there\n/// the implementation of Packable is required).\nimpl Packable<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn pack(self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n self.serialize()\n }\n\n fn unpack(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n Self::deserialize(fields)\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn to_address_point(self) -> AddressPoint {\n // We compute the address point by taking our address, setting it to x, and then solving for y in the\n // equation which defines our bn curve:\n // y^2 = x^3 - 17; x = address\n let x = self.inner;\n let y_squared = pow(x, 3) - 17;\n\n // TODO (#8970): Handle cases where we cannot recover a point from an address\n let mut y = sqrt(y_squared);\n\n // If we get a negative y coordinate (any y where y > MAX_FIELD_VALUE / 2), we pin it to the\n // positive one (any value where y <= MAX_FIELD_VALUE / 2) by subtracting it from the Field modulus\n // note: The field modulus is MAX_FIELD_VALUE + 1\n if (!(y.lt(MAX_FIELD_VALUE / 2) | y.eq(MAX_FIELD_VALUE / 2))) {\n y = (MAX_FIELD_VALUE + 1) - y;\n }\n\n AddressPoint { inner: Point { x: self.inner, y, is_infinite: false } }\n }\n\n pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n let public_keys_hash = public_keys.hash();\n\n let pre_address = poseidon2_hash_with_separator(\n [public_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1,\n );\n\n let address_point = derive_public_key(EmbeddedCurveScalar::from_field(pre_address)).add(\n public_keys.ivpk_m.to_point(),\n );\n\n // Note that our address is only the x-coordinate of the full address_point. This is okay because when people want to encrypt something and send it to us\n // they can recover our full point using the x-coordinate (our address itself). To do this, they recompute the y-coordinate according to the equation y^2 = x^3 - 17.\n // When they do this, they may get a positive y-coordinate (a value that is less than or equal to MAX_FIELD_VALUE / 2) or\n // a negative y-coordinate (a value that is more than MAX_FIELD_VALUE), and we cannot dictate which one they get and hence the recovered point may sometimes be different than the one\n // our secrect can decrypt. Regardless though, they should and will always encrypt using point with the positive y-coordinate by convention.\n // This ensures that everyone encrypts to the same point given an arbitrary x-coordinate (address). This is allowed because even though our original point may not have a positive y-coordinate,\n // with our original secret, we will be able to derive the secret to the point with the flipped (and now positive) y-coordinate that everyone encrypts to.\n AztecAddress::from_field(address_point.x)\n }\n\n pub fn compute_from_private_function(\n function_selector: FunctionSelector,\n function_vk_hash: Field,\n function_leaf_membership_witness: MembershipWitness<FUNCTION_TREE_HEIGHT>,\n contract_class_artifact_hash: Field,\n contract_class_public_bytecode_commitment: Field,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys: PublicKeys,\n ) -> Self {\n let private_functions_root = private_functions_root_from_siblings(\n function_selector,\n function_vk_hash,\n function_leaf_membership_witness.leaf_index,\n function_leaf_membership_witness.sibling_path,\n );\n\n let contract_class_id = ContractClassId::compute(\n contract_class_artifact_hash,\n private_functions_root,\n contract_class_public_bytecode_commitment,\n );\n\n // Compute contract address using the preimage which includes the class_id.\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n salted_initialization_hash,\n );\n\n AztecAddress::compute(public_keys, partial_address)\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys() {\n let public_keys = PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: 0x22f7fcddfa3ce3e8f0cc8e82d7b94cdd740afa3e77f8e4a63ea78a239432dcab,\n y: 0x0471657de2b6216ade6c506d28fbc22ba8b8ed95c871ad9f3e3984e90d9723a7,\n is_infinite: false,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: 0x111223493147f6785514b1c195bb37a2589f22a6596d30bb2bb145fdc9ca8f1e,\n y: 0x273bbffd678edce8fe30e0deafc4f66d58357c06fd4a820285294b9746c3be95,\n is_infinite: false,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: 0x09115c96e962322ffed6522f57194627136b8d03ac7469109707f5e44190c484,\n y: 0x0c49773308a13d740a7f0d4f0e6163b02c5a408b6f965856b6a491002d073d5b,\n is_infinite: false,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: 0x00d3d81beb009873eb7116327cf47c612d5758ef083d4fda78e9b63980b2a762,\n y: 0x2f567d22d2b02fe1f4ad42db9d58a36afd1983e7e2909d1cab61cafedad6193a,\n is_infinite: false,\n },\n },\n };\n\n let partial_address = PartialAddress::from_field(\n 0x0a7c585381b10f4666044266a02405bf6e01fa564c8517d4ad5823493abd31de,\n );\n\n let address = AztecAddress::compute(public_keys, partial_address);\n\n // The following value was generated by `derivation.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_computed_address_from_partial_and_pubkeys =\n 0x24e4646f58b9fbe7d38e317db8d5636c423fbbdfbe119fc190fe9c64747e0c62;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkeys);\n}\n\n#[test]\nfn compute_preaddress_from_partial_and_pub_keys() {\n let pre_address = poseidon2_hash_with_separator([1, 2], GENERATOR_INDEX__CONTRACT_ADDRESS_V1);\n let expected_computed_preaddress_from_partial_and_pubkey =\n 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(pre_address == expected_computed_preaddress_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"
3933
3933
  },
@@ -3935,27 +3935,27 @@
3935
3935
  "path": "std/hash/poseidon2.nr",
3936
3936
  "source": "use crate::default::Default;\nuse crate::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size, message_size != N)\n }\n\n pub fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"
3937
3937
  },
3938
- "269": {
3938
+ "268": {
3939
3939
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr",
3940
3940
  "source": "/// Utility function to console.log data in the acir simulator.\n/// Example:\n/// debug_log(\"blah blah this is a debug string\");\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` array.\n/// Examples:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n /// Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n /// to call.\n unsafe { debug_log_oracle_wrapper(msg, args) };\n}\n\npub unconstrained fn debug_log_oracle_wrapper<let M: u32, let N: u32>(\n msg: str<M>,\n args: [Field; N],\n) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n"
3941
3941
  },
3942
- "270": {
3942
+ "269": {
3943
3943
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
3944
3944
  "source": "use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n log_hash::{LogHash, ScopedLogHash},\n note_hash::ScopedNoteHash,\n nullifier::ScopedNullifier,\n private_log::{PrivateLog, PrivateLogData},\n side_effect::{OrderedValue, scoped::Scoped},\n },\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n },\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n poseidon2::Poseidon2Sponge,\n traits::{FromField, Hash, is_empty, ToField},\n utils::field::field_from_bytes_32_trunc,\n};\nuse super::{constants::TWO_POW_64, utils::{arrays::array_concat, field::field_from_bytes}};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256::digest(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n // unique).\n poseidon2_hash_with_separator(\n [first_nullifier_in_tx, note_index_in_tx as Field],\n GENERATOR_INDEX__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), note_hash],\n GENERATOR_INDEX__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique note hashes from siloed note hashes\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n let nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n compute_unique_note_hash(nonce, siloed_note_hash)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.value())\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [app.to_field(), nullifier],\n GENERATOR_INDEX__OUTER_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn compute_siloed_private_log_field(contract_address: AztecAddress, field: Field) -> Field {\n poseidon2_hash([contract_address.to_field(), field])\n}\n\npub fn silo_private_log(private_log: Scoped<PrivateLogData>) -> PrivateLog {\n if private_log.contract_address.is_zero() {\n private_log.inner.log\n } else {\n let mut fields = private_log.inner.log.fields;\n fields[0] = compute_siloed_private_log_field(private_log.contract_address, fields[0]);\n PrivateLog { fields }\n }\n}\n\nfn compute_siloed_contract_class_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_contract_class_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_contract_class_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let mut bytes: [u8; 160] = std::mem::zeroed();\n\n let inputs =\n [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..5 {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes[32 * i + j] = item_bytes[j];\n }\n }\n\n sha256_to_field(bytes)\n}\n\npub fn silo_l2_to_l1_message(\n msg: ScopedL2ToL1Message,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\npub fn compute_tx_logs_hash<let N: u32>(logs: [LogHash; N]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; N * 32];\n for offset in 0..N {\n // TODO: This is not checking that the decomposition is smaller than P\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_radix(256);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn verification_key_hash<let N: u32>(key: [Field; N]) -> Field {\n crate::hash::poseidon2_hash(key)\n}\n\n#[inline_always]\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = array_concat([separator.to_field()], inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n// Performs a fixed length hash with a subarray of the given input.\n// Useful for SpongeBlob in which we aborb M things and want to check it vs a hash of M elts of an N-len array.\n// Using stdlib poseidon, this will always absorb an extra 1 as a 'variable' hash, and not match spongeblob.squeeze()\n// or any ts implementation. Also checks that any remaining elts not hashed are empty.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, false);\n sponge.squeeze()\n}\n\n// NB the below is the same as std::hash::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check,\n// and absorbing in chunks of 3 below.\n#[no_predicates]\npub fn poseidon2_cheaper_variable_hash<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_chunks(input, in_len, true);\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if in_len != N {\n sponge.absorb(1);\n }\n sponge.squeeze()\n}\n\n// The below fn reduces gates of a conditional poseidon2 hash by approx 3x (thank you ~* Giant Brain Dev @IlyasRidhuan *~ for the idea)\n// Why? Because when we call stdlib poseidon, we call absorb for each item. When absorbing is conditional, it seems the compiler does not know\n// what cache_size will be when calling absorb, so it assigns the permutation gates for /each i/ rather than /every 3rd i/, which is actually required.\n// The below code forces the compiler to:\n// - absorb normally up to 2 times to set cache_size to 1\n// - absorb in chunks of 3 to ensure perm. only happens every 3rd absorb\n// - absorb normally up to 2 times to add any remaining values to the hash\n// In fixed len hashes, the compiler is able to tell that it will only need to perform the permutation every 3 absorbs.\n// NB: it also replaces unnecessary range checks (i < thing) with a bit check (&= i != thing), which alone reduces the gates of a var. hash by half.\n\n#[no_predicates]\nfn poseidon2_absorb_chunks<let N: u32>(\n input: [Field; N],\n in_len: u32,\n variable: bool,\n) -> Poseidon2Sponge {\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n // Even though shift is always 1 here, if we input in_len = 0 we get an underflow\n // since we cannot isolate computation branches. The below is just to avoid that.\n let shift = if in_len == 0 { 0 } else { 1 };\n if in_len != 0 {\n // cache_size = 0, init absorb\n sponge.cache[0] = input[0];\n sponge.cache_size = 1;\n // shift = num elts already added to make cache_size 1 = 1 for a fresh sponge\n // M = max_chunks = (N - 1 - (N - 1) % 3) / 3: (must be written as a fn of N to compile)\n // max_remainder = (N - 1) % 3;\n // max_chunks = (N - 1 - max_remainder) / 3;\n sponge = poseidon2_absorb_chunks_loop::<N, (N - 1 - (N - 1) % 3) / 3>(\n sponge,\n input,\n in_len,\n variable,\n shift,\n );\n }\n sponge\n}\n\n// NB: If it's not required to check that the non-absorbed elts of 'input' are 0s, set skip_0_check=true\n#[no_predicates]\npub fn poseidon2_absorb_chunks_existing_sponge<let N: u32>(\n in_sponge: Poseidon2Sponge,\n input: [Field; N],\n in_len: u32,\n skip_0_check: bool,\n) -> Poseidon2Sponge {\n let mut sponge = in_sponge;\n // 'shift' is to account for already added inputs\n let mut shift = 0;\n // 'stop' is to avoid an underflow when inputting in_len = 0\n let mut stop = false;\n for i in 0..3 {\n if shift == in_len {\n stop = true;\n }\n if (sponge.cache_size != 1) & (!stop) {\n sponge.absorb(input[i]);\n shift += 1;\n }\n }\n sponge = if stop {\n sponge\n } else {\n // max_chunks = (N - (N % 3)) / 3;\n poseidon2_absorb_chunks_loop::<N, (N - (N % 3)) / 3>(\n sponge,\n input,\n in_len,\n skip_0_check,\n shift,\n )\n };\n sponge\n}\n\n// The below is the loop to absorb elts into a poseidon sponge in chunks of 3\n// shift - the num of elts already absorbed to ensure the sponge's cache_size = 1\n// M - the max number of chunks required to absorb N things (must be comptime to compile)\n// NB: The 0 checks ('Found non-zero field...') are messy, but having a separate loop over N to check\n// for 0s costs 3N gates. Current approach is approx 2N gates.\n#[no_predicates]\nfn poseidon2_absorb_chunks_loop<let N: u32, let M: u32>(\n in_sponge: Poseidon2Sponge,\n input: [Field; N],\n in_len: u32,\n variable: bool,\n shift: u32,\n) -> Poseidon2Sponge {\n assert(in_len <= N, \"Given in_len to absorb is larger than the input array len\");\n // When we have an existing sponge, we may have a shift of 0, and the final 'k+2' below = N\n // The below avoids an overflow\n let skip_last = 3 * M == N;\n // Writing in_sponge: &mut does not compile\n let mut sponge = in_sponge;\n let mut should_add = true;\n // The num of things left over after absorbing in 3s\n let remainder = (in_len - shift) % 3;\n // The num of chunks of 3 to absorb (maximum M)\n let chunks = (in_len - shift - remainder) / 3;\n for i in 0..M {\n // Now we loop through cache size = 1 -> 3\n should_add &= i != chunks;\n // This is the index at the start of the chunk (for readability)\n let k = 3 * i + shift;\n if should_add {\n // cache_size = 1, 2 => just assign\n sponge.cache[1] = input[k];\n sponge.cache[2] = input[k + 1];\n // cache_size = 3 => duplex + perm\n for j in 0..3 {\n sponge.state[j] += sponge.cache[j];\n }\n sponge.state = std::hash::poseidon2_permutation(sponge.state, 4);\n sponge.cache[0] = input[k + 2];\n // cache_size is now 1 again, repeat loop\n } else if (!variable) & (i != chunks) {\n // if we are hashing a fixed len array which is a subarray, we check the remaining elts are 0\n // NB: we don't check at i == chunks, because that chunk contains elts to be absorbed or checked below\n let last_0 = if (i == M - 1) & (skip_last) {\n 0\n } else {\n input[k + 2]\n };\n let all_0 = (input[k] == 0) & (input[k + 1] == 0) & (last_0 == 0);\n assert(all_0, \"Found non-zero field after breakpoint\");\n }\n }\n // we have 'remainder' num of items left to absorb\n should_add = true;\n // below is to avoid overflows (i.e. if inlen is close to N)\n let mut should_check = !variable;\n for i in 0..3 {\n should_add &= i != remainder;\n should_check &= in_len - remainder + i != N;\n if should_add {\n // we want to absorb the final 'remainder' items\n sponge.absorb(input[in_len - remainder + i]);\n } else if should_check {\n assert(input[in_len - remainder + i] == 0, \"Found non-zero field after breakpoint\");\n }\n }\n sponge\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n let sub_chunk_hash = poseidon2_hash_subarray(input, in_len);\n let fixed_len_hash = std::hash::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(sub_chunk_hash == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_matches_variable() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n for i in 0..in_len {\n input[i] = 3;\n }\n let variable_chunk_hash = poseidon2_cheaper_variable_hash(input, in_len);\n let variable_len_hash = std::hash::poseidon2::Poseidon2::hash(input, in_len);\n assert(variable_chunk_hash == variable_len_hash);\n}\n\n#[test]\nfn existing_sponge_poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n // absorb 250 of the 501 things\n let empty_sponge = Poseidon2Sponge::new((in_len as Field) * TWO_POW_64);\n let first_sponge = poseidon2_absorb_chunks_existing_sponge(empty_sponge, input, 250, true);\n // now absorb the final 251 (since they are all 3s, im being lazy and not making a new array)\n let mut final_sponge = poseidon2_absorb_chunks_existing_sponge(first_sponge, input, 251, true);\n let fixed_len_hash = Poseidon2Sponge::hash(fixed_input, fixed_input.len());\n assert(final_sponge.squeeze() == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_empty_inputs() {\n let in_len = 0;\n let mut input: [Field; 4096] = [0; 4096];\n let mut constructed_empty_sponge = poseidon2_absorb_chunks(input, in_len, true);\n let mut first_sponge =\n poseidon2_absorb_chunks_existing_sponge(constructed_empty_sponge, input, in_len, true);\n assert(first_sponge.squeeze() == constructed_empty_sponge.squeeze());\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256::digest(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3),\n },\n version,\n chainId,\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"
3945
3945
  },
3946
- "287": {
3946
+ "286": {
3947
3947
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/poseidon2.nr",
3948
3948
  "source": "use crate::constants::TWO_POW_64;\n\n// NB: This is a clone of noir/noir-repo/noir_stdlib/src/hash/poseidon2.nr\n// It exists as we sometimes need to perform custom absorption, but the stdlib version\n// has a private absorb() method (it's also designed to just be a hasher)\n// Can be removed when standalone noir poseidon lib exists: See noir#6679\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2Sponge {\n pub cache: [Field; 3],\n pub state: [Field; 4],\n pub cache_size: u32,\n pub squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2Sponge {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2Sponge::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2Sponge {\n let mut result =\n Poseidon2Sponge { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = std::hash::poseidon2_permutation(self.state, 4);\n }\n\n pub fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n pub fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n"
3949
3949
  },
3950
- "296": {
3950
+ "295": {
3951
3951
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr",
3952
3952
  "source": "use crate::{\n address::public_keys_hash::PublicKeysHash,\n constants::{\n DEFAULT_IVPK_M_X, DEFAULT_IVPK_M_Y, DEFAULT_NPK_M_X, DEFAULT_NPK_M_Y, DEFAULT_OVPK_M_X,\n DEFAULT_OVPK_M_Y, DEFAULT_TPK_M_X, DEFAULT_TPK_M_Y, GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n },\n hash::poseidon2_hash_with_separator,\n point::POINT_LENGTH,\n traits::{Deserialize, Hash, Serialize},\n};\n\nuse dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse std::default::Default;\n\npub global PUBLIC_KEYS_LENGTH: u32 = 12;\n\npub struct PublicKeys {\n pub npk_m: NpkM,\n pub ivpk_m: IvpkM,\n pub ovpk_m: OvpkM,\n pub tpk_m: TpkM,\n}\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\npub struct NpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\npub struct IvpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct OvpkM {\n pub inner: Point,\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct TpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for TpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nimpl Default for PublicKeys {\n fn default() -> Self {\n PublicKeys {\n npk_m: NpkM {\n inner: Point { x: DEFAULT_NPK_M_X, y: DEFAULT_NPK_M_Y, is_infinite: false },\n },\n ivpk_m: IvpkM {\n inner: Point { x: DEFAULT_IVPK_M_X, y: DEFAULT_IVPK_M_Y, is_infinite: false },\n },\n ovpk_m: OvpkM {\n inner: Point { x: DEFAULT_OVPK_M_X, y: DEFAULT_OVPK_M_Y, is_infinite: false },\n },\n tpk_m: TpkM {\n inner: Point { x: DEFAULT_TPK_M_X, y: DEFAULT_TPK_M_Y, is_infinite: false },\n },\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field,\n ))\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field,\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM {\n inner: Point {\n x: serialized[0],\n y: serialized[1],\n is_infinite: serialized[2] as bool,\n },\n },\n ivpk_m: IvpkM {\n inner: Point {\n x: serialized[3],\n y: serialized[4],\n is_infinite: serialized[5] as bool,\n },\n },\n ovpk_m: OvpkM {\n inner: Point {\n x: serialized[6],\n y: serialized[7],\n is_infinite: serialized[8] as bool,\n },\n },\n tpk_m: TpkM {\n inner: Point {\n x: serialized[9],\n y: serialized[10],\n is_infinite: serialized[11] as bool,\n },\n },\n }\n }\n}\n\npub struct AddressPoint {\n pub inner: Point,\n}\n\nimpl ToPoint for AddressPoint {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[test]\nunconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash =\n 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nunconstrained fn compute_default_hash() {\n let keys = PublicKeys::default();\n\n let actual = keys.hash();\n let test_data_default_hash = 0x1d3bf1fb93ae0e9cda83b203dd91c3bfb492a9aecf30ec90e1057eced0f0e62d;\n\n assert(actual.to_field() == test_data_default_hash);\n}\n\n#[test]\nunconstrained fn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"
3953
3953
  },
3954
- "336": {
3954
+ "335": {
3955
3955
  "path": "/build-volume/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr",
3956
3956
  "source": "pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self) -> [Field; K] {\n let mut result = [0; K];\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array());\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(\n &mut self,\n deserialise: fn([Field; K]) -> T,\n mut result: [T; C],\n ) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"
3957
3957
  },
3958
- "348": {
3958
+ "347": {
3959
3959
  "path": "/root/nargo/github.com/noir-lang/schnorr/v0.1.1/src/lib.nr",
3960
3960
  "source": "use std::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul};\nuse std::hash::{blake2s, pedersen_hash};\n\npub fn verify_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) -> bool {\n //scalar lo/hi from bytes\n let sig_s = scalar_from_bytes(signature, 0);\n let sig_e = scalar_from_bytes(signature, 32);\n // pub_key is on Grumpkin curve\n let mut is_ok = (public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17)\n & (!public_key.is_infinite);\n\n if ((sig_s.lo != 0) | (sig_s.hi != 0)) & ((sig_e.lo != 0) | (sig_e.hi != 0)) {\n let (r_is_infinite, result) =\n calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n is_ok &= !r_is_infinite;\n for i in 0..32 {\n is_ok &= result[i] == signature[32 + i];\n }\n } else {\n is_ok = false;\n }\n is_ok\n}\n\npub fn assert_valid_signature<let N: u32>(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; N],\n) {\n //scalar lo/hi from bytes\n let sig_s = scalar_from_bytes(signature, 0);\n let sig_e = scalar_from_bytes(signature, 32);\n\n // assert pub_key is on Grumpkin curve\n assert(public_key.y * public_key.y == public_key.x * public_key.x * public_key.x - 17);\n assert(public_key.is_infinite == false);\n // assert signature is not null\n assert((sig_s.lo != 0) | (sig_s.hi != 0));\n assert((sig_e.lo != 0) | (sig_e.hi != 0));\n\n let (r_is_infinite, result) = calculate_signature_challenge(public_key, sig_s, sig_e, message);\n\n assert(!r_is_infinite);\n for i in 0..32 {\n assert(result[i] == signature[32 + i]);\n }\n}\n\nfn calculate_signature_challenge<let N: u32>(\n public_key: EmbeddedCurvePoint,\n sig_s: EmbeddedCurveScalar,\n sig_e: EmbeddedCurveScalar,\n message: [u8; N],\n) -> (bool, [u8; 32]) {\n let g1 = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let r = multi_scalar_mul([g1, public_key], [sig_s, sig_e]);\n // compare the _hashes_ rather than field elements modulo r\n let pedersen_hash = pedersen_hash([r.x, public_key.x, public_key.y]);\n let pde: [u8; 32] = pedersen_hash.to_be_bytes();\n\n let mut hash_input = [0; N + 32];\n for i in 0..32 {\n hash_input[i] = pde[i];\n }\n for i in 0..N {\n hash_input[32 + i] = message[i];\n }\n\n let result = blake2s(hash_input);\n (r.is_infinite, result)\n}\n\n//Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\nfn scalar_from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v: Field = 1;\n let mut lo: Field = 0;\n let mut hi: Field = 0;\n for i in 0..16 {\n lo = lo + (bytes[offset + 31 - i] as Field) * v;\n hi = hi + (bytes[offset + 15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = EmbeddedCurveScalar::new(lo, hi);\n sig_s\n}\n\nmod test {\n use std::embedded_curve_ops::EmbeddedCurvePoint;\n\n use super::verify_signature;\n\n #[test]\n fn test_zero_signature() {\n let public_key: EmbeddedCurvePoint = EmbeddedCurvePoint {\n x: 1,\n y: 17631683881184975370165255887551781615748388533673675138860,\n is_infinite: false,\n };\n let signature: [u8; 64] = [0; 64];\n let message: [u8; _] = [2; 64]; // every message\n let verified = verify_signature(public_key, signature, message);\n assert(!verified);\n }\n\n #[test]\n fn smoke_test() {\n let message: [u8; 10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n let pub_key_x: Field = 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a;\n let pub_key_y: Field = 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197;\n let signature: [u8; 64] = [\n 1, 13, 119, 112, 212, 39, 233, 41, 84, 235, 255, 93, 245, 172, 186, 83, 157, 253, 76,\n 77, 33, 128, 178, 15, 214, 67, 105, 107, 177, 234, 77, 48, 27, 237, 155, 84, 39, 84,\n 247, 27, 22, 8, 176, 230, 24, 115, 145, 220, 254, 122, 135, 179, 171, 4, 214, 202, 64,\n 199, 19, 84, 239, 138, 124, 12,\n ];\n\n let pub_key = EmbeddedCurvePoint { x: pub_key_x, y: pub_key_y, is_infinite: false };\n let valid_signature = verify_signature(pub_key, signature, message);\n assert(valid_signature);\n super::assert_valid_signature(pub_key, signature, message);\n }\n\n}\n\nmod bench {\n use super::{assert_valid_signature, verify_signature};\n use std::embedded_curve_ops::EmbeddedCurvePoint;\n\n #[export]\n pub fn bench_verify_signature(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; 32],\n ) -> bool {\n verify_signature(public_key, signature, message)\n }\n\n #[export]\n pub fn bench_assert_valid_signature(\n public_key: EmbeddedCurvePoint,\n signature: [u8; 64],\n message: [u8; 32],\n ) {\n assert_valid_signature(public_key, signature, message)\n }\n}\n"
3961
3961
  },
@@ -4003,7 +4003,7 @@
4003
4003
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/context/private_context.nr",
4004
4004
  "source": "use dep::protocol_types::debug_log::debug_log_format;\n\nuse crate::{\n context::{inputs::PrivateContextInputs, returns_hash::ReturnsHash},\n hash::{ArgsHasher, hash_args_array},\n keys::constants::{NULLIFIER_INDEX, NUM_KEY_TYPES, OUTGOING_INDEX, sk_generators},\n messaging::process_l1_to_l2_message,\n oracle::{\n block_header::get_block_header_at,\n call_private_function::call_private_function_internal,\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal,\n },\n execution_cache,\n key_validation_request::get_key_validation_request,\n notes::{notify_created_nullifier, notify_nullified_note},\n },\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext,\n function_selector::FunctionSelector,\n log::Log,\n log_hash::LogHash,\n max_block_number::MaxBlockNumber,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_call_request::PrivateCallRequest,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n private_log::PrivateLogData,\n public_call_request::PublicCallRequest,\n read_request::ReadRequest,\n side_effect::Counted,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n },\n address::{AztecAddress, EthAddress},\n block_header::BlockHeader,\n constants::{\n MAX_CONTRACT_CLASS_LOGS_PER_CALL, MAX_ENQUEUED_CALLS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NOTE_HASHES_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PRIVATE_LOGS_PER_CALL,\n PRIVATE_LOG_SIZE_IN_FIELDS, PUBLIC_DISPATCH_SELECTOR,\n },\n messaging::l2_to_l1_message::L2ToL1Message,\n traits::Empty,\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n pub inputs: PrivateContextInputs,\n pub side_effect_counter: u32,\n\n pub min_revertible_side_effect_counter: u32,\n pub is_fee_payer: bool,\n\n pub args_hash: Field,\n pub return_hash: Field,\n\n pub max_block_number: MaxBlockNumber,\n\n pub note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n pub nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n pub note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n pub nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n pub private_call_requests: BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n pub public_call_requests: BoundedVec<Counted<PublicCallRequest>, MAX_ENQUEUED_CALLS_PER_CALL>,\n pub public_teardown_call_request: PublicCallRequest,\n pub l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n pub historical_header: BlockHeader,\n\n pub private_logs: BoundedVec<PrivateLogData, MAX_PRIVATE_LOGS_PER_CALL>,\n pub contract_class_logs_hashes: BoundedVec<LogHash, MAX_CONTRACT_CLASS_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n pub last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n\n pub fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n pub fn this_address(self) -> AztecAddress {\n self.inputs.call_context.contract_address\n }\n\n pub fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n pub fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n pub fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n pub fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n pub fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n\n // WARNING(https://github.com/AztecProtocol/aztec-packages/issues/10558): if you delete this debug_log_format line, some tests fail.\n debug_log_format(\n \"Context.note_hashes, after pushing new note hash: {0}\",\n self.note_hashes.storage().map(|nh: NoteHash| nh.value),\n );\n }\n\n pub fn push_nullifier(&mut self, nullifier: Field) {\n notify_created_nullifier(nullifier);\n self.nullifiers.push(\n Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() },\n );\n }\n\n pub fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n let nullifier_counter = self.next_counter();\n notify_nullified_note(nullifier, nullified_note_hash, nullifier_counter);\n self.nullifiers.push(\n Nullifier {\n value: nullifier,\n note_hash: nullified_note_hash,\n counter: nullifier_counter,\n },\n );\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n pub fn get_block_header(self) -> BlockHeader {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_block_header_at(self, block_number: u32) -> BlockHeader {\n get_block_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n execution_cache::store(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage(),\n nullifier_read_requests: self.nullifier_read_requests.storage(),\n key_validation_requests_and_generators: self\n .key_validation_requests_and_generators\n .storage(),\n note_hashes: self.note_hashes.storage(),\n nullifiers: self.nullifiers.storage(),\n private_call_requests: self.private_call_requests.storage(),\n public_call_requests: self.public_call_requests.storage(),\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage(),\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n private_logs: self.private_logs.storage(),\n contract_class_logs_hashes: self.contract_class_logs_hashes.storage(),\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context,\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Setting {0} as fee payer\",\n [self.this_address().to_field()],\n );\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number =\n MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request =\n self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale\n // Typically we'd validate keys by showing that they are the preimage of `pk_m_hash`, but that'd require\n // the oracle returning the master secret keys, which could cause malicious contracts to leak it or learn\n // about secrets from other contracts. We therefore silo secret keys, and rely on the private kernel to\n // validate that we siloed secret key corresponds to correct siloing of the master secret key that hashes\n // to `pk_m_hash`.\n\n /// Safety: Kernels verify that the key validation request is valid and below we verify that a request\n /// for the correct public key has been received.\n let request = unsafe { get_key_validation_request(pk_m_hash, key_index) };\n assert_eq(request.pk_m.hash(), pk_m_hash, \"Obtained invalid key validation request\");\n\n self.key_validation_requests_and_generators.push(\n KeyValidationRequestAndGenerator {\n request,\n sk_app_generator: sk_generators[key_index],\n },\n );\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field,\n ) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret,\n leaf_index,\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n pub fn emit_private_log(&mut self, log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS]) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter: 0, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn emit_raw_note_log(\n &mut self,\n log: [Field; PRIVATE_LOG_SIZE_IN_FIELDS],\n note_hash_counter: u32,\n ) {\n let counter = self.next_counter();\n let private_log = PrivateLogData { log: Log::new(log), note_hash_counter, counter };\n self.private_logs.push(private_log);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> ReturnsHash {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.call_private_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) -> ReturnsHash {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.call_private_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> ReturnsHash {\n self.call_private_function_with_args_hash(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) -> ReturnsHash {\n self.call_private_function_with_args_hash(contract_address, function_selector, 0, true)\n }\n\n pub fn call_private_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) -> ReturnsHash {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n\n /// Safety: The oracle simulates the private call and returns the value of the side effects counter after\n /// execution of the call (which means that end_side_effect_counter - start_side_effect_counter is\n /// the number of side effects that took place), along with the hash of the return values. We validate these\n /// by requesting a private kernel iteration in which the return values are constrained to hash\n /// to `returns_hash` and the side effects counter to increment from start to end.\n let (end_side_effect_counter, returns_hash) = unsafe {\n call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n )\n };\n\n self.private_call_requests.push(\n PrivateCallRequest {\n call_context: CallContext {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n },\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter,\n },\n );\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n self.side_effect_counter = end_side_effect_counter + 1;\n ReturnsHash::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.call_public_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.call_public_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n true,\n )\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_args_hash(contract_address, function_selector, 0, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n ) {\n self.call_public_function_with_args_hash(contract_address, function_selector, 0, true)\n }\n\n pub fn call_public_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n /// Safety: TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n /// WARNING: This is insecure and should be temporary!\n /// The oracle hashes the arguments and returns a new args_hash.\n /// new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n /// We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n /// b) this is only temporary.\n let args_hash = unsafe {\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n )\n };\n\n // Public calls are rerouted through the dispatch function.\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n let call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n\n self.public_call_requests.push(Counted::new(call_request, counter));\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT],\n ) {\n let args_hash = hash_args_array(args);\n execution_cache::store(args);\n self.set_public_teardown_function_with_args_hash(\n contract_address,\n function_selector,\n args_hash,\n false,\n )\n }\n\n pub fn set_public_teardown_function_with_args_hash(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n /// Safety: TODO(https://github.com/AztecProtocol/aztec-packages/issues/8985): Fix this.\n /// WARNING: This is insecure and should be temporary!\n /// The oracle hashes the arguments and returns a new args_hash.\n /// new_args = [selector, ...old_args], so as to make it suitable to call the public dispatch function.\n /// We don't validate or compute it in the circuit because a) it's harder to do with slices, and\n /// b) this is only temporary.\n let args_hash = unsafe {\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n )\n };\n\n let function_selector = comptime { FunctionSelector::from_field(PUBLIC_DISPATCH_SELECTOR) };\n\n self.public_teardown_call_request = PublicCallRequest {\n msg_sender: self.this_address(),\n contract_address,\n function_selector,\n is_static_call,\n args_hash,\n };\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: BlockHeader::empty(),\n private_logs: BoundedVec::new(),\n contract_class_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES],\n }\n }\n}\n"
4005
4005
  },
4006
- "97": {
4006
+ "96": {
4007
4007
  "path": "/build-volume/noir-projects/aztec-nr/aztec/src/hash.nr",
4008
4008
  "source": "use crate::utils::to_bytes::{arr_to_be_bytes_arr, str_to_be_bytes_arr};\nuse dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__FUNCTION_ARGS, GENERATOR_INDEX__MESSAGE_NULLIFIER,\n GENERATOR_INDEX__SECRET_HASH,\n },\n hash::{poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice, sha256_to_field},\n point::Point,\n traits::Hash,\n};\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_l1_to_l2_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field,\n leaf_index: Field,\n) -> Field {\n let mut hash_bytes = [0 as u8; 224];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n let leaf_index_bytes: [u8; 32] = leaf_index.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n hash_bytes[i + 192] = leaf_index_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret\npub fn compute_l1_to_l2_message_nullifier(message_hash: Field, secret: Field) -> Field {\n poseidon2_hash_with_separator([message_hash, secret], GENERATOR_INDEX__MESSAGE_NULLIFIER)\n}\n\npub struct ArgsHasher {\n pub fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n"
4009
4009
  }