@aztec/protocol-contracts 5.0.0-nightly.20260421 → 5.0.0-nightly.20260422
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.
- package/artifacts/AuthRegistry.json +23 -23
- package/artifacts/ContractClassRegistry.json +1 -1
- package/artifacts/ContractInstanceRegistry.json +9 -9
- package/artifacts/FeeJuice.json +50 -30
- package/artifacts/MultiCallEntrypoint.json +13 -13
- package/artifacts/PublicChecks.json +8 -8
- package/dest/protocol_contract_data.js +32 -32
- package/package.json +4 -4
- package/src/protocol_contract_data.ts +31 -31
|
@@ -2208,27 +2208,27 @@
|
|
|
2208
2208
|
"function_locations": [
|
|
2209
2209
|
{
|
|
2210
2210
|
"name": "derive_serialize",
|
|
2211
|
-
"start":
|
|
2211
|
+
"start": 3018
|
|
2212
2212
|
},
|
|
2213
2213
|
{
|
|
2214
2214
|
"name": "derive_deserialize",
|
|
2215
|
-
"start":
|
|
2215
|
+
"start": 7206
|
|
2216
2216
|
},
|
|
2217
2217
|
{
|
|
2218
2218
|
"name": "get_params_len_quote",
|
|
2219
|
-
"start":
|
|
2219
|
+
"start": 10928
|
|
2220
2220
|
},
|
|
2221
2221
|
{
|
|
2222
2222
|
"name": "get_generics_declarations",
|
|
2223
|
-
"start":
|
|
2223
|
+
"start": 11387
|
|
2224
2224
|
},
|
|
2225
2225
|
{
|
|
2226
2226
|
"name": "get_where_trait_clause",
|
|
2227
|
-
"start":
|
|
2227
|
+
"start": 12469
|
|
2228
2228
|
}
|
|
2229
2229
|
],
|
|
2230
2230
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/serde/src/serialization.nr",
|
|
2231
|
-
"source": "use crate::{reader::Reader, writer::Writer};\n\n// docs:start:serialize\n/// Trait for serializing Noir types into arrays of Fields.\n///\n/// An implementation of the Serialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait (and Deserialize) are\n/// typically used to communicate between Noir and TypeScript (via oracles and function arguments).\n///\n/// # On Following Noir's Intrinsic Serialization\n/// When calling a Noir function from TypeScript (TS), first the function arguments are serialized into an array\n/// of fields. This array is then included in the initial witness. Noir's intrinsic serialization is then used\n/// to deserialize the arguments from the witness. When the same Noir function is called from Noir this Serialize trait\n/// is used instead of the serialization in TS. For this reason we need to have a match between TS serialization,\n/// Noir's intrinsic serialization and the implementation of this trait. If there is a mismatch, the function calls\n/// fail with an arguments hash mismatch error message.\n///\n/// # Associated Constants\n/// * `N` - The length of the output Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let N: u32> Serialize for str<N> {\n/// let N: u32 = N;\n///\n/// fn serialize(self) -> [Field; Self::N] {\n/// let mut writer: Writer<Self::N> = Writer::new();\n/// self.stream_serialize(&mut writer);\n/// writer.finish()\n/// }\n///\n/// fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n/// let bytes = self.as_bytes();\n/// for i in 0..bytes.len() {\n/// writer.write(bytes[i] as Field);\n/// }\n/// }\n/// }\n/// ```\n#[derive_via(derive_serialize)]\npub trait Serialize {\n let N: u32;\n\n fn serialize(self) -> [Field; Self::N];\n\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>);\n}\n\n/// Generates a `Serialize` trait implementation for a struct type.\n///\n/// # Parameters\n/// - `s`: The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A quoted code block containing the trait implementation\n///\n/// # Example\n/// For a struct defined as:\n/// ```\n/// struct Log<N> {\n/// fields: [Field; N],\n/// length: u32\n/// }\n/// ```\n///\n/// This function generates code equivalent to:\n/// ```\n/// impl<let N: u32> Serialize for Log<N> {\n/// let N: u32 = <[Field; N] as Serialize>::N + <u32 as Serialize>::N;\n///\n/// fn serialize(self) -> [Field; Self::N] {\n/// let mut writer: Writer<Self::N> = Writer::new();\n/// self.stream_serialize(&mut writer);\n/// writer.finish()\n/// }\n///\n/// #[inline_always]\n/// fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n/// Serialize::stream_serialize(self.fields, writer);\n/// Serialize::stream_serialize(self.length, writer);\n/// }\n/// }\n/// ```\npub comptime fn derive_serialize(s: TypeDefinition) -> Quoted {\n let typ = s.as_type();\n let nested_struct = typ.as_data_type().unwrap();\n\n // We care only about the name and type so we drop the last item of the tuple\n let params = nested_struct.0.fields(nested_struct.1).map(|(name, typ, _)| (name, typ));\n\n // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n // for the `Serialize` trait.\n let generics_declarations = get_generics_declarations(s);\n let where_serialize_clause = get_where_trait_clause(s, quote {Serialize});\n\n let params_len_quote = get_params_len_quote(params);\n\n let function_body = params\n .map(|(name, _typ): (Quoted, Type)| {\n quote {\n $crate::serialization::Serialize::stream_serialize(self.$name, writer);\n }\n })\n .join(quote {});\n\n quote {\n impl$generics_declarations $crate::serialization::Serialize for $typ\n $where_serialize_clause\n {\n let N: u32 = $params_len_quote;\n\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n $crate::serialization::Serialize::stream_serialize(self, &mut writer);\n writer.finish()\n }\n\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n $function_body\n }\n }\n }\n}\n\n// docs:start:deserialize\n/// Trait for deserializing Noir types from arrays of Fields.\n///\n/// An implementation of the Deserialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait is typically used when\n/// deserializing return values from function calls in Noir. Since the same function could be called from TypeScript\n/// (TS), in which case the TS deserialization would get used, we need to have a match between the 2.\n///\n/// # Associated Constants\n/// * `N` - The length of the input Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let M: u32> Deserialize for str<M> {\n/// let N: u32 = M;\n///\n/// fn deserialize(fields: [Field; Self::N]) -> Self {\n/// let mut reader = Reader::new(fields);\n/// let result = Self::stream_deserialize(&mut reader);\n/// reader.finish();\n/// result\n/// }\n///\n/// fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n/// let mut bytes = [0 as u8; M];\n/// for i in 0..M {\n/// bytes[i] = reader.read() as u8;\n/// }\n/// str::<M>::from(bytes)\n/// }\n/// }\n/// ```\n#[derive_via(derive_deserialize)]\npub trait Deserialize {\n let N: u32;\n\n fn deserialize(fields: [Field; Self::N]) -> Self;\n\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self;\n}\n\n/// Generates a `Deserialize` trait implementation for a given struct `s`.\n///\n/// # Arguments\n/// * `s` - The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A `Quoted` block containing the generated trait implementation\n///\n/// # Requirements\n/// Each struct member type must implement the `Deserialize` trait (it gets used in the generated code).\n///\n/// # Example\n/// For a struct like:\n/// ```\n/// struct MyStruct {\n/// x: AztecAddress,\n/// y: Field,\n/// }\n/// ```\n///\n/// This generates:\n/// ```\n/// impl Deserialize for MyStruct {\n/// let N: u32 = <AztecAddress as Deserialize>::N + <Field as Deserialize>::N;\n///\n/// fn deserialize(fields: [Field; Self::N]) -> Self {\n/// let mut reader = Reader::new(fields);\n/// let result = Self::stream_deserialize(&mut reader);\n/// reader.finish();\n/// result\n/// }\n///\n/// #[inline_always]\n/// fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n/// let x = <AztecAddress as Deserialize>::stream_deserialize(reader);\n/// let y = <Field as Deserialize>::stream_deserialize(reader);\n/// Self { x, y }\n/// }\n/// }\n/// ```\npub comptime fn derive_deserialize(s: TypeDefinition) -> Quoted {\n let typ = s.as_type();\n let nested_struct = typ.as_data_type().unwrap();\n let params = nested_struct.0.fields(nested_struct.1);\n\n // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n // for the `Deserialize` trait.\n let generics_declarations = get_generics_declarations(s);\n let where_deserialize_clause = get_where_trait_clause(s, quote {Deserialize});\n\n // The following will give us:\n // <type_of_struct_member_1 as Deserialize>::N + <type_of_struct_member_2 as Deserialize>::N + ...\n // (or 0 if the struct has no members)\n let right_hand_side_of_definition_of_n = if params.len() > 0 {\n params\n .map(|(_, param_type, _): (Quoted, Type, Quoted)| {\n quote {\n <$param_type as $crate::serialization::Deserialize>::N\n }\n })\n .join(quote {+})\n } else {\n quote {0}\n };\n\n // For structs containing a single member, we can enhance performance by directly deserializing the input array,\n // bypassing the need for loop-based array construction. While this optimization yields significant benefits in\n // Brillig where the loops are expected to not be optimized, it is not relevant in ACIR where the loops are\n // expected to be optimized away.\n let function_body = if params.len() > 1 {\n // This generates deserialization code for each struct member and concatenates them together.\n let deserialization_of_struct_members = params\n .map(|(param_name, param_type, _): (Quoted, Type, Quoted)| {\n quote {\n let $param_name = <$param_type as Deserialize>::stream_deserialize(reader);\n }\n })\n .join(quote {});\n\n // We join the struct member names with a comma to be used in the `Self { ... }` syntax\n // This will give us e.g. `a, b, c` for a struct with three fields named `a`, `b`, and `c`.\n let struct_members = params\n .map(|(param_name, _, _): (Quoted, Type, Quoted)| quote { $param_name })\n .join(quote {,});\n\n quote {\n $deserialization_of_struct_members\n\n Self { $struct_members }\n }\n } else if params.len() == 1 {\n let param_name = params[0].0;\n quote {\n Self { $param_name: $crate::serialization::Deserialize::stream_deserialize(reader) }\n }\n } else {\n quote {\n Self {}\n }\n };\n\n quote {\n impl$generics_declarations $crate::serialization::Deserialize for $typ\n $where_deserialize_clause\n {\n let N: u32 = $right_hand_side_of_definition_of_n;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = $crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n $function_body\n }\n }\n }\n}\n\n/// Generates a quoted expression that computes the total serialized length of function parameters.\n///\n/// # Parameters\n/// * `params` - An array of tuples where each tuple contains a quoted parameter name and its Type. The type needs\n/// to implement the Serialize trait.\n///\n/// # Returns\n/// A quoted expression that evaluates to:\n/// * `0` if there are no parameters\n/// * `(<type1 as Serialize>::N + <type2 as Serialize>::N + ...)` for one or more parameters\ncomptime fn get_params_len_quote(params: [(Quoted, Type)]) -> Quoted {\n if params.len() == 0 {\n quote { 0 }\n } else {\n let params_quote_without_parentheses = params\n .map(|(_, param_type): (Quoted, Type)| {\n quote {\n <$param_type as $crate::serialization::Serialize>::N\n }\n })\n .join(quote {+});\n quote { ($params_quote_without_parentheses) }\n }\n}\n\ncomptime fn get_generics_declarations(s: TypeDefinition) -> Quoted {\n let generics = s.generics();\n\n if generics.len() > 0 {\n let generics_declarations_items = generics\n .map(|(name, maybe_integer_typ)| {\n // The second item in the generics tuple is an Option of an integer type that is Some only if\n // the generic is numeric.\n if maybe_integer_typ.is_some() {\n // The generic is numeric, so we return a quote defined as e.g. \"let N: u32\"\n let integer_type = maybe_integer_typ.unwrap();\n quote {let $name: $integer_type}\n } else {\n // The generic is not numeric, so we return a quote containing the name of the generic (e.g. \"T\")\n quote {$name}\n }\n })\n .join(quote {,});\n quote {<$generics_declarations_items>}\n } else {\n // The struct doesn't have any generics defined, so we just return an empty quote.\n quote {}\n }\n}\n\ncomptime fn get_where_trait_clause(s: TypeDefinition, trait_name: Quoted) -> Quoted {\n let generics = s.generics();\n\n // The second item in the generics tuple is an Option of an integer type that is Some only if the generic is\n // numeric.\n let non_numeric_generics =\n generics.filter(|(_, maybe_integer_typ)| maybe_integer_typ.is_none());\n\n if non_numeric_generics.len() > 0 {\n let non_numeric_generics_declarations =\n non_numeric_generics.map(|(name, _)| quote {$name: $trait_name}).join(quote {,});\n quote {where $non_numeric_generics_declarations}\n } else {\n // There are no non-numeric generics, so we return an empty quote.\n quote {}\n }\n}\n"
|
|
2231
|
+
"source": "use crate::{reader::Reader, writer::Writer};\n\n/// Trait for serializing Noir types into arrays of Fields.\n///\n/// An implementation of the Serialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait (and Deserialize) are\n/// typically used to communicate between Noir and TypeScript (via oracles and function arguments).\n///\n/// # On Following Noir's Intrinsic Serialization\n/// When calling a Noir function from TypeScript (TS), first the function arguments are serialized into an array\n/// of fields. This array is then included in the initial witness. Noir's intrinsic serialization is then used\n/// to deserialize the arguments from the witness. When the same Noir function is called from Noir this Serialize trait\n/// is used instead of the serialization in TS. For this reason we need to have a match between TS serialization,\n/// Noir's intrinsic serialization and the implementation of this trait. If there is a mismatch, the function calls\n/// fail with an arguments hash mismatch error message.\n///\n/// # Associated Constants\n/// * `N` - The length of the output Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let N: u32> Serialize for str<N> {\n/// let N: u32 = N;\n///\n/// fn serialize(self) -> [Field; Self::N] {\n/// let mut writer: Writer<Self::N> = Writer::new();\n/// self.stream_serialize(&mut writer);\n/// writer.finish()\n/// }\n///\n/// fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n/// let bytes = self.as_bytes();\n/// for i in 0..bytes.len() {\n/// writer.write(bytes[i] as Field);\n/// }\n/// }\n/// }\n/// ```\n#[derive_via(derive_serialize)]\npub trait Serialize {\n let N: u32;\n\n fn serialize(self) -> [Field; Self::N];\n\n fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>);\n}\n\n/// Generates a `Serialize` trait implementation for a struct type.\n///\n/// # Parameters\n/// - `s`: The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A quoted code block containing the trait implementation\n///\n/// # Example\n/// For a struct defined as:\n/// ```\n/// struct Log<N> {\n/// fields: [Field; N],\n/// length: u32\n/// }\n/// ```\n///\n/// This function generates code equivalent to:\n/// ```\n/// impl<let N: u32> Serialize for Log<N> {\n/// let N: u32 = <[Field; N] as Serialize>::N + <u32 as Serialize>::N;\n///\n/// fn serialize(self) -> [Field; Self::N] {\n/// let mut writer: Writer<Self::N> = Writer::new();\n/// self.stream_serialize(&mut writer);\n/// writer.finish()\n/// }\n///\n/// #[inline_always]\n/// fn stream_serialize<let K: u32>(self, writer: &mut Writer<K>) {\n/// Serialize::stream_serialize(self.fields, writer);\n/// Serialize::stream_serialize(self.length, writer);\n/// }\n/// }\n/// ```\npub comptime fn derive_serialize(s: TypeDefinition) -> Quoted {\n let typ = s.as_type();\n let nested_struct = typ.as_data_type().unwrap();\n\n // We care only about the name and type so we drop the last item of the tuple\n let params = nested_struct.0.fields(nested_struct.1).map(|(name, typ, _)| (name, typ));\n\n // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n // for the `Serialize` trait.\n let generics_declarations = get_generics_declarations(s);\n let where_serialize_clause = get_where_trait_clause(s, quote {Serialize});\n\n let params_len_quote = get_params_len_quote(params);\n\n let function_body = params\n .map(|(name, _typ): (Quoted, Type)| {\n quote {\n $crate::serialization::Serialize::stream_serialize(self.$name, writer);\n }\n })\n .join(quote {});\n\n quote {\n impl$generics_declarations $crate::serialization::Serialize for $typ\n $where_serialize_clause\n {\n let N: u32 = $params_len_quote;\n\n\n fn serialize(self) -> [Field; Self::N] {\n let mut writer: $crate::writer::Writer<Self::N> = $crate::writer::Writer::new();\n $crate::serialization::Serialize::stream_serialize(self, &mut writer);\n writer.finish()\n }\n\n\n #[inline_always]\n fn stream_serialize<let K: u32>(self, writer: &mut $crate::writer::Writer<K>) {\n $function_body\n }\n }\n }\n}\n\n/// Trait for deserializing Noir types from arrays of Fields.\n///\n/// An implementation of the Deserialize trait has to follow Noir's intrinsic serialization (each member of a struct\n/// converted directly into one or more Fields without any packing or compression). This trait is typically used when\n/// deserializing return values from function calls in Noir. Since the same function could be called from TypeScript\n/// (TS), in which case the TS deserialization would get used, we need to have a match between the 2.\n///\n/// # Associated Constants\n/// * `N` - The length of the input Field array, known at compile time\n///\n/// # Example\n/// ```\n/// impl<let M: u32> Deserialize for str<M> {\n/// let N: u32 = M;\n///\n/// fn deserialize(fields: [Field; Self::N]) -> Self {\n/// let mut reader = Reader::new(fields);\n/// let result = Self::stream_deserialize(&mut reader);\n/// reader.finish();\n/// result\n/// }\n///\n/// fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n/// let mut bytes = [0 as u8; M];\n/// for i in 0..M {\n/// bytes[i] = reader.read() as u8;\n/// }\n/// str::<M>::from(bytes)\n/// }\n/// }\n/// ```\n#[derive_via(derive_deserialize)]\npub trait Deserialize {\n let N: u32;\n\n fn deserialize(fields: [Field; Self::N]) -> Self;\n\n fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self;\n}\n\n/// Generates a `Deserialize` trait implementation for a given struct `s`.\n///\n/// # Arguments\n/// * `s` - The struct type definition to generate the implementation for\n///\n/// # Returns\n/// A `Quoted` block containing the generated trait implementation\n///\n/// # Requirements\n/// Each struct member type must implement the `Deserialize` trait (it gets used in the generated code).\n///\n/// # Example\n/// For a struct like:\n/// ```\n/// struct MyStruct {\n/// x: AztecAddress,\n/// y: Field,\n/// }\n/// ```\n///\n/// This generates:\n/// ```\n/// impl Deserialize for MyStruct {\n/// let N: u32 = <AztecAddress as Deserialize>::N + <Field as Deserialize>::N;\n///\n/// fn deserialize(fields: [Field; Self::N]) -> Self {\n/// let mut reader = Reader::new(fields);\n/// let result = Self::stream_deserialize(&mut reader);\n/// reader.finish();\n/// result\n/// }\n///\n/// #[inline_always]\n/// fn stream_deserialize<let K: u32>(reader: &mut Reader<K>) -> Self {\n/// let x = <AztecAddress as Deserialize>::stream_deserialize(reader);\n/// let y = <Field as Deserialize>::stream_deserialize(reader);\n/// Self { x, y }\n/// }\n/// }\n/// ```\npub comptime fn derive_deserialize(s: TypeDefinition) -> Quoted {\n let typ = s.as_type();\n let nested_struct = typ.as_data_type().unwrap();\n let params = nested_struct.0.fields(nested_struct.1);\n\n // Generates the generic parameter declarations (to be placed after the `impl` keyword) and the `where` clause\n // for the `Deserialize` trait.\n let generics_declarations = get_generics_declarations(s);\n let where_deserialize_clause = get_where_trait_clause(s, quote {Deserialize});\n\n // The following will give us:\n // <type_of_struct_member_1 as Deserialize>::N + <type_of_struct_member_2 as Deserialize>::N + ...\n // (or 0 if the struct has no members)\n let right_hand_side_of_definition_of_n = if params.len() > 0 {\n params\n .map(|(_, param_type, _): (Quoted, Type, Quoted)| {\n quote {\n <$param_type as $crate::serialization::Deserialize>::N\n }\n })\n .join(quote {+})\n } else {\n quote {0}\n };\n\n // For structs containing a single member, we can enhance performance by directly deserializing the input array,\n // bypassing the need for loop-based array construction. While this optimization yields significant benefits in\n // Brillig where the loops are expected to not be optimized, it is not relevant in ACIR where the loops are\n // expected to be optimized away.\n let function_body = if params.len() > 1 {\n // This generates deserialization code for each struct member and concatenates them together.\n let deserialization_of_struct_members = params\n .map(|(param_name, param_type, _): (Quoted, Type, Quoted)| {\n quote {\n let $param_name = <$param_type as Deserialize>::stream_deserialize(reader);\n }\n })\n .join(quote {});\n\n // We join the struct member names with a comma to be used in the `Self { ... }` syntax\n // This will give us e.g. `a, b, c` for a struct with three fields named `a`, `b`, and `c`.\n let struct_members = params\n .map(|(param_name, _, _): (Quoted, Type, Quoted)| quote { $param_name })\n .join(quote {,});\n\n quote {\n $deserialization_of_struct_members\n\n Self { $struct_members }\n }\n } else if params.len() == 1 {\n let param_name = params[0].0;\n quote {\n Self { $param_name: $crate::serialization::Deserialize::stream_deserialize(reader) }\n }\n } else {\n quote {\n Self {}\n }\n };\n\n quote {\n impl$generics_declarations $crate::serialization::Deserialize for $typ\n $where_deserialize_clause\n {\n let N: u32 = $right_hand_side_of_definition_of_n;\n\n fn deserialize(fields: [Field; Self::N]) -> Self {\n let mut reader = $crate::reader::Reader::new(fields);\n let result = Self::stream_deserialize(&mut reader);\n reader.finish();\n result\n }\n\n #[inline_always]\n fn stream_deserialize<let K: u32>(reader: &mut $crate::reader::Reader<K>) -> Self {\n $function_body\n }\n }\n }\n}\n\n/// Generates a quoted expression that computes the total serialized length of function parameters.\n///\n/// # Parameters\n/// * `params` - An array of tuples where each tuple contains a quoted parameter name and its Type. The type needs\n/// to implement the Serialize trait.\n///\n/// # Returns\n/// A quoted expression that evaluates to:\n/// * `0` if there are no parameters\n/// * `(<type1 as Serialize>::N + <type2 as Serialize>::N + ...)` for one or more parameters\ncomptime fn get_params_len_quote(params: [(Quoted, Type)]) -> Quoted {\n if params.len() == 0 {\n quote { 0 }\n } else {\n let params_quote_without_parentheses = params\n .map(|(_, param_type): (Quoted, Type)| {\n quote {\n <$param_type as $crate::serialization::Serialize>::N\n }\n })\n .join(quote {+});\n quote { ($params_quote_without_parentheses) }\n }\n}\n\ncomptime fn get_generics_declarations(s: TypeDefinition) -> Quoted {\n let generics = s.generics();\n\n if generics.len() > 0 {\n let generics_declarations_items = generics\n .map(|(name, maybe_integer_typ)| {\n // The second item in the generics tuple is an Option of an integer type that is Some only if\n // the generic is numeric.\n if maybe_integer_typ.is_some() {\n // The generic is numeric, so we return a quote defined as e.g. \"let N: u32\"\n let integer_type = maybe_integer_typ.unwrap();\n quote {let $name: $integer_type}\n } else {\n // The generic is not numeric, so we return a quote containing the name of the generic (e.g. \"T\")\n quote {$name}\n }\n })\n .join(quote {,});\n quote {<$generics_declarations_items>}\n } else {\n // The struct doesn't have any generics defined, so we just return an empty quote.\n quote {}\n }\n}\n\ncomptime fn get_where_trait_clause(s: TypeDefinition, trait_name: Quoted) -> Quoted {\n let generics = s.generics();\n\n // The second item in the generics tuple is an Option of an integer type that is Some only if the generic is\n // numeric.\n let non_numeric_generics =\n generics.filter(|(_, maybe_integer_typ)| maybe_integer_typ.is_none());\n\n if non_numeric_generics.len() > 0 {\n let non_numeric_generics_declarations =\n non_numeric_generics.map(|(name, _)| quote {$name: $trait_name}).join(quote {,});\n quote {where $non_numeric_generics_declarations}\n } else {\n // There are no non-numeric generics, so we return an empty quote.\n quote {}\n }\n}\n"
|
|
2232
2232
|
},
|
|
2233
2233
|
"414": {
|
|
2234
2234
|
"function_locations": [
|
|
@@ -3782,7 +3782,7 @@
|
|
|
3782
3782
|
"custom_attributes": [
|
|
3783
3783
|
"abi_utility"
|
|
3784
3784
|
],
|
|
3785
|
-
"debug_symbols": "
|
|
3785
|
+
"debug_symbols": "tZndbhs5DEbfxde5EKkfinmVoCjc1C0MGE7gJgssgrz7khl9st2FBNdOb6KTxHNMcShK9rytvm++vf78ut3/ePq1un94W307bHe77c+vu6fH9cv2aW9/fVsF/1G4ru7jnY26ui82xtBGaiO3MbYxtTG3sbRR2ljb2Hyp+VLzpebL9jqxsdjf1Uduo/mJHDLA3oE8xCKACtAGEgAEYEAEJEAGwCwwC8wCc4W5wlxhrjBXmCvMFeYKc4W5wqwwK8wKs8KsMGszS/CrsgMBGOCvKQ4FIAB7dw4O2oACgAAMiAB7d/bLKQMKQABuFgdtwAHgZnUwc/TgOQISIAMKQAAVoA28NhcgAMwR5gizF2j0tHiFLiAAN3uEXqQf4FW6gF/uMSd7cSIHe3FyYdIGOQAsjJQcGBABCZABBSAAN3s8WRuUACCAmz2wEgEJ4ObqUAACqABt4AtkAQK42WfqC2SBBMgAM2dPgi+QBSrAzJkNfIEsQAAGREACZICbPYe+QBaoAG3gCyR7onyBZC82XyALRICbPRu+QBYoAAFUgC5QfREt4ObqwIAISADvdMGhAATgzY4ctIEvq8IOBGBABHgLLQ5u9rfwZbWAACpAG/iyWoAAblaHCDCzeBi+rBYoADOLv7svqwW0gS+rBQjAgAhwc3TIgAIQgJuTgzbwZbUAAfyq7CCACvCrfF6+vhYggMfjE/T1tUACZEABCKACzFz9fvn6WoAADHBzeX+/W2GT/Ppy2Gx8jzzZNW0vfV4fNvuX1f3+dbe7W/2z3r1+vOjX83r/Mb6sD/ZfU27232004Y/tbuP0fne8OowvpWCbbrvcuGhXUOAzCY0lyZvzhyIl6QI5v57H18eMGUSpxwAq/cEstPZZWPsaziKNJTlXbY5cQjkqcj5T5LGCCyOZbIePrigXx2DHhB6D8jCGicIOU7Ep7JwUhoo6Vtie3gxyKhC9eBrSY8i26w5joMk9jUy4HZFjHuRybtBeVzHUkWFSmIkYhkRRr7iftp0gEda3x4mYONTPWx8K5eMkEl0cg/ZJZNVwVU2FAEUJNFaQTNaoFlQVqaRjLs8nQpO6JKHeq+yUMFToLJkIQutJq7G2c7FBU+80lIcKnvRL5gQHcx7eU+ZZx+Nj2840DiNOCqN2R7Zt6ySMdO6YV4b2yuAwdsy6Zsq9acqJ4crC0HFhyOyeROr3JMWRgidRlJx7LrKmq6KgIojC+vhIESddL+W+Gcu4LuJsO6fCvevp6T0930vjrD5zvyE5nhjy5VFwr6zEIuMoJtVJXLEPUSQaxzFxRIl9H6qhjuMof9dBhVLPaSGJw7UWJzWqWZERPa3R/zmmkcRjD7TvWsarPs1253I89KXhnZkaUk/qWff6zTDb30NE60khyXgeEwdHzIMzXxUF197/ahnXqMyOjaF3ciuT8TzKJ+Si3JyLcnMuyu25yOH2XMwcl+Viarg5FxZ87fModNVqvzgX+e86Lsxnvjmf0z1J+zzipI9n/YQ9aVaf0j+ppjA+xc4OGrHimMB2S646qyTqp9h8cgT9TVHirWeVMtudg2K1WzLHe2LJs8+J5fhJs/KVjj4V09WxQ26t8Gk+L6qL2XGeMxpG4TL+vCqT4rQHHEiFPdmIgw/NU0NlnILtcYdeZZA+jypXfHC3R1T9LB/D+BPv9KxV+glWC5Xrzmunjjiub/mEHVHk9g4uN9f31DDu4F/s1/Xj9nD22PHdVYft+ttu03798bp/PPnvy7/P+A8eWz4fnh43318PGzcdn13aj4dq3ypX5S93K/v+9sHO4HeFxX7zr98fqhWMBvry7rH8Bw==",
|
|
3786
3786
|
"is_unconstrained": true,
|
|
3787
3787
|
"name": "offchain_receive"
|
|
3788
3788
|
},
|
|
@@ -3968,7 +3968,7 @@
|
|
|
3968
3968
|
"custom_attributes": [
|
|
3969
3969
|
"abi_utility"
|
|
3970
3970
|
],
|
|
3971
|
-
"debug_symbols": "vb3bjuzKcXb7LutaF5VxyINf5ccPQ7ZlQ4AgGbK8gQ3D774rg2SOmHOistldvfaN17DdMwYryfh4SpL/89u//elf/vs//vnPf/33v/3Xb//0f/7nt3/5+5//8pc//8c//+Vv//rHf/z5b399/l//57fH/B+j//ZP+offxvjtn/wPv5XH4/xvOf8r53/1/K+d//Xzv/X8bzv/28//nvXKWa+c9cpZr5z1ylmvnPXKWa+c9cpZr5z15KwnZz0568lZT856ctaTs56c9eSsJ2c9PevpWU/PenrW07OenvX0rKdnPT3r6VnPznp21rOznp317KxnZz0769lZz856dtbzs56f9fys52c9P+v5Wc/Pen7W87Oen/XqWa+e9epZr5716lmvnvXqWa+e9epZr5712lmvnfXaWa+d9dpZr5312lmvnfXaWa+d9fpZr5/1+lmvn/X6Wa+f9fpZr5/1+lmvn/XGs16b/y3nf+X8r57/fdYrZYJfUC94liw64Vmz1D/8JrMZSpvw/GN5THj+sciE5x+LT+gXjBNmCxxQLpALnkuhZYJd4BfUC56VdSpmKxwwTpgbveqE+cez4NzMdS7h3M61TxgnzC39gHLBczFsKuZGbLPg3Gpt1pmbq82fHNvn/KWxgQb0C8YJsY0GlAvmWpv/PDbTALvAL5iV56LGphowK88Fi411QmytAeUCuUAvsAueleu0z232gHZBv2CcMLfbA8oFcoFeYBdcldtVuV2V21W5XZX7VblflftVuV+V+1W5X5X7VblflftVuV+Vx1V5XJXHVXlclcdVeVyVx1V5XJXHVXmclfXxuKBcIBfoBXaBX1AvaBf0C67K5apcrsrlqlyuyuWqXK7K5apcrsrlqlyuynJVlquyXJXlqixXZbkqy1VZrspyVZarsl6V9aqsV2W9KutVWa/KelXWq7JelfWqPPcO1SaUC+SCWblPsAv8gnpBu6Bf8Kzc5j+fPXhAuUAumFHnE+wCv2D+82cz6myrNgvOtupzUWdbdZnw/OM+/3i21QHtgn7BOGG21QHPxRhlglygF9gFz8pjKmZbHdAueFYeOmGcMNvqgHLBrDwXfjbRaBNmUD/m0s+eOWg2zUll0qw+2+Z5JDNpxv9jLnDk/0F1UVsUladjjJPs8VhUFskiXRS7GJnki2Ino5NmvblTsdkqJ5VFskgX2SJfVBe1RX3RcshyyHJIOMYkXTQdcw9ns3NOqhfNvngegU2Kv5u/SH1RXdQWzWWR+XtnLxw0m+Gksmguy9w12uyHk2yRLwrHXHpri/qicZE/FpVF4eiTdJEt8kVrTH2Nqa8x9TWmdY1pXWNa13qra73Vtd7qWm91Oepy1OWo8Tvm+miPRWWRLFrrrdkiX1QXtUV90bjWan8sKov8WtPRW7Euo7eCorcOKovkWpdDF9kiX1SvdRlddlBfNE7yx7UG/VEWyaJrDfrDFvmielH0jD5/kUcHzIMmjw44SBbpIlvki2Y9tUltUV80LtJw1EllkSwKx1z66J6DfFFd1Bb1ReOi6J55GOfRPQfJIl0UledIRgfEGMT2HL8otueDxkV1jVBdI1TXCMX2HL8ytueDfNEaodie4/fG9nzQuCi25/gdsT0fJIvWCLU1Qm2NUFsjFNtz/MrYng8aF/U1Ql2uMYit2OYYxFYcFFvxQWWRLNJFtsgX1UVt0XKMy1Efj0VlkSzSRbbIF9VFbVFftBxlOcpylOUoyxEdMA/3a3TAQbIo/q5NskW+qC5qi/qiuSz+3EpqdMBBZZEsmg63SbbIF02H+6S2qC8Kx7RFB8wj/xodMA+wanTAQbrIFvmiumg6apnUF42LYv9xUFkki3SRLfJFddFy+HL4ctTliH6rc4Si3w7SReGYIxT9dlBd1Bb1ReOi6LeDdNGq11a96K1aJ7VFfdG4KHrroLJIFukiW+SLlqMvR1+OvhxjOcZyjOUYyzGWYyzHWI6xHGM5xuVoj8eiskgW6SJb5IvqoraoL1qOshxlOcpylOUoy1GWoyxHWY6yHGU5ZDlkOWQ5ZDlkOWQ5ZDlkOWQ5ZDl0OXQ5dDl0OXQ5dDl0OXQ5dDl0OWw5bDlsOWw5bDlsOWw5bDlsOWw5fDl8OXw5fDl8OXw5fDl8OXw5fDnqctTlqMtRl6MuR12Ouhx1Oepy1OVoy9GWoy1HW462HG05Vp+31edt9Xlbfd5Wn7fV5231eVt93laft9XnbfV5W33eVp+31edt9Xlbfd5Wn7fV5231eVt93laft9XnbfV5W33eV5/31ed99Xlffd5Xn/fV5331eV993lef96PPn0fS/ejzoLIoKvskW+SLZuVWJrVFfdG4KLr7oLJIFukiW+SLlkOWQ5ZDlkOXQ5dDl0OXQ5dDl0OXQ5dDl0OXw5bDlsOWw5bDlsOWw5bDlsOWw5bDl8OXw5fDl8OXw5fDl8OXw5fDl6MuR12Ouhx1Oepy1OWoy1GXoy5HXY62HG052nK05WjL0ZajLUdbjrYcbTn6cvTl6MvRl6MvR1+Ovhx9Ofpy9OUYyzGWYyzHWI6xHGM5xnKM5RjLMS7HeDwWlUWySBfZIl9UF7VFfdFylOUoy1GWoyxHWY6yHKvPx+rzsfp8rD4fq8/H6vOx+nysPh+rz8fq87H6fKw+H6vPx+rzsfp8rD4fq8/H6vOx+nysPh+rz8fq87H6fKw+H6vPx9HnPkkW6aJwtEm+qC4Kx5jUF42Los/7dESfHxSOPkkX2aLp6PNeZ/T5QW3RdHSbNC6KPj+oLJJFusgW+aJwzF8ZfX5QXzQuij7v8/dGnx8ki3SRLQqHTKqL2qLpGI9J46Lo84PKIlmki2yRL6qL2qLl6MsxlmMsx1iOsRxjOcZyjOUYyzGWI/p8XhV+XsZ9gAUUMGpqYBSIe9HRxQdGG59YwKhQAxU00MEo1uLeeKynHqiggQ5WsIGxkAeOhdGjJxZQQAUNdLCCDcQWzTpG3NGfdyPnFfInKmiggxVsYAfHwtmhFxYwbLGyXEEDHaxgAzs4FtYHWEBsFVvFVrFVbBVbxVaxNWwNW8PWsDVsDVvD1rA1bA1bx9axdWwdW8fWsXVsHVvH1rENbAPbwDawDWwD28A2sA1sY9liwsmFBRRQQQMdrGADO4itYCvYCraCrWAr2Aq2gq1gK9gEm2ATbIJNsAk2wSbYBJtgU2yKTbEpNsWm2BSbYlNsis2wGTbDZtgMm2EzbIbNsBk2x+bYyJJClhSypJAlhSwpZEkhSwpZUsiSQpYUsqSQJYUsKWRJIUsKWVLIkkKWFLKkkCWFLClkSSFLCllSyJJClhSypBxZMndf5ciSAws4beWYcDVt8/ZTick2FzpYwQZ2cCyMLDmxgAJiG9gGtoFtYBvLJpEapQfOCvMuVDlm6JxYwQZ2cCyMfJAoFvlwooAKhm0EOljBaZs3XErM3blwLIx8mJN8nlhAARWcNo2FjCSYN2NKTPO5cCyMJDgx6h4z5KJuDYy6MXyRBCc6WMGwxS+OJDhxLIwkOHHaLH5btL/F8kb7WyxOtL8dE/Wmwo+/bWAHx8Jo/xMLKOC0eQxUtP+JfW0a0d0HRnefyLYT3X2iggY6WMEGYqvYors9fnx094kCKmiggxVsYAfHwo6tY+vYOraO7ejuAyvYwLBZ4FgY3X1i2GLjiu4+UUEDHaxgAzs4LoxJShcWUEAFDXSwgg3sILaCrWAr2Aq2gq1gK9gKtoKtYBNsgk2wCTbBJtgEm2ATbIIt8mHeQysxxenC2OP0QL/ODvQ4kziwgR1cZxIxvenCAgqooIHYDJthM2yGzbE5Nsfm2BybY3Nsjs2xObaKrWKr2Cq2iq1iq9gqtoqtYmvYGraGrWFr2Bq2hq1ha9gato6tY+vYOraOrWPr2Dq2jq1jG9gGtoFtYBvYBraBbWAb2MayHbO0TiyggAoa6GAFG9hBbAVbwVawFWwFW8FWsBVsBVvBJtgEm2ATbIJNsAk2wSbYBJtiU2yKTbEpNrLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyRInS5wscbLEyRInS5wscbLEyRInS5wscbLEyRInS5wscbLEyRInS5wscbLEyRInS5wscbLEyRInS5wscbLEyRInS5wscbLEyRInS5wscbLEyZKYKPc8wA/s4FgYZygnFlBABQ10sILYDJthc2yOzbE5Nsfm2BxbXKuYE5VKzNW7cCyMs5kTp61KoIAKGuhgBcNWAjs4FsbZzJyNVGLi3oUCKmiggxVsC+NkpR4PLAmooIEOVjCK1cAOjoVxsnJiAQVU0MBZrMX4xrlIYMznu7CAAio4i81Z9iUm9V1YwQaGrQWOhXEucmLYeqCACk5bD3Gci8wbY0+ctnmf64kN7OBYGOciJxZw2uadrRJTBC800MEKNrCDY2Gci5xYQGyKTbEptrhW0WP4IglO7OC0xf2hmDN4YQEFVNBAByvYwA5ic2yOLZJgxKJHEpxooIMVbGAHw3Y8qfcAn7bnSXKggAoa6GAFG9jBsXAmgcbVxdoKGLbYYJqCBjoYdeNXtLGwP8ACRt1Ym11BAx2sYAOnLZ7riymGJ85QuLCAAipooIMVbCC2sWwx2/DCsGmggGGzQAN9YYkKxwOX8bc10EAHKxhL1gI7OBbKA4wlG4ECKmjgtMWV05hFeGEDOzgWxqOIJ06bxI+fPX+hggaG7Xi6tIIN7OBYaA+wgAIqaCA2w2bYLGwxZjYW+gMsYNh6oIIGOljBBoYtRt3HwvoAZ7G4rhzzBjUuG8fEwQvHwmjeE+dCxnXlmDx4oYIGzoXU2BDnbvzCBnaQ1d1Z3dHSJ7K6O6u7s7qjpU8MW2zK0dIndjB+WwxUtPSJBYzfFgMVLX2igQ5WsIEdHBfGxMILCyigggbOunGhPKYIalwdjzmCFzpYwQZ2cC6OzVGPmYIXFlDAsNVAAx0MWwtsYAfHwujjEwsoYNh6oIEOVjAUxzPe8bcxUNFOLoEFFFBBAx2cirjMHbP6LuzgWBjt5Mdz5QUUMGwxUNFvJzpYwQZ2cCyMLoxrrzHH70IBFQxFrMLoIY8xix46UUED5z+Ls4OYsHdhAzs4FkYPnTht9XikXsBpiwPkmKSn7fjbBs66LVZAdEtgTNS7sIACKmiggxVsYAexFWwlbBYoYNjiNQHReif6wminODKP2XfajlcIGOhgBWPJemAHx8JonBPnksXxekzDu1BBA/0a35iKd2EDOzgWxg7wxLCVQAEVtIXRej2GL3qox5BED53YwbEweujEAoYtRjJ66EQDHQxbjE700IkdDNvMh5g+d2EBBVTQQAenbcToxJ7sxA6OhdF6PdZx9FAc0Md0uAvHwuihEwsooIIGOlhBbAPbuGzyiL6YpwRPbGAH42/nexJiDtyFBRRQQQOfS2aPKDZ3SRc2sINjYrwGY/bQhQWUiTVQQQPDFmIJ2wictnkELTF17sKxcHbWhQUUcNpKjNnsrAsdrGADOzgW2gMsoIDYDJths7DFmFkDOxi2GDN/gAUUMGwxfLNj7XhFyezYCzs4Fs6OvbCAs65EsdmxFxroYNjizSi1gR0MW6zN9gALGLZYx01BAx2cNo2FnL1p8ZqUmCR3YQEFnHXjdSkxSc40xnfuIU2PN7dUsIEdDFv84vEACyhg2OK3zZY2i+WdLW3xzpWYGWcWizNb2uz423FhzIy7sIACKmhg2EZgXTi72+asCIkpbhcaOP+ZH6+pqWADOzgWRnefWEABFTQQm2ATbNHd8VaYmOJ2YnT3iWGL3xbdfaKCs1iN3xZtOi80SsxVsxqKaNMTFZwLOY9sJOaqXVjBBnZwLIw2PTFssbzRpicqaOC0zb20xFy1Cxs4bS1+UDTvgdG8JxZQQAUNDJsEVrCBHYzfFhtXNO+JBQxbjG8074kGRt0Y32jTFr842rTFyoo2PVHBWaHHj482PbGCDezgWBhteuK09fjx0aYnKmgg62KwLgbrYrAuxloX8niABRRQQQPXuoi5ahc2sIPx2+KdT+UBFjB+mwUqGGMWb4iKlj6xg1E3XhgVLX1iAaPuCFTQQAcr2MAOTts8pJKYq3ZhAQUMWw2cFUaMWeyED4zuPjEqxC+O7j5Rwbm8I35xdPeJFWxgB8fC6O4TwxZLFt19ooIGhi1WYbzU6hG/LV5rdaKAChroYJ0YdeO9bCd2cCyMF7TN99BIzD+7UMCwxTqOl7Wd6OC0lRDHW9viOCrmn3mJTS7e3XZgvL7txAIKqOC0xUFOzD+7sIIN7OBYOB5gAQVUENvANrCNsMWYjQ6OC2P+mc93oUjMP7tQQAUNdLCC0xZvjov5ZxdO27zkJTH/7MICChh1LbCCDexg1I1fES9QPLGAAipo4LTFcVTMNLuwgR0cC+P1iicWUEAFDcSm2BRbvHYxjuVi/tmJ8fLFOKyL+WcXChgVZvPG7DGPQ7WYPXahgArGkrVAByvYwFiyETgWRs+fWMBpixfvxeyxCw10sIINnLY4iIzZYydGz59YwLDFj4+eP9FAByvYwA6OhdHzJxYQW8fWsUXPW4xZ9PyJDexg2GYaxeyxCwsooIIGhi1GPXr+xHZhTA7z472G0bxxVBzTwC6sYAPnQs4LjRLTwE6M5j2xgHMh5zU8iWlgFxro4FrdMQ3swg6u1R3TwC4soIBhq4EGOhi/rQfOuvF2wJjwdWEBZ90ayxDNe2LUjZGM5j2xgg3s4FgYzXti2GIconlPVNBAByvYwA6OhdH+J2JzbI7NsTk2x+bYHJtjq9gqtoqtYqvYKraKrWKr2Cq2hq1ha9gatoatYWvYGraGrWHr2Dq2jq1j69g6to6tY+vYOraBbWAb2Aa2gW1gG9gGtoFtLFtM+LqwgAIqaKCDFWxgB7EVbAVbwVawFWwFW8FWsBVsBZtgE2yRGnFWFxO+LjQwbBpYwQZOW5wlxYSvEyNLTpy2OJuJCV8XKmiggxVsYAfHwsiSE7EZNsMWqRGnqTGJy1uMQ+TDiQUUMCrUQAMdrGADY3lb4FgY+XBiAQVU0EAHK9hAbBVbwxah0GLFRijEeXfM3LrQwQo2sINTESfb8e61CwsooIIGOhh7hliy6PkTCyigggY6OBe9x+qOnj+xg+PCmNp1YQEFVNBAByvYwA5iK9gKtoKtYCvYCraCrWAr2Ao2wSbYBJtgE2yCTbAJNsEm2BSbYlNsik2xKTbFptgUm2IzbIbNsBk2w2bYDJthM2yGzbE5Nsfm2BybY3Nsjs2xObaKrWKr2Cq2iq1iq9gqtoqtYmvYGraGrWFr2Bq2hq1ha9gato6tY+vYjqiogQY6GMVmnsXELI/rRjEx68IGdnBcGBOzLpzLEFeTYmLWhQoaGDYNrGADw2aBY2H0/IkFFFBBA8PmgRVsYF8YjR6Xm2JilsdFqJhh5XPOtMQMqwsNdLCCDezzTdYxUMdLrQPjtdYnFlAmxjLEy61PNNAnxkDFK65PbGAHx0J/gAUMWwyUK2igg6GYq/B4CVi8yUuO14BdbIk9cU3cEvfEAz5e6nxySZy8JXlL8pbkLclbkrckb0leSV5JXknemIQfb7+R46VfF8ff9ONvNLEl9sQ1cUscyxZHWcdLwE6OR3viFSpyvAjs4vDGodjxMrCLLXF4oyGOV4Jd3BL3xAP2R+KSWBIfXg+2xJ64Jm6Je+IBny+IPrgklsTJW5O3Jm9N3pq8NXlr8rbkbcnbkrcl7/kq6OiL82XQB5fEklgTW2JPXBO3xD1x8o7kHck7knck70jekbwjeUfyjuQdeI9Xfh3b4fHSr5PLI3FJLIk1cay7mDBxvADs4pq4JT6W5xE8YHkkZhyO14FdrIktsSeuiVviwyvBA9ZH4pI4jY+m8Um9PFIvH6/7ujiNj6XxsTQ+lsbH0vhYGh9L4+NpfDyNj6fx8TQ+nsbH0/h4Gh9P4+NpfDyNT03jU9P41DQ+NY1PS+PT0vi0ND4tjU9L49PS+LQ0Pi2NT0vj09L49DQ+qX9H6t+R+nek/h2pf0fq35H6d/Q0Pj2Nz0jjM9L4jDQ+Y42PHm/0urgklsSaeI2PHi/7urgmbonX+OjxGrCTyyPxGh893gR2sSa2xJ64Jm6J1/joowxYHolL4s5vlDQ+msZH0/hoGh9N46NpfDSNj6bx0TQ+msZH0/hYGh9L42NpfCyNj6XxsTQ+lsbH0vhYGh9L4+NpfDyNj6fx8TQ+NY1PTeNT0/jUND41jU9N41PT+NQ0PjWNT03j09L4tDQ+LY1PS+PT0vi0ND4tjU9L49PS+LQ0Pj2NT0/j09P49DQ+I43PSOMz0viMND4jjc9I4zPS+Iw0PiONz2B8yuORmPEpD0msiS2xJ66JW2LGpzwYn1IeiUvi4zinBVtiT1wTH8dXPbgnHvD5MZWDj+Pn+L3HMfbJmtgSH2OrwTVxg+NMqMTixJnQiWNhnAmdOM+ESixKnAmdqKCB80xoPsCjMdPowgZ2cCysD7CAAipoILaKrWKLT3FJjEp8aEtiBcentk5sYAfnkkms3Pjk1okFFFBBA8MWQx2f3zqxgR0cC+MzXCcWUMA4V30eUqscH9aqgQUUUEEDHaxgAzs4FhZsx+e2eqCAChroYAUb2MGx8PgA14HYBJtgE2yCTbAJNsEm2BSbYlNsik2xKTbFptgUm2IzbIbNsBk2w2bYDJthM2yGzbE5Nsfm2BybY3Nsjs2xObaKrWKr2Cq2iq1iq9gqtoqtYmvYGraGrWFr2Bq2hq1ha9gato6tY+vYOraOrWPr2Dq2jq1jG9gGtoFtYBvYBraBbWAb2MaynR/pO7CAAipooIMVbGAHsRVsZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImSJUqWKFmiZImRJUaWGFliZImRJUaWGFliZImRJUaWxHSoOp930ZgOdaGAYWuBBjoYR44W2MAOjoWRJScWUEAFDXQQm2ATbIJNsSk2xabYFJtiU2yKTbEpNsNm2AybYTNshs2wGTbDZtgcm2NzbI7NsTk2x+bYHJtjq9gqtoqtYqvYKraKrWKr2Cq2hq1ha9gatoatYWvYGraGrWHr2Dq2jq1j69g6to6tY+vYOraBbWAb2Aa2gW1gG9gGtoFtLFtMkrowbDVQQAUNdLCCDezgWHhkyYHYCraCrWAr2Aq2gq1gK9gEW3TsfPODxqSjOh9s05h0dGL05okFFFBBAx2sYAOxGTbH5ixZ9NuJDYwKI3AsjH47cS7vfKJOY9LRhQoa6GAFG9jBaZsztjUmHV1YQAHDpoEGOljBBoYtfmb024HRbxqjE/124vxbiyWLbjkwuuXEAgqooIEOVrCB2MayxfSiC6OYBkYxC4xiHtjAKDYCx8JohhMLKKCCBjo4bR6LE80wZzVrzB6qc9Kyxuyh6rFksQv1WJzYhZ5ooIMVbGBfGDvLOftYY0bQhQoa6GAF28JovTnVS2M+T/X4bdFOJzawg/O3xYe5Yz7PhQUUUEEDHaxgAzuIrWKr2Cq2iq1iq9gqtoqtYqvYGraGrWFr2Bq2hq1ha9gatoatY+vYOraOrWPr2Dq2jq1j69gGtoFtYBvYBraBbWAb2Aa2sWwxT+jCAgqooIEOVrCBHcRWsBVsBVvBVrAVbAVbwVawFWyCTbAJNsEm2ASbYBNsgk2wKTbFptgUm2JTbIpNsSk2xWbYDJthM2yGzbAZNsNm2MiSRpY0sqSRJY0saWRJI0saWdLIkkaWNLKkkSWNLGlkSSNLGlnSyJJGljSypJEljSxpZEkjSxpZ0siSRpY0sqSRJY0saWRJI0saWdLIkkaWNLKkkSWNLGlkSSNLGlnSyJJGljSypJEljSxpZEkjSxpZ0siSRpY0sqQfUVECDXSwgg3s4Fh4RMWBBRQQW8FWsBVsBVvBVrAJNsEm2ASbYBNsgk2wCTbBptgUm2JTbIpNsSk2xabYFJthM2yGzbAZNsNm2AybYTNsjs2xOTbH5tgcm2NzbI7NsVVsFVvFVrFVbBVbxVaxVWwVW8PWsDVsDVvD1rA1bA1bw9awdWwdW8fWsXVsHVvH1rF1bB3bwDawDWwD28A2sA1sA9vANpZtPB5gAQVU0EAHK9jADmIjSwZZMsiSQZYMsmSQJYMsGWTJIEsGWTLIkkGWDLJkkCWDLBlkySBLBlkyyJJxNHoPDPE8mxlHo4/AAgqooIG+MDp2TmnVmHZ2oYIGOljBBnZwLIyOPRFbxVaxRUPOmZwas9FqTEyIyWgnRkOeWEABFTTQwQo2EFvD1rFF67UYs2iyHssbTXZiB8fCaLITCyigggY6iG1gG9jGZbOYQVbnBGiLiWJ1TvG3mCd2YQEFVNBAByvYwA5iE2yCTbBFM4xYyGiGEx2sYAM7OBbGjnVOe7aYWnbh09bmxB2LiWUXGuhgBRvYwbFw9tuFBcRm2AybYbOwxcqyBnZwLPQHWEABwxbj4AaGrQZWsIEdHAvrAyyggGEbgQY6WMEGdnAsbA9w2kqMzuzjCxU00MEKNrCDY+Hs4wuxdWwdW49isaUONuXBpjzYlAeNM2icQeMMGmfQOIPGGatxYrrZhQUUUMHVODHT7MIKNrCDq3HKEQoHrsYpRygcuDblmGx2oYMVbGAHV+PENLMLCyggNsEm2ASbrMaJV2xduBonXrF1YQEFVHA1TjlC4cDVOEUb2MHVOMUeYAEFVHA1TjEHK9jADq7GKf4AC7g25Zgvd6GBDlawgR1cjRPz5S4sILaKrWKrq4diZlwrMahHox8oYFSITe5o9AMdrGADOzgWHo1+YAEFxNaxdWw9bB7YwA6OheMBFlBABQ10ENvANpYtZty1efPGYm7dMWYxt+7CCq7Ribl1F67Ribl1FxZQQAUNdLCC2Aq2gk3W6MTcugsFVNBAByvYQEZH1rqIuXUXYlNs0d3HSEYfzzmnFvPlTow+PrGAAipooIMVjOXtgR0cC6OPTyyggAoa6GDYRmADOzhtc6KpxXy5CwsooIIGOljBBnYQW8PWsEV3z1mrFnPgmsRqiT4+cSyMPj6xgAIqaKCDFcTWsXVs0bES6y16U2L4ojdPbGAHx4Uxr+3CAgqo4Pxn88afxVS0Nu/2WUxFu9DAuTjzxp/FVLQL5+LM93JaTEVrGnWj9Q6M1juxgAJO23yHp8VUtAsdnDaLhYzWO3Ha5i0+i6lozWIhoy8sFif64sDYqj2KxVZ9ooIGOljBBnZwLIyt+kRsFVvFFhutx6LHRnviWBgb7YkFFFBBAx2sILaGrWGLTdlj+GKj9VixsdGe2MAOjoWxb5n3Cy3mPLV5ncBiztOFBjpYwQZ2cCyM/cWJBcRWsBVssU3OCxQWU5pOjG3yxAIKqKCBDtaFkfbznaMWM5YuFFBBAx2sYAM7OBYaNsNm2CL455thLCYkXdjBsTCCv8VARTPMZ4Itph5d6GAFG9jBsTCa4cQCCoitYqvYohlajG80w3zbi8XMogsFVNBAByvYwA6OhR1bx9aXLSbXtPlQi8U0mjYvyVhMmGnzURSLCTMXGuhgBRvYwbEwttQTC4hNsAm2WN1xHSbmuJwYq/vEAgqooIFRrASOhbGOT4xiFiigggY6WMEGdnAsjI3gRGwNW8PWsDVsDVvD1rA1bB1bx9axdWwdW8fWsXVsHVvHNrANbAPbwDawDWwD28A2sI1liwkzFxZQQAUNdLCCDewgtoKtYCvYCraCrWAr2Aq2gq1gE2yCTbAJNsEm2ASbYBNsgk2xKTbFptgUm2JTbIpNsSk2w2bYDJthM2yGzbAZNsNm2BybY3Nsjs2xOTbH5tgcm2Or2MiSSpZUsqSSJZUsqWRJJUsqWVLJkkqWVLKkkiWVLKlkSSVLKllSyZJKllSypJIllSypZEklSypZUsmSSpZUsqSSJZUsqWRJJUsqWVLJkkqWVLKkkiWVLKlkSSVLGlnSyJJGljSypB1Z0gMdrOBUzJcGWUzaOTEC5MSpmC/hsZi0c6GCUzFf2GMxPafNR3AtpudcOBZGVMyX8FhMzzlxdmx/xB/MfuuPWLLZbxcKGH8b/2z2W4/LTTHH5cI6sQQ2sC/0wBid2Qwnzma4sIACKmiggxVsILaKrWFr8c/ix7cGdjD+Wfzi/gALKKCCBjpYwQZ2ENvANrANbAPbwDawDWwD28A2li2+QXbhtM1naS3ebHShggY6WMEGdnAsnBv4hdgKtoKtYCvYCraCrWAr2ASbYBNsgk2wCTbBJtgkbCVwLNQHWMCwaaCCBjpYF9o6OO1moIPxtx7YwA6Ohf4ACyigggY6iM2xOTbHVrFVbBVbxVaxVWwVW8VWsVVsDVvD1rA1bA1bw9awNWwNW8PWsXVsHVvH1rF1bB1bx9axdWwD28A2sA1sA9vANrANbAPbWLaYKHJhAQVU0EAHK9jADmIr2Aq2gq1gK9gKtoKtYCvYCjbBJtgEm2ATbIJNsAk2wSbYFJtiU2yKTbEpNsWm2BSbYjNshs2wGTbDZtjIkkGWDLJkkCWDLBlkySBLBlkyyJJBlgyyZJAlgywZZMkgSwZZMsiSQZYMsmSQJYMsGWTJIEsGWTLIkkGWDLJkkCWDLBlkySBLBlkyyJJBlgyyZJAlgywZZMkgS8aRJSOwgg2civlYjMUkmAsLOBXzo6wWk2D6/LyBxSSYCx2s4FTEdfCYBNPjgnZMgunz0rXH65gunLZ56drjZUx9Xq/2eBfThdM238/v8SamPh8o8ZhGc2Lkw3y2xGPuTCyDx9yZCxWc/8xDHD0/Hz7xmA/TPZYhev5EARU00MEKtoXRsR7i6NgTKxh/Gz8zOvbEsTA69sQCCqiggQ5WEJthM2yOzbE5Nsfm2BybY3Nsjs2xVWwVW8VWsVVsFVvFVrFVbBVbw9awNWwNW8PWsDVsDVvD1rB1bB1bx9axdWwdW8fWsXVsHdvANrANbAPbwDawDWwD28A2li0mwVxYQAEVNNDBCjawg9gKtoKtYCvYCraCrWAr2Aq2gk2wCTbBJtgEm2ATbIJNsAk2xabYFJtiU2yKTbGRJYUsKWRJIUsKWVLIkkKWFLKkkCWFLClkSSFLCllSyJJClhSypJAlhSwpZEkhSwpZUsiSQpYUsqSQJYUsKWRJIUsKWVLIkkKWFLKkkCWFLClkSSFLCllSyJJClhSypJAlhSwpZEkhSwpZUsiSQpYUsqSQJYUsKWRJIUsKWVLIkkKWFLKkkCWFLClkSSFLCllSyJJClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClghZImSJkCVClihZomSJkiVKlihZokeW9MAKNnAq5sN0Hm+rurCA6+xAi4EOzrrzA1Ye84Iu7OBYGKlxYgEFVNBAB7EJNsEm2BSbYlNsik2xKTbFptgUm2IzbIbNsBk2w2bYDJthM2yGzbE5Nsfm2BybY3Nsjs2xObaKrWKr2Cq2iq1iq9gqtoqtYmvYGraGrWFr2Bq2hq1ha9gato6tY+vYOraOrWPr2Dq2jq1jG9gGtoFtYBvYBraBbWAb2MayxSuqLiyggAoa6GAFG9hBbAVbwVawFWwFW8FGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVGlhhZYmSJkSVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJkyVOljhZ4mSJH1lSJx5ZcmAB43C8BBroYAUb2MGx8DiFObCAAmIb2Aa2gW1gG9jGstXHAyyggAoa6GAFG9hBbAVbwVawFWwFW8HG7ZRasBVsBZtgE2yCTbAJNsEm2ASbYBNsik2xKTbFptgUm2JTbIpNsRk2w2bYDJthM2yGzbAZNsPm2BybY3Nsjs2xOTbH5tgcW8VWsVVsFVvFVrHV686gxyTECzs4bXPqvcckxAsLOOu2+NuIihMr2MAOjoURFScWUEAFsXVsHVvH1rF1bAPbwDawDWwD28A2sA1sY9li3mCfU+895g1eWMH4Zz2wg3Mh52R4jymEFxZwLuScOOQxhfBCAx2sYAM7OBZG+59YQGyCTbAJNsEm2KL95/sUPN77dWK0/4kFFFBBAx2sYAOxKTbDZtgMm2EzbIbNsBk2w2bYHJtjc2zR/j22kmj/Ex2sYNhig4n2P3EsjPY/sYDxz1pgB8fC6OM+AgsooIIGOljBBnZwLOzYOraOrWPr2Dq2jq1j69g6toFtYBvYBraBbWAb2Aa2gW0s2zHt8sQCCqiggQ5WsIEdxFawFWwFW8FWsBVsBVvBVrAVbIJNsAk2wSbYBJtgE2yCTbApNsWm2BSbYlNsik2xKTbFZtgMm2EzbIbNsBk2w2bYDJtjc2yOzbE5Nsfm2BybY3NsFVvFVrFVbBVbxVaxVWwVW8VGlnSypJMlnSzpZEknSzpZ0smSTpZ0sqSTJZ0s6WRJJ0s6WdLJkk6WdLKkkyWdLOlkSSdLOlnSyZJOlnSypJMlnSzpZEknSwZZMsiSQZYMsmSQJYMsGWTJIEsGWTLIkkGWDLJkkCWDLBlkySBLBllyTNycL0PxY+LmiWNhBMh8ysGP2ZonKjgV88UpfszWPLGCoWiBT8WYnwDzmK154gyQCwsooIIGOljBBmJTbIbNsBk2w2bYDJthM2yGzbA5Nsfm2BybY3Nsjs3DFqvFOzgW1gcYtlgBVUAFDYy6sTZbVIiV1QoooIJRoQfG8sYWNUNhlFjeGQoXdnAsnKFwYQEFVNBAB7H1sElgB8fC8QALKKCCBjpYQWwD27hsNSZjjvloTo3JmBcKqKCBDlawgR0cCwu2gq2ETQMVNNDBCjawg2OhPMACYpOoa4FRoQZGhTYxev7EAgoYy9sDDXSwgg3s4FgYPX9iAQXEZtgMm2EzbIYten4+xlNjvueF0yYxJNHzJyo4bRIDFT1/YgWnTWL4oudPHAuj508soIAKGuhgBbFVbBVbw9awNWwNW8PWsDVskQ8Swxf5oLHRRj4cGPlwYgEFVNBAByvYQGwd28A2sA1sA9vANrANbAPbwDaWLeZ7XlhAARU00MEKNrCD2Aq2gq1gK9gKtsiHOWm9xnzPC0OhgWNhhMJ8eUuNSZ4XCqiggQ6GogY2sINjYQTIiQUUUEEDHcQWUTFn1teYznlhAQWMuiPQQAcr2MAOhm1u9jGd88ICTpvFCoioONFAByvYwA6OhcclxQMNdLCCDezgWNgeYAEFxNawNWwNW8PWsDVsHVvH1rF1bB1bx9axdWwdW8c2sA1sA9vANrANbAPbwDawjWU7Z2seWEABFTTQwQo2sIPYCraCrWAr2Aq2gq1gK9gKtoJNsAk2wSbYBJtgE2yCTbAJNsWm2BSbYlNsik2xKTbFptgMm2EzbIbNsBk2w2bYDJthc2yOzbE5Nsfm2BybY3Nsji0uRczbCPWYrXmigHGp/fhbAx2MYNLAiKAZ8TEv88IZePMJpBrzMi+MwBuBBs7Am7c9aszLvLCBM/DmY0c15mWeGMcPJxZQQAUNdDBs8Svi+OHEDo6Fcfzg8dvi+OFEARW0C2NW5Zhvtqoxq/JCBQ10sIIN7OBYGHv/E7EVbAVbwVawFWwFW8FWsAk2wRZ76Tn1s8ZEyAsVnOI59bPGRMgLK9jADo6Fse8+sYACKojNsBk2w2bYDJtjc2yOzbE5Nsfm2BybY3NsFVvFVrFVbBVbxVaxVWwVW8XWsDVsDVvD1rA1bA1bw9awNWwdW8fWsXVsHVvH1rF1bB1bxzawDWwD28A2sA1sA9vANrCNZYuJkBcWUEAFDXSwgg3sILaCrWAr2Aq2gq1gK9gKtoKtYBNsgk2wCTbBJtgEm2ATbIJNsSk2xabYyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBIjS4wsMbLEyBI7ssQCK9jAUMxzUz8C5MAChmIEKmiggxVs4PxB84MTNWY/nhgBcmIBp62FOALkRAOnbU6FqDH7ccw75jVmP17YwWnrUTcC5MQCCqiggQ5WsIEdxKbYFJtiU2yKLQJk3n6vMftx9Bi+CJATOzgWRoCcWEABFTTQQWyGzbAZNsfm2BybY3Nsjs2xOTbH5tgqtoqtYqvYKraKrWKLAJnv3Kox+/HCaZuv/K8x+/HCAgo4bSNWVgTIiJUVAXJiBRvYwbEwAuTEsMVWHQFy4jzdmW9vqMfsxxMr2MAOjoXHWyEOLKCACmIb2Aa2gW1gG8t2zH48sYACKmiggxVsYAexFWwFW8FWsBVsBVvBVrAVbAWbYBNsgk2wCTbBJtgEm2ATbIpNsSk2xabYFJtiU2yKTbEZNsNm2AybYTNshs2wGTbD5tgcm2NzbI7NsTk2x+bYHFvFVrFVbBVbxRaXF+L6A7MfK7Mf6zH7Ma4/MPuxMvuxHrMf43p1vILxQgUjQEbgs+7zMn0J7okHPNNicUksiTWxJfbENXHy9uTtyTuSdyTvSN6RvCN5R/KO5B14j3mQcbn6mAd54hz0uKZzzIM8cQ56XL055kEeWI4ljL8oJbEkPpbQgi2xJ66JW+KeeMDySHx4PVgSa2JLfHhj+aUmbol74gHr8Tc9uCcesMWyxb3ZmNK4WBJrYkvsiWvilrgnHrAnryevJ68nryevJ68nryevJ68nb03emrw1eWvy1uStyVuTtyZvTd6avC15W/K25G3J25K3JW9L3pa8LXlb8vbk7cnbk7cnb0/enrw9eXvy9uTtyTuSdyTvSN6RvCN5R/KO5B3JO5J34I1JlItLYkmsiS2xJ66JW+KeOHlL8pbkLclbkrckb0nekrwleUvyluSV5JXkleSV5JXkleSV5JXkleSV5NXk1eTV5NXk1eTV5NXk1eTV5NXkTXnVU171lFc95VVPedVTXvWUVz3lVU951VNe9ZRXPeVVT3nVU171lFc95VVPedVTXvWUVz3lVU951VNe9ZRXPeVVT3nVU171lFc95VVPedVTXvWUVz3lVU951VNe9ZRXPeVVT3nVU171lFc95VVPedVTXvWUVz3lVU951c+8suCauCU+XPMSQT8z6uCS+HC1YE1siQ9XD66JW+KeeCweZ0YdXBJLYk1siT3x4R3BUX++i7aOI4vmu2brOLLoZEmsiS2xJ66JW+Ke+PDOY6dxZNHJJbEk1sSW2BPXxC1xT5y8mryavJq8mryavJq8mryavJq8mryWvJa8lryWvJa8lryWvJa8lryWvJ68nryevJ68nryevJ68nryevJ68NXlr8tbkrclbk7cmb03emrw1eWvytuRtyduStyVvS96WvC15W/K25G3J25O3J29P3p68PXl78vbk7cnbk7cn70jekbwjeUfyjuQdyTuSdyTvSN6xvO3xeCQuiSWxJrbEnrgmbol74uQtyVuStyRvSd6SvCV5S/KW5C3JW5JXkleSV5JXkleSV5JXkleSV5JXkleTV5NXk1eTV5NXk1eTV5NXk1eT15LXkteS15LXkteS15LXkteS15LXk9eT15PXk9eT15PXk9eT15PXk7cmb03emrw1eWvy1uQ986oFt8QdPjOqB5fEklgTW2JPXBO3xD1x/MY5HbI9jow6uSSWxJrYEnvimrgl7omTdyTvSN6RvCN5R/KO5B3JO5J3JO/AWx6PxCWxJNbEltgT18QtcU+cvCV5S/KW5C3JW5K3JG9J3pK8JXlL8krySvJK8krySvJK8krySvJK8kryavJq8mryavJq8mryavJq8mryavJa8lryWvJa8lryWvJa8lryWvJa8nryevJ68nryevJ68nryevJ68nry1uStyVuTtyZvTd6avDV5a/LW5K3J25K3JW9L3pa8LXlb8rbkbcnbkjflVUl5VVJelZRXJeVVSXlVUl6VlFcl5VVJeVVSXpWUVyXlVUl5VVJelZRXJeVVSXlVUl6VlFcl5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScor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",
|
|
3971
|
+
"debug_symbols": "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9ZRXPeVVT3nVU171lFc95VVPedVTXvWUVz3lVU951c+8suCauCU+XPMSQT8z6uCS+HC1YE1siQ9XD66JW+KeeCweZ0YdXBJLYk1siT3x4R3BUX++i7aOI4vmu2brOLLoZEmsiS2xJ66JW+Ke+PDOY6dxZNHJJbEk1sSW2BPXxC1xT5y8mryavJq8mryavJq8mryavJq8mryWvJa8lryWvJa8lryWvJa8lryWvJ68nryevJ68nryevJ68nryevJ68NXlr8tbkrclbk7cmb03emrw1eWvytuRtyduStyVvS96WvC15W/K25G3J25O3J29P3p68PXl78vbk7cnbk7cn70jekbwjeUfyjuQdyTuSdyTvSN6xvO3xeCQuiSWxJrbEnrgmbol74uQtyVuStyRvSd6SvCV5S/KW5C3JW5JXkleSV5JXkleSV5JXkleSV5JXkleTV5NXk1eTV5NXk1eTV5NXk1eT15LXkteS15LXkteS15LXkteS15LXk9eT15PXk9eT15PXk9eT15PXk7cmb03emrw1eWvy1uQ986oFt8QdPjOqB5fEklgTW2JPXBO3xD1x/MY5HbI9jow6uSSWxJrYEnvimrgl7omTdyTvSN6RvCN5R/KO5B3JO5J3JO/AWx6PxCWxJNbEltgT18QtcU+cvCV5S/KW5C3JW5K3JG9J3pK8JXlL8krySvJK8krySvJK8krySvJK8kryavJq8mryavJq8mryavJq8mryavJa8lryWvJa8lryWvJa8lryWvJa8nryevJ68nryevJ68nryevJ68nry1uStyVuTtyZvTd6avDV5a/LW5K3J25K3JW9L3pa8LXlb8rbkbcnbkjflVUl5VVJelZRXJeVVSXlVUl6VlFcl5VVJeVVSXpWUVyXlVUl5VVJelZRXJeVVSXlVUl6VlFcl5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScorSXklKa8k5ZWkvJKUV5LySlJeScor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",
|
|
3972
3972
|
"is_unconstrained": true,
|
|
3973
3973
|
"name": "sync_state"
|
|
3974
3974
|
}
|
|
@@ -28,50 +28,50 @@ export const ProtocolContractAddress = {
|
|
|
28
28
|
PublicChecks: AztecAddress.fromBigInt(6n)
|
|
29
29
|
};
|
|
30
30
|
export const ProtocolContractDerivedAddress = {
|
|
31
|
-
AuthRegistry: AztecAddress.fromString('
|
|
32
|
-
ContractInstanceRegistry: AztecAddress.fromString('
|
|
33
|
-
ContractClassRegistry: AztecAddress.fromString('
|
|
34
|
-
MultiCallEntrypoint: AztecAddress.fromString('
|
|
35
|
-
FeeJuice: AztecAddress.fromString('
|
|
36
|
-
PublicChecks: AztecAddress.fromString('
|
|
31
|
+
AuthRegistry: AztecAddress.fromString('0x08b4b2a47a493a81f21edeb0b71b5b089d993996a927ad35e137d56623beb36d'),
|
|
32
|
+
ContractInstanceRegistry: AztecAddress.fromString('0x10f937ee458f3df03c4b06eeed17e27bf0532e6dc50f9e14e496fcba16b862a6'),
|
|
33
|
+
ContractClassRegistry: AztecAddress.fromString('0x0d73736c396eb8f32e6e013218df02431ff57dcdb8ded84b4f07fc6391efe76e'),
|
|
34
|
+
MultiCallEntrypoint: AztecAddress.fromString('0x04a1a43f7274a0e327302ff3dc705c56b74fbdb6ffbc21ab5becd82fbbf76619'),
|
|
35
|
+
FeeJuice: AztecAddress.fromString('0x09d5f4197339c7cddd46db7504ca12d19e28538c41c8ddc8cbdc60001b68239d'),
|
|
36
|
+
PublicChecks: AztecAddress.fromString('0x0099c33c58d6a4c9c8c10b2565ea2977629120b09d233f4cdc825ae72018c46a')
|
|
37
37
|
};
|
|
38
38
|
export const ProtocolContractClassId = {
|
|
39
|
-
AuthRegistry: Fr.fromString('
|
|
40
|
-
ContractInstanceRegistry: Fr.fromString('
|
|
41
|
-
ContractClassRegistry: Fr.fromString('
|
|
42
|
-
MultiCallEntrypoint: Fr.fromString('
|
|
43
|
-
FeeJuice: Fr.fromString('
|
|
44
|
-
PublicChecks: Fr.fromString('
|
|
39
|
+
AuthRegistry: Fr.fromString('0x2a7a4e20cb0a293b7d400f013090c6f40fafb9ed8ddac8a233754d68f5b22529'),
|
|
40
|
+
ContractInstanceRegistry: Fr.fromString('0x23c8fc27f934eeff9bd7c4b4c025830152a379740d5b850cd58cb6ad752b048c'),
|
|
41
|
+
ContractClassRegistry: Fr.fromString('0x2cd2f9fa2578aa4dac8e27c351eb5e7a11a51ac39180fb9f5fc721046dc3b12f'),
|
|
42
|
+
MultiCallEntrypoint: Fr.fromString('0x10f2da4ee14ad0bf0cb4bb7e49c2740a11276ecf13e2d14453dabff3b1a2859f'),
|
|
43
|
+
FeeJuice: Fr.fromString('0x2b2a76f2beb08683f1acab5d9487c4c108aea9a2231ce29e63b965fe7fca4514'),
|
|
44
|
+
PublicChecks: Fr.fromString('0x17eb2d9a9e75e8e7c183e3e598a7acf13c6f5b7e02213f87fbb923850a1f5013')
|
|
45
45
|
};
|
|
46
46
|
export const ProtocolContractClassIdPreimage = {
|
|
47
47
|
AuthRegistry: {
|
|
48
48
|
artifactHash: Fr.fromString('0x2b948c1f96c48ab4111ee34b52b916370b9c884eff2927b58dd9dc5c4d65961c'),
|
|
49
|
-
privateFunctionsRoot: Fr.fromString('
|
|
49
|
+
privateFunctionsRoot: Fr.fromString('0x06a3b960bfd18527f3c8422636faf284a14933aa1d2ab67870a99781fca3f327'),
|
|
50
50
|
publicBytecodeCommitment: Fr.fromString('0x2545f39893766508ce37bb5cea5e4dcab04c6f7f79f3089b1c076876e9d268b2')
|
|
51
51
|
},
|
|
52
52
|
ContractInstanceRegistry: {
|
|
53
53
|
artifactHash: Fr.fromString('0x283e94b2b29f2d1635d6f24284d03d2cea147a84477bbd66dc577f665e6fde48'),
|
|
54
|
-
privateFunctionsRoot: Fr.fromString('
|
|
54
|
+
privateFunctionsRoot: Fr.fromString('0x02386055a7eabcf2b643bbacbccd8ae696ea3ec75f3d35cfd6bd16e79652b573'),
|
|
55
55
|
publicBytecodeCommitment: Fr.fromString('0x260735cf6645c6f07d2f0ebe2bfbd3062e95ddc820661329a5422bc239261bba')
|
|
56
56
|
},
|
|
57
57
|
ContractClassRegistry: {
|
|
58
58
|
artifactHash: Fr.fromString('0x158c078f5fa82339e3e188b0271d2808ab10b64590357034ec015ffdbb09751a'),
|
|
59
|
-
privateFunctionsRoot: Fr.fromString('
|
|
59
|
+
privateFunctionsRoot: Fr.fromString('0x0f0236c55fae223d26fc192cd8548bdaeff67ecde2cba2a858328d6813aa5a05'),
|
|
60
60
|
publicBytecodeCommitment: Fr.fromString('0x0ce4c618c3ed7f3a20410e618c06bb701e150af7fe28a3e92f68e7733809f33e')
|
|
61
61
|
},
|
|
62
62
|
MultiCallEntrypoint: {
|
|
63
63
|
artifactHash: Fr.fromString('0x0779e69d2819cb643d38c8c0e37c74a0aebed19e2206112feec51c75d3f44f33'),
|
|
64
|
-
privateFunctionsRoot: Fr.fromString('
|
|
64
|
+
privateFunctionsRoot: Fr.fromString('0x1d06c894b60ec0e02d21e31c0ada8829880e714a64f1c302ed94cd1ec451811e'),
|
|
65
65
|
publicBytecodeCommitment: Fr.fromString('0x0ce4c618c3ed7f3a20410e618c06bb701e150af7fe28a3e92f68e7733809f33e')
|
|
66
66
|
},
|
|
67
67
|
FeeJuice: {
|
|
68
|
-
artifactHash: Fr.fromString('
|
|
69
|
-
privateFunctionsRoot: Fr.fromString('
|
|
68
|
+
artifactHash: Fr.fromString('0x301df98fb519e7561dddc82002f9c704a56c2a9c304ae00e4bc86d615400cdc2'),
|
|
69
|
+
privateFunctionsRoot: Fr.fromString('0x1782792c78e5205b33a7ffc941a3c0796f34874826d652bcb3067a264df0fe36'),
|
|
70
70
|
publicBytecodeCommitment: Fr.fromString('0x1d4b1a8f71b8250d4fb65f8e16a4604e9165648279f47d80e024ce2684c4bdfb')
|
|
71
71
|
},
|
|
72
72
|
PublicChecks: {
|
|
73
73
|
artifactHash: Fr.fromString('0x11734576d298a80ddc390a256624b56819de5d68deae991c70557bb0ba4f964b'),
|
|
74
|
-
privateFunctionsRoot: Fr.fromString('
|
|
74
|
+
privateFunctionsRoot: Fr.fromString('0x202860adb1b8975971eeaf571aaaa88a27f4035290d58532ae7d60b0dfaad54c'),
|
|
75
75
|
publicBytecodeCommitment: Fr.fromString('0x013c4f854a5c87c9daf86c5f9bc07a42c2a061f1d924a5b3564ec7edc8e18cb7')
|
|
76
76
|
}
|
|
77
77
|
};
|
|
@@ -87,51 +87,51 @@ export const ProtocolContractPrivateFunctions = {
|
|
|
87
87
|
AuthRegistry: [
|
|
88
88
|
{
|
|
89
89
|
selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000079a3d418')),
|
|
90
|
-
vkHash: Fr.fromString('
|
|
90
|
+
vkHash: Fr.fromString('0x14cdf5a66b9c498f0d904c925b5394eef3477758e4fdce6d3aca7502265c88a9')
|
|
91
91
|
}
|
|
92
92
|
],
|
|
93
93
|
ContractInstanceRegistry: [
|
|
94
94
|
{
|
|
95
95
|
selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000016ec12aa')),
|
|
96
|
-
vkHash: Fr.fromString('
|
|
96
|
+
vkHash: Fr.fromString('0x0fa78156f1c5b941cf5a72c09ce76ba7311cd893b6d9ea4f61b47f757b26ec1e')
|
|
97
97
|
}
|
|
98
98
|
],
|
|
99
99
|
ContractClassRegistry: [
|
|
100
100
|
{
|
|
101
101
|
selector: FunctionSelector.fromField(Fr.fromString('0x000000000000000000000000000000000000000000000000000000006934ed0d')),
|
|
102
|
-
vkHash: Fr.fromString('
|
|
102
|
+
vkHash: Fr.fromString('0x080f9098016cbc1705eb9cf2d4506492db1c05b0790af5fdc301ee031c8dbbda')
|
|
103
103
|
}
|
|
104
104
|
],
|
|
105
105
|
MultiCallEntrypoint: [
|
|
106
106
|
{
|
|
107
107
|
selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000f04908a9')),
|
|
108
|
-
vkHash: Fr.fromString('
|
|
108
|
+
vkHash: Fr.fromString('0x1398215a358d1eec24a10077e4d2e475c8365caa0a8387047a2b4b016f722ce5')
|
|
109
109
|
}
|
|
110
110
|
],
|
|
111
111
|
FeeJuice: [
|
|
112
112
|
{
|
|
113
113
|
selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000cbe67243')),
|
|
114
|
-
vkHash: Fr.fromString('
|
|
114
|
+
vkHash: Fr.fromString('0x17e91baeafb796e89f0b7b1b2720ebe843b724eae97c9ad3f90b5000216add6b')
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000e8d374b6')),
|
|
118
|
-
vkHash: Fr.fromString('
|
|
118
|
+
vkHash: Fr.fromString('0x2ff2e18b1b07059559d416226309f1bc1dc8fb2745d8a7d46c4ebc3c8b91d13e')
|
|
119
119
|
}
|
|
120
120
|
],
|
|
121
121
|
PublicChecks: []
|
|
122
122
|
};
|
|
123
123
|
export const ProtocolContractsList = new ProtocolContracts([
|
|
124
|
-
AztecAddress.fromString('
|
|
125
|
-
AztecAddress.fromString('
|
|
126
|
-
AztecAddress.fromString('
|
|
127
|
-
AztecAddress.fromString('
|
|
128
|
-
AztecAddress.fromString('
|
|
129
|
-
AztecAddress.fromString('
|
|
124
|
+
AztecAddress.fromString('0x08b4b2a47a493a81f21edeb0b71b5b089d993996a927ad35e137d56623beb36d'),
|
|
125
|
+
AztecAddress.fromString('0x10f937ee458f3df03c4b06eeed17e27bf0532e6dc50f9e14e496fcba16b862a6'),
|
|
126
|
+
AztecAddress.fromString('0x0d73736c396eb8f32e6e013218df02431ff57dcdb8ded84b4f07fc6391efe76e'),
|
|
127
|
+
AztecAddress.fromString('0x04a1a43f7274a0e327302ff3dc705c56b74fbdb6ffbc21ab5becd82fbbf76619'),
|
|
128
|
+
AztecAddress.fromString('0x09d5f4197339c7cddd46db7504ca12d19e28538c41c8ddc8cbdc60001b68239d'),
|
|
129
|
+
AztecAddress.fromString('0x0099c33c58d6a4c9c8c10b2565ea2977629120b09d233f4cdc825ae72018c46a'),
|
|
130
130
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
|
|
131
131
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
|
|
132
132
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
|
|
133
133
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
|
|
134
134
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000')
|
|
135
135
|
]);
|
|
136
|
-
export const protocolContractsHash = Fr.fromString('
|
|
136
|
+
export const protocolContractsHash = Fr.fromString('0x26cf874fca55e79fdb987d5e48cdbadb549d48cc3ec921ae9841e25e43dbc3d3');
|
|
137
137
|
export const CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG = Fr.fromHexString('0x1a7e1badb79abdd38c684b3c8306ffe7ecb33c69e3380d9855730aaaa83a21a8');
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@aztec/protocol-contracts",
|
|
3
3
|
"homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/protocol-contracts",
|
|
4
4
|
"description": "Canonical Noir contracts for the Aztec Network",
|
|
5
|
-
"version": "5.0.0-nightly.
|
|
5
|
+
"version": "5.0.0-nightly.20260422",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": "./dest/index.js",
|
|
@@ -73,9 +73,9 @@
|
|
|
73
73
|
]
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@aztec/constants": "5.0.0-nightly.
|
|
77
|
-
"@aztec/foundation": "5.0.0-nightly.
|
|
78
|
-
"@aztec/stdlib": "5.0.0-nightly.
|
|
76
|
+
"@aztec/constants": "5.0.0-nightly.20260422",
|
|
77
|
+
"@aztec/foundation": "5.0.0-nightly.20260422",
|
|
78
|
+
"@aztec/stdlib": "5.0.0-nightly.20260422",
|
|
79
79
|
"lodash.chunk": "^4.2.0",
|
|
80
80
|
"lodash.omit": "^4.5.0",
|
|
81
81
|
"tslib": "^2.4.0"
|
|
@@ -42,54 +42,54 @@ PublicChecks: AztecAddress.fromBigInt(6n)
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
export const ProtocolContractDerivedAddress = {
|
|
45
|
-
AuthRegistry: AztecAddress.fromString('
|
|
46
|
-
ContractInstanceRegistry: AztecAddress.fromString('
|
|
47
|
-
ContractClassRegistry: AztecAddress.fromString('
|
|
48
|
-
MultiCallEntrypoint: AztecAddress.fromString('
|
|
49
|
-
FeeJuice: AztecAddress.fromString('
|
|
50
|
-
PublicChecks: AztecAddress.fromString('
|
|
45
|
+
AuthRegistry: AztecAddress.fromString('0x08b4b2a47a493a81f21edeb0b71b5b089d993996a927ad35e137d56623beb36d'),
|
|
46
|
+
ContractInstanceRegistry: AztecAddress.fromString('0x10f937ee458f3df03c4b06eeed17e27bf0532e6dc50f9e14e496fcba16b862a6'),
|
|
47
|
+
ContractClassRegistry: AztecAddress.fromString('0x0d73736c396eb8f32e6e013218df02431ff57dcdb8ded84b4f07fc6391efe76e'),
|
|
48
|
+
MultiCallEntrypoint: AztecAddress.fromString('0x04a1a43f7274a0e327302ff3dc705c56b74fbdb6ffbc21ab5becd82fbbf76619'),
|
|
49
|
+
FeeJuice: AztecAddress.fromString('0x09d5f4197339c7cddd46db7504ca12d19e28538c41c8ddc8cbdc60001b68239d'),
|
|
50
|
+
PublicChecks: AztecAddress.fromString('0x0099c33c58d6a4c9c8c10b2565ea2977629120b09d233f4cdc825ae72018c46a')
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
export const ProtocolContractClassId: Record<ProtocolContractName, Fr> = {
|
|
56
|
-
AuthRegistry: Fr.fromString('
|
|
57
|
-
ContractInstanceRegistry: Fr.fromString('
|
|
58
|
-
ContractClassRegistry: Fr.fromString('
|
|
59
|
-
MultiCallEntrypoint: Fr.fromString('
|
|
60
|
-
FeeJuice: Fr.fromString('
|
|
61
|
-
PublicChecks: Fr.fromString('
|
|
56
|
+
AuthRegistry: Fr.fromString('0x2a7a4e20cb0a293b7d400f013090c6f40fafb9ed8ddac8a233754d68f5b22529'),
|
|
57
|
+
ContractInstanceRegistry: Fr.fromString('0x23c8fc27f934eeff9bd7c4b4c025830152a379740d5b850cd58cb6ad752b048c'),
|
|
58
|
+
ContractClassRegistry: Fr.fromString('0x2cd2f9fa2578aa4dac8e27c351eb5e7a11a51ac39180fb9f5fc721046dc3b12f'),
|
|
59
|
+
MultiCallEntrypoint: Fr.fromString('0x10f2da4ee14ad0bf0cb4bb7e49c2740a11276ecf13e2d14453dabff3b1a2859f'),
|
|
60
|
+
FeeJuice: Fr.fromString('0x2b2a76f2beb08683f1acab5d9487c4c108aea9a2231ce29e63b965fe7fca4514'),
|
|
61
|
+
PublicChecks: Fr.fromString('0x17eb2d9a9e75e8e7c183e3e598a7acf13c6f5b7e02213f87fbb923850a1f5013')
|
|
62
62
|
};
|
|
63
63
|
|
|
64
64
|
export const ProtocolContractClassIdPreimage: Record<ProtocolContractName, { artifactHash: Fr; privateFunctionsRoot: Fr; publicBytecodeCommitment: Fr }> = {
|
|
65
65
|
AuthRegistry: {
|
|
66
66
|
artifactHash: Fr.fromString('0x2b948c1f96c48ab4111ee34b52b916370b9c884eff2927b58dd9dc5c4d65961c'),
|
|
67
|
-
privateFunctionsRoot: Fr.fromString('
|
|
67
|
+
privateFunctionsRoot: Fr.fromString('0x06a3b960bfd18527f3c8422636faf284a14933aa1d2ab67870a99781fca3f327'),
|
|
68
68
|
publicBytecodeCommitment: Fr.fromString('0x2545f39893766508ce37bb5cea5e4dcab04c6f7f79f3089b1c076876e9d268b2'),
|
|
69
69
|
},
|
|
70
70
|
ContractInstanceRegistry: {
|
|
71
71
|
artifactHash: Fr.fromString('0x283e94b2b29f2d1635d6f24284d03d2cea147a84477bbd66dc577f665e6fde48'),
|
|
72
|
-
privateFunctionsRoot: Fr.fromString('
|
|
72
|
+
privateFunctionsRoot: Fr.fromString('0x02386055a7eabcf2b643bbacbccd8ae696ea3ec75f3d35cfd6bd16e79652b573'),
|
|
73
73
|
publicBytecodeCommitment: Fr.fromString('0x260735cf6645c6f07d2f0ebe2bfbd3062e95ddc820661329a5422bc239261bba'),
|
|
74
74
|
},
|
|
75
75
|
ContractClassRegistry: {
|
|
76
76
|
artifactHash: Fr.fromString('0x158c078f5fa82339e3e188b0271d2808ab10b64590357034ec015ffdbb09751a'),
|
|
77
|
-
privateFunctionsRoot: Fr.fromString('
|
|
77
|
+
privateFunctionsRoot: Fr.fromString('0x0f0236c55fae223d26fc192cd8548bdaeff67ecde2cba2a858328d6813aa5a05'),
|
|
78
78
|
publicBytecodeCommitment: Fr.fromString('0x0ce4c618c3ed7f3a20410e618c06bb701e150af7fe28a3e92f68e7733809f33e'),
|
|
79
79
|
},
|
|
80
80
|
MultiCallEntrypoint: {
|
|
81
81
|
artifactHash: Fr.fromString('0x0779e69d2819cb643d38c8c0e37c74a0aebed19e2206112feec51c75d3f44f33'),
|
|
82
|
-
privateFunctionsRoot: Fr.fromString('
|
|
82
|
+
privateFunctionsRoot: Fr.fromString('0x1d06c894b60ec0e02d21e31c0ada8829880e714a64f1c302ed94cd1ec451811e'),
|
|
83
83
|
publicBytecodeCommitment: Fr.fromString('0x0ce4c618c3ed7f3a20410e618c06bb701e150af7fe28a3e92f68e7733809f33e'),
|
|
84
84
|
},
|
|
85
85
|
FeeJuice: {
|
|
86
|
-
artifactHash: Fr.fromString('
|
|
87
|
-
privateFunctionsRoot: Fr.fromString('
|
|
86
|
+
artifactHash: Fr.fromString('0x301df98fb519e7561dddc82002f9c704a56c2a9c304ae00e4bc86d615400cdc2'),
|
|
87
|
+
privateFunctionsRoot: Fr.fromString('0x1782792c78e5205b33a7ffc941a3c0796f34874826d652bcb3067a264df0fe36'),
|
|
88
88
|
publicBytecodeCommitment: Fr.fromString('0x1d4b1a8f71b8250d4fb65f8e16a4604e9165648279f47d80e024ce2684c4bdfb'),
|
|
89
89
|
},
|
|
90
90
|
PublicChecks: {
|
|
91
91
|
artifactHash: Fr.fromString('0x11734576d298a80ddc390a256624b56819de5d68deae991c70557bb0ba4f964b'),
|
|
92
|
-
privateFunctionsRoot: Fr.fromString('
|
|
92
|
+
privateFunctionsRoot: Fr.fromString('0x202860adb1b8975971eeaf571aaaa88a27f4035290d58532ae7d60b0dfaad54c'),
|
|
93
93
|
publicBytecodeCommitment: Fr.fromString('0x013c4f854a5c87c9daf86c5f9bc07a42c2a061f1d924a5b3564ec7edc8e18cb7'),
|
|
94
94
|
}
|
|
95
95
|
};
|
|
@@ -104,23 +104,23 @@ PublicChecks: Fr.fromString('0x0000000000000000000000000000000000000000000000000
|
|
|
104
104
|
};
|
|
105
105
|
|
|
106
106
|
export const ProtocolContractPrivateFunctions: Record<ProtocolContractName, { selector: FunctionSelector; vkHash: Fr }[]> = {
|
|
107
|
-
AuthRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000079a3d418')), vkHash: Fr.fromString('
|
|
108
|
-
ContractInstanceRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000016ec12aa')), vkHash: Fr.fromString('
|
|
109
|
-
ContractClassRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x000000000000000000000000000000000000000000000000000000006934ed0d')), vkHash: Fr.fromString('
|
|
110
|
-
MultiCallEntrypoint: [{ selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000f04908a9')), vkHash: Fr.fromString('
|
|
111
|
-
FeeJuice: [{ selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000cbe67243')), vkHash: Fr.fromString('
|
|
107
|
+
AuthRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000079a3d418')), vkHash: Fr.fromString('0x14cdf5a66b9c498f0d904c925b5394eef3477758e4fdce6d3aca7502265c88a9') }],
|
|
108
|
+
ContractInstanceRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000016ec12aa')), vkHash: Fr.fromString('0x0fa78156f1c5b941cf5a72c09ce76ba7311cd893b6d9ea4f61b47f757b26ec1e') }],
|
|
109
|
+
ContractClassRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x000000000000000000000000000000000000000000000000000000006934ed0d')), vkHash: Fr.fromString('0x080f9098016cbc1705eb9cf2d4506492db1c05b0790af5fdc301ee031c8dbbda') }],
|
|
110
|
+
MultiCallEntrypoint: [{ selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000f04908a9')), vkHash: Fr.fromString('0x1398215a358d1eec24a10077e4d2e475c8365caa0a8387047a2b4b016f722ce5') }],
|
|
111
|
+
FeeJuice: [{ selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000cbe67243')), vkHash: Fr.fromString('0x17e91baeafb796e89f0b7b1b2720ebe843b724eae97c9ad3f90b5000216add6b') }, { selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000e8d374b6')), vkHash: Fr.fromString('0x2ff2e18b1b07059559d416226309f1bc1dc8fb2745d8a7d46c4ebc3c8b91d13e') }],
|
|
112
112
|
PublicChecks: []
|
|
113
113
|
};
|
|
114
114
|
|
|
115
115
|
|
|
116
116
|
|
|
117
117
|
export const ProtocolContractsList = new ProtocolContracts([
|
|
118
|
-
AztecAddress.fromString('
|
|
119
|
-
AztecAddress.fromString('
|
|
120
|
-
AztecAddress.fromString('
|
|
121
|
-
AztecAddress.fromString('
|
|
122
|
-
AztecAddress.fromString('
|
|
123
|
-
AztecAddress.fromString('
|
|
118
|
+
AztecAddress.fromString('0x08b4b2a47a493a81f21edeb0b71b5b089d993996a927ad35e137d56623beb36d'),
|
|
119
|
+
AztecAddress.fromString('0x10f937ee458f3df03c4b06eeed17e27bf0532e6dc50f9e14e496fcba16b862a6'),
|
|
120
|
+
AztecAddress.fromString('0x0d73736c396eb8f32e6e013218df02431ff57dcdb8ded84b4f07fc6391efe76e'),
|
|
121
|
+
AztecAddress.fromString('0x04a1a43f7274a0e327302ff3dc705c56b74fbdb6ffbc21ab5becd82fbbf76619'),
|
|
122
|
+
AztecAddress.fromString('0x09d5f4197339c7cddd46db7504ca12d19e28538c41c8ddc8cbdc60001b68239d'),
|
|
123
|
+
AztecAddress.fromString('0x0099c33c58d6a4c9c8c10b2565ea2977629120b09d233f4cdc825ae72018c46a'),
|
|
124
124
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
|
|
125
125
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
|
|
126
126
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
|
|
@@ -128,7 +128,7 @@ AztecAddress.fromString('0x00000000000000000000000000000000000000000000000000000
|
|
|
128
128
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000')
|
|
129
129
|
]);
|
|
130
130
|
|
|
131
|
-
export const protocolContractsHash = Fr.fromString('
|
|
131
|
+
export const protocolContractsHash = Fr.fromString('0x26cf874fca55e79fdb987d5e48cdbadb549d48cc3ec921ae9841e25e43dbc3d3');
|
|
132
132
|
|
|
133
133
|
|
|
134
134
|
|