From 2e17217f9f5b03494f269c511f5148bc6625b030 Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Fri, 7 Aug 2026 12:11:30 +0000 Subject: [PATCH 01/11] name udts by their fully qualified path --- Cargo.lock | 2 +- Cargo.toml | 8 +- soroban-sdk-macros/src/derive_enum.rs | 62 +- soroban-sdk-macros/src/derive_enum_int.rs | 14 +- .../src/derive_error_enum_int.rs | 14 +- soroban-sdk-macros/src/derive_event.rs | 30 +- soroban-sdk-macros/src/derive_spec_fn.rs | 35 +- soroban-sdk-macros/src/derive_struct.rs | 24 +- soroban-sdk-macros/src/derive_struct_tuple.rs | 28 +- soroban-sdk-macros/src/map_type.rs | 107 +- ...ng_contract_address_executable_wasm.1.json | 8 +- .../test.1.json | 6 +- .../test_invoke_contract.1.json | 8 +- soroban-spec-rust/src/lib.rs | 82 +- soroban-spec-rust/src/syn_ext.rs | 123 +- soroban-spec-rust/src/trait.rs | 14 +- soroban-spec-rust/src/types.rs | 58 +- tests-expanded/test_account_tests.rs | 12 +- tests-expanded/test_account_wasm32v1-none.rs | 12 +- tests-expanded/test_add_u64_tests.rs | 20 +- tests-expanded/test_add_u64_wasm32v1-none.rs | 20 +- ...st_associated_types_contracttrait_tests.rs | 288 ++- tests-expanded/test_attributes_tests.rs | 2063 ++++------------- .../test_attributes_wasm32v1-none.rs | 12 +- tests-expanded/test_auth_tests.rs | 16 +- tests-expanded/test_bls_tests.rs | 12 +- tests-expanded/test_bls_wasm32v1-none.rs | 12 +- tests-expanded/test_bn254_tests.rs | 12 +- tests-expanded/test_bn254_wasm32v1-none.rs | 12 +- tests-expanded/test_constructor_tests.rs | 12 +- .../test_constructor_wasm32v1-none.rs | 12 +- .../test_contracttrait_impl_full_tests.rs | 18 +- ...t_contracttrait_impl_full_wasm32v1-none.rs | 18 +- .../test_contracttrait_impl_partial_tests.rs | 18 +- ...ontracttrait_impl_partial_wasm32v1-none.rs | 18 +- .../test_contracttrait_path_global_tests.rs | 18 +- ...contracttrait_path_global_wasm32v1-none.rs | 18 +- .../test_contracttrait_trait_tests.rs | 70 +- .../test_contracttrait_trait_wasm32v1-none.rs | 50 +- tests-expanded/test_errors_tests.rs | 18 +- tests-expanded/test_errors_wasm32v1-none.rs | 18 +- tests-expanded/test_import_contract_tests.rs | 324 ++- .../test_import_contract_wasm32v1-none.rs | 324 ++- tests-expanded/test_spec_import_tests.rs | 12 +- .../test_spec_import_wasm32v1-none.rs | 12 +- tests-expanded/test_spec_lib_tests.rs | 128 +- tests-expanded/test_spec_lib_wasm32v1-none.rs | 128 +- tests-expanded/test_spec_shaking_v2_tests.rs | 898 +++++-- .../test_spec_shaking_v2_wasm32v1-none.rs | 896 +++++-- tests-expanded/test_tuples_tests.rs | 288 ++- tests-expanded/test_udt_tests.rs | 476 ++-- tests-expanded/test_udt_wasm32v1-none.rs | 104 +- .../test_workspace_contract_tests.rs | 2 +- .../test_workspace_contract_wasm32v1-none.rs | 2 +- tests-expanded/test_workspace_lib_tests.rs | 8 +- .../test_workspace_lib_wasm32v1-none.rs | 8 +- 56 files changed, 4033 insertions(+), 2979 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index df39134f5..26c1ea259 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1685,7 +1685,7 @@ dependencies = [ [[package]] name = "stellar-xdr" version = "28.0.0" -source = "git+https://github.com/stellar/rs-stellar-xdr?rev=595950c5dfd2dab0333922ebb26fab27dac3188a#595950c5dfd2dab0333922ebb26fab27dac3188a" +source = "git+https://github.com/stellar/rs-stellar-xdr?rev=99a031a6f6a0935f68c073705651bd1addca1fd4#99a031a6f6a0935f68c073705651bd1addca1fd4" dependencies = [ "arbitrary", "base64", diff --git a/Cargo.toml b/Cargo.toml index 45815b515..e8d130a83 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -54,10 +54,12 @@ version = "=28.0.0" default-features = false [patch.crates-io] -# Pending https://github.com/stellar/rs-stellar-xdr/pull/562, which adds the -# borrowing `*View` types and their const XDR serializers that the contract spec +# Pending https://github.com/stellar/rs-stellar-xdr/pull/566, which widens the +# user-defined type name limit so a fully qualified name fits, and which carries +# https://github.com/stellar/rs-stellar-xdr/pull/562 adding the borrowing +# `*View` types and their const XDR serializers that the contract spec # generation in soroban-sdk-macros builds on. -stellar-xdr = { git = "https://github.com/stellar/rs-stellar-xdr", rev = "595950c5dfd2dab0333922ebb26fab27dac3188a" } +stellar-xdr = { git = "https://github.com/stellar/rs-stellar-xdr", rev = "99a031a6f6a0935f68c073705651bd1addca1fd4" } #soroban-env-common = { path = "../rs-soroban-env/soroban-env-common" } #soroban-env-guest = { path = "../rs-soroban-env/soroban-env-guest" } #soroban-env-host = { path = "../rs-soroban-env/soroban-env-host" } diff --git a/soroban-sdk-macros/src/derive_enum.rs b/soroban-sdk-macros/src/derive_enum.rs index eb244695c..233cba66e 100644 --- a/soroban-sdk-macros/src/derive_enum.rs +++ b/soroban-sdk-macros/src/derive_enum.rs @@ -13,7 +13,7 @@ use stellar_xdr::{ use crate::{ doc::docs_from_attrs, - map_type::{const_view_string, const_view_type_def, map_type}, + map_type::{const_view_string, const_view_type_def, map_type, spec_type_name_gen}, shaking, }; @@ -156,33 +156,47 @@ pub fn derive_type_enum( cases: spec_cases.try_into().unwrap(), }; + // The fully qualified name the spec knows this type by, emitted for every + // type so that a reference to it from anywhere can reach it. + let spec_type_name = spec_type_name_gen(enum_ident); + // Generated code spec. The spec entry is rendered as the equivalent const // ScSpecEntryView, which the contract crate encodes to XDR at compile time. let spec_gen = { let doc = const_view_string(path, &spec.doc); let lib = const_view_string(path, &spec.lib); - let name = const_view_string(path, &spec.name); - let cases = spec.cases.iter().map(|c| match c { - ScSpecUdtUnionCaseV0::VoidV0(c) => { - let doc = const_view_string(path, &c.doc); - let name = const_view_string(path, &c.name); - quote!(#path::xdr::ScSpecUdtUnionCaseV0View::VoidV0( - #path::xdr::ScSpecUdtUnionCaseVoidV0View { doc: #doc, name: #name } - )) - } - ScSpecUdtUnionCaseV0::TupleV0(c) => { - let doc = const_view_string(path, &c.doc); - let name = const_view_string(path, &c.name); - let type_ = c.type_.iter().map(|t| const_view_type_def(path, t)); - quote!(#path::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - #path::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: #doc, - name: #name, - type_: #path::xdr::VecMView::new(&[#(#type_),*]), - } - )) - } - }); + let name = quote!(#path::xdr::StringMView::new_str(#enum_ident::spec_type_name())); + // Each case's Rust field types, so a reference to a user-defined type in + // a case resolves to the name that type reports for itself. + let cases = spec + .cases + .iter() + .zip(&variant_field_types) + .map(|(c, field_types)| match c { + ScSpecUdtUnionCaseV0::VoidV0(c) => { + let doc = const_view_string(path, &c.doc); + let name = const_view_string(path, &c.name); + quote!(#path::xdr::ScSpecUdtUnionCaseV0View::VoidV0( + #path::xdr::ScSpecUdtUnionCaseVoidV0View { doc: #doc, name: #name } + )) + } + ScSpecUdtUnionCaseV0::TupleV0(c) => { + let doc = const_view_string(path, &c.doc); + let name = const_view_string(path, &c.name); + let type_ = c + .type_ + .iter() + .zip(field_types.iter().copied()) + .map(|(t, rust)| const_view_type_def(path, t, Some(rust))); + quote!(#path::xdr::ScSpecUdtUnionCaseV0View::TupleV0( + #path::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: #doc, + name: #name, + type_: #path::xdr::VecMView::new(&[#(#type_),*]), + } + )) + } + }); let spec_view = quote! { #path::xdr::ScSpecEntryView::UdtUnionV0(#path::xdr::ScSpecUdtUnionV0View { doc: #doc, @@ -230,6 +244,8 @@ pub fn derive_type_enum( // Output. let mut output = quote! { + #spec_type_name + #spec_gen #spec_shaking_impl diff --git a/soroban-sdk-macros/src/derive_enum_int.rs b/soroban-sdk-macros/src/derive_enum_int.rs index c72cd4bbe..7a4dfef05 100644 --- a/soroban-sdk-macros/src/derive_enum_int.rs +++ b/soroban-sdk-macros/src/derive_enum_int.rs @@ -9,7 +9,11 @@ use syn::{ use stellar_xdr::ScSpecUdtEnumCaseV0; -use crate::{doc::docs_from_attrs, map_type::const_view_string, shaking}; +use crate::{ + doc::docs_from_attrs, + map_type::{const_view_string, spec_type_name_gen}, + shaking, +}; // TODO: Add conversions to/from ScVal types. @@ -76,10 +80,14 @@ pub fn derive_type_enum_int( // Generated code spec. The spec entry is rendered as the equivalent const // ScSpecEntryView, which the contract crate encodes to XDR at compile time. + // The fully qualified name the spec knows this type by, emitted for every + // type so that a reference to it from anywhere can reach it. + let spec_type_name = spec_type_name_gen(enum_ident); + let spec_gen = { let doc = const_view_string(path, &spec.doc); let lib = const_view_string(path, &spec.lib); - let name = const_view_string(path, &spec.name); + let name = quote!(#path::xdr::StringMView::new_str(#enum_ident::spec_type_name())); let cases = spec.cases.iter().map(|c| { let doc = const_view_string(path, &c.doc); let name = const_view_string(path, &c.name); @@ -125,6 +133,8 @@ pub fn derive_type_enum_int( // Output. let mut output = quote! { + #spec_type_name + #spec_gen #spec_shaking_impl diff --git a/soroban-sdk-macros/src/derive_error_enum_int.rs b/soroban-sdk-macros/src/derive_error_enum_int.rs index bb8ec64e6..e9dc24ab8 100644 --- a/soroban-sdk-macros/src/derive_error_enum_int.rs +++ b/soroban-sdk-macros/src/derive_error_enum_int.rs @@ -6,7 +6,11 @@ use syn::{ ext::IdentExt as _, spanned::Spanned, Attribute, DataEnum, Error, ExprLit, Ident, Lit, Path, }; -use crate::{doc::docs_from_attrs, map_type::const_view_string, shaking}; +use crate::{ + doc::docs_from_attrs, + map_type::{const_view_string, spec_type_name_gen}, + shaking, +}; pub fn derive_type_error_enum_int( path: &Path, @@ -73,10 +77,14 @@ pub fn derive_type_error_enum_int( // Generated code spec. The spec entry is rendered as the equivalent const // ScSpecEntryView, which the contract crate encodes to XDR at compile time. + // The fully qualified name the spec knows this type by, emitted for every + // type so that a reference to it from anywhere can reach it. + let spec_type_name = spec_type_name_gen(enum_ident); + let spec_gen = { let doc = const_view_string(path, &spec.doc); let lib = const_view_string(path, &spec.lib); - let name = const_view_string(path, &spec.name); + let name = quote!(#path::xdr::StringMView::new_str(#enum_ident::spec_type_name())); let cases = spec.cases.iter().map(|c| { let doc = const_view_string(path, &c.doc); let name = const_view_string(path, &c.name); @@ -122,6 +130,8 @@ pub fn derive_type_error_enum_int( // Output. quote! { + #spec_type_name + #spec_gen #spec_shaking_impl diff --git a/soroban-sdk-macros/src/derive_event.rs b/soroban-sdk-macros/src/derive_event.rs index c46a4be6b..33056334c 100644 --- a/soroban-sdk-macros/src/derive_event.rs +++ b/soroban-sdk-macros/src/derive_event.rs @@ -213,18 +213,24 @@ fn derive_impls(args: &ContractEventArgs, input: &DeriveInput) -> Result vec![], }; + // The Rust types the argument and return spec types were mapped from, so a + // reference to a user-defined type resolves to the name that type reports + // for itself. Kept element-for-element with `spec_args` above, including the + // unsupported receiver, so the two line up. + let arg_types: Vec> = inputs + .iter() + .skip(if env_input.is_some() { 1 } else { 0 }) + .map(|a| match a { + FnArg::Typed(pat_type) => Some(&*pat_type.ty), + FnArg::Receiver(_) => None, + }) + .collect(); + let output_type: Option<&Type> = match output { + ReturnType::Type(_, ty) => Some(ty), + ReturnType::Default => None, + }; + // Generated code spec. let name = &ident.unraw().to_string(); let spec_entry = ScSpecFunctionV0 { @@ -168,16 +185,20 @@ pub fn derive_fn_spec( let spec_view = { let doc = const_view_string(path, &spec_entry.doc); let name = const_view_symbol(path, &spec_entry.name); - let inputs = spec_entry.inputs.iter().map(|i| { - let doc = const_view_string(path, &i.doc); - let name = const_view_string(path, &i.name); - let type_ = const_view_type_def(path, &i.type_); - quote!(#path::xdr::ScSpecFunctionInputV0View { doc: #doc, name: #name, type_: #type_ }) - }); + let inputs = spec_entry + .inputs + .iter() + .zip(arg_types.iter().copied()) + .map(|(i, rust)| { + let doc = const_view_string(path, &i.doc); + let name = const_view_string(path, &i.name); + let type_ = const_view_type_def(path, &i.type_, rust); + quote!(#path::xdr::ScSpecFunctionInputV0View { doc: #doc, name: #name, type_: #type_ }) + }); let outputs = spec_entry .outputs .iter() - .map(|o| const_view_type_def(path, o)); + .map(|o| const_view_type_def(path, o, output_type)); quote! { #path::xdr::ScSpecEntryView::FunctionV0(#path::xdr::ScSpecFunctionV0View { doc: #doc, diff --git a/soroban-sdk-macros/src/derive_struct.rs b/soroban-sdk-macros/src/derive_struct.rs index d6882067c..a8895fbc5 100644 --- a/soroban-sdk-macros/src/derive_struct.rs +++ b/soroban-sdk-macros/src/derive_struct.rs @@ -7,7 +7,7 @@ use stellar_xdr::{ScSpecTypeDef, ScSpecUdtStructFieldV0, ScSpecUdtStructV0, Stri use crate::{ doc::docs_from_attrs, - map_type::{const_view_string, const_view_type_def, map_type}, + map_type::{const_view_string, const_view_type_def, map_type, spec_type_name_gen}, shaking, }; @@ -83,18 +83,28 @@ pub fn derive_type_struct( fields: spec_fields.try_into().unwrap(), }; + // The fully qualified name the spec knows this type by, emitted for every + // type so that a reference to it from anywhere can reach it. + let spec_type_name = spec_type_name_gen(ident); + // Generated code spec. The spec entry is rendered as the equivalent const // ScSpecEntryView, which the contract crate encodes to XDR at compile time. let spec_gen = { let doc = const_view_string(path, &spec.doc); let lib = const_view_string(path, &spec.lib); - let name = const_view_string(path, &spec.name); - let fields = spec.fields.iter().map(|f| { + let name = quote!(#path::xdr::StringMView::new_str(#ident::spec_type_name())); + // Each field's Rust type, so a reference to a user-defined type in a + // field resolves to the name that type reports for itself. + let fields = spec + .fields + .iter() + .zip(field_types.iter().copied()) + .map(|(f, rust)| { let doc = const_view_string(path, &f.doc); let name = const_view_string(path, &f.name); - let type_ = const_view_type_def(path, &f.type_); - quote!(#path::xdr::ScSpecUdtStructFieldV0View { doc: #doc, name: #name, type_: #type_ }) - }); + let type_ = const_view_type_def(path, &f.type_, Some(rust)); + quote!(#path::xdr::ScSpecUdtStructFieldV0View { doc: #doc, name: #name, type_: #type_ }) + }); let spec_view = quote! { #path::xdr::ScSpecEntryView::UdtStructV0(#path::xdr::ScSpecUdtStructV0View { doc: #doc, @@ -134,6 +144,8 @@ pub fn derive_type_struct( // Output. let mut output = quote! { + #spec_type_name + #spec_gen #spec_shaking_impl diff --git a/soroban-sdk-macros/src/derive_struct_tuple.rs b/soroban-sdk-macros/src/derive_struct_tuple.rs index f9954b064..0ac93b72b 100644 --- a/soroban-sdk-macros/src/derive_struct_tuple.rs +++ b/soroban-sdk-macros/src/derive_struct_tuple.rs @@ -7,7 +7,7 @@ use stellar_xdr::{ScSpecTypeDef, ScSpecUdtStructFieldV0, ScSpecUdtStructV0, Stri use crate::{ doc::docs_from_attrs, - map_type::{const_view_string, const_view_type_def, map_type}, + map_type::{const_view_string, const_view_type_def, map_type, spec_type_name_gen}, shaking, }; @@ -72,18 +72,28 @@ pub fn derive_type_struct_tuple( fields: field_specs.try_into().unwrap(), }; + // The fully qualified name the spec knows this type by, emitted for every + // type so that a reference to it from anywhere can reach it. + let spec_type_name = spec_type_name_gen(ident); + // Generated code spec. The spec entry is rendered as the equivalent const // ScSpecEntryView, which the contract crate encodes to XDR at compile time. let spec_gen = { let doc = const_view_string(path, &spec.doc); let lib = const_view_string(path, &spec.lib); - let name = const_view_string(path, &spec.name); - let fields = spec.fields.iter().map(|f| { - let doc = const_view_string(path, &f.doc); - let name = const_view_string(path, &f.name); - let type_ = const_view_type_def(path, &f.type_); - quote!(#path::xdr::ScSpecUdtStructFieldV0View { doc: #doc, name: #name, type_: #type_ }) - }); + let name = quote!(#path::xdr::StringMView::new_str(#ident::spec_type_name())); + // Each field's Rust type, so a reference to a user-defined type in a + // field resolves to the name that type reports for itself. + let fields = spec + .fields + .iter() + .zip(field_types.iter().copied()) + .map(|(f, rust)| { + let doc = const_view_string(path, &f.doc); + let name = const_view_string(path, &f.name); + let type_ = const_view_type_def(path, &f.type_, Some(rust)); + quote!(#path::xdr::ScSpecUdtStructFieldV0View { doc: #doc, name: #name, type_: #type_ }) + }); let spec_view = quote! { #path::xdr::ScSpecEntryView::UdtStructV0(#path::xdr::ScSpecUdtStructV0View { doc: #doc, @@ -123,6 +133,8 @@ pub fn derive_type_struct_tuple( // Output. let mut output = quote! { + #spec_type_name + #spec_gen #spec_shaking_impl diff --git a/soroban-sdk-macros/src/map_type.rs b/soroban-sdk-macros/src/map_type.rs index 412d602ca..9e0f99bff 100644 --- a/soroban-sdk-macros/src/map_type.rs +++ b/soroban-sdk-macros/src/map_type.rs @@ -308,36 +308,48 @@ pub fn map_type(t: &Type, allow_ref: bool, allow_hash: bool) -> Result TokenStream2 { +/// +/// `rust` is the Rust type the spec type was mapped from. A reference to a +/// user-defined type needs it to name that type, because the name is the one the +/// type reports for itself and only the Rust type says which type that is. +pub fn const_view_type_def(path: &Path, t: &ScSpecTypeDef, rust: Option<&Type>) -> TokenStream2 { let xdr = quote!(#path::xdr); let variant = format_ident!("{}", t.name()); + // The Rust type arguments lining up with this spec type's arguments, so that + // a nested reference is paired with the Rust type it was mapped from. + let args = rust.map(type_args).unwrap_or_default(); + let arg = |i: usize| args.get(i).copied(); // Variants that hold a value. The recursive ones sit behind a reference in // the View type, matching the Box in the owned type. let value = match t { ScSpecTypeDef::Option(o) => { - let value_type = const_view_type_def(path, &o.value_type); + let value_type = const_view_type_def(path, &o.value_type, arg(0)); Some(quote!(( r::ScSpecTypeOptionView { value_type: &#value_type }))) } ScSpecTypeDef::Result(r) => { - let ok_type = const_view_type_def(path, &r.ok_type); - let error_type = const_view_type_def(path, &r.error_type); + let ok_type = const_view_type_def(path, &r.ok_type, arg(0)); + let error_type = const_view_type_def(path, &r.error_type, arg(1)); Some( quote!(( r::ScSpecTypeResultView { ok_type: &#ok_type, error_type: &#error_type })), ) } ScSpecTypeDef::Vec(v) => { - let element_type = const_view_type_def(path, &v.element_type); + let element_type = const_view_type_def(path, &v.element_type, arg(0)); Some(quote!(( r::ScSpecTypeVecView { element_type: &#element_type }))) } ScSpecTypeDef::Map(m) => { - let key_type = const_view_type_def(path, &m.key_type); - let value_type = const_view_type_def(path, &m.value_type); + let key_type = const_view_type_def(path, &m.key_type, arg(0)); + let value_type = const_view_type_def(path, &m.value_type, arg(1)); Some( quote!(( r::ScSpecTypeMapView { key_type: &#key_type, value_type: &#value_type })), ) } ScSpecTypeDef::Tuple(t) => { - let value_types = t.value_types.iter().map(|t| const_view_type_def(path, t)); + let value_types = t + .value_types + .iter() + .enumerate() + .map(|(i, t)| const_view_type_def(path, t, arg(i))); Some( quote!(( r::ScSpecTypeTupleView { value_types: #xdr::VecMView::new(&[#(#value_types),*]) })), ) @@ -346,16 +358,87 @@ pub fn const_view_type_def(path: &Path, t: &ScSpecTypeDef) -> TokenStream2 { let n = b.n; Some(quote!((#xdr::ScSpecTypeBytesN { n: #n }))) } - ScSpecTypeDef::Udt(u) => { - let name = const_view_string(path, &u.name); - Some(quote!((#xdr::ScSpecTypeUdtView { name: #name }))) - } + // A reference names the type by the fully qualified name that type + // reports for itself, which only the referenced type can give because + // only its own expansion sees the module it is defined in. The Rust type + // the reference was mapped from is how that type is reached. + ScSpecTypeDef::Udt(_) => Some(match rust.map(unref) { + Some(ty) => { + quote!((#xdr::ScSpecTypeUdtView { name: #xdr::StringMView::new_str(<#ty>::spec_type_name()) })) + } + None => quote!( + (compile_error!( + "user-defined type reference has no Rust type to take its name from" + )) + ), + }), // All remaining variants are void. _ => None, }; quote!(#xdr::ScSpecTypeDefView::#variant #value) } +/// The Rust type behind any number of references. +fn unref(t: &Type) -> &Type { + match t { + Type::Reference(TypeReference { elem, .. }) => unref(elem), + _ => t, + } +} + +/// The Rust type arguments that line up, in order, with the type arguments of +/// the spec type [map_type] produced for `t`: the arguments of a container +/// (`Option`, `Result`, `Vec`, `Map`) or the elements of a +/// tuple. Empty for anything else, including the parameterized types whose +/// arguments are not types in the spec (`BytesN`, `Hash`). +fn type_args(t: &Type) -> Vec<&Type> { + match unref(t) { + Type::Tuple(TypeTuple { elems, .. }) => elems.iter().collect(), + Type::Path(TypePath { + qself: None, + path: Path { segments, .. }, + }) => match segments.last() { + Some(PathSegment { + ident, + arguments: PathArguments::AngleBracketed(args), + }) if matches!( + &ident.unraw().to_string()[..], + "Option" | "Result" | "Vec" | "Map" + ) => + { + args.args + .iter() + .filter_map(|a| match a { + GenericArgument::Type(ty) => Some(ty), + _ => None, + }) + .collect() + } + _ => Vec::new(), + }, + _ => Vec::new(), + } +} + +/// Emits the `spec_type_name` const fn on a user-defined type: the name the +/// contract spec knows it by, which is its Rust path — the module it is defined +/// in, then its own name. +/// +/// The module path is only known where the type is defined, and a macro cannot +/// see it, so `module_path!` is emitted for the compiler to expand in place +/// rather than resolved here. +pub fn spec_type_name_gen(ident: &Ident) -> TokenStream2 { + let name = Literal::string(&ident.unraw().to_string()); + quote! { + impl #ident { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + ::core::concat!(::core::module_path!(), "::", #name) + } + } + } +} + /// Renders a [StringM] as a const expression of type `#path::xdr::StringMView`. /// The `MAX` of the `StringMView` is inferred from the field it is assigned to. pub fn const_view_string(path: &Path, s: &StringM) -> TokenStream2 { diff --git a/soroban-sdk/test_snapshots/tests/address/test_get_existing_contract_address_executable_wasm.1.json b/soroban-sdk/test_snapshots/tests/address/test_get_existing_contract_address_executable_wasm.1.json index 487015e25..cfcaddd85 100644 --- a/soroban-sdk/test_snapshots/tests/address/test_get_existing_contract_address_executable_wasm.1.json +++ b/soroban-sdk/test_snapshots/tests/address/test_get_existing_contract_address_executable_wasm.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948" + "wasm": "1a457813221c5f226d780f3b5d0f3ce7d298570361765353760ef9aae0251d94" }, "constructor_args": [] } @@ -70,7 +70,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948" + "wasm": "1a457813221c5f226d780f3b5d0f3ce7d298570361765353760ef9aae0251d94" }, "storage": null } @@ -104,8 +104,8 @@ } } }, - "hash": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948", - "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be801537045635631f3b0ab40690d48b4537045635631aff793ba9e4dde9a537045635631eb9f12269a76282a53704563563116276438ffc9b1f8537045635631c81291fed713f59c537045635631ff7b5620ab0ddc64537045635631e16f55dbd4379814556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc0010000900000000db1c0e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000007556474456e756d00000000000000000162000000000007d000000007556474456e756d00000000010000000700000002000000000000000000000007556474456e756d0000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d0000000095564745374727563740000000000000100000000000000045564744300000001000007d000000008556474456e756d320000000100000000000000045564744400000001000007d0000000085564745475706c6500000003000000000000000000000008556474456e756d32000000020000000000000001410000000000000a0000000000000001420000000000000f000000010000000000000000000000085564745475706c650000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000009556474537472756374000000000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d00000000c55647452656375727369766500000001000003e8000007d00000000c5564745265637572736976650000000100000000000000000000000c5564745265637572736976650000000200000000000000016100000000000011000000000000000162000000000003ea000007d00000000c5564745265637572736976650000000200000000000000000000000d526563757273697665456e756d0000000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d00000000f526563757273697665546f456e756d000000000100000000000000000000000f526563757273697665546f456e756d000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d00000000d526563757273697665456e756d00000000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d00000000d526563757273697665456e756d00000000000000000000036b6579000000000400000001000003e9000003e8000007d00000000d526563757273697665456e756d0000000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "1a457813221c5f226d780f3b5d0f3ce7d298570361765353760ef9aae0251d94", + "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be801537045635631f3b0ab40690d48b4537045635631aff793ba9e4dde9a537045635631eb9f12269a76282a53704563563116276438ffc9b1f8537045635631c81291fed713f59c537045635631ff7b5620ab0ddc64537045635631e16f55dbd4379814556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc001000090000000087210e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000011746573745f7564743a3a556474456e756d000000000000000000000162000000000007d000000011746573745f7564743a3a556474456e756d000000000000010000000700000002000000000000000000000011746573745f7564743a3a556474456e756d00000000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d000000013746573745f7564743a3a556474537472756374000000000100000000000000045564744300000001000007d000000012746573745f7564743a3a556474456e756d3200000000000100000000000000045564744400000001000007d000000012746573745f7564743a3a5564745475706c65000000000003000000000000000000000012746573745f7564743a3a556474456e756d320000000000020000000000000001410000000000000a0000000000000001420000000000000f00000001000000000000000000000012746573745f7564743a3a5564745475706c6500000000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000013746573745f7564743a3a55647453747275637400000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d000000016746573745f7564743a3a556474526563757273697665000000000001000003e8000007d000000016746573745f7564743a3a556474526563757273697665000000000001000000000000000000000016746573745f7564743a3a55647452656375727369766500000000000200000000000000016100000000000011000000000000000162000000000003ea000007d000000016746573745f7564743a3a556474526563757273697665000000000002000000000000000000000017746573745f7564743a3a526563757273697665456e756d000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d000000019746573745f7564743a3a526563757273697665546f456e756d00000000000001000000000000000000000019746573745f7564743a3a526563757273697665546f456e756d0000000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000036b6579000000000400000001000003e9000003e8000007d000000017746573745f7564743a3a526563757273697665456e756d000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/soroban-sdk/test_snapshots/tests/auth/auth_05_register_at_constructor/test.1.json b/soroban-sdk/test_snapshots/tests/auth/auth_05_register_at_constructor/test.1.json index e703b2c34..85cd5b94a 100644 --- a/soroban-sdk/test_snapshots/tests/auth/auth_05_register_at_constructor/test.1.json +++ b/soroban-sdk/test_snapshots/tests/auth/auth_05_register_at_constructor/test.1.json @@ -67,7 +67,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "372845afc0162e60d93c88cf89316b2e7c2835832a1459360a5d13939d34a63f" + "wasm": "3302fead76044fbe8f17dfa9e7d894eaf1d360a7eb338cf3d5fd45bffb7a3fd7" }, "storage": [ { @@ -110,8 +110,8 @@ } } }, - "hash": "372845afc0162e60d93c88cf89316b2e7c2835832a1459360a5d13939d34a63f", - "code": "0061736d0100000001130360017e017e60027e7e017e60037e7e7e017e021303016101300000016201690001016c015f00020302010005030100110621047f01418080c0000b7f00418580c0000b7f00418580c0000b7f00419080c0000b073905066d656d6f727902000d5f5f636f6e7374727563746f720003015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030a440142000240200042ff018342cd00510d00000b20001080808080001a418080c08000ad4220864204844284808080d000108180808000200042021082808080001a42020b0b0e0100418080c0000b0561646d696e00db150e636f6e747261637473706563763000000000000000000000000d5f5f636f6e7374727563746f7200000000000001000000000000000561646d696e000000000000130000000000000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "3302fead76044fbe8f17dfa9e7d894eaf1d360a7eb338cf3d5fd45bffb7a3fd7", + "code": "0061736d0100000001130360017e017e60027e7e017e60037e7e7e017e021303016101300000016201690001016c015f00020302010005030100110621047f01418080c0000b7f00418580c0000b7f00418580c0000b7f00419080c0000b073905066d656d6f727902000d5f5f636f6e7374727563746f720003015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030a440142000240200042ff018342cd00510d00000b20001080808080001a418080c08000ad4220864204844284808080d000108180808000200042021082808080001a42020b0b0e0100418080c0000b0561646d696e00bb180e636f6e747261637473706563763000000000000000000000000d5f5f636f6e7374727563746f7200000000000001000000000000000561646d696e000000000000130000000000000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/soroban-sdk/test_snapshots/tests/crypto_bls12_381/test_invoke_contract.1.json b/soroban-sdk/test_snapshots/tests/crypto_bls12_381/test_invoke_contract.1.json index 26a0b3e76..58cca38a8 100644 --- a/soroban-sdk/test_snapshots/tests/crypto_bls12_381/test_invoke_contract.1.json +++ b/soroban-sdk/test_snapshots/tests/crypto_bls12_381/test_invoke_contract.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "fd343758845eb29fbe3e0e1d6e27b1b79eed5d17573386913b8de7a5b74cb6d2" + "wasm": "edcc25ddf415ff5bb649f91a69d239027328a7b277cd2d2cabf8baebdfd75995" }, "constructor_args": [] } @@ -96,7 +96,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "fd343758845eb29fbe3e0e1d6e27b1b79eed5d17573386913b8de7a5b74cb6d2" + "wasm": "edcc25ddf415ff5bb649f91a69d239027328a7b277cd2d2cabf8baebdfd75995" }, "storage": null } @@ -144,8 +144,8 @@ } } }, - "hash": "fd343758845eb29fbe3e0e1d6e27b1b79eed5d17573386913b8de7a5b74cb6d2", - "code": "0061736d0100000001320960047e7e7e7e017e60017e017e60027e7e017e60000060037e7f7f0060017f0060027f7e0060017f017e60037f7f7f017f026711016d01610000016201380001016301380001016301340001016301650001016301610001016301360002016301630002016301670002017601330001017601310002016201310000016201330002016901610001017801300002016901720002017601670002031413030104050606060607020302020305080808080405017001020205030100110621047f01418080c0000b7f0041c480c0000b7f00419481c0000b7f0041a081c0000b075708066d656d6f727902000c64756d6d795f76657269667900120a66725f7665635f676574001a0667315f6d756c001c0667325f6d756c001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030907010041010b01110aa7171302000b870503027f047e017f23808080800041f0016b22012480808080004100210241002d008080c080001a0240034020024128460d01200141086a20026a4202370300200241086a21020c000b0b0240200042ff018342cc00520d002000419c80c08000ad422086420484200141086aad4220864204844284808080d0001080808080001a2001290308220042ff018342c800520d0020001081808080004280808080708342808080808006520d0020014190016a4100413010a1808080001a200020014190016a4130109380808000200141306a20014190016a413010a3808080001a200141306a10948080800020014190016a20012903101095808080002001280290010d00200129039801210320014190016a410041e00010a1808080001a200320014190016a41e000109380808000200141306a20014190016a41e00010a3808080001a200141306a109480808000200141306a41306a10948080800020014190016a20012903181096808080002001280290010d00200129039801210420014190016a20012903201097808080002001280290010d00200129039801210520014190016a20012903281098808080002001280290014101460d00200129039801210620001082808080001083808080001a20031084808080001085808080001a200520041086808080002103200620041087808080002104420221004101210203402000210520024101712107410021022003210020070d000b200120053703900120014190016a1099808080002105420221004101210203402000210320024101712107410021022004210020070d000b2001200337039001200520014190016a1099808080001088808080002100200141f0016a2480808080002000420151ad0f0b000b1f00200042042001ad4220864204842002ad422086420484108b808080001a0b24000240200041e480c08000413010a080808000417f4a0d000f0b410e109f80808000000b4201017e420121020240200142ff018342c800520d002001108180808000428080808070834280808080800c520d0020002001370308420021020b200020023703000ba60102017f017e024002402001a741ff0171220241c600460d00420121032002410c470d010b41c480c08000ad42208642048442848080808004108c80808000108d8080800021030240024002400240200142ce0083420c520d00200342ff0183420c510d010b20012003108e80808000427f550d010c020b20014208882003420888540d010b20012003108f8080800021010b20002001370308420021030b200020033703000b4d01017f23808080800041106b22022480808080002002200110958080800042012101024020022802000d0020002002290308370308420021010b20002001370300200241106a2480808080000b4201017e420121020240200142ff018342c800520d0020011081808080004280808080708342808080808018520d0020002001370308420021020b200020023703000b17002000ad4220864204844284808080101090808080000b980101017f23808080800041106b2202248080808000200241818080800036020020022802001a024002400240200042ff018342cb00520d00200142ff01834204520d0020001089808080004220882001422088580d0120022000200142848080807083108a8080800010968080800020022802004101470d020b000b109b80808000000b20022903082100200241106a24808080800020000b0b00412b109f80808000000b6501017f23808080800041106b220224808080800020022000109780808000024020022802004101460d00200229030821002002200110968080800020022802004101460d00200020022903081086808080002100200241106a24808080800020000f0b000b6501017f23808080800041106b220224808080800020022000109880808000024020022802004101460d00200229030821002002200110968080800020022802004101460d00200020022903081087808080002100200241106a24808080800020000f0b000b0300000b0900109e80808000000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030baa0301057f02400240200241104f0d00200021030c010b024020002000410020006b41037122046a22054f0d002004417f6a21062000210302402004450d0020042107200021030340200320013a0000200341016a21032007417f6a22070d000b0b20064107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032005470d000b0b024020052005200220046b2202417c716a22034f0d00200141ff017141818284086c2107034020052007360200200541046a22052003490d000b0b200241037121020b02402003200320026a22074f0d002002417f6a2104024020024107712205450d000340200320013a0000200341016a21032005417f6a22050d000b0b20044107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032007470d000b0b20000bb907010c7f23808080800041106b210302400240200241104f0d00200021040c010b024020002000410020006b41037122056a22064f0d002005417f6a2107200021042001210802402005450d002005210920002104200121080340200420082d00003a0000200841016a2108200441016a21042009417f6a22090d000b0b20074107490d000340200420082d00003a0000200441016a200841016a2d00003a0000200441026a200841026a2d00003a0000200441036a200841036a2d00003a0000200441046a200841046a2d00003a0000200441056a200841056a2d00003a0000200441066a200841066a2d00003a0000200441076a200841076a2d00003a0000200841086a2108200441086a22042006470d000b0b2006200220056b2209417c7122076a210402400240200120056a220841037122010d00200620044f0d0120082101034020062001280200360200200141046a2101200641046a22062004490d000c020b0b410021022003410036020c2003410c6a20017221050240410420016b220a410171450d00200520082d00003a0000410121020b0240200a410271450d00200520026a200820026a2f01003b01000b200820016b21022001410374210b200328020c210502400240200641046a2004490d002006210c0c010b4100200b6b411871210d034020062005200b76200241046a22022802002205200d7472360200200641086a210a200641046a220c2106200a2004490d000b0b41002106200341003a0008200341003a00060240024020014101470d00200341086a210d410021014100210a4100210e0c010b200241056a2d0000210a2003200241046a2d000022013a0008200a410874210a4102210e200341066a210d0b02402008410171450d00200d200241046a200e6a2d00003a000020032d0006411074210620032d000821010b200c200a200672200141ff0171724100200b6b411871742005200b76723602000b20094103712102200820076a21010b02402004200420026a22064f0d002002417f6a2109024020024107712208450d000340200420012d00003a0000200141016a2101200441016a21042008417f6a22080d000b0b20094107490d000340200420012d00003a0000200441016a200141016a2d00003a0000200441026a200141026a2d00003a0000200441036a200141036a2d00003a0000200441046a200141046a2d00003a0000200441056a200141056a2d00003a0000200441066a200141066a2d00003a0000200441076a200141076a2d00003a0000200141086a2101200441086a22042006470d000b0b20000b0e0020002001200210a2808080000b0b9e010100418080c0000b940153704563563185570041dc7eb72266706670326672673167320000000e00100002000000100010000300000013001000020000001500100002000000170010000200000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000011a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab00cb180e636f6e747261637473706563763000000000000000000000000667315f6d756c000000000002000000000000000170000000000003ee000000600000000000000001730000000000000c00000001000003ee0000006000000000000000000000000667325f6d756c000000000002000000000000000170000000000003ee000000c00000000000000001730000000000000c00000001000003ee000000c00000000100000000000000000000000a44756d6d7950726f6f66000000000005000000000000000266700000000003ee00000030000000000000000366703200000003ee000000600000000000000002667200000000000c000000000000000267310000000003ee00000060000000000000000267320000000003ee000000c000000000000000000000000a66725f7665635f676574000000000002000000000000000676616c7565730000000003ea0000000c0000000000000005696e64657800000000000004000000010000000c00000000000000000000000c64756d6d795f76657269667900000001000000000000000570726f6f66000000000007d00000000a44756d6d7950726f6f660000000000010000000100000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "edcc25ddf415ff5bb649f91a69d239027328a7b277cd2d2cabf8baebdfd75995", + "code": "0061736d0100000001320960047e7e7e7e017e60017e017e60027e7e017e60000060037e7f7f0060017f0060027f7e0060017f017e60037f7f7f017f026711016d01610000016201380001016301380001016301340001016301650001016301610001016301360002016301630002016301670002017601330001017601310002016201310000016201330002016901610001017801300002016901720002017601670002031413030104050606060607020302020305080808080405017001020205030100110621047f01418080c0000b7f0041c480c0000b7f00419481c0000b7f0041a081c0000b075708066d656d6f727902000c64756d6d795f76657269667900120a66725f7665635f676574001a0667315f6d756c001c0667325f6d756c001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030907010041010b01110aa7171302000b870503027f047e017f23808080800041f0016b22012480808080004100210241002d008080c080001a0240034020024128460d01200141086a20026a4202370300200241086a21020c000b0b0240200042ff018342cc00520d002000419c80c08000ad422086420484200141086aad4220864204844284808080d0001080808080001a2001290308220042ff018342c800520d0020001081808080004280808080708342808080808006520d0020014190016a4100413010a1808080001a200020014190016a4130109380808000200141306a20014190016a413010a3808080001a200141306a10948080800020014190016a20012903101095808080002001280290010d00200129039801210320014190016a410041e00010a1808080001a200320014190016a41e000109380808000200141306a20014190016a41e00010a3808080001a200141306a109480808000200141306a41306a10948080800020014190016a20012903181096808080002001280290010d00200129039801210420014190016a20012903201097808080002001280290010d00200129039801210520014190016a20012903281098808080002001280290014101460d00200129039801210620001082808080001083808080001a20031084808080001085808080001a200520041086808080002103200620041087808080002104420221004101210203402000210520024101712107410021022003210020070d000b200120053703900120014190016a1099808080002105420221004101210203402000210320024101712107410021022004210020070d000b2001200337039001200520014190016a1099808080001088808080002100200141f0016a2480808080002000420151ad0f0b000b1f00200042042001ad4220864204842002ad422086420484108b808080001a0b24000240200041e480c08000413010a080808000417f4a0d000f0b410e109f80808000000b4201017e420121020240200142ff018342c800520d002001108180808000428080808070834280808080800c520d0020002001370308420021020b200020023703000ba60102017f017e024002402001a741ff0171220241c600460d00420121032002410c470d010b41c480c08000ad42208642048442848080808004108c80808000108d8080800021030240024002400240200142ce0083420c520d00200342ff0183420c510d010b20012003108e80808000427f550d010c020b20014208882003420888540d010b20012003108f8080800021010b20002001370308420021030b200020033703000b4d01017f23808080800041106b22022480808080002002200110958080800042012101024020022802000d0020002002290308370308420021010b20002001370300200241106a2480808080000b4201017e420121020240200142ff018342c800520d0020011081808080004280808080708342808080808018520d0020002001370308420021020b200020023703000b17002000ad4220864204844284808080101090808080000b980101017f23808080800041106b2202248080808000200241818080800036020020022802001a024002400240200042ff018342cb00520d00200142ff01834204520d0020001089808080004220882001422088580d0120022000200142848080807083108a8080800010968080800020022802004101470d020b000b109b80808000000b20022903082100200241106a24808080800020000b0b00412b109f80808000000b6501017f23808080800041106b220224808080800020022000109780808000024020022802004101460d00200229030821002002200110968080800020022802004101460d00200020022903081086808080002100200241106a24808080800020000f0b000b6501017f23808080800041106b220224808080800020022000109880808000024020022802004101460d00200229030821002002200110968080800020022802004101460d00200020022903081087808080002100200241106a24808080800020000f0b000b0300000b0900109e80808000000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030baa0301057f02400240200241104f0d00200021030c010b024020002000410020006b41037122046a22054f0d002004417f6a21062000210302402004450d0020042107200021030340200320013a0000200341016a21032007417f6a22070d000b0b20064107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032005470d000b0b024020052005200220046b2202417c716a22034f0d00200141ff017141818284086c2107034020052007360200200541046a22052003490d000b0b200241037121020b02402003200320026a22074f0d002002417f6a2104024020024107712205450d000340200320013a0000200341016a21032005417f6a22050d000b0b20044107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032007470d000b0b20000bb907010c7f23808080800041106b210302400240200241104f0d00200021040c010b024020002000410020006b41037122056a22064f0d002005417f6a2107200021042001210802402005450d002005210920002104200121080340200420082d00003a0000200841016a2108200441016a21042009417f6a22090d000b0b20074107490d000340200420082d00003a0000200441016a200841016a2d00003a0000200441026a200841026a2d00003a0000200441036a200841036a2d00003a0000200441046a200841046a2d00003a0000200441056a200841056a2d00003a0000200441066a200841066a2d00003a0000200441076a200841076a2d00003a0000200841086a2108200441086a22042006470d000b0b2006200220056b2209417c7122076a210402400240200120056a220841037122010d00200620044f0d0120082101034020062001280200360200200141046a2101200641046a22062004490d000c020b0b410021022003410036020c2003410c6a20017221050240410420016b220a410171450d00200520082d00003a0000410121020b0240200a410271450d00200520026a200820026a2f01003b01000b200820016b21022001410374210b200328020c210502400240200641046a2004490d002006210c0c010b4100200b6b411871210d034020062005200b76200241046a22022802002205200d7472360200200641086a210a200641046a220c2106200a2004490d000b0b41002106200341003a0008200341003a00060240024020014101470d00200341086a210d410021014100210a4100210e0c010b200241056a2d0000210a2003200241046a2d000022013a0008200a410874210a4102210e200341066a210d0b02402008410171450d00200d200241046a200e6a2d00003a000020032d0006411074210620032d000821010b200c200a200672200141ff0171724100200b6b411871742005200b76723602000b20094103712102200820076a21010b02402004200420026a22064f0d002002417f6a2109024020024107712208450d000340200420012d00003a0000200141016a2101200441016a21042008417f6a22080d000b0b20094107490d000340200420012d00003a0000200441016a200141016a2d00003a0000200441026a200141026a2d00003a0000200441036a200141036a2d00003a0000200441046a200141046a2d00003a0000200441056a200141056a2d00003a0000200441066a200141066a2d00003a0000200441076a200141076a2d00003a0000200141086a2101200441086a22042006470d000b0b20000b0e0020002001200210a2808080000b0b9e010100418080c0000b940153704563563185570041dc7eb72266706670326672673167320000000e00100002000000100010000300000013001000020000001500100002000000170010000200000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000011a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab00bb1b0e636f6e747261637473706563763000000000000000000000000667315f6d756c000000000002000000000000000170000000000003ee000000600000000000000001730000000000000c00000001000003ee0000006000000000000000000000000667325f6d756c000000000002000000000000000170000000000003ee000000c00000000000000001730000000000000c00000001000003ee000000c000000001000000000000000000000014746573745f626c733a3a44756d6d7950726f6f6600000005000000000000000266700000000003ee00000030000000000000000366703200000003ee000000600000000000000002667200000000000c000000000000000267310000000003ee00000060000000000000000267320000000003ee000000c000000000000000000000000a66725f7665635f676574000000000002000000000000000676616c7565730000000003ea0000000c0000000000000005696e64657800000000000004000000010000000c00000000000000000000000c64756d6d795f76657269667900000001000000000000000570726f6f66000000000007d000000014746573745f626c733a3a44756d6d7950726f6f66000000010000000100000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/soroban-spec-rust/src/lib.rs b/soroban-spec-rust/src/lib.rs index dcf59e3b3..ddba770e4 100644 --- a/soroban-spec-rust/src/lib.rs +++ b/soroban-spec-rust/src/lib.rs @@ -1,4 +1,6 @@ mod syn_ext; + +use syn_ext::TypeNames; pub mod r#trait; pub mod types; @@ -127,28 +129,44 @@ pub fn generate_without_file_with_options( } } + // The identifiers naming the user-defined types this spec defines, resolved + // together so that two types whose fully qualified names share a last + // segment do not both claim it. + let defined: Vec = spec_structs + .iter() + .map(|s| s.name.to_utf8_string_lossy()) + .chain(spec_unions.iter().map(|s| s.name.to_utf8_string_lossy())) + .chain(spec_enums.iter().map(|s| s.name.to_utf8_string_lossy())) + .chain( + spec_error_enums + .iter() + .map(|s| s.name.to_utf8_string_lossy()), + ) + .collect(); + let names = TypeNames::new(defined.iter().map(String::as_str)); + let trait_name = "Contract"; - let trait_ = r#trait::generate_trait(trait_name, &spec_fns)?; + let trait_ = r#trait::generate_trait(trait_name, &spec_fns, &names)?; let structs = spec_structs .iter() - .map(|s| generate_struct_with_options(s, opts)) + .map(|s| generate_struct_with_options(s, opts, &names)) .collect::, _>>()?; let unions = spec_unions .iter() - .map(|s| generate_union_with_options(s, opts)) + .map(|s| generate_union_with_options(s, opts, &names)) .collect::, _>>()?; let enums = spec_enums .iter() - .map(|s| generate_enum_with_options(s, opts)) + .map(|s| generate_enum_with_options(s, opts, &names)) .collect::, _>>()?; let error_enums = spec_error_enums .iter() - .map(|s| generate_error_enum_with_options(s, opts)) + .map(|s| generate_error_enum_with_options(s, opts, &names)) .collect::, _>>()?; let events = spec_events .iter() - .map(|s| generate_event_with_options(s, opts)) + .map(|s| generate_event_with_options(s, opts, &names)) .collect::, _>>()?; Ok(quote! { @@ -180,15 +198,23 @@ pub fn generate_without_file_with_options( /// Returns a borrowed slice when no rewrite is needed, otherwise a /// freshly-owned `Vec` with the rewrite applied. fn apply_error_udt_override(specs: &[ScSpecEntry]) -> Cow<'_, [ScSpecEntry]> { - let has_error_udt = specs.iter().any(|e| { - matches!( - e, - ScSpecEntry::UdtErrorEnumV0(err) if err.name.to_utf8_string_lossy() == "Error" - ) + // A user-defined type is named by its fully qualified name, so the enum is + // recognized by the last segment of its name, and references are rewritten + // to the whole of it so they resolve back to the entry defining it. + let error_udt_name = specs.iter().find_map(|e| match e { + ScSpecEntry::UdtErrorEnumV0(err) => { + let name = err.name.to_utf8_string_lossy(); + if name.rsplit("::").next().unwrap_or(&name) == "Error" { + Some(name) + } else { + None + } + } + _ => None, }); - if has_error_udt { + if let Some(name) = error_udt_name { let mut v = specs.to_vec(); - rewrite_error_to_udt(&mut v); + rewrite_error_to_udt(&mut v, &name); Cow::Owned(v) } else { Cow::Borrowed(specs) @@ -199,27 +225,27 @@ fn apply_error_udt_override(specs: &[ScSpecEntry]) -> Cow<'_, [ScSpecEntry]> { /// `ScSpecTypeDef::Udt { name: "Error" }`. Called only when the spec contains /// a user-defined error enum named `Error`, so the UDT reference resolves to /// that enum during code generation. -fn rewrite_error_to_udt(entries: &mut [ScSpecEntry]) { - fn rewrite_ty(t: &mut ScSpecTypeDef) { +fn rewrite_error_to_udt(entries: &mut [ScSpecEntry], name: &str) { + fn rewrite_ty(t: &mut ScSpecTypeDef, name: &str) { match t { ScSpecTypeDef::Error => { *t = ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "Error".try_into().unwrap(), + name: name.try_into().unwrap(), }); } - ScSpecTypeDef::Option(o) => rewrite_ty(&mut o.value_type), + ScSpecTypeDef::Option(o) => rewrite_ty(&mut o.value_type, name), ScSpecTypeDef::Result(r) => { - rewrite_ty(&mut r.ok_type); - rewrite_ty(&mut r.error_type); + rewrite_ty(&mut r.ok_type, name); + rewrite_ty(&mut r.error_type, name); } - ScSpecTypeDef::Vec(v) => rewrite_ty(&mut v.element_type), + ScSpecTypeDef::Vec(v) => rewrite_ty(&mut v.element_type, name), ScSpecTypeDef::Map(m) => { - rewrite_ty(&mut m.key_type); - rewrite_ty(&mut m.value_type); + rewrite_ty(&mut m.key_type, name); + rewrite_ty(&mut m.value_type, name); } ScSpecTypeDef::Tuple(tu) => { for vt in tu.value_types.iter_mut() { - rewrite_ty(vt); + rewrite_ty(vt, name); } } _ => {} @@ -229,22 +255,22 @@ fn rewrite_error_to_udt(entries: &mut [ScSpecEntry]) { match entry { ScSpecEntry::FunctionV0(f) => { for input in f.inputs.iter_mut() { - rewrite_ty(&mut input.type_); + rewrite_ty(&mut input.type_, name); } for output in f.outputs.iter_mut() { - rewrite_ty(output); + rewrite_ty(output, name); } } ScSpecEntry::UdtStructV0(s) => { for field in s.fields.iter_mut() { - rewrite_ty(&mut field.type_); + rewrite_ty(&mut field.type_, name); } } ScSpecEntry::UdtUnionV0(u) => { for case in u.cases.iter_mut() { if let ScSpecUdtUnionCaseV0::TupleV0(t) = case { for ty in t.type_.iter_mut() { - rewrite_ty(ty); + rewrite_ty(ty, name); } } } @@ -252,7 +278,7 @@ fn rewrite_error_to_udt(entries: &mut [ScSpecEntry]) { ScSpecEntry::UdtEnumV0(_) | ScSpecEntry::UdtErrorEnumV0(_) => {} ScSpecEntry::EventV0(e) => { for p in e.params.iter_mut() { - rewrite_ty(&mut p.type_); + rewrite_ty(&mut p.type_, name); } } } diff --git a/soroban-spec-rust/src/syn_ext.rs b/soroban-spec-rust/src/syn_ext.rs index 4c26f68d0..2caa9ca48 100644 --- a/soroban-spec-rust/src/syn_ext.rs +++ b/soroban-spec-rust/src/syn_ext.rs @@ -1,30 +1,36 @@ +use std::collections::{HashMap, HashSet}; + use proc_macro2::Ident; use stellar_xdr::{ScSymbol, StringM}; use crate::types::GenerateError; pub trait IntoIdent { - fn into_ident(&self) -> Result; + /// The name as written in the spec. + fn to_name(&self) -> Result; + + fn into_ident(&self) -> Result { + let s = self.to_name()?; + syn::parse_str::(&s).map_err(|_| GenerateError::InvalidIdent(s)) + } } impl IntoIdent for str { - fn into_ident(&self) -> Result { - syn::parse_str::(self).map_err(|_| GenerateError::InvalidIdent(self.to_string())) + fn to_name(&self) -> Result { + Ok(self.to_string()) } } impl IntoIdent for StringM { - fn into_ident(&self) -> Result { - let s = self - .to_utf8_string() - .map_err(|_| GenerateError::InvalidUtf8)?; - s.as_str().into_ident() + fn to_name(&self) -> Result { + self.to_utf8_string() + .map_err(|_| GenerateError::InvalidUtf8) } } impl IntoIdent for ScSymbol { - fn into_ident(&self) -> Result { - self.0.into_ident() + fn to_name(&self) -> Result { + self.0.to_name() } } @@ -33,3 +39,100 @@ impl IntoIdent for ScSymbol { pub fn str_to_ident(s: &(impl IntoIdent + ?Sized)) -> Result { s.into_ident() } + +/// The last `::`-separated segment of a fully qualified spec type name. +fn last_segment(name: &str) -> &str { + name.rsplit("::").next().unwrap_or(name) +} + +/// The Rust identifiers that name the user-defined types of a spec. +/// +/// A spec names a user-defined type by its fully qualified name +/// (`crate::module::Type`), which is not a Rust identifier, so generated +/// bindings name it by its last segment. Two types defined in different modules +/// can share a last segment, so a segment already claimed is numbered. +#[derive(Debug, Default)] +pub struct TypeNames { + renamed: HashMap, +} + +impl TypeNames { + /// Resolves the identifiers for the fully qualified names of every + /// user-defined type a spec defines. + pub fn new<'a>(defined: impl IntoIterator) -> Self { + // The first type to claim a last segment keeps it, so a type only ever + // loses its own name to one that came before it, never to a number + // handed to a type that collided with something else. + let mut taken = HashSet::new(); + let colliding: Vec<&str> = defined + .into_iter() + .filter(|name| !taken.insert(last_segment(name).to_string())) + .collect(); + + let mut renamed = HashMap::new(); + for name in colliding { + let base = last_segment(name); + let mut n = 1u32; + let ident = loop { + n += 1; + let ident = format!("{base}{n}"); + if taken.insert(ident.clone()) { + break ident; + } + }; + renamed.insert(name.to_string(), ident); + } + Self { renamed } + } + + /// The Rust identifier naming the user-defined type the given fully + /// qualified spec name refers to. + /// + /// A name this was not built from resolves to its own last segment, which is + /// what a spec containing only that one type would produce. + pub fn ident(&self, name: &(impl IntoIdent + ?Sized)) -> Result { + let name = name.to_name()?; + match self.renamed.get(&name) { + Some(ident) => str_to_ident(ident.as_str()), + None => str_to_ident(last_segment(&name)), + } + } +} + +#[cfg(test)] +mod test { + use super::TypeNames; + + #[test] + fn names_by_last_segment() { + let names = TypeNames::new(["a::b::Thing", "a::c::Other"]); + assert_eq!(names.ident("a::b::Thing").unwrap(), "Thing"); + assert_eq!(names.ident("a::c::Other").unwrap(), "Other"); + } + + #[test] + fn numbers_a_last_segment_already_claimed() { + // The first to claim `Thing` keeps it; the rest are numbered in order. + let names = TypeNames::new(["a::b::Thing", "a::c::Thing", "a::d::Thing"]); + assert_eq!(names.ident("a::b::Thing").unwrap(), "Thing"); + assert_eq!(names.ident("a::c::Thing").unwrap(), "Thing2"); + assert_eq!(names.ident("a::d::Thing").unwrap(), "Thing3"); + } + + #[test] + fn skips_a_number_taken_by_a_type_of_that_name() { + // `Thing2` is a type in its own right, so the collision numbering steps + // over it rather than colliding with it in turn. + let names = TypeNames::new(["a::b::Thing", "a::c::Thing2", "a::d::Thing"]); + assert_eq!(names.ident("a::b::Thing").unwrap(), "Thing"); + assert_eq!(names.ident("a::c::Thing2").unwrap(), "Thing2"); + assert_eq!(names.ident("a::d::Thing").unwrap(), "Thing3"); + } + + #[test] + fn unknown_name_falls_back_to_its_last_segment() { + let names = TypeNames::default(); + assert_eq!(names.ident("a::b::Thing").unwrap(), "Thing"); + assert_eq!(names.ident("Thing").unwrap(), "Thing"); + } +} diff --git a/soroban-spec-rust/src/trait.rs b/soroban-spec-rust/src/trait.rs index 05d4ac45d..805133bac 100644 --- a/soroban-spec-rust/src/trait.rs +++ b/soroban-spec-rust/src/trait.rs @@ -2,7 +2,7 @@ use proc_macro2::TokenStream; use quote::quote; use stellar_xdr::ScSpecFunctionV0; -use super::syn_ext::str_to_ident; +use super::syn_ext::{str_to_ident, TypeNames}; use super::types::{generate_type_ident, GenerateError}; // IMPORTANT: The "docs" fields of spec entries are not output in Rust token @@ -15,11 +15,12 @@ use super::types::{generate_type_ident, GenerateError}; pub fn generate_trait( name: &str, specs: &[&ScSpecFunctionV0], + names: &TypeNames, ) -> Result { let trait_ident = str_to_ident(name)?; let fns = specs .iter() - .map(|s| generate_function(s)) + .map(|s| generate_function(s, names)) .collect::, _>>()?; Ok(quote! { pub trait #trait_ident { #(#fns;)* } @@ -34,21 +35,24 @@ pub fn generate_trait( /// /// # Returns /// A `TokenStream` containing the generated function definition. -pub fn generate_function(s: &ScSpecFunctionV0) -> Result { +pub fn generate_function( + s: &ScSpecFunctionV0, + names: &TypeNames, +) -> Result { let fn_ident = str_to_ident(&s.name)?; let fn_inputs = s .inputs .iter() .map(|input| { let name = str_to_ident(&input.name)?; - let type_ident = generate_type_ident(&input.type_)?; + let type_ident = generate_type_ident(&input.type_, names)?; Ok(quote! { #name: #type_ident }) }) .collect::, GenerateError>>()?; let fn_output = s .outputs .to_option() - .map(|t| generate_type_ident(&t)) + .map(|t| generate_type_ident(&t, names)) .transpose()? .map(|t| quote! { -> #t }); Ok(quote! { diff --git a/soroban-spec-rust/src/types.rs b/soroban-spec-rust/src/types.rs index 854fc848d..780c04992 100644 --- a/soroban-spec-rust/src/types.rs +++ b/soroban-spec-rust/src/types.rs @@ -5,7 +5,7 @@ use stellar_xdr::{ ScSpecUdtErrorEnumV0, ScSpecUdtStructV0, ScSpecUdtUnionV0, }; -use crate::syn_ext::str_to_ident; +use crate::syn_ext::{str_to_ident, TypeNames}; // IMPORTANT: The "docs" fields of spec entries are not output in Rust token // streams as rustdocs, because rustdocs can contain Rust code, and that code @@ -35,7 +35,7 @@ pub enum GenerateError { /// name: "Point".try_into().unwrap(), /// fields: Default::default(), /// }; -/// let tokens = generate_struct_with_options(&spec, &GenerateOptions::default()).unwrap(); +/// let tokens = generate_struct_with_options(&spec, &GenerateOptions::default(), &TypeNames::default()).unwrap(); /// assert!(tokens.to_string().contains("struct Point")); /// ``` /// @@ -54,7 +54,7 @@ pub struct GenerateOptions {} /// Constructs a token stream containing a single struct that mirrors the struct /// spec. pub fn generate_struct(spec: &ScSpecUdtStructV0) -> Result { - generate_struct_with_options(spec, &GenerateOptions::default()) + generate_struct_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) } /// Constructs a token stream containing a single struct that mirrors the struct @@ -62,8 +62,9 @@ pub fn generate_struct(spec: &ScSpecUdtStructV0) -> Result Result { - let ident = str_to_ident(&spec.name)?; + let ident = names.ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; @@ -87,7 +88,7 @@ pub fn generate_struct_with_options( .fields .iter() .map(|f| { - let f_type = generate_type_ident(&f.type_)?; + let f_type = generate_type_ident(&f.type_, names)?; Ok(quote! { pub #f_type }) }) .collect::, GenerateError>>()?; @@ -102,7 +103,7 @@ pub fn generate_struct_with_options( .iter() .map(|f| { let f_ident = str_to_ident(&f.name)?; - let f_type = generate_type_ident(&f.type_)?; + let f_type = generate_type_ident(&f.type_, names)?; Ok(quote! { pub #f_ident: #f_type }) }) .collect::, GenerateError>>()?; @@ -117,7 +118,7 @@ pub fn generate_struct_with_options( /// Constructs a token stream containing a single enum that mirrors the union /// spec. pub fn generate_union(spec: &ScSpecUdtUnionV0) -> Result { - generate_union_with_options(spec, &GenerateOptions::default()) + generate_union_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) } /// Constructs a token stream containing a single enum that mirrors the union @@ -125,8 +126,9 @@ pub fn generate_union(spec: &ScSpecUdtUnionV0) -> Result Result { - let ident = str_to_ident(&spec.name)?; + let ident = names.ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; Ok(quote! { @@ -148,7 +150,7 @@ pub fn generate_union_with_options( let v_type = t .type_ .iter() - .map(generate_type_ident) + .map(|t| generate_type_ident(t, names)) .collect::, _>>()?; Ok(quote! { #v_ident ( #(#v_type),* ) }) } @@ -166,7 +168,7 @@ pub fn generate_union_with_options( /// Constructs a token stream containing a single enum that mirrors the enum /// spec. pub fn generate_enum(spec: &ScSpecUdtEnumV0) -> Result { - generate_enum_with_options(spec, &GenerateOptions::default()) + generate_enum_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) } /// Constructs a token stream containing a single enum that mirrors the enum @@ -174,8 +176,9 @@ pub fn generate_enum(spec: &ScSpecUdtEnumV0) -> Result Result { - let ident = str_to_ident(&spec.name)?; + let ident = names.ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; Ok(quote! { @@ -202,7 +205,7 @@ pub fn generate_enum_with_options( /// Constructs a token stream containing a single enum that mirrors the enum /// spec, that is intended for use with errors. pub fn generate_error_enum(spec: &ScSpecUdtErrorEnumV0) -> Result { - generate_error_enum_with_options(spec, &GenerateOptions::default()) + generate_error_enum_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) } /// Constructs a token stream containing a single enum that mirrors the enum @@ -210,8 +213,9 @@ pub fn generate_error_enum(spec: &ScSpecUdtErrorEnumV0) -> Result Result { - let ident = str_to_ident(&spec.name)?; + let ident = names.ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; Ok(quote! { @@ -238,7 +242,7 @@ pub fn generate_error_enum_with_options( /// Constructs a token stream containing a single struct that mirrors the event /// spec. pub fn generate_event(spec: &ScSpecEventV0) -> Result { - generate_event_with_options(spec, &GenerateOptions::default()) + generate_event_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) } /// Constructs a token stream containing a single struct that mirrors the event @@ -246,8 +250,9 @@ pub fn generate_event(spec: &ScSpecEventV0) -> Result Result { - let ident = str_to_ident(&spec.name)?; + let ident = names.ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; @@ -261,7 +266,7 @@ pub fn generate_event_with_options( .iter() .map(|p| { let p_ident = str_to_ident(&p.name)?; - let p_type = generate_type_ident(&p.type_)?; + let p_type = generate_type_ident(&p.type_, names)?; Ok(match p.location { ScSpecEventParamLocationV0::TopicList => quote! { #[topic] @@ -281,7 +286,10 @@ pub fn generate_event_with_options( } } -pub fn generate_type_ident(spec: &ScSpecTypeDef) -> Result { +pub fn generate_type_ident( + spec: &ScSpecTypeDef, + names: &TypeNames, +) -> Result { match spec { ScSpecTypeDef::Val => Ok(quote! { soroban_sdk::Val }), ScSpecTypeDef::U64 => Ok(quote! { u64 }), @@ -298,28 +306,28 @@ pub fn generate_type_ident(spec: &ScSpecTypeDef) -> Result Ok(quote! { soroban_sdk::MuxedAddress }), ScSpecTypeDef::String => Ok(quote! { soroban_sdk::String }), ScSpecTypeDef::Option(o) => { - let value_ident = generate_type_ident(&o.value_type)?; + let value_ident = generate_type_ident(&o.value_type, names)?; Ok(quote! { Option<#value_ident> }) } ScSpecTypeDef::Result(r) => { - let ok_ident = generate_type_ident(&r.ok_type)?; - let error_ident = generate_type_ident(&r.error_type)?; + let ok_ident = generate_type_ident(&r.ok_type, names)?; + let error_ident = generate_type_ident(&r.error_type, names)?; Ok(quote! { Result<#ok_ident, #error_ident> }) } ScSpecTypeDef::Vec(v) => { - let element_ident = generate_type_ident(&v.element_type)?; + let element_ident = generate_type_ident(&v.element_type, names)?; Ok(quote! { soroban_sdk::Vec<#element_ident> }) } ScSpecTypeDef::Map(m) => { - let key_ident = generate_type_ident(&m.key_type)?; - let value_ident = generate_type_ident(&m.value_type)?; + let key_ident = generate_type_ident(&m.key_type, names)?; + let value_ident = generate_type_ident(&m.value_type, names)?; Ok(quote! { soroban_sdk::Map<#key_ident, #value_ident> }) } ScSpecTypeDef::Tuple(t) => { let type_idents = t .value_types .iter() - .map(generate_type_ident) + .map(|t| generate_type_ident(t, names)) .collect::, _>>()?; Ok(quote! { (#(#type_idents,)*) }) } @@ -328,7 +336,7 @@ pub fn generate_type_ident(spec: &ScSpecTypeDef) -> Result }) } ScSpecTypeDef::Udt(u) => { - let ident = str_to_ident(&u.name)?; + let ident = names.ident(&u.name)?; Ok(quote! { #ident }) } ScSpecTypeDef::Void => Ok(quote! { () }), diff --git a/tests-expanded/test_account_tests.rs b/tests-expanded/test_account_tests.rs index 41bd7f7fa..b382ff2b3 100644 --- a/tests-expanded/test_account_tests.rs +++ b/tests-expanded/test_account_tests.rs @@ -50,6 +50,12 @@ impl ::core::cmp::Ord for Error { ::core::cmp::Ordering::Equal } } +impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_account::Error" + } +} pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = @@ -57,7 +63,7 @@ impl Error { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -363,7 +369,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Context"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_account_wasm32v1-none.rs b/tests-expanded/test_account_wasm32v1-none.rs index b316cc08b..b10ad5d33 100644 --- a/tests-expanded/test_account_wasm32v1-none.rs +++ b/tests-expanded/test_account_wasm32v1-none.rs @@ -50,6 +50,12 @@ impl ::core::cmp::Ord for Error { ::core::cmp::Ordering::Equal } } +impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_account::Error" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { @@ -58,7 +64,7 @@ impl Error { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -258,7 +264,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Context"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_add_u64_tests.rs b/tests-expanded/test_add_u64_tests.rs index 7bd34b9bd..a26e84cb8 100644 --- a/tests-expanded/test_add_u64_tests.rs +++ b/tests-expanded/test_add_u64_tests.rs @@ -155,6 +155,12 @@ impl ::core::cmp::PartialEq for Error { true } } +impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_add_u64::Error" + } +} pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = @@ -162,7 +168,7 @@ impl Error { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -303,6 +309,12 @@ impl ::core::cmp::PartialEq for MyError { true } } +impl MyError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_add_u64::MyError" + } +} pub static __SPEC_XDR_TYPE_MYERROR: [u8; MyError::__SPEC_XDR_VIEW.const_xdr_len()] = MyError::spec_xdr(); impl MyError { @@ -311,7 +323,7 @@ impl MyError { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyError"), + name: soroban_sdk::xdr::StringMView::new_str(MyError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -554,7 +566,9 @@ impl Contract { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::U64, error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyError"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_add_u64_wasm32v1-none.rs b/tests-expanded/test_add_u64_wasm32v1-none.rs index 7b3cc38c7..f4294b0c8 100644 --- a/tests-expanded/test_add_u64_wasm32v1-none.rs +++ b/tests-expanded/test_add_u64_wasm32v1-none.rs @@ -43,6 +43,12 @@ impl ::core::cmp::PartialEq for Error { true } } +impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_add_u64::Error" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { @@ -51,7 +57,7 @@ impl Error { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -197,6 +203,12 @@ impl ::core::cmp::PartialEq for MyError { true } } +impl MyError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_add_u64::MyError" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_MYERROR: [u8; MyError::__SPEC_XDR_VIEW.const_xdr_len()] = MyError::spec_xdr(); @@ -206,7 +218,7 @@ impl MyError { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyError"), + name: soroban_sdk::xdr::StringMView::new_str(MyError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -457,7 +469,9 @@ impl Contract { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::U64, error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyError"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_associated_types_contracttrait_tests.rs b/tests-expanded/test_associated_types_contracttrait_tests.rs index e040eb986..c445d42bc 100644 --- a/tests-expanded/test_associated_types_contracttrait_tests.rs +++ b/tests-expanded/test_associated_types_contracttrait_tests.rs @@ -827,7 +827,7 @@ mod test { mod test_with_wasm { use soroban_sdk::{Env, String}; mod contract { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x11\x03`\x02~~\x01~`\x00\x01~`\x02\x7f\x7f\x01~\x02\x07\x01\x01b\x01i\x00\x00\x03\x04\x03\x01\x02\x01\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x8f\x80\xc0\x00\x0b\x7f\x00A\x8f\x80\xc0\x00\x0b\x7f\x00A\x90\x80\xc0\x00\x0b\x078\x06\x06memory\x02\x00\x04exec\x00\x01\x05exec2\x00\x03\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n>\x03\x10\x00A\x80\x80\xc0\x80\x00A\x07\x10\x82\x80\x80\x80\x00\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x80\x80\x80\x80\x00\x0b\x10\x00A\x87\x80\xc0\x80\x00A\x08\x10\x82\x80\x80\x80\x00\x0b\x0b\x18\x01\x00A\x80\x80\xc0\x00\x0b\x0fdefaultdefault2\x00\xdf\x15\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04exec\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05exec2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x11\x03`\x02~~\x01~`\x00\x01~`\x02\x7f\x7f\x01~\x02\x07\x01\x01b\x01i\x00\x00\x03\x04\x03\x01\x02\x01\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x8f\x80\xc0\x00\x0b\x7f\x00A\x8f\x80\xc0\x00\x0b\x7f\x00A\x90\x80\xc0\x00\x0b\x078\x06\x06memory\x02\x00\x04exec\x00\x01\x05exec2\x00\x03\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n>\x03\x10\x00A\x80\x80\xc0\x80\x00A\x07\x10\x82\x80\x80\x80\x00\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x80\x80\x80\x80\x00\x0b\x10\x00A\x87\x80\xc0\x80\x00A\x08\x10\x82\x80\x80\x80\x00\x0b\x0b\x18\x01\x00A\x80\x80\xc0\x00\x0b\x0fdefaultdefault2\x00\xbf\x18\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04exec\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05exec2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn exec(env: soroban_sdk::Env) -> soroban_sdk::String; fn exec2(env: soroban_sdk::Env) -> soroban_sdk::String; @@ -1209,6 +1209,12 @@ mod test_with_wasm { } } } + impl ContractContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_associated_types_contracttrait::test_with_wasm::contract::ContractContext" + } + } pub static __SPEC_XDR_TYPE_CONTRACTCONTEXT: [u8; ContractContext::__SPEC_XDR_VIEW .const_xdr_len()] = ContractContext::spec_xdr(); impl ContractContext { @@ -1217,7 +1223,9 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str( + ContractContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1777,6 +1785,12 @@ mod test_with_wasm { } } } + impl SubContractInvocation { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_associated_types_contracttrait::test_with_wasm::contract::SubContractInvocation" + } + } pub static __SPEC_XDR_TYPE_SUBCONTRACTINVOCATION: [u8; SubContractInvocation::__SPEC_XDR_VIEW.const_xdr_len()] = SubContractInvocation::spec_xdr(); @@ -1786,15 +1800,17 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"SubContractInvocation"), + name: soroban_sdk::xdr::StringMView::new_str( + SubContractInvocation::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"context"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -1806,8 +1822,8 @@ mod test_with_wasm { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"InvokerContractAuthEntry", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -2292,6 +2308,12 @@ mod test_with_wasm { } } } + impl CreateContractHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_associated_types_contracttrait::test_with_wasm::contract::CreateContractHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTHOSTFNCONTEXT: [u8; CreateContractHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractHostFnContext::spec_xdr(); @@ -2301,15 +2323,17 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFnContext"), + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractHostFnContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractExecutable", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -2831,6 +2855,12 @@ mod test_with_wasm { } } } + impl CreateContractWithConstructorHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_associated_types_contracttrait::test_with_wasm::contract::CreateContractWithConstructorHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTWITHCONSTRUCTORHOSTFNCONTEXT: [u8; CreateContractWithConstructorHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractWithConstructorHostFnContext::spec_xdr(); @@ -2840,8 +2870,8 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractWithConstructorHostFnContext::spec_type_name(), ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { @@ -2858,8 +2888,8 @@ mod test_with_wasm { name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractExecutable", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -3508,68 +3538,67 @@ mod test_with_wasm { } } } + impl Context { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_associated_types_contracttrait::test_with_wasm::contract::Context" + } + } pub static __SPEC_XDR_TYPE_CONTEXT: [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] = Context::spec_xdr(); impl Context { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0( - soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Context"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", - ), - }, + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str(Context::spec_type_name()), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - ]), - }, - ); + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] { Context::__SPEC_XDR_VIEW.const_to_xdr() } @@ -4239,6 +4268,12 @@ mod test_with_wasm { } } } + impl ContractExecutable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_associated_types_contracttrait::test_with_wasm::contract::ContractExecutable" + } + } pub static __SPEC_XDR_TYPE_CONTRACTEXECUTABLE: [u8; ContractExecutable::__SPEC_XDR_VIEW .const_xdr_len()] = ContractExecutable::spec_xdr(); impl ContractExecutable { @@ -4247,7 +4282,9 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ContractExecutable::spec_type_name(), + ), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -4804,69 +4841,70 @@ mod test_with_wasm { } } } + impl InvokerContractAuthEntry { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_associated_types_contracttrait::test_with_wasm::contract::InvokerContractAuthEntry" + } + } pub static __SPEC_XDR_TYPE_INVOKERCONTRACTAUTHENTRY: [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] = InvokerContractAuthEntry::spec_xdr(); impl InvokerContractAuthEntry { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0( - soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"InvokerContractAuthEntry"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"SubContractInvocation", - ), - }, + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str( + InvokerContractAuthEntry::spec_type_name(), + ), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - ]), - }, - ); + }), + ], + ), + }); pub const fn spec_xdr( ) -> [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] { InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_to_xdr() @@ -5599,6 +5637,12 @@ mod test_with_wasm { } } } + impl Executable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_associated_types_contracttrait::test_with_wasm::contract::Executable" + } + } pub static __SPEC_XDR_TYPE_EXECUTABLE: [u8; Executable::__SPEC_XDR_VIEW.const_xdr_len()] = Executable::spec_xdr(); impl Executable { @@ -5607,7 +5651,7 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Executable"), + name: soroban_sdk::xdr::StringMView::new_str(Executable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { diff --git a/tests-expanded/test_attributes_tests.rs b/tests-expanded/test_attributes_tests.rs index e039ca774..bf8628860 100644 --- a/tests-expanded/test_attributes_tests.rs +++ b/tests-expanded/test_attributes_tests.rs @@ -47,6 +47,12 @@ impl ::core::cmp::PartialEq for AttributeType { self.value == other.value } } +impl AttributeType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_attributes::AttributeType" + } +} pub static __SPEC_XDR_TYPE_ATTRIBUTETYPE: [u8; AttributeType::__SPEC_XDR_VIEW.const_xdr_len()] = AttributeType::spec_xdr(); impl AttributeType { @@ -54,7 +60,7 @@ impl AttributeType { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"AttributeType"), + name: soroban_sdk::xdr::StringMView::new_str(AttributeType::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -601,18 +607,6 @@ pub trait AttributeTrait { fn trait_default_stacked_cfg() -> u32 { 5 } - fn trait_override_stacked_cfg() -> u32 { - 7 - } - fn trait_override_negated_cfg() -> u32 { - 9 - } - fn trait_override_dual_cfg() -> u32 { - 11 - } - fn trait_default_dual_cfg() -> u32 { - 14 - } } ///AttributeTraitClient is a client for calling the contract defined in "AttributeTrait". pub struct AttributeTraitClient<'a> { @@ -921,7 +915,192 @@ impl<'a> AttributeTraitClient<'a> { } res } - pub fn trait_override_stacked_cfg(&self) -> u32 { +} +///AttributeTraitArgs is a type for building arg lists for functions defined in "AttributeTrait". +pub struct AttributeTraitArgs; +impl AttributeTraitArgs { + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_default<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_default_stacked_cfg<'i>() -> () { + () + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override.const_to_xdr() + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_default: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_default", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_default( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default.const_to_xdr() + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_default_stacked_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_default_stacked_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_default_stacked_cfg( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_to_xdr() + } +} +impl Contract { + pub fn always(value: AttributeType) -> u32 { + value.value + } + pub fn cfg_included(value: u32) -> u32 { + value + } + pub fn publish(env: Env, topic: u32, value: u32) { + AttributeEvent { topic, value }.publish(&env); + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__always__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_ALWAYS: [u8; super::Contract::__SPEC_XDR_VIEW_always.const_xdr_len()] = + super::Contract::spec_xdr_always(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_always: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"always")), + inputs: soroban_sdk::xdr::VecMView::new(&[ + soroban_sdk::xdr::ScSpecFunctionInputV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"value"), + type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( + soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }, + ), + }, + ]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_always() -> [u8; Contract::__SPEC_XDR_VIEW_always.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_always.const_to_xdr() + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__cfg_included__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_CFG_INCLUDED: [u8; super::Contract::__SPEC_XDR_VIEW_cfg_included + .const_xdr_len()] = super::Contract::spec_xdr_cfg_included(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_cfg_included: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"cfg_included", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[ + soroban_sdk::xdr::ScSpecFunctionInputV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"value"), + type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, + }, + ]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_cfg_included( + ) -> [u8; Contract::__SPEC_XDR_VIEW_cfg_included.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_cfg_included.const_to_xdr() + } +} +impl Contract {} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__publish__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_PUBLISH: [u8; super::Contract::__SPEC_XDR_VIEW_publish + .const_xdr_len()] = super::Contract::spec_xdr_publish(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_publish: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"publish")), + inputs: soroban_sdk::xdr::VecMView::new(&[ + soroban_sdk::xdr::ScSpecFunctionInputV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"topic"), + type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, + }, + soroban_sdk::xdr::ScSpecFunctionInputV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"value"), + type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, + }, + ]), + outputs: soroban_sdk::xdr::VecMView::new(&[]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_publish() -> [u8; Contract::__SPEC_XDR_VIEW_publish.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_publish.const_to_xdr() + } +} +impl<'a> ContractClient<'a> { + pub fn always(&self, value: &AttributeType) -> u32 { use core::ops::Not; let old_auth_manager = self .env @@ -946,16 +1125,21 @@ impl<'a> AttributeTraitClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_stacked_cfg") }, - ::soroban_sdk::Vec::new(&self.env), + &{ + #[allow(deprecated)] + const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("always"); + SYMBOL + }, + ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn try_trait_override_stacked_cfg( + pub fn try_always( &self, + value: &AttributeType, ) -> Result< Result>::Error>, Result, @@ -984,15 +1168,19 @@ impl<'a> AttributeTraitClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.try_invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_stacked_cfg") }, - ::soroban_sdk::Vec::new(&self.env), + &{ + #[allow(deprecated)] + const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("always"); + SYMBOL + }, + ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn trait_override_negated_cfg(&self) -> u32 { + pub fn cfg_included(&self, value: &u32) -> u32 { use core::ops::Not; let old_auth_manager = self .env @@ -1017,16 +1205,17 @@ impl<'a> AttributeTraitClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_negated_cfg") }, - ::soroban_sdk::Vec::new(&self.env), + &{ soroban_sdk::Symbol::new(&self.env, "cfg_included") }, + ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn try_trait_override_negated_cfg( + pub fn try_cfg_included( &self, + value: &u32, ) -> Result< Result>::Error>, Result, @@ -1055,15 +1244,15 @@ impl<'a> AttributeTraitClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.try_invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_negated_cfg") }, - ::soroban_sdk::Vec::new(&self.env), + &{ soroban_sdk::Symbol::new(&self.env, "cfg_included") }, + ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn trait_override_dual_cfg(&self) -> u32 { + pub fn publish(&self, topic: &u32, value: &u32) -> () { use core::ops::Not; let old_auth_manager = self .env @@ -1088,18 +1277,27 @@ impl<'a> AttributeTraitClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_dual_cfg") }, - ::soroban_sdk::Vec::new(&self.env), + &{ + #[allow(deprecated)] + const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("publish"); + SYMBOL + }, + ::soroban_sdk::Vec::from_array( + &self.env, + [topic.into_val(&self.env), value.into_val(&self.env)], + ), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn try_trait_override_dual_cfg( + pub fn try_publish( &self, + topic: &u32, + value: &u32, ) -> Result< - Result>::Error>, + Result<(), <() as soroban_sdk::TryFromVal>::Error>, Result, > { use core::ops::Not; @@ -1126,1211 +1324,15 @@ impl<'a> AttributeTraitClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.try_invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_dual_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn trait_default_dual_cfg(&self) -> u32 { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_default_dual_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn try_trait_default_dual_cfg( - &self, - ) -> Result< - Result>::Error>, - Result, - > { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.try_invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_default_dual_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } -} -///AttributeTraitArgs is a type for building arg lists for functions defined in "AttributeTrait". -pub struct AttributeTraitArgs; -impl AttributeTraitArgs { - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_override<'i>() -> () { - () - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_default<'i>() -> () { - () - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_default_stacked_cfg<'i>() -> () { - () - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_override_stacked_cfg<'i>() -> () { - () - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_override_negated_cfg<'i>() -> () { - () - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_override_dual_cfg<'i>() -> () { - () - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_default_dual_cfg<'i>() -> () { - () - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override.const_to_xdr() - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_default: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_default", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_default( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default.const_to_xdr() - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_default_stacked_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_default_stacked_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_default_stacked_cfg( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_to_xdr() - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override_stacked_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override_stacked_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override_stacked_cfg( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_to_xdr() - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override_negated_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override_negated_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override_negated_cfg( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_to_xdr() - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override_dual_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override_dual_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override_dual_cfg( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_to_xdr() - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_default_dual_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_default_dual_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_default_dual_cfg( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_to_xdr() - } -} -impl Contract { - pub fn always(value: AttributeType) -> u32 { - value.value - } - pub fn cfg_included(value: u32) -> u32 { - value - } - pub fn publish(env: Env, topic: u32, value: u32) { - AttributeEvent { topic, value }.publish(&env); - } -} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__always__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_ALWAYS: [u8; super::Contract::__SPEC_XDR_VIEW_always.const_xdr_len()] = - super::Contract::spec_xdr_always(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_always: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"always")), - inputs: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecFunctionInputV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"value"), - type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"AttributeType"), - }, - ), - }, - ]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_always() -> [u8; Contract::__SPEC_XDR_VIEW_always.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_always.const_to_xdr() - } -} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__cfg_included__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_CFG_INCLUDED: [u8; super::Contract::__SPEC_XDR_VIEW_cfg_included - .const_xdr_len()] = super::Contract::spec_xdr_cfg_included(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_cfg_included: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"cfg_included", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecFunctionInputV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"value"), - type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, - }, - ]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_cfg_included( - ) -> [u8; Contract::__SPEC_XDR_VIEW_cfg_included.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_cfg_included.const_to_xdr() - } -} -impl Contract {} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__publish__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_PUBLISH: [u8; super::Contract::__SPEC_XDR_VIEW_publish - .const_xdr_len()] = super::Contract::spec_xdr_publish(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_publish: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"publish")), - inputs: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecFunctionInputV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"topic"), - type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, - }, - soroban_sdk::xdr::ScSpecFunctionInputV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"value"), - type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, - }, - ]), - outputs: soroban_sdk::xdr::VecMView::new(&[]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_publish() -> [u8; Contract::__SPEC_XDR_VIEW_publish.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_publish.const_to_xdr() - } -} -impl<'a> ContractClient<'a> { - pub fn always(&self, value: &AttributeType) -> u32 { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.invoke_contract( - &self.address, - &{ - #[allow(deprecated)] - const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("always"); - SYMBOL - }, - ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn try_always( - &self, - value: &AttributeType, - ) -> Result< - Result>::Error>, - Result, - > { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.try_invoke_contract( - &self.address, - &{ - #[allow(deprecated)] - const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("always"); - SYMBOL - }, - ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn cfg_included(&self, value: &u32) -> u32 { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "cfg_included") }, - ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn try_cfg_included( - &self, - value: &u32, - ) -> Result< - Result>::Error>, - Result, - > { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.try_invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "cfg_included") }, - ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn publish(&self, topic: &u32, value: &u32) -> () { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.invoke_contract( - &self.address, - &{ - #[allow(deprecated)] - const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("publish"); - SYMBOL - }, - ::soroban_sdk::Vec::from_array( - &self.env, - [topic.into_val(&self.env), value.into_val(&self.env)], - ), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn try_publish( - &self, - topic: &u32, - value: &u32, - ) -> Result< - Result<(), <() as soroban_sdk::TryFromVal>::Error>, - Result, - > { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.try_invoke_contract( - &self.address, - &{ - #[allow(deprecated)] - const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("publish"); - SYMBOL - }, - ::soroban_sdk::Vec::from_array( - &self.env, - [topic.into_val(&self.env), value.into_val(&self.env)], - ), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } -} -impl ContractArgs { - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn always<'i>(value: &'i AttributeType) -> (&'i AttributeType,) { - (value,) - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn cfg_included<'i>(value: &'i u32) -> (&'i u32,) { - (value,) - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn publish<'i>(topic: &'i u32, value: &'i u32) -> (&'i u32, &'i u32) { - (topic, value) - } -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).always` instead")] -#[allow(deprecated)] -pub fn __Contract__always__invoke_raw( - env: soroban_sdk::Env, - arg_0: soroban_sdk::Val, -) -> soroban_sdk::Val { - soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( - ::always( - <_ as soroban_sdk::unwrap::UnwrapOptimized>::unwrap_optimized( - <_ as soroban_sdk::TryFromValForContractFn< - soroban_sdk::Env, - soroban_sdk::Val, - >>::try_from_val_for_contract_fn(&env, &arg_0), - ), - ), - &env, - ) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).always` instead")] -pub fn __Contract__always__invoke_raw_slice( - env: soroban_sdk::Env, - args: &[soroban_sdk::Val], -) -> soroban_sdk::Val { - if args.len() != 1usize { - { - ::core::panicking::panic_fmt(format_args!( - "invalid number of input arguments: {0} expected, got {1}", - 1usize, - args.len(), - )); - }; - } - #[allow(deprecated)] - __Contract__always__invoke_raw(env, args[0usize]) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).always` instead")] -pub extern "C" fn __Contract__always__invoke_raw_extern( - arg_0: soroban_sdk::Val, -) -> soroban_sdk::Val { - #[allow(deprecated)] - __Contract__always__invoke_raw(soroban_sdk::Env::default(), arg_0) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).cfg_included` instead")] -#[allow(deprecated)] -pub fn __Contract__cfg_included__invoke_raw( - env: soroban_sdk::Env, - arg_0: soroban_sdk::Val, -) -> soroban_sdk::Val { - soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( - ::cfg_included( - <_ as soroban_sdk::unwrap::UnwrapOptimized>::unwrap_optimized( - <_ as soroban_sdk::TryFromValForContractFn< - soroban_sdk::Env, - soroban_sdk::Val, - >>::try_from_val_for_contract_fn(&env, &arg_0), - ), - ), - &env, - ) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).cfg_included` instead")] -pub fn __Contract__cfg_included__invoke_raw_slice( - env: soroban_sdk::Env, - args: &[soroban_sdk::Val], -) -> soroban_sdk::Val { - if args.len() != 1usize { - { - ::core::panicking::panic_fmt(format_args!( - "invalid number of input arguments: {0} expected, got {1}", - 1usize, - args.len(), - )); - }; - } - #[allow(deprecated)] - __Contract__cfg_included__invoke_raw(env, args[0usize]) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).cfg_included` instead")] -pub extern "C" fn __Contract__cfg_included__invoke_raw_extern( - arg_0: soroban_sdk::Val, -) -> soroban_sdk::Val { - #[allow(deprecated)] - __Contract__cfg_included__invoke_raw(soroban_sdk::Env::default(), arg_0) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).publish` instead")] -#[allow(deprecated)] -pub fn __Contract__publish__invoke_raw( - env: soroban_sdk::Env, - arg_0: soroban_sdk::Val, - arg_1: soroban_sdk::Val, -) -> soroban_sdk::Val { - soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( - ::publish( - env.clone(), - <_ as soroban_sdk::unwrap::UnwrapOptimized>::unwrap_optimized( - <_ as soroban_sdk::TryFromValForContractFn< - soroban_sdk::Env, - soroban_sdk::Val, - >>::try_from_val_for_contract_fn(&env, &arg_0), - ), - <_ as soroban_sdk::unwrap::UnwrapOptimized>::unwrap_optimized( - <_ as soroban_sdk::TryFromValForContractFn< - soroban_sdk::Env, - soroban_sdk::Val, - >>::try_from_val_for_contract_fn(&env, &arg_1), - ), - ), - &env, - ) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).publish` instead")] -pub fn __Contract__publish__invoke_raw_slice( - env: soroban_sdk::Env, - args: &[soroban_sdk::Val], -) -> soroban_sdk::Val { - if args.len() != 2usize { - { - ::core::panicking::panic_fmt(format_args!( - "invalid number of input arguments: {0} expected, got {1}", - 2usize, - args.len(), - )); - }; - } - #[allow(deprecated)] - __Contract__publish__invoke_raw(env, args[0usize], args[1usize]) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).publish` instead")] -pub extern "C" fn __Contract__publish__invoke_raw_extern( - arg_0: soroban_sdk::Val, - arg_1: soroban_sdk::Val, -) -> soroban_sdk::Val { - #[allow(deprecated)] - __Contract__publish__invoke_raw(soroban_sdk::Env::default(), arg_0, arg_1) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[allow(unused)] -fn __Contract____2246acd8c5a7d7a27c1bbb827466a98b2233215f0f3fdd39122db001505b94ef_ctor() { - #[allow(unsafe_code)] - { - #[link_section = ".init_array"] - #[used] - #[allow(non_upper_case_globals, non_snake_case)] - #[doc(hidden)] - static f: extern "C" fn() -> ::ctor::__support::CtorRetType = { - #[link_section = ".text.startup"] - #[allow(non_snake_case)] - extern "C" fn f() -> ::ctor::__support::CtorRetType { - unsafe { - __Contract____2246acd8c5a7d7a27c1bbb827466a98b2233215f0f3fdd39122db001505b94ef_ctor(); - }; - core::default::Default::default() - } - f - }; - } - { - ::register( - "always", - #[allow(deprecated)] - &__Contract__always__invoke_raw_slice, - ); - ::register( - "cfg_included", - #[allow(deprecated)] - &__Contract__cfg_included__invoke_raw_slice, - ); - ::register( - "publish", - #[allow(deprecated)] - &__Contract__publish__invoke_raw_slice, - ); - } -} -impl AttributeTrait for Contract { - fn trait_override() -> u32 { - 3 - } - fn trait_override_stacked_cfg() -> u32 { - 8 - } - fn trait_override_negated_cfg() -> u32 { - 10 - } - fn trait_override_dual_cfg() -> u32 { - 12 - } -} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__trait_override__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_TRAIT_OVERRIDE: [u8; super::Contract::__SPEC_XDR_VIEW_trait_override - .const_xdr_len()] = super::Contract::spec_xdr_trait_override(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override( - ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_trait_override.const_to_xdr() - } -} -impl Contract {} -impl Contract {} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__trait_override_stacked_cfg__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_TRAIT_OVERRIDE_STACKED_CFG: [u8; - super::Contract::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_xdr_len()] = - super::Contract::spec_xdr_trait_override_stacked_cfg(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override_stacked_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override_stacked_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override_stacked_cfg( - ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_to_xdr() - } -} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__trait_override_negated_cfg__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_TRAIT_OVERRIDE_NEGATED_CFG: [u8; - super::Contract::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_xdr_len()] = - super::Contract::spec_xdr_trait_override_negated_cfg(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override_negated_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override_negated_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override_negated_cfg( - ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_to_xdr() - } -} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__trait_override_dual_cfg__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_TRAIT_OVERRIDE_DUAL_CFG: [u8; - super::Contract::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_xdr_len()] = - super::Contract::spec_xdr_trait_override_dual_cfg(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override_dual_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override_dual_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override_dual_cfg( - ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_to_xdr() - } -} -impl Contract {} -impl Contract {} -impl Contract {} -impl<'a> ContractClient<'a> { - pub fn trait_override(&self) -> u32 { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn try_trait_override( - &self, - ) -> Result< - Result>::Error>, - Result, - > { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.try_invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn trait_override_stacked_cfg(&self) -> u32 { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_stacked_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn try_trait_override_stacked_cfg( - &self, - ) -> Result< - Result>::Error>, - Result, - > { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.try_invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_stacked_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn trait_override_negated_cfg(&self) -> u32 { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_negated_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn try_trait_override_negated_cfg( - &self, - ) -> Result< - Result>::Error>, - Result, - > { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.try_invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_negated_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn trait_override_dual_cfg(&self) -> u32 { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_dual_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn try_trait_override_dual_cfg( - &self, - ) -> Result< - Result>::Error>, - Result, - > { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.try_invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override_dual_cfg") }, - ::soroban_sdk::Vec::new(&self.env), + &{ + #[allow(deprecated)] + const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("publish"); + SYMBOL + }, + ::soroban_sdk::Vec::from_array( + &self.env, + [topic.into_val(&self.env), value.into_val(&self.env)], + ), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); @@ -2341,167 +1343,340 @@ impl<'a> ContractClient<'a> { impl ContractArgs { #[inline(always)] #[allow(clippy::unused_unit)] - pub fn trait_override<'i>() -> () { - () - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_override_stacked_cfg<'i>() -> () { - () + pub fn always<'i>(value: &'i AttributeType) -> (&'i AttributeType,) { + (value,) } #[inline(always)] #[allow(clippy::unused_unit)] - pub fn trait_override_negated_cfg<'i>() -> () { - () + pub fn cfg_included<'i>(value: &'i u32) -> (&'i u32,) { + (value,) } #[inline(always)] #[allow(clippy::unused_unit)] - pub fn trait_override_dual_cfg<'i>() -> () { - () + pub fn publish<'i>(topic: &'i u32, value: &'i u32) -> (&'i u32, &'i u32) { + (topic, value) } } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).always` instead")] #[allow(deprecated)] -pub fn __Contract__trait_override__invoke_raw(env: soroban_sdk::Env) -> soroban_sdk::Val { +pub fn __Contract__always__invoke_raw( + env: soroban_sdk::Env, + arg_0: soroban_sdk::Val, +) -> soroban_sdk::Val { soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( - ::trait_override(), + ::always( + <_ as soroban_sdk::unwrap::UnwrapOptimized>::unwrap_optimized( + <_ as soroban_sdk::TryFromValForContractFn< + soroban_sdk::Env, + soroban_sdk::Val, + >>::try_from_val_for_contract_fn(&env, &arg_0), + ), + ), &env, ) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] -pub fn __Contract__trait_override__invoke_raw_slice( +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).always` instead")] +pub fn __Contract__always__invoke_raw_slice( env: soroban_sdk::Env, args: &[soroban_sdk::Val], ) -> soroban_sdk::Val { - if args.len() != 0usize { + if args.len() != 1usize { { ::core::panicking::panic_fmt(format_args!( "invalid number of input arguments: {0} expected, got {1}", - 0usize, + 1usize, args.len(), )); }; } #[allow(deprecated)] - __Contract__trait_override__invoke_raw(env) + __Contract__always__invoke_raw(env, args[0usize]) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] -pub extern "C" fn __Contract__trait_override__invoke_raw_extern() -> soroban_sdk::Val { +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).always` instead")] +pub extern "C" fn __Contract__always__invoke_raw_extern( + arg_0: soroban_sdk::Val, +) -> soroban_sdk::Val { #[allow(deprecated)] - __Contract__trait_override__invoke_raw(soroban_sdk::Env::default()) + __Contract__always__invoke_raw(soroban_sdk::Env::default(), arg_0) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated( - note = "use `ContractClient::new(&env, &contract_id).trait_override_stacked_cfg` instead" -)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).cfg_included` instead")] #[allow(deprecated)] -pub fn __Contract__trait_override_stacked_cfg__invoke_raw( +pub fn __Contract__cfg_included__invoke_raw( env: soroban_sdk::Env, + arg_0: soroban_sdk::Val, ) -> soroban_sdk::Val { soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( - ::trait_override_stacked_cfg(), + ::cfg_included( + <_ as soroban_sdk::unwrap::UnwrapOptimized>::unwrap_optimized( + <_ as soroban_sdk::TryFromValForContractFn< + soroban_sdk::Env, + soroban_sdk::Val, + >>::try_from_val_for_contract_fn(&env, &arg_0), + ), + ), &env, ) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated( - note = "use `ContractClient::new(&env, &contract_id).trait_override_stacked_cfg` instead" -)] -pub fn __Contract__trait_override_stacked_cfg__invoke_raw_slice( +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).cfg_included` instead")] +pub fn __Contract__cfg_included__invoke_raw_slice( env: soroban_sdk::Env, args: &[soroban_sdk::Val], ) -> soroban_sdk::Val { - if args.len() != 0usize { + if args.len() != 1usize { { ::core::panicking::panic_fmt(format_args!( "invalid number of input arguments: {0} expected, got {1}", - 0usize, + 1usize, args.len(), )); }; } #[allow(deprecated)] - __Contract__trait_override_stacked_cfg__invoke_raw(env) + __Contract__cfg_included__invoke_raw(env, args[0usize]) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated( - note = "use `ContractClient::new(&env, &contract_id).trait_override_stacked_cfg` instead" -)] -pub extern "C" fn __Contract__trait_override_stacked_cfg__invoke_raw_extern() -> soroban_sdk::Val { +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).cfg_included` instead")] +pub extern "C" fn __Contract__cfg_included__invoke_raw_extern( + arg_0: soroban_sdk::Val, +) -> soroban_sdk::Val { #[allow(deprecated)] - __Contract__trait_override_stacked_cfg__invoke_raw(soroban_sdk::Env::default()) + __Contract__cfg_included__invoke_raw(soroban_sdk::Env::default(), arg_0) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated( - note = "use `ContractClient::new(&env, &contract_id).trait_override_negated_cfg` instead" -)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).publish` instead")] #[allow(deprecated)] -pub fn __Contract__trait_override_negated_cfg__invoke_raw( +pub fn __Contract__publish__invoke_raw( env: soroban_sdk::Env, + arg_0: soroban_sdk::Val, + arg_1: soroban_sdk::Val, ) -> soroban_sdk::Val { soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( - ::trait_override_negated_cfg(), + ::publish( + env.clone(), + <_ as soroban_sdk::unwrap::UnwrapOptimized>::unwrap_optimized( + <_ as soroban_sdk::TryFromValForContractFn< + soroban_sdk::Env, + soroban_sdk::Val, + >>::try_from_val_for_contract_fn(&env, &arg_0), + ), + <_ as soroban_sdk::unwrap::UnwrapOptimized>::unwrap_optimized( + <_ as soroban_sdk::TryFromValForContractFn< + soroban_sdk::Env, + soroban_sdk::Val, + >>::try_from_val_for_contract_fn(&env, &arg_1), + ), + ), &env, ) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated( - note = "use `ContractClient::new(&env, &contract_id).trait_override_negated_cfg` instead" -)] -pub fn __Contract__trait_override_negated_cfg__invoke_raw_slice( +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).publish` instead")] +pub fn __Contract__publish__invoke_raw_slice( env: soroban_sdk::Env, args: &[soroban_sdk::Val], ) -> soroban_sdk::Val { - if args.len() != 0usize { + if args.len() != 2usize { + { + ::core::panicking::panic_fmt(format_args!( + "invalid number of input arguments: {0} expected, got {1}", + 2usize, + args.len(), + )); + }; + } + #[allow(deprecated)] + __Contract__publish__invoke_raw(env, args[0usize], args[1usize]) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).publish` instead")] +pub extern "C" fn __Contract__publish__invoke_raw_extern( + arg_0: soroban_sdk::Val, + arg_1: soroban_sdk::Val, +) -> soroban_sdk::Val { + #[allow(deprecated)] + __Contract__publish__invoke_raw(soroban_sdk::Env::default(), arg_0, arg_1) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[allow(unused)] +fn __Contract____2246acd8c5a7d7a27c1bbb827466a98b2233215f0f3fdd39122db001505b94ef_ctor() { + #[allow(unsafe_code)] + { + #[link_section = ".init_array"] + #[used] + #[allow(non_upper_case_globals, non_snake_case)] + #[doc(hidden)] + static f: extern "C" fn() -> ::ctor::__support::CtorRetType = { + #[link_section = ".text.startup"] + #[allow(non_snake_case)] + extern "C" fn f() -> ::ctor::__support::CtorRetType { + unsafe { + __Contract____2246acd8c5a7d7a27c1bbb827466a98b2233215f0f3fdd39122db001505b94ef_ctor(); + }; + core::default::Default::default() + } + f + }; + } + { + ::register( + "always", + #[allow(deprecated)] + &__Contract__always__invoke_raw_slice, + ); + ::register( + "cfg_included", + #[allow(deprecated)] + &__Contract__cfg_included__invoke_raw_slice, + ); + ::register( + "publish", + #[allow(deprecated)] + &__Contract__publish__invoke_raw_slice, + ); + } +} +impl AttributeTrait for Contract { + fn trait_override() -> u32 { + 3 + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__trait_override__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_TRAIT_OVERRIDE: [u8; super::Contract::__SPEC_XDR_VIEW_trait_override + .const_xdr_len()] = super::Contract::spec_xdr_trait_override(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override( + ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_trait_override.const_to_xdr() + } +} +impl Contract {} +impl Contract {} +impl<'a> ContractClient<'a> { + pub fn trait_override(&self) -> u32 { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn try_trait_override( + &self, + ) -> Result< + Result>::Error>, + Result, + > { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); { - ::core::panicking::panic_fmt(format_args!( - "invalid number of input arguments: {0} expected, got {1}", - 0usize, - args.len(), - )); - }; + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.try_invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res } - #[allow(deprecated)] - __Contract__trait_override_negated_cfg__invoke_raw(env) } -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated( - note = "use `ContractClient::new(&env, &contract_id).trait_override_negated_cfg` instead" -)] -pub extern "C" fn __Contract__trait_override_negated_cfg__invoke_raw_extern() -> soroban_sdk::Val { - #[allow(deprecated)] - __Contract__trait_override_negated_cfg__invoke_raw(soroban_sdk::Env::default()) +impl ContractArgs { + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override<'i>() -> () { + () + } } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated( - note = "use `ContractClient::new(&env, &contract_id).trait_override_dual_cfg` instead" -)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] #[allow(deprecated)] -pub fn __Contract__trait_override_dual_cfg__invoke_raw(env: soroban_sdk::Env) -> soroban_sdk::Val { +pub fn __Contract__trait_override__invoke_raw(env: soroban_sdk::Env) -> soroban_sdk::Val { soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( - ::trait_override_dual_cfg(), + ::trait_override(), &env, ) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated( - note = "use `ContractClient::new(&env, &contract_id).trait_override_dual_cfg` instead" -)] -pub fn __Contract__trait_override_dual_cfg__invoke_raw_slice( +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] +pub fn __Contract__trait_override__invoke_raw_slice( env: soroban_sdk::Env, args: &[soroban_sdk::Val], ) -> soroban_sdk::Val { @@ -2515,16 +1690,14 @@ pub fn __Contract__trait_override_dual_cfg__invoke_raw_slice( }; } #[allow(deprecated)] - __Contract__trait_override_dual_cfg__invoke_raw(env) + __Contract__trait_override__invoke_raw(env) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated( - note = "use `ContractClient::new(&env, &contract_id).trait_override_dual_cfg` instead" -)] -pub extern "C" fn __Contract__trait_override_dual_cfg__invoke_raw_extern() -> soroban_sdk::Val { +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] +pub extern "C" fn __Contract__trait_override__invoke_raw_extern() -> soroban_sdk::Val { #[allow(deprecated)] - __Contract__trait_override_dual_cfg__invoke_raw(soroban_sdk::Env::default()) + __Contract__trait_override__invoke_raw(soroban_sdk::Env::default()) } #[doc(hidden)] #[allow(non_snake_case)] @@ -2606,42 +1779,6 @@ pub extern "C" fn __Contract__trait_default_stacked_cfg__invoke_raw_extern() -> #[allow(deprecated)] __Contract__trait_default_stacked_cfg__invoke_raw(soroban_sdk::Env::default()) } -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_default_dual_cfg` instead")] -#[allow(deprecated)] -pub fn __Contract__trait_default_dual_cfg__invoke_raw(env: soroban_sdk::Env) -> soroban_sdk::Val { - soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( - ::trait_default_dual_cfg(), - &env, - ) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_default_dual_cfg` instead")] -pub fn __Contract__trait_default_dual_cfg__invoke_raw_slice( - env: soroban_sdk::Env, - args: &[soroban_sdk::Val], -) -> soroban_sdk::Val { - if args.len() != 0usize { - { - ::core::panicking::panic_fmt(format_args!( - "invalid number of input arguments: {0} expected, got {1}", - 0usize, - args.len(), - )); - }; - } - #[allow(deprecated)] - __Contract__trait_default_dual_cfg__invoke_raw(env) -} -#[doc(hidden)] -#[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_default_dual_cfg` instead")] -pub extern "C" fn __Contract__trait_default_dual_cfg__invoke_raw_extern() -> soroban_sdk::Val { - #[allow(deprecated)] - __Contract__trait_default_dual_cfg__invoke_raw(soroban_sdk::Env::default()) -} impl Contract {} #[doc(hidden)] #[allow(non_snake_case)] @@ -2696,36 +1833,6 @@ impl Contract { Contract::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_to_xdr() } } -impl Contract {} -impl Contract {} -impl Contract {} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__trait_default_dual_cfg__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_TRAIT_DEFAULT_DUAL_CFG: [u8; - super::Contract::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_xdr_len()] = - super::Contract::spec_xdr_trait_default_dual_cfg(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_default_dual_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_default_dual_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_default_dual_cfg( - ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_to_xdr() - } -} impl<'a> ContractClient<'a> { pub fn trait_default(&self) -> u32 { use core::ops::Not; @@ -2869,77 +1976,6 @@ impl<'a> ContractClient<'a> { } res } - pub fn trait_default_dual_cfg(&self) -> u32 { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_default_dual_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } - pub fn try_trait_default_dual_cfg( - &self, - ) -> Result< - Result>::Error>, - Result, - > { - use core::ops::Not; - let old_auth_manager = self - .env - .in_contract() - .not() - .then(|| self.env.host().snapshot_auth_manager().unwrap()); - { - if let Some(set_auths) = self.set_auths { - self.env.set_auths(set_auths); - } - if let Some(mock_auths) = self.mock_auths { - self.env.mock_auths(mock_auths); - } - if self.mock_all_auths { - if self.allow_non_root_auth { - self.env.mock_all_auths_allowing_non_root_auth(); - } else { - self.env.mock_all_auths(); - } - } - } - use soroban_sdk::{FromVal, IntoVal}; - let res = self.env.try_invoke_contract( - &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_default_dual_cfg") }, - ::soroban_sdk::Vec::new(&self.env), - ); - if let Some(old_auth_manager) = old_auth_manager { - self.env.host().set_auth_manager(old_auth_manager).unwrap(); - } - res - } } impl ContractArgs { #[inline(always)] @@ -2952,16 +1988,11 @@ impl ContractArgs { pub fn trait_default_stacked_cfg<'i>() -> () { () } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_default_dual_cfg<'i>() -> () { - () - } } #[doc(hidden)] #[allow(non_snake_case)] #[allow(unused)] -fn __Contract__AttributeTrait__8ce1beb22d1cf3a30219e745dd54ab4127700ae1863a7e431a8fddbdbf3f961c_ctor( +fn __Contract__AttributeTrait__5c3dc6ba0d711665380c5f56dcc72fd5dd342c89561cb9e2302a58b4f4cac9dd_ctor( ) { #[allow(unsafe_code)] { @@ -2974,7 +2005,7 @@ fn __Contract__AttributeTrait__8ce1beb22d1cf3a30219e745dd54ab4127700ae1863a7e431 #[allow(non_snake_case)] extern "C" fn f() -> ::ctor::__support::CtorRetType { unsafe { - __Contract__AttributeTrait__8ce1beb22d1cf3a30219e745dd54ab4127700ae1863a7e431a8fddbdbf3f961c_ctor(); + __Contract__AttributeTrait__5c3dc6ba0d711665380c5f56dcc72fd5dd342c89561cb9e2302a58b4f4cac9dd_ctor(); }; core::default::Default::default() } @@ -2992,17 +2023,12 @@ fn __Contract__AttributeTrait__8ce1beb22d1cf3a30219e745dd54ab4127700ae1863a7e431 #[allow(deprecated)] &__Contract__trait_default_stacked_cfg__invoke_raw_slice, ); - ::register( - "trait_default_dual_cfg", - #[allow(deprecated)] - &__Contract__trait_default_dual_cfg__invoke_raw_slice, - ); } } #[doc(hidden)] #[allow(non_snake_case)] #[allow(unused)] -fn __Contract__AttributeTrait__8904c8f92c2fe5f69c478861e0735de7c22bffee3517a491a4450e32ee923b8f_ctor( +fn __Contract__AttributeTrait__969988e5ad11b5d89373fc419647b603f4e9508cb73e2783cdc5572a30929b70_ctor( ) { #[allow(unsafe_code)] { @@ -3015,7 +2041,7 @@ fn __Contract__AttributeTrait__8904c8f92c2fe5f69c478861e0735de7c22bffee3517a491a #[allow(non_snake_case)] extern "C" fn f() -> ::ctor::__support::CtorRetType { unsafe { - __Contract__AttributeTrait__8904c8f92c2fe5f69c478861e0735de7c22bffee3517a491a4450e32ee923b8f_ctor(); + __Contract__AttributeTrait__969988e5ad11b5d89373fc419647b603f4e9508cb73e2783cdc5572a30929b70_ctor(); }; core::default::Default::default() } @@ -3028,21 +2054,6 @@ fn __Contract__AttributeTrait__8904c8f92c2fe5f69c478861e0735de7c22bffee3517a491a #[allow(deprecated)] &__Contract__trait_override__invoke_raw_slice, ); - ::register( - "trait_override_stacked_cfg", - #[allow(deprecated)] - &__Contract__trait_override_stacked_cfg__invoke_raw_slice, - ); - ::register( - "trait_override_negated_cfg", - #[allow(deprecated)] - &__Contract__trait_override_negated_cfg__invoke_raw_slice, - ); - ::register( - "trait_override_dual_cfg", - #[allow(deprecated)] - &__Contract__trait_override_dual_cfg__invoke_raw_slice, - ); } } mod test { @@ -3061,9 +2072,9 @@ mod test { ignore: false, ignore_message: ::core::option::Option::None, source_file: "tests/attributes/src/lib.rs", - start_line: 138usize, + start_line: 89usize, start_col: 8usize, - end_line: 138usize, + end_line: 89usize, end_col: 22usize, compile_fail: false, no_run: false, @@ -3116,9 +2127,9 @@ mod test { ignore: false, ignore_message: ::core::option::Option::None, source_file: "tests/attributes/src/lib.rs", - start_line: 150usize, + start_line: 101usize, start_col: 8usize, - end_line: 150usize, + end_line: 101usize, end_col: 24usize, compile_fail: false, no_run: false, @@ -3158,9 +2169,9 @@ mod test { ignore: false, ignore_message: ::core::option::Option::None, source_file: "tests/attributes/src/lib.rs", - start_line: 159usize, + start_line: 110usize, start_col: 8usize, - end_line: 159usize, + end_line: 110usize, end_col: 51usize, compile_fail: false, no_run: false, @@ -3215,58 +2226,6 @@ mod test { } } }; - match (&client.trait_override_stacked_cfg(), &8) { - (left_val, right_val) => { - if !(*left_val == *right_val) { - let kind = ::core::panicking::AssertKind::Eq; - ::core::panicking::assert_failed( - kind, - &*left_val, - &*right_val, - ::core::option::Option::None, - ); - } - } - }; - match (&client.trait_override_negated_cfg(), &10) { - (left_val, right_val) => { - if !(*left_val == *right_val) { - let kind = ::core::panicking::AssertKind::Eq; - ::core::panicking::assert_failed( - kind, - &*left_val, - &*right_val, - ::core::option::Option::None, - ); - } - } - }; - match (&client.trait_override_dual_cfg(), &12) { - (left_val, right_val) => { - if !(*left_val == *right_val) { - let kind = ::core::panicking::AssertKind::Eq; - ::core::panicking::assert_failed( - kind, - &*left_val, - &*right_val, - ::core::option::Option::None, - ); - } - } - }; - match (&client.trait_default_dual_cfg(), &14) { - (left_val, right_val) => { - if !(*left_val == *right_val) { - let kind = ::core::panicking::AssertKind::Eq; - ::core::panicking::assert_failed( - kind, - &*left_val, - &*right_val, - ::core::option::Option::None, - ); - } - } - }; } extern crate test; #[rustc_test_marker = "test::test_specs_include_active_attribute_items"] @@ -3278,9 +2237,9 @@ mod test { ignore: false, ignore_message: ::core::option::Option::None, source_file: "tests/attributes/src/lib.rs", - start_line: 174usize, + start_line: 121usize, start_col: 8usize, - end_line: 174usize, + end_line: 121usize, end_col: 49usize, compile_fail: false, no_run: false, @@ -3408,7 +2367,7 @@ mod test { } } }; - let wasm = b"\x00asm\x01\x00\x00\x00\x01\x1f\x05`\x04~~~~\x01~`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~\x02\x1f\x05\x01m\x01a\x00\x00\x01b\x01j\x00\x01\x01v\x01g\x00\x01\x01m\x019\x00\x02\x01x\x011\x00\x01\x03\x0b\n\x03\x03\x01\x04\x04\x04\x04\x04\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xc0\x80\xc0\x00\x0b\x07\xf5\x01\x0e\x06memory\x02\x00\x06always\x00\x05\x0ccfg_included\x00\x06\x07publish\x00\x07\rtrait_default\x00\x08\x16trait_default_dual_cfg\x00\t\x19trait_default_stacked_cfg\x00\n\x0etrait_override\x00\x0b\x17trait_override_dual_cfg\x00\x0c\x1atrait_override_negated_cfg\x00\r\x1atrait_override_stacked_cfg\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x85\x04\n\x85\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80\x10\x10\x80\x80\x80\x80\x00\x1a \x01)\x03\x08\"\x00B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00 \x00B\x84\x80\x80\x80p\x83\x0b\x1a\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0b \x00B\x84\x80\x80\x80p\x83\x0b\x9c\x02\x02\x02\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00 \x01B\xff\x01\x83B\x04R\r\x00A\x00!\x03A\x00-\x00\x8e\x80\xc0\x80\x00\x1aA\xac\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80\xf0\x01\x10\x81\x80\x80\x80\x00!\x04 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x08 \x02 \x047\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\xadB \x86B\x04\x84\"\x00B\x84\x80\x80\x80 \x10\x82\x80\x80\x80\x00!\x04 \x02 \x01B\x84\x80\x80\x80p\x837\x03\x10 \x04A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x00B\x84\x80\x80\x80\x10\x10\x83\x80\x80\x80\x00\x10\x84\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b\x08\x00B\x84\x80\x80\x80 \x0b\t\x00B\x84\x80\x80\x80\xe0\x01\x0b\t\x00B\x84\x80\x80\x80\xd0\x00\x0b\x08\x00B\x84\x80\x80\x800\x0b\t\x00B\x84\x80\x80\x80\xc0\x01\x0b\t\x00B\x84\x80\x80\x80\xa0\x01\x0b\t\x00B\x84\x80\x80\x80\x80\x01\x0b\x0bD\x01\x00A\x80\x80\xc0\x00\x0b;SpEcV1i\t\xb7\x06*\x88\xd7\xf8SpEcV1\xbfO\xc3P\xd4\x14\xb5Vvalue\x00\x00\x00\x1c\x00\x10\x00\x05\x00\x00\x00attribute_event\x00\xdb\x1a\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06always\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\rAttributeType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07publish\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rAttributeType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ccfg_included\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rtrait_default\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eAttributeEvent\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0fattribute_event\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0etrait_override\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16trait_default_dual_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17trait_override_dual_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19trait_default_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1atrait_override_negated_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1atrait_override_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + let wasm = b"\x00asm\x01\x00\x00\x00\x01\x1f\x05`\x04~~~~\x01~`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~\x02\x1f\x05\x01m\x01a\x00\x00\x01b\x01j\x00\x01\x01v\x01g\x00\x01\x01m\x019\x00\x02\x01x\x011\x00\x01\x03\x07\x06\x03\x03\x01\x04\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xc0\x80\xc0\x00\x0b\x07\x88\x01\n\x06memory\x02\x00\x06always\x00\x05\x0ccfg_included\x00\x06\x07publish\x00\x07\rtrait_default\x00\x08\x19trait_default_stacked_cfg\x00\t\x0etrait_override\x00\n\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xdd\x03\x06\x85\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80\x10\x10\x80\x80\x80\x80\x00\x1a \x01)\x03\x08\"\x00B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00 \x00B\x84\x80\x80\x80p\x83\x0b\x1a\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0b \x00B\x84\x80\x80\x80p\x83\x0b\x9c\x02\x02\x02\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00 \x01B\xff\x01\x83B\x04R\r\x00A\x00!\x03A\x00-\x00\x8e\x80\xc0\x80\x00\x1aA\xac\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80\xf0\x01\x10\x81\x80\x80\x80\x00!\x04 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x08 \x02 \x047\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\xadB \x86B\x04\x84\"\x00B\x84\x80\x80\x80 \x10\x82\x80\x80\x80\x00!\x04 \x02 \x01B\x84\x80\x80\x80p\x837\x03\x10 \x04A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x00B\x84\x80\x80\x80\x10\x10\x83\x80\x80\x80\x00\x10\x84\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b\x08\x00B\x84\x80\x80\x80 \x0b\t\x00B\x84\x80\x80\x80\xd0\x00\x0b\x08\x00B\x84\x80\x80\x800\x0b\x0bD\x01\x00A\x80\x80\xc0\x00\x0b;SpEcV1i\t\xb7\x06*\x88\xd7\xf8SpEcV1\xbfO\xc3P\xd4\x14\xb5Vvalue\x00\x00\x00\x1c\x00\x10\x00\x05\x00\x00\x00attribute_event\x00\x93\x1c\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06always\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07publish\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ccfg_included\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rtrait_default\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eAttributeEvent\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0fattribute_event\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0etrait_override\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19trait_default_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; let fn_names: HashSet = soroban_spec::read::from_wasm(wasm) .unwrap() .iter() @@ -3440,26 +2399,6 @@ mod test { "assertion failed: fn_names.contains(\"trait_default_stacked_cfg\")", ) } - if !fn_names.contains("trait_override_stacked_cfg") { - ::core::panicking::panic( - "assertion failed: fn_names.contains(\"trait_override_stacked_cfg\")", - ) - } - if !fn_names.contains("trait_override_negated_cfg") { - ::core::panicking::panic( - "assertion failed: fn_names.contains(\"trait_override_negated_cfg\")", - ) - } - if !fn_names.contains("trait_override_dual_cfg") { - ::core::panicking::panic( - "assertion failed: fn_names.contains(\"trait_override_dual_cfg\")", - ) - } - if !fn_names.contains("trait_default_dual_cfg") { - ::core::panicking::panic( - "assertion failed: fn_names.contains(\"trait_default_dual_cfg\")", - ) - } if !!fn_names.contains("cfg_excluded") { ::core::panicking::panic("assertion failed: !fn_names.contains(\"cfg_excluded\")") } diff --git a/tests-expanded/test_attributes_wasm32v1-none.rs b/tests-expanded/test_attributes_wasm32v1-none.rs index c60ce3fd1..49578dcd6 100644 --- a/tests-expanded/test_attributes_wasm32v1-none.rs +++ b/tests-expanded/test_attributes_wasm32v1-none.rs @@ -47,6 +47,12 @@ impl ::core::cmp::PartialEq for AttributeType { self.value == other.value } } +impl AttributeType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_attributes::AttributeType" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ATTRIBUTETYPE: [u8; AttributeType::__SPEC_XDR_VIEW.const_xdr_len()] = AttributeType::spec_xdr(); @@ -55,7 +61,7 @@ impl AttributeType { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"AttributeType"), + name: soroban_sdk::xdr::StringMView::new_str(AttributeType::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -621,7 +627,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"value"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"AttributeType"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_auth_tests.rs b/tests-expanded/test_auth_tests.rs index 51c1dcf30..184aaa702 100644 --- a/tests-expanded/test_auth_tests.rs +++ b/tests-expanded/test_auth_tests.rs @@ -1165,6 +1165,12 @@ mod test_a { ::core::cmp::Ordering::Equal } } + impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_auth::test_a::auth_decline::Error" + } + } pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { @@ -1173,7 +1179,7 @@ mod test_a { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2754,6 +2760,12 @@ mod test_b { ::core::cmp::Ordering::Equal } } + impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_auth::test_b::auth_decline::Error" + } + } pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { @@ -2762,7 +2774,7 @@ mod test_b { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), diff --git a/tests-expanded/test_bls_tests.rs b/tests-expanded/test_bls_tests.rs index 0e1a41f26..a3dd75548 100644 --- a/tests-expanded/test_bls_tests.rs +++ b/tests-expanded/test_bls_tests.rs @@ -16,6 +16,12 @@ pub struct DummyProof { pub g2: Bls12381G2Affine, pub fr: Bls12381Fr, } +impl DummyProof { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_bls::DummyProof" + } +} pub static __SPEC_XDR_TYPE_DUMMYPROOF: [u8; DummyProof::__SPEC_XDR_VIEW.const_xdr_len()] = DummyProof::spec_xdr(); impl DummyProof { @@ -23,7 +29,7 @@ impl DummyProof { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"DummyProof"), + name: soroban_sdk::xdr::StringMView::new_str(DummyProof::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -883,7 +889,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"proof"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"DummyProof"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_bls_wasm32v1-none.rs b/tests-expanded/test_bls_wasm32v1-none.rs index 679c3e038..31ceb7d03 100644 --- a/tests-expanded/test_bls_wasm32v1-none.rs +++ b/tests-expanded/test_bls_wasm32v1-none.rs @@ -16,6 +16,12 @@ pub struct DummyProof { pub g2: Bls12381G2Affine, pub fr: Bls12381Fr, } +impl DummyProof { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_bls::DummyProof" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_DUMMYPROOF: [u8; DummyProof::__SPEC_XDR_VIEW.const_xdr_len()] = DummyProof::spec_xdr(); @@ -24,7 +30,7 @@ impl DummyProof { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"DummyProof"), + name: soroban_sdk::xdr::StringMView::new_str(DummyProof::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -314,7 +320,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"proof"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"DummyProof"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_bn254_tests.rs b/tests-expanded/test_bn254_tests.rs index 948e367f0..87a999736 100644 --- a/tests-expanded/test_bn254_tests.rs +++ b/tests-expanded/test_bn254_tests.rs @@ -13,6 +13,12 @@ pub struct MockProof { pub g1: Vec, pub g2: Vec, } +impl MockProof { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_bn254::MockProof" + } +} pub static __SPEC_XDR_TYPE_MOCKPROOF: [u8; MockProof::__SPEC_XDR_VIEW.const_xdr_len()] = MockProof::spec_xdr(); impl MockProof { @@ -20,7 +26,7 @@ impl MockProof { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MockProof"), + name: soroban_sdk::xdr::StringMView::new_str(MockProof::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -604,7 +610,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"proof"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MockProof"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_bn254_wasm32v1-none.rs b/tests-expanded/test_bn254_wasm32v1-none.rs index c79b740b9..d50240e67 100644 --- a/tests-expanded/test_bn254_wasm32v1-none.rs +++ b/tests-expanded/test_bn254_wasm32v1-none.rs @@ -13,6 +13,12 @@ pub struct MockProof { pub g1: Vec, pub g2: Vec, } +impl MockProof { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_bn254::MockProof" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_MOCKPROOF: [u8; MockProof::__SPEC_XDR_VIEW.const_xdr_len()] = MockProof::spec_xdr(); @@ -21,7 +27,7 @@ impl MockProof { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MockProof"), + name: soroban_sdk::xdr::StringMView::new_str(MockProof::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -180,7 +186,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"proof"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MockProof"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_constructor_tests.rs b/tests-expanded/test_constructor_tests.rs index f72ba4533..e46d01ff6 100644 --- a/tests-expanded/test_constructor_tests.rs +++ b/tests-expanded/test_constructor_tests.rs @@ -141,6 +141,12 @@ pub enum DataKey { Temp(u32), Instance(u32), } +impl DataKey { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_constructor::DataKey" + } +} pub static __SPEC_XDR_TYPE_DATAKEY: [u8; DataKey::__SPEC_XDR_VIEW.const_xdr_len()] = DataKey::spec_xdr(); impl DataKey { @@ -148,7 +154,7 @@ impl DataKey { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"DataKey"), + name: soroban_sdk::xdr::StringMView::new_str(DataKey::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -803,7 +809,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"key"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"DataKey"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_constructor_wasm32v1-none.rs b/tests-expanded/test_constructor_wasm32v1-none.rs index cf0d43edd..4d3c2e934 100644 --- a/tests-expanded/test_constructor_wasm32v1-none.rs +++ b/tests-expanded/test_constructor_wasm32v1-none.rs @@ -29,6 +29,12 @@ pub enum DataKey { Temp(u32), Instance(u32), } +impl DataKey { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_constructor::DataKey" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_DATAKEY: [u8; DataKey::__SPEC_XDR_VIEW.const_xdr_len()] = DataKey::spec_xdr(); @@ -37,7 +43,7 @@ impl DataKey { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"DataKey"), + name: soroban_sdk::xdr::StringMView::new_str(DataKey::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -260,7 +266,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"key"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"DataKey"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_contracttrait_impl_full_tests.rs b/tests-expanded/test_contracttrait_impl_full_tests.rs index 9fd36f401..87fdac85e 100644 --- a/tests-expanded/test_contracttrait_impl_full_tests.rs +++ b/tests-expanded/test_contracttrait_impl_full_tests.rs @@ -1834,14 +1834,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1874,14 +1876,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1915,14 +1919,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); diff --git a/tests-expanded/test_contracttrait_impl_full_wasm32v1-none.rs b/tests-expanded/test_contracttrait_impl_full_wasm32v1-none.rs index 094a98804..4b9ca8777 100644 --- a/tests-expanded/test_contracttrait_impl_full_wasm32v1-none.rs +++ b/tests-expanded/test_contracttrait_impl_full_wasm32v1-none.rs @@ -1343,14 +1343,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1384,14 +1386,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1426,14 +1430,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); diff --git a/tests-expanded/test_contracttrait_impl_partial_tests.rs b/tests-expanded/test_contracttrait_impl_partial_tests.rs index ddf1cef1a..eff97a658 100644 --- a/tests-expanded/test_contracttrait_impl_partial_tests.rs +++ b/tests-expanded/test_contracttrait_impl_partial_tests.rs @@ -269,14 +269,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -2197,14 +2199,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -2238,14 +2242,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); diff --git a/tests-expanded/test_contracttrait_impl_partial_wasm32v1-none.rs b/tests-expanded/test_contracttrait_impl_partial_wasm32v1-none.rs index ef94ce230..0d503790c 100644 --- a/tests-expanded/test_contracttrait_impl_partial_wasm32v1-none.rs +++ b/tests-expanded/test_contracttrait_impl_partial_wasm32v1-none.rs @@ -161,14 +161,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1521,14 +1523,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1563,14 +1567,16 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); diff --git a/tests-expanded/test_contracttrait_path_global_tests.rs b/tests-expanded/test_contracttrait_path_global_tests.rs index f8b65e918..e56df1e54 100644 --- a/tests-expanded/test_contracttrait_path_global_tests.rs +++ b/tests-expanded/test_contracttrait_path_global_tests.rs @@ -1884,14 +1884,16 @@ impl ContractGlobalPath { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1925,14 +1927,16 @@ impl ContractGlobalPath { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1966,14 +1970,16 @@ impl ContractGlobalPath { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); diff --git a/tests-expanded/test_contracttrait_path_global_wasm32v1-none.rs b/tests-expanded/test_contracttrait_path_global_wasm32v1-none.rs index daad3eb90..e25ecec48 100644 --- a/tests-expanded/test_contracttrait_path_global_wasm32v1-none.rs +++ b/tests-expanded/test_contracttrait_path_global_wasm32v1-none.rs @@ -1383,14 +1383,16 @@ impl ContractGlobalPath { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1425,14 +1427,16 @@ impl ContractGlobalPath { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1467,14 +1471,16 @@ impl ContractGlobalPath { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); diff --git a/tests-expanded/test_contracttrait_trait_tests.rs b/tests-expanded/test_contracttrait_trait_tests.rs index 2ac85e99d..8d9823593 100644 --- a/tests-expanded/test_contracttrait_trait_tests.rs +++ b/tests-expanded/test_contracttrait_trait_tests.rs @@ -49,6 +49,12 @@ impl ::core::cmp::PartialEq for MyStruct { self.a == other.a && self.b == other.b } } +impl MyStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_contracttrait_trait::MyStruct" + } +} pub static __SPEC_XDR_TYPE_MYSTRUCT: [u8; MyStruct::__SPEC_XDR_VIEW.const_xdr_len()] = MyStruct::spec_xdr(); impl MyStruct { @@ -56,7 +62,7 @@ impl MyStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(MyStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -486,6 +492,12 @@ impl ::core::cmp::PartialEq for MyEnumUnit { __self_discr == __arg1_discr } } +impl MyEnumUnit { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_contracttrait_trait::MyEnumUnit" + } +} pub static __SPEC_XDR_TYPE_MYENUMUNIT: [u8; MyEnumUnit::__SPEC_XDR_VIEW.const_xdr_len()] = MyEnumUnit::spec_xdr(); impl MyEnumUnit { @@ -493,7 +505,7 @@ impl MyEnumUnit { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(MyEnumUnit::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -855,6 +867,12 @@ impl ::core::cmp::PartialEq for MyEnumVariants { } } } +impl MyEnumVariants { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_contracttrait_trait::MyEnumVariants" + } +} pub static __SPEC_XDR_TYPE_MYENUMVARIANTS: [u8; MyEnumVariants::__SPEC_XDR_VIEW.const_xdr_len()] = MyEnumVariants::spec_xdr(); impl MyEnumVariants { @@ -862,7 +880,7 @@ impl MyEnumVariants { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(MyEnumVariants::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -877,7 +895,9 @@ impl MyEnumVariants { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -890,7 +910,9 @@ impl MyEnumVariants { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -3874,14 +3896,16 @@ impl AllTypesSpec { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -3905,14 +3929,16 @@ impl AllTypesSpec { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -3936,14 +3962,16 @@ impl AllTypesSpec { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -5847,14 +5875,16 @@ mod test { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }), ]), }); @@ -5888,14 +5918,16 @@ mod test { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }), ]), }); @@ -5929,14 +5961,18 @@ mod test { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }), ]), }); diff --git a/tests-expanded/test_contracttrait_trait_wasm32v1-none.rs b/tests-expanded/test_contracttrait_trait_wasm32v1-none.rs index 62450e730..1794951a5 100644 --- a/tests-expanded/test_contracttrait_trait_wasm32v1-none.rs +++ b/tests-expanded/test_contracttrait_trait_wasm32v1-none.rs @@ -49,6 +49,12 @@ impl ::core::cmp::PartialEq for MyStruct { self.a == other.a && self.b == other.b } } +impl MyStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_contracttrait_trait::MyStruct" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_MYSTRUCT: [u8; MyStruct::__SPEC_XDR_VIEW.const_xdr_len()] = MyStruct::spec_xdr(); @@ -57,7 +63,7 @@ impl MyStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(MyStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -181,6 +187,12 @@ impl ::core::cmp::PartialEq for MyEnumUnit { __self_discr == __arg1_discr } } +impl MyEnumUnit { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_contracttrait_trait::MyEnumUnit" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_MYENUMUNIT: [u8; MyEnumUnit::__SPEC_XDR_VIEW.const_xdr_len()] = MyEnumUnit::spec_xdr(); @@ -189,7 +201,7 @@ impl MyEnumUnit { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(MyEnumUnit::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -321,6 +333,12 @@ impl ::core::cmp::PartialEq for MyEnumVariants { } } } +impl MyEnumVariants { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_contracttrait_trait::MyEnumVariants" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_MYENUMVARIANTS: [u8; MyEnumVariants::__SPEC_XDR_VIEW.const_xdr_len()] = MyEnumVariants::spec_xdr(); @@ -329,7 +347,7 @@ impl MyEnumVariants { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(MyEnumVariants::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -344,7 +362,9 @@ impl MyEnumVariants { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -357,7 +377,9 @@ impl MyEnumVariants { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -1824,14 +1846,16 @@ impl AllTypesSpec { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyStruct"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1855,14 +1879,16 @@ impl AllTypesSpec { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumUnit"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -1886,14 +1912,16 @@ impl AllTypesSpec { name: soroban_sdk::xdr::StringMView::new(b"v"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"MyEnumVariants"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); diff --git a/tests-expanded/test_errors_tests.rs b/tests-expanded/test_errors_tests.rs index a0b8a13b9..d2e55e8c0 100644 --- a/tests-expanded/test_errors_tests.rs +++ b/tests-expanded/test_errors_tests.rs @@ -157,13 +157,19 @@ impl ::core::cmp::PartialEq for Flag { __self_discr == __arg1_discr } } +impl Flag { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_errors::Flag" + } +} pub static __SPEC_XDR_TYPE_FLAG: [u8; Flag::__SPEC_XDR_VIEW.const_xdr_len()] = Flag::spec_xdr(); impl Flag { const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Flag"), + name: soroban_sdk::xdr::StringMView::new_str(Flag::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -537,6 +543,12 @@ impl ::core::cmp::PartialEq for Error { true } } +impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_errors::Error" + } +} pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = @@ -544,7 +556,7 @@ impl Error { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -732,7 +744,7 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"flag"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Flag"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, ), }, diff --git a/tests-expanded/test_errors_wasm32v1-none.rs b/tests-expanded/test_errors_wasm32v1-none.rs index 847b55bb3..92f1da2ff 100644 --- a/tests-expanded/test_errors_wasm32v1-none.rs +++ b/tests-expanded/test_errors_wasm32v1-none.rs @@ -45,6 +45,12 @@ impl ::core::cmp::PartialEq for Flag { __self_discr == __arg1_discr } } +impl Flag { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_errors::Flag" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_FLAG: [u8; Flag::__SPEC_XDR_VIEW.const_xdr_len()] = Flag::spec_xdr(); impl Flag { @@ -52,7 +58,7 @@ impl Flag { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Flag"), + name: soroban_sdk::xdr::StringMView::new_str(Flag::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -166,6 +172,12 @@ impl ::core::cmp::PartialEq for Error { true } } +impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_errors::Error" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { @@ -174,7 +186,7 @@ impl Error { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -358,7 +370,7 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"flag"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Flag"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, ), }, diff --git a/tests-expanded/test_import_contract_tests.rs b/tests-expanded/test_import_contract_tests.rs index cc659ede4..e9ff28bf6 100644 --- a/tests-expanded/test_import_contract_tests.rs +++ b/tests-expanded/test_import_contract_tests.rs @@ -6,7 +6,7 @@ extern crate core; use core::prelude::rust_2021::*; use soroban_sdk::{contract, contracterror, contractimpl, Address, Env}; mod addcontract { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x14\x04`\x01~\x01~`\x02\x7f~\x00`\x02~~\x01~`\x00\x00\x02\r\x02\x01i\x010\x00\x00\x01i\x01_\x00\x00\x03\x08\x07\x01\x01\x02\x03\x02\x02\x03\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\xa0\x80\xc0\x00\x0b\x07I\x07\x06memory\x02\x00\x03add\x00\x04\x08safe_add\x00\x06\x0csafe_add_two\x00\x07\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xf3\x04\x07]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc0\x00F\r\x00\x02@ \x02A\x06F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x88!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x80\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b;\x00\x02@\x02@ \x01B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x06\x84!\x01\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x8e\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@\x02@\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08\"\x01 \x00|\"\x00 \x01T\r\x01 \x02 \x00\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01G\r\x02\x0b\x00\x0b\x10\x85\x80\x80\x80\x00\x00\x0b \x02)\x03\x08!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\t\x00\x10\x88\x80\x80\x80\x00\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x03\x00\x00\x0b\x0b%\x01\x00A\x80\x80\xc0\x00\x0b\x1cSpEcV1\xd6\xb8`\x15\xac\x9ei\x1aSpEcV1\x95\xd0j*\x1d\xfam\xa3\x00\xdf\x17\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05Error\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07MyError\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08safe_add\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0csafe_add_two\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x07\xd0\x00\x00\x00\x07MyError\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x14\x04`\x01~\x01~`\x02\x7f~\x00`\x02~~\x01~`\x00\x00\x02\r\x02\x01i\x010\x00\x00\x01i\x01_\x00\x00\x03\x08\x07\x01\x01\x02\x03\x02\x02\x03\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\xa0\x80\xc0\x00\x0b\x07I\x07\x06memory\x02\x00\x03add\x00\x04\x08safe_add\x00\x06\x0csafe_add_two\x00\x07\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xf3\x04\x07]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc0\x00F\r\x00\x02@ \x02A\x06F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x88!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x80\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b;\x00\x02@\x02@ \x01B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x06\x84!\x01\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x8e\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@\x02@\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08\"\x01 \x00|\"\x00 \x01T\r\x01 \x02 \x00\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01G\r\x02\x0b\x00\x0b\x10\x85\x80\x80\x80\x00\x00\x0b \x02)\x03\x08!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\t\x00\x10\x88\x80\x80\x80\x00\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x03\x00\x00\x0b\x0b%\x01\x00A\x80\x80\xc0\x00\x0b\x1cSpEcV1\xd6\xb8`\x15\xac\x9ei\x1aSpEcV1\x95\xd0j*\x1d\xfam\xa3\x00\xeb\x1a\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13test_add_u64::Error\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08safe_add\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0csafe_add_two\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x07\xd0\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn add(env: soroban_sdk::Env, a: u64, b: u64) -> u64; fn safe_add(env: soroban_sdk::Env, a: u64, b: u64) -> Result; @@ -479,6 +479,12 @@ mod addcontract { } } } + impl ContractContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::ContractContext" + } + } pub static __SPEC_XDR_TYPE_CONTRACTCONTEXT: [u8; ContractContext::__SPEC_XDR_VIEW .const_xdr_len()] = ContractContext::spec_xdr(); impl ContractContext { @@ -487,7 +493,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str(ContractContext::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1042,6 +1048,12 @@ mod addcontract { } } } + impl SubContractInvocation { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::SubContractInvocation" + } + } pub static __SPEC_XDR_TYPE_SUBCONTRACTINVOCATION: [u8; SubContractInvocation::__SPEC_XDR_VIEW .const_xdr_len()] = SubContractInvocation::spec_xdr(); impl SubContractInvocation { @@ -1050,14 +1062,18 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"SubContractInvocation"), + name: soroban_sdk::xdr::StringMView::new_str( + SubContractInvocation::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"context"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -1068,8 +1084,8 @@ mod addcontract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"InvokerContractAuthEntry", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -1552,6 +1568,12 @@ mod addcontract { } } } + impl CreateContractHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::CreateContractHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTHOSTFNCONTEXT: [u8; CreateContractHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractHostFnContext::spec_xdr(); @@ -1561,14 +1583,18 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFnContext"), + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractHostFnContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -2075,6 +2101,12 @@ mod addcontract { } } } + impl CreateContractWithConstructorHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::CreateContractWithConstructorHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTWITHCONSTRUCTORHOSTFNCONTEXT: [u8; CreateContractWithConstructorHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractWithConstructorHostFnContext::spec_xdr(); @@ -2084,8 +2116,8 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractWithConstructorHostFnContext::spec_type_name(), ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { @@ -2102,7 +2134,9 @@ mod addcontract { name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -2751,64 +2785,67 @@ mod addcontract { } } } + impl Context { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::Context" + } + } pub static __SPEC_XDR_TYPE_CONTEXT: [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] = Context::spec_xdr(); impl Context { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Context"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFn"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, - ), - ]), - }, - ), - ]), - }); + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str(Context::spec_type_name()), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] { Context::__SPEC_XDR_VIEW.const_to_xdr() } @@ -3467,6 +3504,12 @@ mod addcontract { } } } + impl ContractExecutable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::ContractExecutable" + } + } pub static __SPEC_XDR_TYPE_CONTRACTEXECUTABLE: [u8; ContractExecutable::__SPEC_XDR_VIEW .const_xdr_len()] = ContractExecutable::spec_xdr(); impl ContractExecutable { @@ -3474,7 +3517,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str(ContractExecutable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -4029,65 +4072,70 @@ mod addcontract { } } } + impl InvokerContractAuthEntry { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::InvokerContractAuthEntry" + } + } pub static __SPEC_XDR_TYPE_INVOKERCONTRACTAUTHENTRY: [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] = InvokerContractAuthEntry::spec_xdr(); impl InvokerContractAuthEntry { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"InvokerContractAuthEntry"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"SubContractInvocation", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFn"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, - ), - ]), - }, - ), - ]), - }); + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str( + InvokerContractAuthEntry::spec_type_name(), + ), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] { InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_to_xdr() } @@ -4790,6 +4838,12 @@ mod addcontract { } } } + impl Executable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::Executable" + } + } pub static __SPEC_XDR_TYPE_EXECUTABLE: [u8; Executable::__SPEC_XDR_VIEW.const_xdr_len()] = Executable::spec_xdr(); impl Executable { @@ -4797,7 +4851,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Executable"), + name: soroban_sdk::xdr::StringMView::new_str(Executable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -5355,6 +5409,12 @@ mod addcontract { ::core::option::Option::Some(::core::cmp::Ordering::Equal) } } + impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::Error" + } + } pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { @@ -5363,7 +5423,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5534,6 +5594,12 @@ mod addcontract { ::core::option::Option::Some(::core::cmp::Ordering::Equal) } } + impl MyError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::MyError" + } + } pub static __SPEC_XDR_TYPE_MYERROR: [u8; MyError::__SPEC_XDR_VIEW.const_xdr_len()] = MyError::spec_xdr(); impl MyError { @@ -5542,7 +5608,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyError"), + name: soroban_sdk::xdr::StringMView::new_str(MyError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5693,6 +5759,12 @@ impl ::core::cmp::PartialEq for Error { __self_discr == __arg1_discr } } +impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::Error" + } +} pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = @@ -5700,7 +5772,7 @@ impl Error { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), diff --git a/tests-expanded/test_import_contract_wasm32v1-none.rs b/tests-expanded/test_import_contract_wasm32v1-none.rs index 4fd4fab4a..0d7bf234c 100644 --- a/tests-expanded/test_import_contract_wasm32v1-none.rs +++ b/tests-expanded/test_import_contract_wasm32v1-none.rs @@ -6,7 +6,7 @@ extern crate core; use core::prelude::rust_2021::*; use soroban_sdk::{contract, contracterror, contractimpl, Address, Env}; mod addcontract { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x14\x04`\x01~\x01~`\x02\x7f~\x00`\x02~~\x01~`\x00\x00\x02\r\x02\x01i\x010\x00\x00\x01i\x01_\x00\x00\x03\x08\x07\x01\x01\x02\x03\x02\x02\x03\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\xa0\x80\xc0\x00\x0b\x07I\x07\x06memory\x02\x00\x03add\x00\x04\x08safe_add\x00\x06\x0csafe_add_two\x00\x07\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xf3\x04\x07]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc0\x00F\r\x00\x02@ \x02A\x06F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x88!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x80\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b;\x00\x02@\x02@ \x01B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x06\x84!\x01\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x8e\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@\x02@\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08\"\x01 \x00|\"\x00 \x01T\r\x01 \x02 \x00\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01G\r\x02\x0b\x00\x0b\x10\x85\x80\x80\x80\x00\x00\x0b \x02)\x03\x08!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\t\x00\x10\x88\x80\x80\x80\x00\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x03\x00\x00\x0b\x0b%\x01\x00A\x80\x80\xc0\x00\x0b\x1cSpEcV1\xd6\xb8`\x15\xac\x9ei\x1aSpEcV1\x95\xd0j*\x1d\xfam\xa3\x00\xdf\x17\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05Error\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07MyError\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08safe_add\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0csafe_add_two\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x07\xd0\x00\x00\x00\x07MyError\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x14\x04`\x01~\x01~`\x02\x7f~\x00`\x02~~\x01~`\x00\x00\x02\r\x02\x01i\x010\x00\x00\x01i\x01_\x00\x00\x03\x08\x07\x01\x01\x02\x03\x02\x02\x03\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\xa0\x80\xc0\x00\x0b\x07I\x07\x06memory\x02\x00\x03add\x00\x04\x08safe_add\x00\x06\x0csafe_add_two\x00\x07\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xf3\x04\x07]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc0\x00F\r\x00\x02@ \x02A\x06F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x88!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x80\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b;\x00\x02@\x02@ \x01B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x06\x84!\x01\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x8e\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@\x02@\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08\"\x01 \x00|\"\x00 \x01T\r\x01 \x02 \x00\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01G\r\x02\x0b\x00\x0b\x10\x85\x80\x80\x80\x00\x00\x0b \x02)\x03\x08!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\t\x00\x10\x88\x80\x80\x80\x00\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x03\x00\x00\x0b\x0b%\x01\x00A\x80\x80\xc0\x00\x0b\x1cSpEcV1\xd6\xb8`\x15\xac\x9ei\x1aSpEcV1\x95\xd0j*\x1d\xfam\xa3\x00\xeb\x1a\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13test_add_u64::Error\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08safe_add\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0csafe_add_two\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x07\xd0\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn add(env: soroban_sdk::Env, a: u64, b: u64) -> u64; fn safe_add(env: soroban_sdk::Env, a: u64, b: u64) -> Result; @@ -261,6 +261,12 @@ mod addcontract { } } } + impl ContractContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::ContractContext" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CONTRACTCONTEXT: [u8; ContractContext::__SPEC_XDR_VIEW .const_xdr_len()] = ContractContext::spec_xdr(); @@ -270,7 +276,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str(ContractContext::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -450,6 +456,12 @@ mod addcontract { } } } + impl SubContractInvocation { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::SubContractInvocation" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_SUBCONTRACTINVOCATION: [u8; SubContractInvocation::__SPEC_XDR_VIEW .const_xdr_len()] = SubContractInvocation::spec_xdr(); @@ -459,14 +471,18 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"SubContractInvocation"), + name: soroban_sdk::xdr::StringMView::new_str( + SubContractInvocation::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"context"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -477,8 +493,8 @@ mod addcontract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"InvokerContractAuthEntry", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -635,6 +651,12 @@ mod addcontract { } } } + impl CreateContractHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::CreateContractHostFnContext" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CREATECONTRACTHOSTFNCONTEXT: [u8; CreateContractHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = @@ -645,14 +667,18 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFnContext"), + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractHostFnContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -834,6 +860,12 @@ mod addcontract { } } } + impl CreateContractWithConstructorHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::CreateContractWithConstructorHostFnContext" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CREATECONTRACTWITHCONSTRUCTORHOSTFNCONTEXT: [u8; CreateContractWithConstructorHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = @@ -844,8 +876,8 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractWithConstructorHostFnContext::spec_type_name(), ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { @@ -862,7 +894,9 @@ mod addcontract { name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -1096,65 +1130,68 @@ mod addcontract { } } } + impl Context { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::Context" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CONTEXT: [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] = Context::spec_xdr(); impl Context { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Context"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFn"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, - ), - ]), - }, - ), - ]), - }); + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str(Context::spec_type_name()), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] { Context::__SPEC_XDR_VIEW.const_to_xdr() } @@ -1347,6 +1384,12 @@ mod addcontract { } } } + impl ContractExecutable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::ContractExecutable" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CONTRACTEXECUTABLE: [u8; ContractExecutable::__SPEC_XDR_VIEW .const_xdr_len()] = ContractExecutable::spec_xdr(); @@ -1355,7 +1398,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str(ContractExecutable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -1591,66 +1634,71 @@ mod addcontract { } } } + impl InvokerContractAuthEntry { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::InvokerContractAuthEntry" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_INVOKERCONTRACTAUTHENTRY: [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] = InvokerContractAuthEntry::spec_xdr(); impl InvokerContractAuthEntry { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"InvokerContractAuthEntry"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"SubContractInvocation", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFn"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, - ), - ]), - }, - ), - ]), - }); + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str( + InvokerContractAuthEntry::spec_type_name(), + ), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] { InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_to_xdr() } @@ -1862,6 +1910,12 @@ mod addcontract { } } } + impl Executable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::Executable" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_EXECUTABLE: [u8; Executable::__SPEC_XDR_VIEW.const_xdr_len()] = Executable::spec_xdr(); @@ -1870,7 +1924,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Executable"), + name: soroban_sdk::xdr::StringMView::new_str(Executable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -2047,6 +2101,12 @@ mod addcontract { ::core::option::Option::Some(::core::cmp::Ordering::Equal) } } + impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::Error" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); @@ -2056,7 +2116,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2232,6 +2292,12 @@ mod addcontract { ::core::option::Option::Some(::core::cmp::Ordering::Equal) } } + impl MyError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::addcontract::MyError" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_MYERROR: [u8; MyError::__SPEC_XDR_VIEW.const_xdr_len()] = MyError::spec_xdr(); @@ -2241,7 +2307,7 @@ mod addcontract { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"MyError"), + name: soroban_sdk::xdr::StringMView::new_str(MyError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2397,6 +2463,12 @@ impl ::core::cmp::PartialEq for Error { __self_discr == __arg1_discr } } +impl Error { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_import_contract::Error" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERROR: [u8; Error::__SPEC_XDR_VIEW.const_xdr_len()] = Error::spec_xdr(); impl Error { @@ -2405,7 +2477,7 @@ impl Error { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Error"), + name: soroban_sdk::xdr::StringMView::new_str(Error::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), diff --git a/tests-expanded/test_spec_import_tests.rs b/tests-expanded/test_spec_import_tests.rs index a7565d9e6..17efc8ee9 100644 --- a/tests-expanded/test_spec_import_tests.rs +++ b/tests-expanded/test_spec_import_tests.rs @@ -83,7 +83,7 @@ impl Contract { ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -125,7 +125,7 @@ impl Contract { ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -153,7 +153,7 @@ impl Contract { inputs: soroban_sdk::xdr::VecMView::new(&[]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"EnumA"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -182,7 +182,7 @@ impl Contract { inputs: soroban_sdk::xdr::VecMView::new(&[]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"EnumIntA"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -220,7 +220,9 @@ impl Contract { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::U32, error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ErrorA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_spec_import_wasm32v1-none.rs b/tests-expanded/test_spec_import_wasm32v1-none.rs index 228c7c5a6..80fb8e51c 100644 --- a/tests-expanded/test_spec_import_wasm32v1-none.rs +++ b/tests-expanded/test_spec_import_wasm32v1-none.rs @@ -84,7 +84,7 @@ impl Contract { ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -127,7 +127,7 @@ impl Contract { ]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -156,7 +156,7 @@ impl Contract { inputs: soroban_sdk::xdr::VecMView::new(&[]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"EnumA"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -186,7 +186,7 @@ impl Contract { inputs: soroban_sdk::xdr::VecMView::new(&[]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"EnumIntA"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -225,7 +225,9 @@ impl Contract { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::U32, error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ErrorA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_spec_lib_tests.rs b/tests-expanded/test_spec_lib_tests.rs index 5d91e5cde..d8078b015 100644 --- a/tests-expanded/test_spec_lib_tests.rs +++ b/tests-expanded/test_spec_lib_tests.rs @@ -47,6 +47,12 @@ impl ::core::cmp::PartialEq for StructA { self.f1 == other.f1 && self.f2 == other.f2 } } +impl StructA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructA" + } +} pub static __SPEC_XDR_TYPE_STRUCTA: [u8; StructA::__SPEC_XDR_VIEW.const_xdr_len()] = StructA::spec_xdr(); impl StructA { @@ -54,7 +60,7 @@ impl StructA { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str(StructA::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -482,6 +488,12 @@ impl ::core::cmp::PartialEq for StructB { self.f1 == other.f1 && self.f2 == other.f2 } } +impl StructB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructB" + } +} pub static __SPEC_XDR_TYPE_STRUCTB: [u8; StructB::__SPEC_XDR_VIEW.const_xdr_len()] = StructB::spec_xdr(); impl StructB { @@ -489,7 +501,7 @@ impl StructB { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructB"), + name: soroban_sdk::xdr::StringMView::new_str(StructB::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -917,6 +929,12 @@ impl ::core::cmp::PartialEq for StructC { self.f1 == other.f1 && self.f2 == other.f2 } } +impl StructC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructC" + } +} pub static __SPEC_XDR_TYPE_STRUCTC: [u8; StructC::__SPEC_XDR_VIEW.const_xdr_len()] = StructC::spec_xdr(); impl StructC { @@ -924,7 +942,7 @@ impl StructC { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructC"), + name: soroban_sdk::xdr::StringMView::new_str(StructC::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1352,6 +1370,12 @@ impl ::core::cmp::PartialEq for StructTupleA { self.0 == other.0 && self.1 == other.1 } } +impl StructTupleA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructTupleA" + } +} pub static __SPEC_XDR_TYPE_STRUCTTUPLEA: [u8; StructTupleA::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleA::spec_xdr(); impl StructTupleA { @@ -1359,7 +1383,7 @@ impl StructTupleA { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleA::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1747,6 +1771,12 @@ impl ::core::cmp::PartialEq for StructTupleB { self.0 == other.0 && self.1 == other.1 } } +impl StructTupleB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructTupleB" + } +} pub static __SPEC_XDR_TYPE_STRUCTTUPLEB: [u8; StructTupleB::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleB::spec_xdr(); impl StructTupleB { @@ -1754,7 +1784,7 @@ impl StructTupleB { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleB"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleB::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2143,6 +2173,12 @@ impl ::core::cmp::PartialEq for StructTupleC { self.1 == other.1 && self.0 == other.0 } } +impl StructTupleC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructTupleC" + } +} pub static __SPEC_XDR_TYPE_STRUCTTUPLEC: [u8; StructTupleC::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleC::spec_xdr(); impl StructTupleC { @@ -2150,7 +2186,7 @@ impl StructTupleC { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleC"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleC::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2550,13 +2586,19 @@ impl ::core::cmp::PartialEq for EnumA { __self_discr == __arg1_discr } } +impl EnumA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumA" + } +} pub static __SPEC_XDR_TYPE_ENUMA: [u8; EnumA::__SPEC_XDR_VIEW.const_xdr_len()] = EnumA::spec_xdr(); impl EnumA { const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumA"), + name: soroban_sdk::xdr::StringMView::new_str(EnumA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -3046,13 +3088,19 @@ impl ::core::cmp::PartialEq for EnumB { } } } +impl EnumB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumB" + } +} pub static __SPEC_XDR_TYPE_ENUMB: [u8; EnumB::__SPEC_XDR_VIEW.const_xdr_len()] = EnumB::spec_xdr(); impl EnumB { const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumB"), + name: soroban_sdk::xdr::StringMView::new_str(EnumB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -3673,13 +3721,19 @@ impl ::core::cmp::PartialEq for EnumC { } } } +impl EnumC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumC" + } +} pub static __SPEC_XDR_TYPE_ENUMC: [u8; EnumC::__SPEC_XDR_VIEW.const_xdr_len()] = EnumC::spec_xdr(); impl EnumC { const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumC"), + name: soroban_sdk::xdr::StringMView::new_str(EnumC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -3694,7 +3748,9 @@ impl EnumC { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -3707,7 +3763,9 @@ impl EnumC { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -4259,6 +4317,12 @@ impl ::core::cmp::PartialEq for EnumIntA { __self_discr == __arg1_discr } } +impl EnumIntA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumIntA" + } +} pub static __SPEC_XDR_TYPE_ENUMINTA: [u8; EnumIntA::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntA::spec_xdr(); impl EnumIntA { @@ -4266,7 +4330,7 @@ impl EnumIntA { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntA"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -4626,6 +4690,12 @@ impl ::core::cmp::PartialEq for EnumIntB { __self_discr == __arg1_discr } } +impl EnumIntB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumIntB" + } +} pub static __SPEC_XDR_TYPE_ENUMINTB: [u8; EnumIntB::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntB::spec_xdr(); impl EnumIntB { @@ -4633,7 +4703,7 @@ impl EnumIntB { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntB"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -4993,6 +5063,12 @@ impl ::core::cmp::PartialEq for EnumIntC { __self_discr == __arg1_discr } } +impl EnumIntC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumIntC" + } +} pub static __SPEC_XDR_TYPE_ENUMINTC: [u8; EnumIntC::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntC::spec_xdr(); impl EnumIntC { @@ -5000,7 +5076,7 @@ impl EnumIntC { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntC"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5360,6 +5436,12 @@ impl ::core::cmp::PartialEq for ErrorA { __self_discr == __arg1_discr } } +impl ErrorA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::ErrorA" + } +} pub static __SPEC_XDR_TYPE_ERRORA: [u8; ErrorA::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorA::spec_xdr(); impl ErrorA { @@ -5368,7 +5450,7 @@ impl ErrorA { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorA"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5554,6 +5636,12 @@ impl ::core::cmp::PartialEq for ErrorB { __self_discr == __arg1_discr } } +impl ErrorB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::ErrorB" + } +} pub static __SPEC_XDR_TYPE_ERRORB: [u8; ErrorB::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorB::spec_xdr(); impl ErrorB { @@ -5562,7 +5650,7 @@ impl ErrorB { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorB"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5748,6 +5836,12 @@ impl ::core::cmp::PartialEq for ErrorC { __self_discr == __arg1_discr } } +impl ErrorC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::ErrorC" + } +} pub static __SPEC_XDR_TYPE_ERRORC: [u8; ErrorC::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorC::spec_xdr(); impl ErrorC { @@ -5756,7 +5850,7 @@ impl ErrorC { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorC"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), diff --git a/tests-expanded/test_spec_lib_wasm32v1-none.rs b/tests-expanded/test_spec_lib_wasm32v1-none.rs index ccdb111ae..c780b6f1e 100644 --- a/tests-expanded/test_spec_lib_wasm32v1-none.rs +++ b/tests-expanded/test_spec_lib_wasm32v1-none.rs @@ -47,6 +47,12 @@ impl ::core::cmp::PartialEq for StructA { self.f1 == other.f1 && self.f2 == other.f2 } } +impl StructA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructA" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTA: [u8; StructA::__SPEC_XDR_VIEW.const_xdr_len()] = StructA::spec_xdr(); @@ -55,7 +61,7 @@ impl StructA { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str(StructA::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -177,6 +183,12 @@ impl ::core::cmp::PartialEq for StructB { self.f1 == other.f1 && self.f2 == other.f2 } } +impl StructB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructB" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTB: [u8; StructB::__SPEC_XDR_VIEW.const_xdr_len()] = StructB::spec_xdr(); @@ -185,7 +197,7 @@ impl StructB { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructB"), + name: soroban_sdk::xdr::StringMView::new_str(StructB::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -307,6 +319,12 @@ impl ::core::cmp::PartialEq for StructC { self.f1 == other.f1 && self.f2 == other.f2 } } +impl StructC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructC" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTC: [u8; StructC::__SPEC_XDR_VIEW.const_xdr_len()] = StructC::spec_xdr(); @@ -315,7 +333,7 @@ impl StructC { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructC"), + name: soroban_sdk::xdr::StringMView::new_str(StructC::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -435,6 +453,12 @@ impl ::core::cmp::PartialEq for StructTupleA { self.0 == other.0 && self.1 == other.1 } } +impl StructTupleA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructTupleA" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTTUPLEA: [u8; StructTupleA::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleA::spec_xdr(); @@ -443,7 +467,7 @@ impl StructTupleA { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleA::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -555,6 +579,12 @@ impl ::core::cmp::PartialEq for StructTupleB { self.0 == other.0 && self.1 == other.1 } } +impl StructTupleB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructTupleB" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTTUPLEB: [u8; StructTupleB::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleB::spec_xdr(); @@ -563,7 +593,7 @@ impl StructTupleB { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleB"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleB::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -676,6 +706,12 @@ impl ::core::cmp::PartialEq for StructTupleC { self.1 == other.1 && self.0 == other.0 } } +impl StructTupleC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::StructTupleC" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTTUPLEC: [u8; StructTupleC::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleC::spec_xdr(); @@ -684,7 +720,7 @@ impl StructTupleC { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleC"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleC::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -808,6 +844,12 @@ impl ::core::cmp::PartialEq for EnumA { __self_discr == __arg1_discr } } +impl EnumA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumA" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMA: [u8; EnumA::__SPEC_XDR_VIEW.const_xdr_len()] = EnumA::spec_xdr(); impl EnumA { @@ -815,7 +857,7 @@ impl EnumA { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumA"), + name: soroban_sdk::xdr::StringMView::new_str(EnumA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -991,6 +1033,12 @@ impl ::core::cmp::PartialEq for EnumB { } } } +impl EnumB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumB" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMB: [u8; EnumB::__SPEC_XDR_VIEW.const_xdr_len()] = EnumB::spec_xdr(); impl EnumB { @@ -998,7 +1046,7 @@ impl EnumB { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumB"), + name: soroban_sdk::xdr::StringMView::new_str(EnumB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -1194,6 +1242,12 @@ impl ::core::cmp::PartialEq for EnumC { } } } +impl EnumC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumC" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMC: [u8; EnumC::__SPEC_XDR_VIEW.const_xdr_len()] = EnumC::spec_xdr(); impl EnumC { @@ -1201,7 +1255,7 @@ impl EnumC { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumC"), + name: soroban_sdk::xdr::StringMView::new_str(EnumC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -1216,7 +1270,9 @@ impl EnumC { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -1229,7 +1285,9 @@ impl EnumC { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -1390,6 +1448,12 @@ impl ::core::cmp::PartialEq for EnumIntA { __self_discr == __arg1_discr } } +impl EnumIntA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumIntA" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMINTA: [u8; EnumIntA::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntA::spec_xdr(); @@ -1398,7 +1462,7 @@ impl EnumIntA { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntA"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1518,6 +1582,12 @@ impl ::core::cmp::PartialEq for EnumIntB { __self_discr == __arg1_discr } } +impl EnumIntB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumIntB" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMINTB: [u8; EnumIntB::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntB::spec_xdr(); @@ -1526,7 +1596,7 @@ impl EnumIntB { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntB"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1646,6 +1716,12 @@ impl ::core::cmp::PartialEq for EnumIntC { __self_discr == __arg1_discr } } +impl EnumIntC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EnumIntC" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMINTC: [u8; EnumIntC::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntC::spec_xdr(); @@ -1654,7 +1730,7 @@ impl EnumIntC { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntC"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1774,6 +1850,12 @@ impl ::core::cmp::PartialEq for ErrorA { __self_discr == __arg1_discr } } +impl ErrorA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::ErrorA" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERRORA: [u8; ErrorA::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorA::spec_xdr(); @@ -1783,7 +1865,7 @@ impl ErrorA { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorA"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1974,6 +2056,12 @@ impl ::core::cmp::PartialEq for ErrorB { __self_discr == __arg1_discr } } +impl ErrorB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::ErrorB" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERRORB: [u8; ErrorB::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorB::spec_xdr(); @@ -1983,7 +2071,7 @@ impl ErrorB { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorB"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2174,6 +2262,12 @@ impl ::core::cmp::PartialEq for ErrorC { __self_discr == __arg1_discr } } +impl ErrorC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::ErrorC" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERRORC: [u8; ErrorC::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorC::spec_xdr(); @@ -2183,7 +2277,7 @@ impl ErrorC { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorC"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), diff --git a/tests-expanded/test_spec_shaking_v2_tests.rs b/tests-expanded/test_spec_shaking_v2_tests.rs index b82dbd204..90b15470e 100644 --- a/tests-expanded/test_spec_shaking_v2_tests.rs +++ b/tests-expanded/test_spec_shaking_v2_tests.rs @@ -186,6 +186,12 @@ impl ::core::cmp::PartialEq for UsedParamStruct { self.a == other.a && self.nested == other.nested } } +impl UsedParamStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedParamStruct" + } +} pub static __SPEC_XDR_TYPE_USEDPARAMSTRUCT: [u8; UsedParamStruct::__SPEC_XDR_VIEW.const_xdr_len()] = UsedParamStruct::spec_xdr(); impl UsedParamStruct { @@ -193,7 +199,7 @@ impl UsedParamStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedParamStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UsedParamStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -205,7 +211,9 @@ impl UsedParamStruct { name: soroban_sdk::xdr::StringMView::new(b"nested"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedNestedInStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -644,6 +652,12 @@ impl ::core::cmp::PartialEq for UsedReturnEnum { } } } +impl UsedReturnEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedReturnEnum" + } +} pub static __SPEC_XDR_TYPE_USEDRETURNENUM: [u8; UsedReturnEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UsedReturnEnum::spec_xdr(); impl UsedReturnEnum { @@ -651,7 +665,7 @@ impl UsedReturnEnum { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedReturnEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedReturnEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -1187,6 +1201,12 @@ impl ::core::cmp::PartialEq for UsedParamIntEnum { __self_discr == __arg1_discr } } +impl UsedParamIntEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedParamIntEnum" + } +} pub static __SPEC_XDR_TYPE_USEDPARAMINTENUM: [u8; UsedParamIntEnum::__SPEC_XDR_VIEW .const_xdr_len()] = UsedParamIntEnum::spec_xdr(); impl UsedParamIntEnum { @@ -1194,7 +1214,7 @@ impl UsedParamIntEnum { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedParamIntEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedParamIntEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1537,6 +1557,12 @@ impl ::core::cmp::PartialEq for UsedErrorEnum { __self_discr == __arg1_discr } } +impl UsedErrorEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedErrorEnum" + } +} pub static __SPEC_XDR_TYPE_USEDERRORENUM: [u8; UsedErrorEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UsedErrorEnum::spec_xdr(); impl UsedErrorEnum { @@ -1545,7 +1571,7 @@ impl UsedErrorEnum { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedErrorEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1711,6 +1737,12 @@ impl ::core::cmp::PartialEq for UsedPanicErrorEnum { true } } +impl UsedPanicErrorEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedPanicErrorEnum" + } +} pub static __SPEC_XDR_TYPE_USEDPANICERRORENUM: [u8; UsedPanicErrorEnum::__SPEC_XDR_VIEW .const_xdr_len()] = UsedPanicErrorEnum::spec_xdr(); impl UsedPanicErrorEnum { @@ -1719,7 +1751,7 @@ impl UsedPanicErrorEnum { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedPanicErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedPanicErrorEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1878,6 +1910,12 @@ impl ::core::cmp::PartialEq for UsedAssertErrorEnum { true } } +impl UsedAssertErrorEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedAssertErrorEnum" + } +} pub static __SPEC_XDR_TYPE_USEDASSERTERRORENUM: [u8; UsedAssertErrorEnum::__SPEC_XDR_VIEW .const_xdr_len()] = UsedAssertErrorEnum::spec_xdr(); impl UsedAssertErrorEnum { @@ -1886,7 +1924,7 @@ impl UsedAssertErrorEnum { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedAssertErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedAssertErrorEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2052,6 +2090,12 @@ impl ::core::cmp::PartialEq for UsedNestedInStruct { self.val == other.val } } +impl UsedNestedInStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedNestedInStruct" + } +} pub static __SPEC_XDR_TYPE_USEDNESTEDINSTRUCT: [u8; UsedNestedInStruct::__SPEC_XDR_VIEW .const_xdr_len()] = UsedNestedInStruct::spec_xdr(); impl UsedNestedInStruct { @@ -2059,7 +2103,7 @@ impl UsedNestedInStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedNestedInStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UsedNestedInStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2430,6 +2474,12 @@ impl ::core::cmp::PartialEq for UsedVecElement { self.data == other.data } } +impl UsedVecElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedVecElement" + } +} pub static __SPEC_XDR_TYPE_USEDVECELEMENT: [u8; UsedVecElement::__SPEC_XDR_VIEW.const_xdr_len()] = UsedVecElement::spec_xdr(); impl UsedVecElement { @@ -2437,7 +2487,7 @@ impl UsedVecElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedVecElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedVecElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2813,6 +2863,12 @@ impl ::core::cmp::PartialEq for UsedMapKey { __self_discr == __arg1_discr } } +impl UsedMapKey { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedMapKey" + } +} pub static __SPEC_XDR_TYPE_USEDMAPKEY: [u8; UsedMapKey::__SPEC_XDR_VIEW.const_xdr_len()] = UsedMapKey::spec_xdr(); impl UsedMapKey { @@ -2820,7 +2876,7 @@ impl UsedMapKey { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedMapKey"), + name: soroban_sdk::xdr::StringMView::new_str(UsedMapKey::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -3154,6 +3210,12 @@ impl ::core::cmp::PartialEq for UsedMapVal { self.v == other.v } } +impl UsedMapVal { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedMapVal" + } +} pub static __SPEC_XDR_TYPE_USEDMAPVAL: [u8; UsedMapVal::__SPEC_XDR_VIEW.const_xdr_len()] = UsedMapVal::spec_xdr(); impl UsedMapVal { @@ -3161,7 +3223,7 @@ impl UsedMapVal { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedMapVal"), + name: soroban_sdk::xdr::StringMView::new_str(UsedMapVal::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -3531,6 +3593,12 @@ impl ::core::cmp::PartialEq for UsedOptionElement { self.data == other.data } } +impl UsedOptionElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedOptionElement" + } +} pub static __SPEC_XDR_TYPE_USEDOPTIONELEMENT: [u8; UsedOptionElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedOptionElement::spec_xdr(); impl UsedOptionElement { @@ -3538,7 +3606,7 @@ impl UsedOptionElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedOptionElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedOptionElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -3907,6 +3975,12 @@ impl ::core::cmp::PartialEq for UsedResultOk { self.data == other.data } } +impl UsedResultOk { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedResultOk" + } +} pub static __SPEC_XDR_TYPE_USEDRESULTOK: [u8; UsedResultOk::__SPEC_XDR_VIEW.const_xdr_len()] = UsedResultOk::spec_xdr(); impl UsedResultOk { @@ -3914,7 +3988,7 @@ impl UsedResultOk { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedResultOk"), + name: soroban_sdk::xdr::StringMView::new_str(UsedResultOk::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -4400,6 +4474,12 @@ impl ::core::cmp::PartialEq for UsedEventTopicType { __self_discr == __arg1_discr } } +impl UsedEventTopicType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventTopicType" + } +} pub static __SPEC_XDR_TYPE_USEDEVENTTOPICTYPE: [u8; UsedEventTopicType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventTopicType::spec_xdr(); impl UsedEventTopicType { @@ -4407,7 +4487,7 @@ impl UsedEventTopicType { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicType"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventTopicType::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -4774,7 +4854,9 @@ impl UsedEventWithTopicType { name: soroban_sdk::xdr::StringMView::new(b"kind"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicType"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::TopicList, @@ -4873,6 +4955,12 @@ impl ::core::cmp::PartialEq for UsedEventDataType { self.x == other.x && self.y == other.y } } +impl UsedEventDataType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventDataType" + } +} pub static __SPEC_XDR_TYPE_USEDEVENTDATATYPE: [u8; UsedEventDataType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventDataType::spec_xdr(); impl UsedEventDataType { @@ -4880,7 +4968,7 @@ impl UsedEventDataType { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataType"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventDataType::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5340,7 +5428,9 @@ impl UsedEventWithDataType { name: soroban_sdk::xdr::StringMView::new(b"payload"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataType"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::Data, @@ -5429,6 +5519,12 @@ impl ::core::cmp::PartialEq for UsedEventTopicOuter { self.inner == other.inner } } +impl UsedEventTopicOuter { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventTopicOuter" + } +} pub static __SPEC_XDR_TYPE_USEDEVENTTOPICOUTER: [u8; UsedEventTopicOuter::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventTopicOuter::spec_xdr(); impl UsedEventTopicOuter { @@ -5436,14 +5532,16 @@ impl UsedEventTopicOuter { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicOuter"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventTopicOuter::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"inner"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicInner"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -5821,6 +5919,12 @@ impl ::core::cmp::PartialEq for UsedEventTopicInner { self.val == other.val } } +impl UsedEventTopicInner { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventTopicInner" + } +} pub static __SPEC_XDR_TYPE_USEDEVENTTOPICINNER: [u8; UsedEventTopicInner::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventTopicInner::spec_xdr(); impl UsedEventTopicInner { @@ -5828,7 +5932,7 @@ impl UsedEventTopicInner { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicInner"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventTopicInner::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -6231,7 +6335,9 @@ impl UsedEventWithNestedTopic { name: soroban_sdk::xdr::StringMView::new(b"info"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicOuter"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::TopicList, @@ -6326,6 +6432,12 @@ impl ::core::cmp::PartialEq for UsedEventDataOuter { self.inner == other.inner } } +impl UsedEventDataOuter { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventDataOuter" + } +} pub static __SPEC_XDR_TYPE_USEDEVENTDATAOUTER: [u8; UsedEventDataOuter::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventDataOuter::spec_xdr(); impl UsedEventDataOuter { @@ -6333,14 +6445,16 @@ impl UsedEventDataOuter { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataOuter"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventDataOuter::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"inner"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataInner"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -6716,6 +6830,12 @@ impl ::core::cmp::PartialEq for UsedEventDataInner { self.val == other.val } } +impl UsedEventDataInner { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventDataInner" + } +} pub static __SPEC_XDR_TYPE_USEDEVENTDATAINNER: [u8; UsedEventDataInner::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventDataInner::spec_xdr(); impl UsedEventDataInner { @@ -6723,7 +6843,7 @@ impl UsedEventDataInner { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataInner"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventDataInner::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -7129,7 +7249,9 @@ impl UsedEventWithNestedData { name: soroban_sdk::xdr::StringMView::new(b"payload"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataOuter"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::Data, @@ -7220,6 +7342,12 @@ impl ::core::cmp::PartialEq for UsedRefTopicType { __self_discr == __arg1_discr } } +impl UsedRefTopicType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRefTopicType" + } +} pub static __SPEC_XDR_TYPE_USEDREFTOPICTYPE: [u8; UsedRefTopicType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRefTopicType::spec_xdr(); impl UsedRefTopicType { @@ -7227,7 +7355,7 @@ impl UsedRefTopicType { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRefTopicType"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRefTopicType::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -7568,6 +7696,12 @@ impl ::core::cmp::PartialEq for UsedRefDataType { self.nested == other.nested } } +impl UsedRefDataType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRefDataType" + } +} pub static __SPEC_XDR_TYPE_USEDREFDATATYPE: [u8; UsedRefDataType::__SPEC_XDR_VIEW.const_xdr_len()] = UsedRefDataType::spec_xdr(); impl UsedRefDataType { @@ -7575,14 +7709,16 @@ impl UsedRefDataType { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRefDataType"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRefDataType::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"nested"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRefDataInner"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -7951,6 +8087,12 @@ impl ::core::cmp::PartialEq for UsedRefDataInner { self.val == other.val } } +impl UsedRefDataInner { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRefDataInner" + } +} pub static __SPEC_XDR_TYPE_USEDREFDATAINNER: [u8; UsedRefDataInner::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRefDataInner::spec_xdr(); impl UsedRefDataInner { @@ -7958,7 +8100,7 @@ impl UsedRefDataInner { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRefDataInner"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRefDataInner::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -8356,7 +8498,9 @@ impl<'a> UsedEventWithRefs<'a> { name: soroban_sdk::xdr::StringMView::new(b"kind"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRefTopicType"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::TopicList, @@ -8366,7 +8510,9 @@ impl<'a> UsedEventWithRefs<'a> { name: soroban_sdk::xdr::StringMView::new(b"payload"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRefDataType"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::Data, @@ -8450,6 +8596,12 @@ impl ::core::cmp::PartialEq for UsedTupleElement { self.val == other.val } } +impl UsedTupleElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedTupleElement" + } +} pub static __SPEC_XDR_TYPE_USEDTUPLEELEMENT: [u8; UsedTupleElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedTupleElement::spec_xdr(); impl UsedTupleElement { @@ -8457,7 +8609,7 @@ impl UsedTupleElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedTupleElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedTupleElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -8831,6 +8983,12 @@ impl ::core::cmp::PartialEq for UsedTupleReturnElement { self.val == other.val } } +impl UsedTupleReturnElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedTupleReturnElement" + } +} pub static __SPEC_XDR_TYPE_USEDTUPLERETURNELEMENT: [u8; UsedTupleReturnElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedTupleReturnElement::spec_xdr(); impl UsedTupleReturnElement { @@ -8838,7 +8996,7 @@ impl UsedTupleReturnElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedTupleReturnElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedTupleReturnElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -9216,6 +9374,12 @@ impl ::core::cmp::PartialEq for UsedVecInnerVecElement { self.val == other.val } } +impl UsedVecInnerVecElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedVecInnerVecElement" + } +} pub static __SPEC_XDR_TYPE_USEDVECINNERVECELEMENT: [u8; UsedVecInnerVecElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedVecInnerVecElement::spec_xdr(); impl UsedVecInnerVecElement { @@ -9223,7 +9387,7 @@ impl UsedVecInnerVecElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedVecInnerVecElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedVecInnerVecElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -9601,6 +9765,12 @@ impl ::core::cmp::PartialEq for UsedVecInnerElement { self.val == other.val } } +impl UsedVecInnerElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedVecInnerElement" + } +} pub static __SPEC_XDR_TYPE_USEDVECINNERELEMENT: [u8; UsedVecInnerElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedVecInnerElement::spec_xdr(); impl UsedVecInnerElement { @@ -9608,7 +9778,7 @@ impl UsedVecInnerElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedVecInnerElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedVecInnerElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -9996,6 +10166,12 @@ impl ::core::cmp::PartialEq for UsedVecElementNested { self.val == other.val && self.inner == other.inner && self.vec_inner == other.vec_inner } } +impl UsedVecElementNested { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedVecElementNested" + } +} pub static __SPEC_XDR_TYPE_USEDVECELEMENTNESTED: [u8; UsedVecElementNested::__SPEC_XDR_VIEW .const_xdr_len()] = UsedVecElementNested::spec_xdr(); impl UsedVecElementNested { @@ -10003,14 +10179,16 @@ impl UsedVecElementNested { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedVecElementNested"), + name: soroban_sdk::xdr::StringMView::new_str(UsedVecElementNested::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"inner"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedVecInnerElement"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -10026,8 +10204,8 @@ impl UsedVecElementNested { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UsedVecInnerVecElement", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -10522,6 +10700,12 @@ impl ::core::cmp::PartialEq for UsedNonPubStruct { self.val == other.val } } +impl UsedNonPubStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedNonPubStruct" + } +} pub static __SPEC_XDR_TYPE_USEDNONPUBSTRUCT: [u8; UsedNonPubStruct::__SPEC_XDR_VIEW .const_xdr_len()] = UsedNonPubStruct::spec_xdr(); impl UsedNonPubStruct { @@ -10529,7 +10713,7 @@ impl UsedNonPubStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedNonPubStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UsedNonPubStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -10896,6 +11080,12 @@ impl ::core::cmp::PartialEq for UsedNonPubError { true } } +impl UsedNonPubError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedNonPubError" + } +} pub static __SPEC_XDR_TYPE_USEDNONPUBERROR: [u8; UsedNonPubError::__SPEC_XDR_VIEW.const_xdr_len()] = UsedNonPubError::spec_xdr(); impl UsedNonPubError { @@ -10904,7 +11094,7 @@ impl UsedNonPubError { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedNonPubError"), + name: soroban_sdk::xdr::StringMView::new_str(UsedNonPubError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -11068,6 +11258,12 @@ impl ::core::cmp::PartialEq for UsedRecursiveRoot { self.val == other.val } } +impl UsedRecursiveRoot { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRecursiveRoot" + } +} pub static __SPEC_XDR_TYPE_USEDRECURSIVEROOT: [u8; UsedRecursiveRoot::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRecursiveRoot::spec_xdr(); impl UsedRecursiveRoot { @@ -11075,14 +11271,16 @@ impl UsedRecursiveRoot { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveRoot"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRecursiveRoot::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"val"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveNode"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -11475,6 +11673,12 @@ impl ::core::cmp::PartialEq for UsedRecursiveNode { } } } +impl UsedRecursiveNode { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRecursiveNode" + } +} pub static __SPEC_XDR_TYPE_USEDRECURSIVENODE: [u8; UsedRecursiveNode::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRecursiveNode::spec_xdr(); impl UsedRecursiveNode { @@ -11482,7 +11686,7 @@ impl UsedRecursiveNode { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveNode"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRecursiveNode::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -11491,7 +11695,9 @@ impl UsedRecursiveNode { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedLeaf"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -11504,7 +11710,9 @@ impl UsedRecursiveNode { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveLeaf"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -12034,6 +12242,12 @@ impl ::core::cmp::PartialEq for UsedRecursiveLeaf { self.val == other.val } } +impl UsedRecursiveLeaf { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRecursiveLeaf" + } +} pub static __SPEC_XDR_TYPE_USEDRECURSIVELEAF: [u8; UsedRecursiveLeaf::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRecursiveLeaf::spec_xdr(); impl UsedRecursiveLeaf { @@ -12041,7 +12255,7 @@ impl UsedRecursiveLeaf { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveLeaf"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRecursiveLeaf::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -12050,7 +12264,9 @@ impl UsedRecursiveLeaf { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveRoot"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12424,6 +12640,12 @@ impl ::core::cmp::PartialEq for UsedLeaf { self.val == other.val } } +impl UsedLeaf { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedLeaf" + } +} pub static __SPEC_XDR_TYPE_USEDLEAF: [u8; UsedLeaf::__SPEC_XDR_VIEW.const_xdr_len()] = UsedLeaf::spec_xdr(); impl UsedLeaf { @@ -12431,7 +12653,7 @@ impl UsedLeaf { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedLeaf"), + name: soroban_sdk::xdr::StringMView::new_str(UsedLeaf::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -12762,7 +12984,7 @@ const _: () = { } }; mod wasm_imported { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\xa2=N\xc1p\x95\x90\xb2SpEcV1\xe9R\xa7\xe8b\x99\xa2\xc3SpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1V]\x80\\~\x1a\x08/SpEcV1\xcf)\x97]S\xb2\xfd)f1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xa3$\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x05EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x06ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x08EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\xa2=N\xc1p\x95\x90\xb2SpEcV1\xe9R\xa7\xe8b\x99\xa2\xc3SpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1V]\x80\\~\x1a\x08/SpEcV1\xcf)\x97]S\xb2\xfd)f1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xd3)\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn fn_enum_a(env: soroban_sdk::Env) -> EnumA; fn fn_error_a(env: soroban_sdk::Env, input: u32) -> Result; @@ -13548,6 +13770,12 @@ mod wasm_imported { } } } + impl ContractContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ContractContext" + } + } pub static __SPEC_XDR_TYPE_CONTRACTCONTEXT: [u8; ContractContext::__SPEC_XDR_VIEW .const_xdr_len()] = ContractContext::spec_xdr(); impl ContractContext { @@ -13556,7 +13784,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str(ContractContext::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -14111,6 +14339,12 @@ mod wasm_imported { } } } + impl SubContractInvocation { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::SubContractInvocation" + } + } pub static __SPEC_XDR_TYPE_SUBCONTRACTINVOCATION: [u8; SubContractInvocation::__SPEC_XDR_VIEW .const_xdr_len()] = SubContractInvocation::spec_xdr(); impl SubContractInvocation { @@ -14119,14 +14353,18 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"SubContractInvocation"), + name: soroban_sdk::xdr::StringMView::new_str( + SubContractInvocation::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"context"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -14137,8 +14375,8 @@ mod wasm_imported { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"InvokerContractAuthEntry", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -14621,6 +14859,12 @@ mod wasm_imported { } } } + impl CreateContractHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTHOSTFNCONTEXT: [u8; CreateContractHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractHostFnContext::spec_xdr(); @@ -14630,14 +14874,18 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFnContext"), + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractHostFnContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -15144,6 +15392,12 @@ mod wasm_imported { } } } + impl CreateContractWithConstructorHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTWITHCONSTRUCTORHOSTFNCONTEXT: [u8; CreateContractWithConstructorHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractWithConstructorHostFnContext::spec_xdr(); @@ -15153,8 +15407,8 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractWithConstructorHostFnContext::spec_type_name(), ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { @@ -15171,7 +15425,9 @@ mod wasm_imported { name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -15754,6 +16010,12 @@ mod wasm_imported { } } } + impl StructA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructA" + } + } pub static __SPEC_XDR_TYPE_STRUCTA: [u8; StructA::__SPEC_XDR_VIEW.const_xdr_len()] = StructA::spec_xdr(); impl StructA { @@ -15762,7 +16024,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str(StructA::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -16215,6 +16477,12 @@ mod wasm_imported { } } } + impl StructB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructB" + } + } pub static __SPEC_XDR_TYPE_STRUCTB: [u8; StructB::__SPEC_XDR_VIEW.const_xdr_len()] = StructB::spec_xdr(); impl StructB { @@ -16223,7 +16491,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructB"), + name: soroban_sdk::xdr::StringMView::new_str(StructB::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -16676,6 +16944,12 @@ mod wasm_imported { } } } + impl StructC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructC" + } + } pub static __SPEC_XDR_TYPE_STRUCTC: [u8; StructC::__SPEC_XDR_VIEW.const_xdr_len()] = StructC::spec_xdr(); impl StructC { @@ -16684,7 +16958,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructC"), + name: soroban_sdk::xdr::StringMView::new_str(StructC::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -17144,6 +17418,12 @@ mod wasm_imported { } } } + impl StructTupleA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructTupleA" + } + } pub static __SPEC_XDR_TYPE_STRUCTTUPLEA: [u8; StructTupleA::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleA::spec_xdr(); impl StructTupleA { @@ -17152,7 +17432,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleA::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -17570,6 +17850,12 @@ mod wasm_imported { } } } + impl StructTupleB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructTupleB" + } + } pub static __SPEC_XDR_TYPE_STRUCTTUPLEB: [u8; StructTupleB::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleB::spec_xdr(); impl StructTupleB { @@ -17578,7 +17864,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleB"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleB::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -17997,6 +18283,12 @@ mod wasm_imported { } } } + impl StructTupleC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructTupleC" + } + } pub static __SPEC_XDR_TYPE_STRUCTTUPLEC: [u8; StructTupleC::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleC::spec_xdr(); impl StructTupleC { @@ -18005,7 +18297,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleC"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleC::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -18492,64 +18784,67 @@ mod wasm_imported { } } } + impl Context { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::Context" + } + } pub static __SPEC_XDR_TYPE_CONTEXT: [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] = Context::spec_xdr(); impl Context { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Context"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFn"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, - ), - ]), - }, - ), - ]), - }); + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str(Context::spec_type_name()), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] { Context::__SPEC_XDR_VIEW.const_to_xdr() } @@ -19208,6 +19503,12 @@ mod wasm_imported { } } } + impl ContractExecutable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ContractExecutable" + } + } pub static __SPEC_XDR_TYPE_CONTRACTEXECUTABLE: [u8; ContractExecutable::__SPEC_XDR_VIEW .const_xdr_len()] = ContractExecutable::spec_xdr(); impl ContractExecutable { @@ -19215,7 +19516,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str(ContractExecutable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -19770,65 +20071,70 @@ mod wasm_imported { } } } + impl InvokerContractAuthEntry { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry" + } + } pub static __SPEC_XDR_TYPE_INVOKERCONTRACTAUTHENTRY: [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] = InvokerContractAuthEntry::spec_xdr(); impl InvokerContractAuthEntry { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"InvokerContractAuthEntry"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"SubContractInvocation", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFn"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, - ), - ]), - }, - ), - ]), - }); + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str( + InvokerContractAuthEntry::spec_type_name(), + ), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] { InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_to_xdr() } @@ -20531,6 +20837,12 @@ mod wasm_imported { } } } + impl Executable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::Executable" + } + } pub static __SPEC_XDR_TYPE_EXECUTABLE: [u8; Executable::__SPEC_XDR_VIEW.const_xdr_len()] = Executable::spec_xdr(); impl Executable { @@ -20538,7 +20850,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Executable"), + name: soroban_sdk::xdr::StringMView::new_str(Executable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -21113,6 +21425,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl EnumA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumA" + } + } pub static __SPEC_XDR_TYPE_ENUMA: [u8; EnumA::__SPEC_XDR_VIEW.const_xdr_len()] = EnumA::spec_xdr(); impl EnumA { @@ -21120,7 +21438,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumA"), + name: soroban_sdk::xdr::StringMView::new_str(EnumA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -21662,6 +21980,12 @@ mod wasm_imported { } } } + impl EnumB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumB" + } + } pub static __SPEC_XDR_TYPE_ENUMB: [u8; EnumB::__SPEC_XDR_VIEW.const_xdr_len()] = EnumB::spec_xdr(); impl EnumB { @@ -21669,7 +21993,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumB"), + name: soroban_sdk::xdr::StringMView::new_str(EnumB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -22336,6 +22660,12 @@ mod wasm_imported { } } } + impl EnumC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumC" + } + } pub static __SPEC_XDR_TYPE_ENUMC: [u8; EnumC::__SPEC_XDR_VIEW.const_xdr_len()] = EnumC::spec_xdr(); impl EnumC { @@ -22343,7 +22673,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumC"), + name: soroban_sdk::xdr::StringMView::new_str(EnumC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -22358,7 +22688,9 @@ mod wasm_imported { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -22371,7 +22703,9 @@ mod wasm_imported { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -22946,6 +23280,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl EnumIntA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumIntA" + } + } pub static __SPEC_XDR_TYPE_ENUMINTA: [u8; EnumIntA::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntA::spec_xdr(); impl EnumIntA { @@ -22953,7 +23293,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntA"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -23335,6 +23675,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl EnumIntB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumIntB" + } + } pub static __SPEC_XDR_TYPE_ENUMINTB: [u8; EnumIntB::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntB::spec_xdr(); impl EnumIntB { @@ -23342,7 +23688,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntB"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -23724,6 +24070,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl EnumIntC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumIntC" + } + } pub static __SPEC_XDR_TYPE_ENUMINTC: [u8; EnumIntC::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntC::spec_xdr(); impl EnumIntC { @@ -23731,7 +24083,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntC"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -24113,6 +24465,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl ErrorA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ErrorA" + } + } pub static __SPEC_XDR_TYPE_ERRORA: [u8; ErrorA::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorA::spec_xdr(); impl ErrorA { @@ -24121,7 +24479,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorA"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -24325,6 +24683,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl ErrorB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ErrorB" + } + } pub static __SPEC_XDR_TYPE_ERRORB: [u8; ErrorB::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorB::spec_xdr(); impl ErrorB { @@ -24333,7 +24697,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorB"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -24537,6 +24901,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl ErrorC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ErrorC" + } + } pub static __SPEC_XDR_TYPE_ERRORC: [u8; ErrorC::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorC::spec_xdr(); impl ErrorC { @@ -24545,7 +24915,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorC"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -25257,6 +25627,12 @@ impl ::core::cmp::PartialEq for UnusedStruct { self.x == other.x } } +impl UnusedStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedStruct" + } +} pub static __SPEC_XDR_TYPE_UNUSEDSTRUCT: [u8; UnusedStruct::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedStruct::spec_xdr(); impl UnusedStruct { @@ -25264,7 +25640,7 @@ impl UnusedStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -25642,6 +26018,12 @@ impl ::core::cmp::PartialEq for UnusedEnum { } } } +impl UnusedEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedEnum" + } +} pub static __SPEC_XDR_TYPE_UNUSEDENUM: [u8; UnusedEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedEnum::spec_xdr(); impl UnusedEnum { @@ -25649,7 +26031,7 @@ impl UnusedEnum { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -26136,6 +26518,12 @@ impl ::core::cmp::PartialEq for UnusedIntEnum { __self_discr == __arg1_discr } } +impl UnusedIntEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedIntEnum" + } +} pub static __SPEC_XDR_TYPE_UNUSEDINTENUM: [u8; UnusedIntEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedIntEnum::spec_xdr(); impl UnusedIntEnum { @@ -26143,7 +26531,7 @@ impl UnusedIntEnum { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedIntEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedIntEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -26589,6 +26977,12 @@ impl ::core::cmp::PartialEq for UnusedPubError { true } } +impl UnusedPubError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedPubError" + } +} pub static __SPEC_XDR_TYPE_UNUSEDPUBERROR: [u8; UnusedPubError::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedPubError::spec_xdr(); impl UnusedPubError { @@ -26597,7 +26991,7 @@ impl UnusedPubError { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedPubError"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedPubError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -26761,6 +27155,12 @@ impl ::core::cmp::PartialEq for UnusedNonContractFnParam { self.x == other.x } } +impl UnusedNonContractFnParam { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedNonContractFnParam" + } +} pub static __SPEC_XDR_TYPE_UNUSEDNONCONTRACTFNPARAM: [u8; UnusedNonContractFnParam::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedNonContractFnParam::spec_xdr(); @@ -26769,7 +27169,7 @@ impl UnusedNonContractFnParam { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedNonContractFnParam"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedNonContractFnParam::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -27149,6 +27549,12 @@ impl ::core::cmp::PartialEq for UnusedNonContractFnReturn { self.x == other.x } } +impl UnusedNonContractFnReturn { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedNonContractFnReturn" + } +} pub static __SPEC_XDR_TYPE_UNUSEDNONCONTRACTFNRETURN: [u8; UnusedNonContractFnReturn::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedNonContractFnReturn::spec_xdr(); @@ -27157,7 +27563,9 @@ impl UnusedNonContractFnReturn { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedNonContractFnReturn"), + name: soroban_sdk::xdr::StringMView::new_str( + UnusedNonContractFnReturn::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -27532,6 +27940,12 @@ impl ::core::cmp::PartialEq for UnusedNonPubStruct { self.x == other.x } } +impl UnusedNonPubStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedNonPubStruct" + } +} pub static __SPEC_XDR_TYPE_UNUSEDNONPUBSTRUCT: [u8; UnusedNonPubStruct::__SPEC_XDR_VIEW .const_xdr_len()] = UnusedNonPubStruct::spec_xdr(); impl UnusedNonPubStruct { @@ -27539,7 +27953,7 @@ impl UnusedNonPubStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedNonPubStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedNonPubStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -27906,6 +28320,12 @@ impl ::core::cmp::PartialEq for UnusedNonPubError { true } } +impl UnusedNonPubError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedNonPubError" + } +} pub static __SPEC_XDR_TYPE_UNUSEDNONPUBERROR: [u8; UnusedNonPubError::__SPEC_XDR_VIEW .const_xdr_len()] = UnusedNonPubError::spec_xdr(); impl UnusedNonPubError { @@ -27914,7 +28334,7 @@ impl UnusedNonPubError { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedNonPubError"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedNonPubError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -28161,7 +28581,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"s"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedParamStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28170,7 +28592,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"ie"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedParamIntEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28203,7 +28627,7 @@ impl Contract { inputs: soroban_sdk::xdr::VecMView::new(&[]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedReturnEnum"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -28235,7 +28659,9 @@ impl Contract { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::U32, error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28370,7 +28796,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedVecElement"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28410,8 +28838,8 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UsedVecElementNested", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -28450,12 +28878,16 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeMapView { key_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedMapKey"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedMapVal"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28494,7 +28926,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeOptionView { value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedOptionElement"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28532,12 +28966,16 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeResultView { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedResultOk"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28573,7 +29011,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"r"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveRoot"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28612,7 +29052,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Context"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28651,7 +29093,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"i"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"InvokerContractAuthEntry"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28688,7 +29132,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"e"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Executable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28859,7 +29305,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"s"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructC"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28896,7 +29344,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"s"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28932,7 +29382,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"s"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedNonPubStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -28970,7 +29422,9 @@ impl Contract { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::U32, error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedNonPubError"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -29007,8 +29461,8 @@ impl Contract { value_types: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UsedTupleElement", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -29051,8 +29505,8 @@ impl Contract { value_types: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UsedTupleReturnElement", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -32568,7 +33022,7 @@ mod test { use soroban_sdk::xdr::ScSpecEntry; use std::collections::HashSet; use std::vec::Vec; - const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01^\x10`\x02~~\x01~`\x01~\x01~`\x03~~~\x01~`\x04~~~~\x01~`\x00\x00`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x01~\x00`\x02\x7f\x7f\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x02\x7f~\x00`\x05~\x7f\x7f\x7f\x7f\x00`\x03\x7f\x7f\x7f\x00`\x01\x7f\x01~\x02I\x0c\x01x\x011\x00\x00\x01v\x013\x00\x01\x01i\x012\x00\x01\x01v\x01h\x00\x02\x01v\x01g\x00\x00\x01m\x01a\x00\x03\x01b\x01m\x00\x02\x01b\x01j\x00\x00\x01v\x011\x00\x00\x01b\x018\x00\x01\x01x\x015\x00\x01\x01m\x019\x00\x02\x0365\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x05\x06\x00\x07\x05\x05\x05\x05\x05\x05\x01\x08\x01\x05\x01\t\n\x0b\x0c\x01\r\x0c\x01\x01\x01\x05\x01\x01\x01\x00\x01\x05\x05\x0e\x0f\x01\x05\x01\x01\x01\x04\x04\x04\x05\x01p\x01\x0c\x0c\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xd2\x88\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x07\x86\x04\x1f\x06memory\x02\x00\x11publish_data_type\x00\x17\x13publish_nested_data\x00\x1b\x14publish_nested_topic\x00\x1c\x11publish_ref_event\x00\x1e\x0epublish_simple\x00\x1f\x12publish_topic_type\x00 \x11with_assert_error\x00!\x12with_auth_contexts\x00#\nwith_error\x00$\x0fwith_executable\x00%\x11with_invoker_auth\x00*\x0fwith_lib_struct\x00-\x08with_map\x00.\x0cwith_non_pub\x00/\x12with_non_pub_error\x000\x0bwith_option\x001\x10with_panic_error\x002\x14with_panic_raw_error\x003\nwith_param\x004\x0ewith_recursion\x005\x0bwith_result\x006\x0bwith_return\x007\nwith_tuple\x00:\x11with_tuple_return\x00;\x08with_vec\x00<\x0fwith_vec_nested\x00=\x12with_wasm_imported\x00>\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\x11\x01\x00A\x01\x0b\x0b\x0f\x11\x13\x12\x0e\r\x14\x15\x16\x0c\x10\n\xac05\x0c\x00A\x00-\x00\x9c\x80\xc0\x80\x00\x1a\x0b\x16\x00A\x00-\x00\xfe\x80\xc0\x80\x00\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x8c\x81\xc0\x80\x00\x1a\x0bJ\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a\x0b6\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xec\x82\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xfa\x82\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xb2\x83\xc0\x80\x00\x1a\x0b\x86\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x00A\x84\x80\x80\x80\x006\x02\x04 \x00(\x02\x04\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x0b\x02\x00\x0bk\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xa8\x88\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xf8\x83\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x86\x84\xc0\x80\x00\x1a\x0b\xae\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\xb0\x86\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xa8\x81\xc0\x80\x00\x1aA\x00-\x00\x88\x83\xc0\x80\x00\x1aA\xf8\x86\xc0\x80\x00A\x19\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x18 \x00B\x84\x80\x80\x80\x107\x03\x10 \x00A\x88\x86\xc0\x80\x00A\x02 \x00A\x10jA\x02\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A j$\x80\x80\x80\x80\x00B\x02\x0bE\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00 \x01\x10\xb8\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01G\r\x00\x00\x0b \x02)\x03\x08!\x03 \x02A\x10j$\x80\x80\x80\x80\x00 \x03\x0b\x92\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00A\x00!\x03\x03~\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\x10\xb9\x80\x80\x80\x00!\x01 \x02A j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x0b\xc5\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xdd\x84\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xfc\x81\xc0\x80\x00\x1aA\x00-\x00\x8a\x82\xc0\x80\x00\x1aA\x00-\x00\xce\x83\xc0\x80\x00\x1aA\xab\x87\xc0\x80\x00A\x1b\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\xbd\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xd0\x82\xc0\x80\x00\x1aA\x00-\x00\xde\x82\xc0\x80\x00\x1aA\x00-\x00\xdc\x83\xc0\x80\x00\x1aA\xc6\x87\xc0\x80\x00A\x1c\x10\x98\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x01A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x00\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x06\x00B\x8b\xc8\x01\x0b\xc7\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00 \x00A\x85\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1a \x00A\x86\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xb6\x81\xc0\x80\x00\x1aA\xe4\x86\xc0\x80\x00A\x14\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xb0\x0c7\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xfc\x85\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x7f\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xa8\x86\xc0\x80\x00A\x08\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\xc4\x86\xc0\x80\x00A\x11\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b}\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x98\x82\xc0\x80\x00\x1aA\x00-\x00\x96\x83\xc0\x80\x00\x1aA\x91\x87\xc0\x80\x00A\x1a\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0bJ\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01qE\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xc2\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b\x0b\x00 \x00\x10\x8a\x80\x80\x80\x00\x1a\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x87\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x13\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\xa0\x05\x0b\xc0\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xb6\x88\xc0\x80\x00\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x08 \x01 \x007\x03\x00 \x01 \x02B \x88>\x02\x0c \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x00A\xc4\x84\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x01\x02\x00\x04\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x03\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01A\x10j \x01)\x03\x18\x10\xa9\x80\x80\x80\x00 \x01(\x02\x10A\x01G\r\x01\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x01\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x86\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\xc0\x80\x80\x80\x00\x00\x0bB\x01\x01~B\x01!\x02\x02@ \x01B\xff\x01\x83B\xc8\x00R\r\x00 \x01\x10\x89\x80\x80\x80\x00B\x80\x80\x80\x80p\x83B\x80\x80\x80\x80\x80\x04R\r\x00 \x00 \x017\x03\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\xd3\x07\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\xc0\x00k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x01A\x84\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x10 \x01 \x007\x03\x08 \x01 \x02B \x88>\x02\x14 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03 \"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\xe0\x85\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x00\x01\x02\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01)\x030!\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xe8\x88\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x02 \x011\x00 B\xcd\x00R\r\x02\x02@ \x01-\x00(\"\x03A\x0eF\r\x00 \x03A\xca\x00G\r\x03\x0b \x011\x008B\xcb\x00R\r\x02\x0c\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xc4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01A\x18j \x01)\x030\x10\xac\x80\x80\x80\x00 \x01(\x02\x18\r\x01 \x01A\x18j \x01)\x038\x10\xa9\x80\x80\x80\x00 \x01(\x02\x18A\x01G\r\x02\x0c\x01\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x89\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x00 \x01A0j \x01)\x03 \x10\xac\x80\x80\x80\x00 \x01(\x020\r\x00 \x01A0j \x01)\x03(\x10\xa9\x80\x80\x80\x00 \x01(\x020A\x01G\r\x01\x0b\x00\x0b \x01A\xc0\x00j$\x80\x80\x80\x80\x00B\x02\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x85\x80\x80\x80\x00\x1a\x0b\xb3\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@\x02@ \x01B\xff\x01\x83B\xcb\x00Q\r\x00 \x00B\x017\x03\x00\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x03 \x02A\x006\x02\x08 \x02 \x017\x03\x00 \x02 \x03B \x88>\x02\x0c \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00\x02@ \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00\x02@ \x02)\x03\x18\"\x01\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@ \x01A\x84\x89\xc0\x80\x00A\x01\x10\xa7\x80\x80\x80\x00B\xff\xff\xff\xff\x0fV\r\x00 \x02(\x02\x08 \x02(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00 \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00 \x02A\x10j \x02)\x03\x18\x10\xa9\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x01 \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0c\x02\x0b \x00B\x017\x03\x00\x0c\x01\x0b \x00B\x017\x03\x00\x0b \x02A j$\x80\x80\x80\x80\x00\x0b\x9e\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x00 \x01(\x02\x00\x1aA\x00!\x02A\x00-\x00\xfc\x89\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\xcb\x00R\r\x00 \x011\x00\x08B\xcd\x00Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bA\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x88\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a \x01A\x89\x80\x80\x80\x006\x02\x08 \x01(\x02\x08\x1a\x02@ \x00B\xff\x01\x83B\xcc\x00Q\r\x00\x00\x0bB\x02\x0bg\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xe2\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x08B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x12\x00A\x00-\x00\xb8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\x10\x0br\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xc4\x81\xc0\x80\x00\x1a\x02@ \x00B\x02Q\r\x00 \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xf8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bI\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xb4\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b@\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bB\x83\x80\x80\x80\xf0\x00\x10\xa2\x80\x80\x80\x00\x00\x0b\x8a\x02\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03A\x00-\x00\xa6\x82\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x02@\x03@ \x03A\x10F\r\x01 \x02A\x08j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x84\xc0\x80\x00A\x02 \x02A\x08jA\x02\x10\xab\x80\x80\x80\x00 \x021\x00\x08B\x04R\r\x00 \x02B\x027\x03\x18 \x02)\x03\x10\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x02A\x18jA\x01\x10\xab\x80\x80\x80\x00\x02@ \x02)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\x07F\r\x00 \x03A\xc1\x00G\r\x01 \x00\x10\x82\x80\x80\x80\x00\x1a\x0bA\x00-\x00\xf0\x80\xc0\x80\x00\x1a \x01B\xff\x01\x83B\x04R\r\x00 \x01B \x88\xa7A}jA}K\r\x01\x0b\x00\x0b \x02A j$\x80\x80\x80\x80\x00B\x02\x0b\x90\x04\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A0k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x01A\x81\x80\x80\x80\x006\x02 \x01(\x02 \x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x18 \x01 \x007\x03\x10 \x01 \x02B \x88>\x02\x1c \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03(\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\x98\x85\xc0\x80\x00A\x02\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x03\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\xcb\x00Q\r\x01\x0c\x02\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\x04R\r\x01\x0b \x01A0j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bZ\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x94\x84\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x08A\xf8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x00A\xf8\x85\xc0\x80\x00A\x01\x10\xb8\x80\x80\x80\x00\x02@ \x00(\x02\x00A\x01G\r\x00\x00\x0b \x00)\x03\x08!\x01 \x00B\x84\x80\x80\x80\x107\x03\x08 \x00 \x017\x03\x00 \x00\x10\xb9\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0b\xdb\x01\x02\x01~\x04\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03 \x02!\x04 \x01!\x05\x03@\x02@ \x04\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x06\x02@ \x05-\x00\x00\"\x07A\xdf\x00F\r\x00\x02@\x02@ \x07APjA\xff\x01qA\nI\r\x00 \x07A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x07A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x07AEj!\x06\x0c\x02\x0b \x07ARj!\x06\x0c\x01\x0b \x07AKj!\x06\x0b \x03B\x06\x86 \x06\xadB\xff\x01\x83\x84!\x03 \x04A\x7fj!\x04 \x05A\x01j!\x05\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x87\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x17\x00 \x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x84\x80\x80\x80\x00\x0b\xc4\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\x9a\x81\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00\x02@\x03@ \x02A\x10F\r\x01 \x01A\x08j \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x83\x80\x80\x80\x00\x1a \x01B\x027\x03\x18 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x18jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\x04R\r\x00 \x011\x00\x10B\x04Q\r\x01\x0b\x00\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xa4\x83\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x18A\xa8\x84\xc0\x80\x00A\x01 \x00A\x18jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x10 \x00 \x017\x03\x08 \x00A\x08j\x10\xb9\x80\x80\x80\x00!\x01 \x00A j$\x80\x80\x80\x80\x00 \x01\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8a\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8b\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x8d\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\xc0\x83\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\x04R\r\x00 \x01)\x03\x08B\xfe\x01\x83P\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x03\x00\x00\x0b\t\x00\x10\xbf\x80\x80\x80\x00\x00\x0b\x0b\xaa\n\x01\x00A\x80\x80\xc0\x00\x0b\xa0\nSpEcV1Hh\xdc\xaaa\x8d\xf7\rSpEcV1\xe7\xcf\x9b1n\x15\x13\xfeSpEcV1\xe2\x01y\xc9\x9a\xf8\xedtSpEcV1v1\x0eP\xa9C\xc7*SpEcV1\xa9<\xd8+\xb7\xa7\r\x17SpEcV1X\x03\xf6t\xc7\xd0\x01\"SpEcV1\'\xbd_A\r\x9a\x89\x02SpEcV1p\x8c\x0fN!\x082\xd8SpEcV1\xc2\xf4N\xbf\xebqvpSpEcV1K\xdf\'8m/\xe8\x1dSpEcV1@\xb9LO\xf9\xd1\xe8\xe2SpEcV1\xde\x1dMa\x01\xec\xb0ASpEcV1\xc2 \x1b\xdc\xc8gxZSpEcV1[Q+\xe9\xde\xd5\xf2>SpEcV1\xb3/\x97\xd5\x06\xbd3BSpEcV1?\xd9\xb3q\xdep>\xf3SpEcV1*\\\x9c\xf4e\xaa\x1e]SpEcV1u2\x0b\x97\xae\xcd\x86\xbfSpEcV1\x0c\xf0\xf6w\xfd\x1a\x1b\x94SpEcV1\'\xf2\xa2\xb9\xd0)\xc0uSpEcV1\xf5\xd4\x9b\xa3\xccI\x13\xf7SpEcV1\x84\x08Y\xae\xa0\xf128SpEcV1\r\xb76\xae\x93D\xef\x1aSpEcV1\x8b\x89\x1f#\xbd\x157\xf4SpEcV16\x83?\xf0\xcdW\xb1/SpEcV1\x94\xc7w/_\xebXcSpEcV1\xb4\xabN]\xe3\xeaA\xd6SpEcV1\x13?J\x12d\xden|SpEcV1q\xa3z;6\xa6R\x01SpEcV1q^\xe2&\x9di\x9d\x0eSpEcV1Y\xa66\xb3\xecxE\x13SpEcV1\xcf@%X\xde+J@SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1 \xfbl\x04B\x82\xc0\xb4SpEcV1\xe3\xf2\x9b5%a\xfb\xd6SpEcV1\xe6Q\xd5T\x13\x8a\xb7lSpEcV1[\xf4R\xdf\xdd\xb4\xb0\xbcSpEcV1\xaaX8\xde\xef\xbb6%SpEcV1k\xe4zxB\xd1+\x02val\x00\x00\x00\"\x02\x10\x00\x03\x00\x00\x00StellarAssetAccount\x00\x80\x04\x10\x00\x04\x00\x00\x000\x02\x10\x00\x0c\x00\x00\x00<\x02\x10\x00\x07\x00\x00\x00anested\x00\\\x02\x10\x00\x01\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00datat\x02\x10\x00\x04\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\x80\x02\x10\x00\x0c\x00\x00\x00\x8c\x02\x10\x00\t\x00\x00\x00ContractCreateContractHostFnCreateContractWithCtorHostFn\xa8\x02\x10\x00\x08\x00\x00\x00\xb0\x02\x10\x00\x14\x00\x00\x00\xc4\x02\x10\x00\x1c\x00\x00\x00A\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00xy\x00\x00\x04\x03\x10\x00\x01\x00\x00\x00\x05\x03\x10\x00\x01\x00\x00\x00inner\x00\x00\x00\x18\x03\x10\x00\x05\x00\x00\x00transfercoordsamount6\x03\x10\x00\x06\x00\x00\x00used_event_simplepayloadU\x03\x10\x00\x07\x00\x00\x00used_event_with_refsused_event_with_data_typeused_event_with_topic_typeused_event_with_nested_dataused_event_with_nested_topicSpEcV1\xb6\xb1Hy\xda\xca\xaf\xccSpEcV1\x9e)H\x8e\xf0\x01{{SpEcV1ULqD\xd3\xfa:\x1fSpEcV1\x15\xe5\x1a,\xc0\xc7\xef\xd4SpEcV1s\x94\x0c\x1926\x1d\x90SpEcV1\xa3J\xcf\xf7D\x93\x0bBSpEcV1L|{\r\xf4\xf2\x1a\xa8SpEcV1\xf1\xf9\x90\x07E*e\xfdargscontractfn_name\x00\x00\x00R\x04\x10\x00\x04\x00\x00\x00V\x04\x10\x00\x08\x00\x00\x00^\x04\x10\x00\x07\x00\x00\x00Wasm\x80\x04\x10\x00\x04\x00\x00\x00contextsub_invocations\x00\x00\x8c\x04\x10\x00\x07\x00\x00\x00\x93\x04\x10\x00\x0f\x00\x00\x00executablesalt\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00constructor_args\xd4\x04\x10\x00\x10\x00\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00SpEcV1\xa3\x16\n\x8f\xc9\x92\xd2\x11f1f2\x00\x00\n\x05\x10\x00\x02\x00\x00\x00\x0c\x05\x10\x00\x02\x00\x00\x00\x00\x87`\x0econtractspecv0\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08UsedLeaf\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_map\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01m\x00\x00\x00\x00\x00\x03\xec\x00\x00\x07\xd0\x00\x00\x00\nUsedMapKey\x00\x00\x00\x00\x07\xd0\x00\x00\x00\nUsedMapVal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_vec\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x0eUsedVecElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nUnusedEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nUsedMapKey\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02K1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02K2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nUsedMapVal\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\rUsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_param\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x0fUsedParamStruct\x00\x00\x00\x00\x00\x00\x00\x00\x02ie\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x10UsedParamIntEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_tuple\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01t\x00\x00\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00\x10UsedTupleElement\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bUnusedEvent\x00\x00\x00\x00\x01\x00\x00\x00\x0cunused_event\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cUnusedStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cUsedResultOk\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_option\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01o\x00\x00\x00\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x11UsedOptionElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_result\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x07\xd0\x00\x00\x00\x0cUsedResultOk\x00\x00\x07\xd0\x00\x00\x00\rUsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_return\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0eUsedReturnEnum\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rUnusedIntEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02U1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02U2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rUsedErrorEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08NotFound\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07Invalid\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cwith_non_pub\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x10UsedNonPubStruct\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eUnusedPubError\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Nope\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eUsedReturnEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eUsedVecElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedNonPubError\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Fail\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedParamStruct\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12UsedNestedInStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedRefDataType\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x10UsedRefDataInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0epublish_simple\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ewith_recursion\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01r\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x11UsedRecursiveRoot\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedEventSimple\x00\x00\x00\x00\x01\x00\x00\x00\x11used_event_simple\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedNonPubStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedParamIntEnum\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01X\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01Y\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedRefDataInner\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedRefTopicType\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04Send\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Recv\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedTupleElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_executable\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01e\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_lib_struct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x07StructC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_vec_nested\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x14UsedVecElementNested\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UnusedNonPubError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventDataType\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01y\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedOptionElement\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedRecursiveLeaf\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x11UsedRecursiveRoot\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedRecursiveNode\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x08UsedLeaf\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x11UsedRecursiveLeaf\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedRecursiveRoot\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x07\xd0\x00\x00\x00\x11UsedRecursiveNode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10with_panic_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventWithRefs\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x14used_event_with_refs\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00\x10UsedRefTopicType\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\x0fUsedRefDataType\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UnusedNonPubStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedEventDataInner\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedEventDataOuter\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12UsedEventDataInner\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedEventTopicType\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08Transfer\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Mint\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedNestedInStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedPanicErrorEnum\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Boom\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_data_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_ref_event\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_assert_error\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02ok\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_invoker_auth\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01i\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_tuple_return\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00\x16UsedTupleReturnElement\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13UsedAssertErrorEnum\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13UsedEventTopicInner\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13UsedEventTopicOuter\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x13UsedEventTopicInner\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13UsedVecInnerElement\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12publish_topic_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_auth_contexts\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x07Context\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_non_pub_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x0fUsedNonPubError\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_wasm_imported\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14UsedVecElementNested\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x13UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\tvec_inner\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x16UsedVecInnerVecElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13publish_nested_data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14publish_nested_topic\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14with_panic_raw_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15UsedEventWithDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x19used_event_with_data_type\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\x11UsedEventDataType\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedTupleReturnElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedVecInnerVecElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedEventWithTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1aused_event_with_topic_type\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00\x12UsedEventTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17UsedEventWithNestedData\x00\x00\x00\x00\x01\x00\x00\x00\x1bused_event_with_nested_data\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\x12UsedEventDataOuter\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UnusedNonContractFnParam\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UsedEventWithNestedTopic\x00\x00\x00\x01\x00\x00\x00\x1cused_event_with_nested_topic\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04info\x00\x00\x07\xd0\x00\x00\x00\x13UsedEventTopicOuter\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19UnusedNonContractFnReturn\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01^\x10`\x02~~\x01~`\x01~\x01~`\x03~~~\x01~`\x04~~~~\x01~`\x00\x00`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x01~\x00`\x02\x7f\x7f\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x02\x7f~\x00`\x05~\x7f\x7f\x7f\x7f\x00`\x03\x7f\x7f\x7f\x00`\x01\x7f\x01~\x02I\x0c\x01x\x011\x00\x00\x01v\x013\x00\x01\x01i\x012\x00\x01\x01v\x01h\x00\x02\x01v\x01g\x00\x00\x01m\x01a\x00\x03\x01b\x01m\x00\x02\x01b\x01j\x00\x00\x01v\x011\x00\x00\x01b\x018\x00\x01\x01x\x015\x00\x01\x01m\x019\x00\x02\x0365\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x05\x06\x00\x07\x05\x05\x05\x05\x05\x05\x01\x08\x01\x05\x01\t\n\x0b\x0c\x01\r\x0c\x01\x01\x01\x05\x01\x01\x01\x00\x01\x05\x05\x0e\x0f\x01\x05\x01\x01\x01\x04\x04\x04\x05\x01p\x01\x0c\x0c\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xd2\x88\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x07\x86\x04\x1f\x06memory\x02\x00\x11publish_data_type\x00\x17\x13publish_nested_data\x00\x1b\x14publish_nested_topic\x00\x1c\x11publish_ref_event\x00\x1e\x0epublish_simple\x00\x1f\x12publish_topic_type\x00 \x11with_assert_error\x00!\x12with_auth_contexts\x00#\nwith_error\x00$\x0fwith_executable\x00%\x11with_invoker_auth\x00*\x0fwith_lib_struct\x00-\x08with_map\x00.\x0cwith_non_pub\x00/\x12with_non_pub_error\x000\x0bwith_option\x001\x10with_panic_error\x002\x14with_panic_raw_error\x003\nwith_param\x004\x0ewith_recursion\x005\x0bwith_result\x006\x0bwith_return\x007\nwith_tuple\x00:\x11with_tuple_return\x00;\x08with_vec\x00<\x0fwith_vec_nested\x00=\x12with_wasm_imported\x00>\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\x11\x01\x00A\x01\x0b\x0b\x0f\x11\x13\x12\x0e\r\x14\x15\x16\x0c\x10\n\xac05\x0c\x00A\x00-\x00\x9c\x80\xc0\x80\x00\x1a\x0b\x16\x00A\x00-\x00\xfe\x80\xc0\x80\x00\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x8c\x81\xc0\x80\x00\x1a\x0bJ\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a\x0b6\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xec\x82\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xfa\x82\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xb2\x83\xc0\x80\x00\x1a\x0b\x86\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x00A\x84\x80\x80\x80\x006\x02\x04 \x00(\x02\x04\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x0b\x02\x00\x0bk\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xa8\x88\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xf8\x83\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x86\x84\xc0\x80\x00\x1a\x0b\xae\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\xb0\x86\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xa8\x81\xc0\x80\x00\x1aA\x00-\x00\x88\x83\xc0\x80\x00\x1aA\xf8\x86\xc0\x80\x00A\x19\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x18 \x00B\x84\x80\x80\x80\x107\x03\x10 \x00A\x88\x86\xc0\x80\x00A\x02 \x00A\x10jA\x02\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A j$\x80\x80\x80\x80\x00B\x02\x0bE\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00 \x01\x10\xb8\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01G\r\x00\x00\x0b \x02)\x03\x08!\x03 \x02A\x10j$\x80\x80\x80\x80\x00 \x03\x0b\x92\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00A\x00!\x03\x03~\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\x10\xb9\x80\x80\x80\x00!\x01 \x02A j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x0b\xc5\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xdd\x84\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xfc\x81\xc0\x80\x00\x1aA\x00-\x00\x8a\x82\xc0\x80\x00\x1aA\x00-\x00\xce\x83\xc0\x80\x00\x1aA\xab\x87\xc0\x80\x00A\x1b\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\xbd\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xd0\x82\xc0\x80\x00\x1aA\x00-\x00\xde\x82\xc0\x80\x00\x1aA\x00-\x00\xdc\x83\xc0\x80\x00\x1aA\xc6\x87\xc0\x80\x00A\x1c\x10\x98\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x01A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x00\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x06\x00B\x8b\xc8\x01\x0b\xc7\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00 \x00A\x85\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1a \x00A\x86\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xb6\x81\xc0\x80\x00\x1aA\xe4\x86\xc0\x80\x00A\x14\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xb0\x0c7\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xfc\x85\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x7f\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xa8\x86\xc0\x80\x00A\x08\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\xc4\x86\xc0\x80\x00A\x11\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b}\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x98\x82\xc0\x80\x00\x1aA\x00-\x00\x96\x83\xc0\x80\x00\x1aA\x91\x87\xc0\x80\x00A\x1a\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0bJ\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01qE\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xc2\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b\x0b\x00 \x00\x10\x8a\x80\x80\x80\x00\x1a\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x87\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x13\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\xa0\x05\x0b\xc0\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xb6\x88\xc0\x80\x00\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x08 \x01 \x007\x03\x00 \x01 \x02B \x88>\x02\x0c \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x00A\xc4\x84\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x01\x02\x00\x04\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x03\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01A\x10j \x01)\x03\x18\x10\xa9\x80\x80\x80\x00 \x01(\x02\x10A\x01G\r\x01\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x01\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x86\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\xc0\x80\x80\x80\x00\x00\x0bB\x01\x01~B\x01!\x02\x02@ \x01B\xff\x01\x83B\xc8\x00R\r\x00 \x01\x10\x89\x80\x80\x80\x00B\x80\x80\x80\x80p\x83B\x80\x80\x80\x80\x80\x04R\r\x00 \x00 \x017\x03\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\xd3\x07\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\xc0\x00k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x01A\x84\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x10 \x01 \x007\x03\x08 \x01 \x02B \x88>\x02\x14 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03 \"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\xe0\x85\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x00\x01\x02\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01)\x030!\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xe8\x88\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x02 \x011\x00 B\xcd\x00R\r\x02\x02@ \x01-\x00(\"\x03A\x0eF\r\x00 \x03A\xca\x00G\r\x03\x0b \x011\x008B\xcb\x00R\r\x02\x0c\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xc4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01A\x18j \x01)\x030\x10\xac\x80\x80\x80\x00 \x01(\x02\x18\r\x01 \x01A\x18j \x01)\x038\x10\xa9\x80\x80\x80\x00 \x01(\x02\x18A\x01G\r\x02\x0c\x01\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x89\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x00 \x01A0j \x01)\x03 \x10\xac\x80\x80\x80\x00 \x01(\x020\r\x00 \x01A0j \x01)\x03(\x10\xa9\x80\x80\x80\x00 \x01(\x020A\x01G\r\x01\x0b\x00\x0b \x01A\xc0\x00j$\x80\x80\x80\x80\x00B\x02\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x85\x80\x80\x80\x00\x1a\x0b\xb3\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@\x02@ \x01B\xff\x01\x83B\xcb\x00Q\r\x00 \x00B\x017\x03\x00\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x03 \x02A\x006\x02\x08 \x02 \x017\x03\x00 \x02 \x03B \x88>\x02\x0c \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00\x02@ \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00\x02@ \x02)\x03\x18\"\x01\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@ \x01A\x84\x89\xc0\x80\x00A\x01\x10\xa7\x80\x80\x80\x00B\xff\xff\xff\xff\x0fV\r\x00 \x02(\x02\x08 \x02(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00 \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00 \x02A\x10j \x02)\x03\x18\x10\xa9\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x01 \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0c\x02\x0b \x00B\x017\x03\x00\x0c\x01\x0b \x00B\x017\x03\x00\x0b \x02A j$\x80\x80\x80\x80\x00\x0b\x9e\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x00 \x01(\x02\x00\x1aA\x00!\x02A\x00-\x00\xfc\x89\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\xcb\x00R\r\x00 \x011\x00\x08B\xcd\x00Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bA\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x88\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a \x01A\x89\x80\x80\x80\x006\x02\x08 \x01(\x02\x08\x1a\x02@ \x00B\xff\x01\x83B\xcc\x00Q\r\x00\x00\x0bB\x02\x0bg\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xe2\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x08B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x12\x00A\x00-\x00\xb8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\x10\x0br\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xc4\x81\xc0\x80\x00\x1a\x02@ \x00B\x02Q\r\x00 \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xf8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bI\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xb4\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b@\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bB\x83\x80\x80\x80\xf0\x00\x10\xa2\x80\x80\x80\x00\x00\x0b\x8a\x02\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03A\x00-\x00\xa6\x82\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x02@\x03@ \x03A\x10F\r\x01 \x02A\x08j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x84\xc0\x80\x00A\x02 \x02A\x08jA\x02\x10\xab\x80\x80\x80\x00 \x021\x00\x08B\x04R\r\x00 \x02B\x027\x03\x18 \x02)\x03\x10\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x02A\x18jA\x01\x10\xab\x80\x80\x80\x00\x02@ \x02)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\x07F\r\x00 \x03A\xc1\x00G\r\x01 \x00\x10\x82\x80\x80\x80\x00\x1a\x0bA\x00-\x00\xf0\x80\xc0\x80\x00\x1a \x01B\xff\x01\x83B\x04R\r\x00 \x01B \x88\xa7A}jA}K\r\x01\x0b\x00\x0b \x02A j$\x80\x80\x80\x80\x00B\x02\x0b\x90\x04\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A0k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x01A\x81\x80\x80\x80\x006\x02 \x01(\x02 \x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x18 \x01 \x007\x03\x10 \x01 \x02B \x88>\x02\x1c \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03(\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\x98\x85\xc0\x80\x00A\x02\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x03\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\xcb\x00Q\r\x01\x0c\x02\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\x04R\r\x01\x0b \x01A0j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bZ\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x94\x84\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x08A\xf8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x00A\xf8\x85\xc0\x80\x00A\x01\x10\xb8\x80\x80\x80\x00\x02@ \x00(\x02\x00A\x01G\r\x00\x00\x0b \x00)\x03\x08!\x01 \x00B\x84\x80\x80\x80\x107\x03\x08 \x00 \x017\x03\x00 \x00\x10\xb9\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0b\xdb\x01\x02\x01~\x04\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03 \x02!\x04 \x01!\x05\x03@\x02@ \x04\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x06\x02@ \x05-\x00\x00\"\x07A\xdf\x00F\r\x00\x02@\x02@ \x07APjA\xff\x01qA\nI\r\x00 \x07A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x07A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x07AEj!\x06\x0c\x02\x0b \x07ARj!\x06\x0c\x01\x0b \x07AKj!\x06\x0b \x03B\x06\x86 \x06\xadB\xff\x01\x83\x84!\x03 \x04A\x7fj!\x04 \x05A\x01j!\x05\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x87\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x17\x00 \x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x84\x80\x80\x80\x00\x0b\xc4\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\x9a\x81\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00\x02@\x03@ \x02A\x10F\r\x01 \x01A\x08j \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x83\x80\x80\x80\x00\x1a \x01B\x027\x03\x18 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x18jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\x04R\r\x00 \x011\x00\x10B\x04Q\r\x01\x0b\x00\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xa4\x83\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x18A\xa8\x84\xc0\x80\x00A\x01 \x00A\x18jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x10 \x00 \x017\x03\x08 \x00A\x08j\x10\xb9\x80\x80\x80\x00!\x01 \x00A j$\x80\x80\x80\x80\x00 \x01\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8a\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8b\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x8d\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\xc0\x83\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\x04R\r\x00 \x01)\x03\x08B\xfe\x01\x83P\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x03\x00\x00\x0b\t\x00\x10\xbf\x80\x80\x80\x00\x00\x0b\x0b\xaa\n\x01\x00A\x80\x80\xc0\x00\x0b\xa0\nSpEcV1Hh\xdc\xaaa\x8d\xf7\rSpEcV1\xe7\xcf\x9b1n\x15\x13\xfeSpEcV1\xe2\x01y\xc9\x9a\xf8\xedtSpEcV1v1\x0eP\xa9C\xc7*SpEcV1\xa9<\xd8+\xb7\xa7\r\x17SpEcV1X\x03\xf6t\xc7\xd0\x01\"SpEcV1\'\xbd_A\r\x9a\x89\x02SpEcV1p\x8c\x0fN!\x082\xd8SpEcV1\xc2\xf4N\xbf\xebqvpSpEcV1K\xdf\'8m/\xe8\x1dSpEcV1@\xb9LO\xf9\xd1\xe8\xe2SpEcV1\xde\x1dMa\x01\xec\xb0ASpEcV1\xc2 \x1b\xdc\xc8gxZSpEcV1[Q+\xe9\xde\xd5\xf2>SpEcV1\xb3/\x97\xd5\x06\xbd3BSpEcV1?\xd9\xb3q\xdep>\xf3SpEcV1*\\\x9c\xf4e\xaa\x1e]SpEcV1u2\x0b\x97\xae\xcd\x86\xbfSpEcV1\x0c\xf0\xf6w\xfd\x1a\x1b\x94SpEcV1\'\xf2\xa2\xb9\xd0)\xc0uSpEcV1\xf5\xd4\x9b\xa3\xccI\x13\xf7SpEcV1\x84\x08Y\xae\xa0\xf128SpEcV1\r\xb76\xae\x93D\xef\x1aSpEcV1\x8b\x89\x1f#\xbd\x157\xf4SpEcV16\x83?\xf0\xcdW\xb1/SpEcV1\x94\xc7w/_\xebXcSpEcV1\xb4\xabN]\xe3\xeaA\xd6SpEcV1\x13?J\x12d\xden|SpEcV1q\xa3z;6\xa6R\x01SpEcV1q^\xe2&\x9di\x9d\x0eSpEcV1Y\xa66\xb3\xecxE\x13SpEcV1\xcf@%X\xde+J@SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1 \xfbl\x04B\x82\xc0\xb4SpEcV1\xe3\xf2\x9b5%a\xfb\xd6SpEcV1\xe6Q\xd5T\x13\x8a\xb7lSpEcV1[\xf4R\xdf\xdd\xb4\xb0\xbcSpEcV1\xaaX8\xde\xef\xbb6%SpEcV1k\xe4zxB\xd1+\x02val\x00\x00\x00\"\x02\x10\x00\x03\x00\x00\x00StellarAssetAccount\x00\x80\x04\x10\x00\x04\x00\x00\x000\x02\x10\x00\x0c\x00\x00\x00<\x02\x10\x00\x07\x00\x00\x00anested\x00\\\x02\x10\x00\x01\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00datat\x02\x10\x00\x04\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\x80\x02\x10\x00\x0c\x00\x00\x00\x8c\x02\x10\x00\t\x00\x00\x00ContractCreateContractHostFnCreateContractWithCtorHostFn\xa8\x02\x10\x00\x08\x00\x00\x00\xb0\x02\x10\x00\x14\x00\x00\x00\xc4\x02\x10\x00\x1c\x00\x00\x00A\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00xy\x00\x00\x04\x03\x10\x00\x01\x00\x00\x00\x05\x03\x10\x00\x01\x00\x00\x00inner\x00\x00\x00\x18\x03\x10\x00\x05\x00\x00\x00transfercoordsamount6\x03\x10\x00\x06\x00\x00\x00used_event_simplepayloadU\x03\x10\x00\x07\x00\x00\x00used_event_with_refsused_event_with_data_typeused_event_with_topic_typeused_event_with_nested_dataused_event_with_nested_topicSpEcV1\xb6\xb1Hy\xda\xca\xaf\xccSpEcV1\x9e)H\x8e\xf0\x01{{SpEcV1ULqD\xd3\xfa:\x1fSpEcV1\x15\xe5\x1a,\xc0\xc7\xef\xd4SpEcV1s\x94\x0c\x1926\x1d\x90SpEcV1\xa3J\xcf\xf7D\x93\x0bBSpEcV1L|{\r\xf4\xf2\x1a\xa8SpEcV1\xf1\xf9\x90\x07E*e\xfdargscontractfn_name\x00\x00\x00R\x04\x10\x00\x04\x00\x00\x00V\x04\x10\x00\x08\x00\x00\x00^\x04\x10\x00\x07\x00\x00\x00Wasm\x80\x04\x10\x00\x04\x00\x00\x00contextsub_invocations\x00\x00\x8c\x04\x10\x00\x07\x00\x00\x00\x93\x04\x10\x00\x0f\x00\x00\x00executablesalt\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00constructor_args\xd4\x04\x10\x00\x10\x00\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00SpEcV1\xa3\x16\n\x8f\xc9\x92\xd2\x11f1f2\x00\x00\n\x05\x10\x00\x02\x00\x00\x00\x0c\x05\x10\x00\x02\x00\x00\x00\x00\x87|\x0econtractspecv0\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::Context\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::wasm_imported::Executable\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleB\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleC\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_map\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01m\x00\x00\x00\x00\x00\x03\xec\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_vec\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UnusedEnum\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02K1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02K2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_param\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02ie\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_tuple\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01t\x00\x00\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bUnusedEvent\x00\x00\x00\x00\x01\x00\x00\x00\x0cunused_event\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UnusedStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_option\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01o\x00\x00\x00\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_result\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x07\xd0\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_return\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UnusedIntEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02U1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02U2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08NotFound\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07Invalid\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cwith_non_pub\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UnusedPubError\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Nope\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Fail\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0epublish_simple\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ewith_recursion\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01r\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedEventSimple\x00\x00\x00\x00\x01\x00\x00\x00\x11used_event_simple\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01X\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01Y\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04Send\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Recv\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_executable\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01e\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_lib_struct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_vec_nested\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UnusedNonPubError\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01y\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10with_panic_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventWithRefs\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x14used_event_with_refs\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UnusedNonPubStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08Transfer\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Mint\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedPanicErrorEnum\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Boom\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_data_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_ref_event\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_assert_error\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02ok\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_invoker_auth\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01i\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_tuple_return\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedAssertErrorEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12publish_topic_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_auth_contexts\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_non_pub_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_wasm_imported\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\tvec_inner\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13publish_nested_data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14publish_nested_topic\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14with_panic_raw_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15UsedEventWithDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x19used_event_with_data_type\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedEventWithTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1aused_event_with_topic_type\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17UsedEventWithNestedData\x00\x00\x00\x00\x01\x00\x00\x00\x1bused_event_with_nested_data\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.test_spec_shaking_v2::UnusedNonContractFnParam\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UsedEventWithNestedTopic\x00\x00\x00\x01\x00\x00\x00\x1cused_event_with_nested_topic\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04info\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::UnusedNonContractFnReturn\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; extern crate test; #[rustc_test_marker = "test::test_spec_shaking_v2"] #[doc(hidden)] diff --git a/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs b/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs index 7e925fc50..80d8724f8 100644 --- a/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs +++ b/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs @@ -74,6 +74,12 @@ impl ::core::cmp::PartialEq for UsedParamStruct { self.a == other.a && self.nested == other.nested } } +impl UsedParamStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedParamStruct" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDPARAMSTRUCT: [u8; UsedParamStruct::__SPEC_XDR_VIEW.const_xdr_len()] = UsedParamStruct::spec_xdr(); @@ -82,7 +88,7 @@ impl UsedParamStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedParamStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UsedParamStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -94,7 +100,9 @@ impl UsedParamStruct { name: soroban_sdk::xdr::StringMView::new(b"nested"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedNestedInStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -222,6 +230,12 @@ impl ::core::cmp::PartialEq for UsedReturnEnum { } } } +impl UsedReturnEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedReturnEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDRETURNENUM: [u8; UsedReturnEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UsedReturnEnum::spec_xdr(); @@ -230,7 +244,7 @@ impl UsedReturnEnum { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedReturnEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedReturnEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -392,6 +406,12 @@ impl ::core::cmp::PartialEq for UsedParamIntEnum { __self_discr == __arg1_discr } } +impl UsedParamIntEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedParamIntEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDPARAMINTENUM: [u8; UsedParamIntEnum::__SPEC_XDR_VIEW .const_xdr_len()] = UsedParamIntEnum::spec_xdr(); @@ -400,7 +420,7 @@ impl UsedParamIntEnum { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedParamIntEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedParamIntEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -511,6 +531,12 @@ impl ::core::cmp::PartialEq for UsedErrorEnum { __self_discr == __arg1_discr } } +impl UsedErrorEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedErrorEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDERRORENUM: [u8; UsedErrorEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UsedErrorEnum::spec_xdr(); @@ -520,7 +546,7 @@ impl UsedErrorEnum { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedErrorEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -691,6 +717,12 @@ impl ::core::cmp::PartialEq for UsedPanicErrorEnum { true } } +impl UsedPanicErrorEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedPanicErrorEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDPANICERRORENUM: [u8; UsedPanicErrorEnum::__SPEC_XDR_VIEW .const_xdr_len()] = UsedPanicErrorEnum::spec_xdr(); @@ -700,7 +732,7 @@ impl UsedPanicErrorEnum { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedPanicErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedPanicErrorEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -864,6 +896,12 @@ impl ::core::cmp::PartialEq for UsedAssertErrorEnum { true } } +impl UsedAssertErrorEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedAssertErrorEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDASSERTERRORENUM: [u8; UsedAssertErrorEnum::__SPEC_XDR_VIEW .const_xdr_len()] = UsedAssertErrorEnum::spec_xdr(); @@ -873,7 +911,7 @@ impl UsedAssertErrorEnum { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedAssertErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UsedAssertErrorEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1044,6 +1082,12 @@ impl ::core::cmp::PartialEq for UsedNestedInStruct { self.val == other.val } } +impl UsedNestedInStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedNestedInStruct" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDNESTEDINSTRUCT: [u8; UsedNestedInStruct::__SPEC_XDR_VIEW .const_xdr_len()] = UsedNestedInStruct::spec_xdr(); @@ -1052,7 +1096,7 @@ impl UsedNestedInStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedNestedInStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UsedNestedInStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1159,6 +1203,12 @@ impl ::core::cmp::PartialEq for UsedVecElement { self.data == other.data } } +impl UsedVecElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedVecElement" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDVECELEMENT: [u8; UsedVecElement::__SPEC_XDR_VIEW.const_xdr_len()] = UsedVecElement::spec_xdr(); @@ -1167,7 +1217,7 @@ impl UsedVecElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedVecElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedVecElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1279,6 +1329,12 @@ impl ::core::cmp::PartialEq for UsedMapKey { __self_discr == __arg1_discr } } +impl UsedMapKey { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedMapKey" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDMAPKEY: [u8; UsedMapKey::__SPEC_XDR_VIEW.const_xdr_len()] = UsedMapKey::spec_xdr(); @@ -1287,7 +1343,7 @@ impl UsedMapKey { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedMapKey"), + name: soroban_sdk::xdr::StringMView::new_str(UsedMapKey::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1391,6 +1447,12 @@ impl ::core::cmp::PartialEq for UsedMapVal { self.v == other.v } } +impl UsedMapVal { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedMapVal" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDMAPVAL: [u8; UsedMapVal::__SPEC_XDR_VIEW.const_xdr_len()] = UsedMapVal::spec_xdr(); @@ -1399,7 +1461,7 @@ impl UsedMapVal { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedMapVal"), + name: soroban_sdk::xdr::StringMView::new_str(UsedMapVal::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1509,6 +1571,12 @@ impl ::core::cmp::PartialEq for UsedOptionElement { self.data == other.data } } +impl UsedOptionElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedOptionElement" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDOPTIONELEMENT: [u8; UsedOptionElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedOptionElement::spec_xdr(); @@ -1517,7 +1585,7 @@ impl UsedOptionElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedOptionElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedOptionElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1622,6 +1690,12 @@ impl ::core::cmp::PartialEq for UsedResultOk { self.data == other.data } } +impl UsedResultOk { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedResultOk" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDRESULTOK: [u8; UsedResultOk::__SPEC_XDR_VIEW.const_xdr_len()] = UsedResultOk::spec_xdr(); @@ -1630,7 +1704,7 @@ impl UsedResultOk { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedResultOk"), + name: soroban_sdk::xdr::StringMView::new_str(UsedResultOk::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1859,6 +1933,12 @@ impl ::core::cmp::PartialEq for UsedEventTopicType { __self_discr == __arg1_discr } } +impl UsedEventTopicType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventTopicType" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDEVENTTOPICTYPE: [u8; UsedEventTopicType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventTopicType::spec_xdr(); @@ -1867,7 +1947,7 @@ impl UsedEventTopicType { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicType"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventTopicType::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2003,7 +2083,9 @@ impl UsedEventWithTopicType { name: soroban_sdk::xdr::StringMView::new(b"kind"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicType"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::TopicList, @@ -2106,6 +2188,12 @@ impl ::core::cmp::PartialEq for UsedEventDataType { self.x == other.x && self.y == other.y } } +impl UsedEventDataType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventDataType" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDEVENTDATATYPE: [u8; UsedEventDataType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventDataType::spec_xdr(); @@ -2114,7 +2202,7 @@ impl UsedEventDataType { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataType"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventDataType::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2267,7 +2355,9 @@ impl UsedEventWithDataType { name: soroban_sdk::xdr::StringMView::new(b"payload"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataType"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::Data, @@ -2360,6 +2450,12 @@ impl ::core::cmp::PartialEq for UsedEventTopicOuter { self.inner == other.inner } } +impl UsedEventTopicOuter { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventTopicOuter" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDEVENTTOPICOUTER: [u8; UsedEventTopicOuter::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventTopicOuter::spec_xdr(); @@ -2368,14 +2464,16 @@ impl UsedEventTopicOuter { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicOuter"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventTopicOuter::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"inner"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicInner"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -2486,6 +2584,12 @@ impl ::core::cmp::PartialEq for UsedEventTopicInner { self.val == other.val } } +impl UsedEventTopicInner { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventTopicInner" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDEVENTTOPICINNER: [u8; UsedEventTopicInner::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventTopicInner::spec_xdr(); @@ -2494,7 +2598,7 @@ impl UsedEventTopicInner { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicInner"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventTopicInner::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2632,7 +2736,9 @@ impl UsedEventWithNestedTopic { name: soroban_sdk::xdr::StringMView::new(b"info"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventTopicOuter"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::TopicList, @@ -2732,6 +2838,12 @@ impl ::core::cmp::PartialEq for UsedEventDataOuter { self.inner == other.inner } } +impl UsedEventDataOuter { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventDataOuter" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDEVENTDATAOUTER: [u8; UsedEventDataOuter::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventDataOuter::spec_xdr(); @@ -2740,14 +2852,16 @@ impl UsedEventDataOuter { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataOuter"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventDataOuter::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"inner"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataInner"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -2858,6 +2972,12 @@ impl ::core::cmp::PartialEq for UsedEventDataInner { self.val == other.val } } +impl UsedEventDataInner { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventDataInner" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDEVENTDATAINNER: [u8; UsedEventDataInner::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventDataInner::spec_xdr(); @@ -2866,7 +2986,7 @@ impl UsedEventDataInner { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataInner"), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventDataInner::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -3009,7 +3129,9 @@ impl UsedEventWithNestedData { name: soroban_sdk::xdr::StringMView::new(b"payload"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedEventDataOuter"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::Data, @@ -3105,6 +3227,12 @@ impl ::core::cmp::PartialEq for UsedRefTopicType { __self_discr == __arg1_discr } } +impl UsedRefTopicType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRefTopicType" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDREFTOPICTYPE: [u8; UsedRefTopicType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRefTopicType::spec_xdr(); @@ -3113,7 +3241,7 @@ impl UsedRefTopicType { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRefTopicType"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRefTopicType::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -3222,6 +3350,12 @@ impl ::core::cmp::PartialEq for UsedRefDataType { self.nested == other.nested } } +impl UsedRefDataType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRefDataType" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDREFDATATYPE: [u8; UsedRefDataType::__SPEC_XDR_VIEW.const_xdr_len()] = UsedRefDataType::spec_xdr(); @@ -3230,14 +3364,16 @@ impl UsedRefDataType { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRefDataType"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRefDataType::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"nested"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRefDataInner"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -3341,6 +3477,12 @@ impl ::core::cmp::PartialEq for UsedRefDataInner { self.val == other.val } } +impl UsedRefDataInner { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRefDataInner" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDREFDATAINNER: [u8; UsedRefDataInner::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRefDataInner::spec_xdr(); @@ -3349,7 +3491,7 @@ impl UsedRefDataInner { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRefDataInner"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRefDataInner::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -3484,7 +3626,9 @@ impl<'a> UsedEventWithRefs<'a> { name: soroban_sdk::xdr::StringMView::new(b"kind"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRefTopicType"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::TopicList, @@ -3494,7 +3638,9 @@ impl<'a> UsedEventWithRefs<'a> { name: soroban_sdk::xdr::StringMView::new(b"payload"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRefDataType"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), location: soroban_sdk::xdr::ScSpecEventParamLocationV0::Data, @@ -3582,6 +3728,12 @@ impl ::core::cmp::PartialEq for UsedTupleElement { self.val == other.val } } +impl UsedTupleElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedTupleElement" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDTUPLEELEMENT: [u8; UsedTupleElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedTupleElement::spec_xdr(); @@ -3590,7 +3742,7 @@ impl UsedTupleElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedTupleElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedTupleElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -3700,6 +3852,12 @@ impl ::core::cmp::PartialEq for UsedTupleReturnElement { self.val == other.val } } +impl UsedTupleReturnElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedTupleReturnElement" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDTUPLERETURNELEMENT: [u8; UsedTupleReturnElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedTupleReturnElement::spec_xdr(); @@ -3708,7 +3866,7 @@ impl UsedTupleReturnElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedTupleReturnElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedTupleReturnElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -3820,6 +3978,12 @@ impl ::core::cmp::PartialEq for UsedVecInnerVecElement { self.val == other.val } } +impl UsedVecInnerVecElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedVecInnerVecElement" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDVECINNERVECELEMENT: [u8; UsedVecInnerVecElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedVecInnerVecElement::spec_xdr(); @@ -3828,7 +3992,7 @@ impl UsedVecInnerVecElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedVecInnerVecElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedVecInnerVecElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -3940,6 +4104,12 @@ impl ::core::cmp::PartialEq for UsedVecInnerElement { self.val == other.val } } +impl UsedVecInnerElement { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedVecInnerElement" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDVECINNERELEMENT: [u8; UsedVecInnerElement::__SPEC_XDR_VIEW .const_xdr_len()] = UsedVecInnerElement::spec_xdr(); @@ -3948,7 +4118,7 @@ impl UsedVecInnerElement { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedVecInnerElement"), + name: soroban_sdk::xdr::StringMView::new_str(UsedVecInnerElement::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -4070,6 +4240,12 @@ impl ::core::cmp::PartialEq for UsedVecElementNested { self.val == other.val && self.inner == other.inner && self.vec_inner == other.vec_inner } } +impl UsedVecElementNested { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedVecElementNested" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDVECELEMENTNESTED: [u8; UsedVecElementNested::__SPEC_XDR_VIEW .const_xdr_len()] = UsedVecElementNested::spec_xdr(); @@ -4078,14 +4254,16 @@ impl UsedVecElementNested { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedVecElementNested"), + name: soroban_sdk::xdr::StringMView::new_str(UsedVecElementNested::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"inner"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedVecInnerElement"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -4101,8 +4279,8 @@ impl UsedVecElementNested { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UsedVecInnerVecElement", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -4225,6 +4403,12 @@ impl ::core::cmp::PartialEq for UsedNonPubStruct { self.val == other.val } } +impl UsedNonPubStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedNonPubStruct" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDNONPUBSTRUCT: [u8; UsedNonPubStruct::__SPEC_XDR_VIEW .const_xdr_len()] = UsedNonPubStruct::spec_xdr(); @@ -4233,7 +4417,7 @@ impl UsedNonPubStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedNonPubStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UsedNonPubStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -4336,6 +4520,12 @@ impl ::core::cmp::PartialEq for UsedNonPubError { true } } +impl UsedNonPubError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedNonPubError" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDNONPUBERROR: [u8; UsedNonPubError::__SPEC_XDR_VIEW.const_xdr_len()] = UsedNonPubError::spec_xdr(); @@ -4345,7 +4535,7 @@ impl UsedNonPubError { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedNonPubError"), + name: soroban_sdk::xdr::StringMView::new_str(UsedNonPubError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -4514,6 +4704,12 @@ impl ::core::cmp::PartialEq for UsedRecursiveRoot { self.val == other.val } } +impl UsedRecursiveRoot { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRecursiveRoot" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDRECURSIVEROOT: [u8; UsedRecursiveRoot::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRecursiveRoot::spec_xdr(); @@ -4522,14 +4718,16 @@ impl UsedRecursiveRoot { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveRoot"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRecursiveRoot::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"val"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveNode"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -4658,6 +4856,12 @@ impl ::core::cmp::PartialEq for UsedRecursiveNode { } } } +impl UsedRecursiveNode { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRecursiveNode" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDRECURSIVENODE: [u8; UsedRecursiveNode::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRecursiveNode::spec_xdr(); @@ -4666,7 +4870,7 @@ impl UsedRecursiveNode { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveNode"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRecursiveNode::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -4675,7 +4879,9 @@ impl UsedRecursiveNode { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedLeaf"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -4688,7 +4894,9 @@ impl UsedRecursiveNode { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveLeaf"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -4834,6 +5042,12 @@ impl ::core::cmp::PartialEq for UsedRecursiveLeaf { self.val == other.val } } +impl UsedRecursiveLeaf { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedRecursiveLeaf" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDRECURSIVELEAF: [u8; UsedRecursiveLeaf::__SPEC_XDR_VIEW .const_xdr_len()] = UsedRecursiveLeaf::spec_xdr(); @@ -4842,7 +5056,7 @@ impl UsedRecursiveLeaf { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveLeaf"), + name: soroban_sdk::xdr::StringMView::new_str(UsedRecursiveLeaf::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -4851,7 +5065,9 @@ impl UsedRecursiveLeaf { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveRoot"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -4955,6 +5171,12 @@ impl ::core::cmp::PartialEq for UsedLeaf { self.val == other.val } } +impl UsedLeaf { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedLeaf" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_USEDLEAF: [u8; UsedLeaf::__SPEC_XDR_VIEW.const_xdr_len()] = UsedLeaf::spec_xdr(); @@ -4963,7 +5185,7 @@ impl UsedLeaf { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UsedLeaf"), + name: soroban_sdk::xdr::StringMView::new_str(UsedLeaf::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5032,7 +5254,7 @@ impl soroban_sdk::TryFromVal for soroban_sdk::Val { } } mod wasm_imported { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\xa2=N\xc1p\x95\x90\xb2SpEcV1\xe9R\xa7\xe8b\x99\xa2\xc3SpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1V]\x80\\~\x1a\x08/SpEcV1\xcf)\x97]S\xb2\xfd)f1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xa3$\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x05EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x06ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x08EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\xa2=N\xc1p\x95\x90\xb2SpEcV1\xe9R\xa7\xe8b\x99\xa2\xc3SpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1V]\x80\\~\x1a\x08/SpEcV1\xcf)\x97]S\xb2\xfd)f1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xd3)\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn fn_enum_a(env: soroban_sdk::Env) -> EnumA; fn fn_error_a(env: soroban_sdk::Env, input: u32) -> Result; @@ -5412,6 +5634,12 @@ mod wasm_imported { } } } + impl ContractContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ContractContext" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CONTRACTCONTEXT: [u8; ContractContext::__SPEC_XDR_VIEW .const_xdr_len()] = ContractContext::spec_xdr(); @@ -5421,7 +5649,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str(ContractContext::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5601,6 +5829,12 @@ mod wasm_imported { } } } + impl SubContractInvocation { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::SubContractInvocation" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_SUBCONTRACTINVOCATION: [u8; SubContractInvocation::__SPEC_XDR_VIEW .const_xdr_len()] = SubContractInvocation::spec_xdr(); @@ -5610,14 +5844,18 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"SubContractInvocation"), + name: soroban_sdk::xdr::StringMView::new_str( + SubContractInvocation::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"context"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -5628,8 +5866,8 @@ mod wasm_imported { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"InvokerContractAuthEntry", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -5786,6 +6024,12 @@ mod wasm_imported { } } } + impl CreateContractHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CREATECONTRACTHOSTFNCONTEXT: [u8; CreateContractHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = @@ -5796,14 +6040,18 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFnContext"), + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractHostFnContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -5985,6 +6233,12 @@ mod wasm_imported { } } } + impl CreateContractWithConstructorHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CREATECONTRACTWITHCONSTRUCTORHOSTFNCONTEXT: [u8; CreateContractWithConstructorHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = @@ -5995,8 +6249,8 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractWithConstructorHostFnContext::spec_type_name(), ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { @@ -6013,7 +6267,9 @@ mod wasm_imported { name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -6181,6 +6437,12 @@ mod wasm_imported { } } } + impl StructA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructA" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTA: [u8; StructA::__SPEC_XDR_VIEW.const_xdr_len()] = StructA::spec_xdr(); @@ -6190,7 +6452,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str(StructA::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -6335,6 +6597,12 @@ mod wasm_imported { } } } + impl StructB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructB" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTB: [u8; StructB::__SPEC_XDR_VIEW.const_xdr_len()] = StructB::spec_xdr(); @@ -6344,7 +6612,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructB"), + name: soroban_sdk::xdr::StringMView::new_str(StructB::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -6489,6 +6757,12 @@ mod wasm_imported { } } } + impl StructC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructC" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTC: [u8; StructC::__SPEC_XDR_VIEW.const_xdr_len()] = StructC::spec_xdr(); @@ -6498,7 +6772,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructC"), + name: soroban_sdk::xdr::StringMView::new_str(StructC::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -6644,6 +6918,12 @@ mod wasm_imported { } } } + impl StructTupleA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructTupleA" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTTUPLEA: [u8; StructTupleA::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleA::spec_xdr(); @@ -6653,7 +6933,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleA::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -6791,6 +7071,12 @@ mod wasm_imported { } } } + impl StructTupleB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructTupleB" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTTUPLEB: [u8; StructTupleB::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleB::spec_xdr(); @@ -6800,7 +7086,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleB"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleB::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -6939,6 +7225,12 @@ mod wasm_imported { } } } + impl StructTupleC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::StructTupleC" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_STRUCTTUPLEC: [u8; StructTupleC::__SPEC_XDR_VIEW.const_xdr_len()] = StructTupleC::spec_xdr(); @@ -6948,7 +7240,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"StructTupleC"), + name: soroban_sdk::xdr::StringMView::new_str(StructTupleC::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -7155,65 +7447,68 @@ mod wasm_imported { } } } + impl Context { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::Context" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CONTEXT: [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] = Context::spec_xdr(); impl Context { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Context"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFn"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, - ), - ]), - }, - ), - ]), - }); + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str(Context::spec_type_name()), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] { Context::__SPEC_XDR_VIEW.const_to_xdr() } @@ -7406,6 +7701,12 @@ mod wasm_imported { } } } + impl ContractExecutable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ContractExecutable" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_CONTRACTEXECUTABLE: [u8; ContractExecutable::__SPEC_XDR_VIEW .const_xdr_len()] = ContractExecutable::spec_xdr(); @@ -7414,7 +7715,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str(ContractExecutable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -7650,66 +7951,71 @@ mod wasm_imported { } } } + impl InvokerContractAuthEntry { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_INVOKERCONTRACTAUTHENTRY: [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] = InvokerContractAuthEntry::spec_xdr(); impl InvokerContractAuthEntry { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"InvokerContractAuthEntry"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"SubContractInvocation", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFn"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, - ), - ]), - }, - ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, - ), - ]), - }, - ), - ]), - }); + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str( + InvokerContractAuthEntry::spec_type_name(), + ), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }), + ], + ), + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] { InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_to_xdr() } @@ -7921,6 +8227,12 @@ mod wasm_imported { } } } + impl Executable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::Executable" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_EXECUTABLE: [u8; Executable::__SPEC_XDR_VIEW.const_xdr_len()] = Executable::spec_xdr(); @@ -7929,7 +8241,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Executable"), + name: soroban_sdk::xdr::StringMView::new_str(Executable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -8123,6 +8435,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl EnumA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumA" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMA: [u8; EnumA::__SPEC_XDR_VIEW.const_xdr_len()] = EnumA::spec_xdr(); @@ -8131,7 +8449,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumA"), + name: soroban_sdk::xdr::StringMView::new_str(EnumA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -8355,6 +8673,12 @@ mod wasm_imported { } } } + impl EnumB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumB" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMB: [u8; EnumB::__SPEC_XDR_VIEW.const_xdr_len()] = EnumB::spec_xdr(); @@ -8363,7 +8687,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumB"), + name: soroban_sdk::xdr::StringMView::new_str(EnumB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -8597,6 +8921,12 @@ mod wasm_imported { } } } + impl EnumC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumC" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMC: [u8; EnumC::__SPEC_XDR_VIEW.const_xdr_len()] = EnumC::spec_xdr(); @@ -8605,7 +8935,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumC"), + name: soroban_sdk::xdr::StringMView::new_str(EnumC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -8620,7 +8950,9 @@ mod wasm_imported { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -8633,7 +8965,9 @@ mod wasm_imported { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructTupleA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -8813,6 +9147,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl EnumIntA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumIntA" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMINTA: [u8; EnumIntA::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntA::spec_xdr(); @@ -8821,7 +9161,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntA"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -8959,6 +9299,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl EnumIntB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumIntB" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMINTB: [u8; EnumIntB::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntB::spec_xdr(); @@ -8967,7 +9313,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntB"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -9105,6 +9451,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl EnumIntC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EnumIntC" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ENUMINTC: [u8; EnumIntC::__SPEC_XDR_VIEW.const_xdr_len()] = EnumIntC::spec_xdr(); @@ -9113,7 +9465,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"EnumIntC"), + name: soroban_sdk::xdr::StringMView::new_str(EnumIntC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -9251,6 +9603,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl ErrorA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ErrorA" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERRORA: [u8; ErrorA::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorA::spec_xdr(); @@ -9260,7 +9618,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorA"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorA::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -9469,6 +9827,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl ErrorB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ErrorB" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERRORB: [u8; ErrorB::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorB::spec_xdr(); @@ -9478,7 +9842,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorB"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorB::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -9687,6 +10051,12 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl ErrorC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::ErrorC" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_ERRORC: [u8; ErrorC::__SPEC_XDR_VIEW.const_xdr_len()] = ErrorC::spec_xdr(); @@ -9696,7 +10066,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ErrorC"), + name: soroban_sdk::xdr::StringMView::new_str(ErrorC::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -10434,6 +10804,12 @@ impl ::core::cmp::PartialEq for UnusedStruct { self.x == other.x } } +impl UnusedStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedStruct" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UNUSEDSTRUCT: [u8; UnusedStruct::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedStruct::spec_xdr(); @@ -10442,7 +10818,7 @@ impl UnusedStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -10560,6 +10936,12 @@ impl ::core::cmp::PartialEq for UnusedEnum { } } } +impl UnusedEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UNUSEDENUM: [u8; UnusedEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedEnum::spec_xdr(); @@ -10568,7 +10950,7 @@ impl UnusedEnum { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -10720,6 +11102,12 @@ impl ::core::cmp::PartialEq for UnusedIntEnum { __self_discr == __arg1_discr } } +impl UnusedIntEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedIntEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UNUSEDINTENUM: [u8; UnusedIntEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedIntEnum::spec_xdr(); @@ -10728,7 +11116,7 @@ impl UnusedIntEnum { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedIntEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedIntEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -10947,6 +11335,12 @@ impl ::core::cmp::PartialEq for UnusedPubError { true } } +impl UnusedPubError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedPubError" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UNUSEDPUBERROR: [u8; UnusedPubError::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedPubError::spec_xdr(); @@ -10956,7 +11350,7 @@ impl UnusedPubError { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedPubError"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedPubError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -11125,6 +11519,12 @@ impl ::core::cmp::PartialEq for UnusedNonContractFnParam { self.x == other.x } } +impl UnusedNonContractFnParam { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedNonContractFnParam" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UNUSEDNONCONTRACTFNPARAM: [u8; UnusedNonContractFnParam::__SPEC_XDR_VIEW.const_xdr_len()] = @@ -11134,7 +11534,7 @@ impl UnusedNonContractFnParam { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedNonContractFnParam"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedNonContractFnParam::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -11247,6 +11647,12 @@ impl ::core::cmp::PartialEq for UnusedNonContractFnReturn { self.x == other.x } } +impl UnusedNonContractFnReturn { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedNonContractFnReturn" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UNUSEDNONCONTRACTFNRETURN: [u8; UnusedNonContractFnReturn::__SPEC_XDR_VIEW.const_xdr_len()] = @@ -11256,7 +11662,9 @@ impl UnusedNonContractFnReturn { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedNonContractFnReturn"), + name: soroban_sdk::xdr::StringMView::new_str( + UnusedNonContractFnReturn::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -11364,6 +11772,12 @@ impl ::core::cmp::PartialEq for UnusedNonPubStruct { self.x == other.x } } +impl UnusedNonPubStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedNonPubStruct" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UNUSEDNONPUBSTRUCT: [u8; UnusedNonPubStruct::__SPEC_XDR_VIEW .const_xdr_len()] = UnusedNonPubStruct::spec_xdr(); @@ -11372,7 +11786,7 @@ impl UnusedNonPubStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedNonPubStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedNonPubStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -11477,6 +11891,12 @@ impl ::core::cmp::PartialEq for UnusedNonPubError { true } } +impl UnusedNonPubError { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedNonPubError" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UNUSEDNONPUBERROR: [u8; UnusedNonPubError::__SPEC_XDR_VIEW .const_xdr_len()] = UnusedNonPubError::spec_xdr(); @@ -11486,7 +11906,7 @@ impl UnusedNonPubError { soroban_sdk::xdr::ScSpecUdtErrorEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UnusedNonPubError"), + name: soroban_sdk::xdr::StringMView::new_str(UnusedNonPubError::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtErrorEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -11739,7 +12159,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"s"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedParamStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -11748,7 +12170,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"ie"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedParamIntEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -11782,7 +12206,7 @@ impl Contract { inputs: soroban_sdk::xdr::VecMView::new(&[]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedReturnEnum"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); @@ -11815,7 +12239,9 @@ impl Contract { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::U32, error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -11954,7 +12380,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedVecElement"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -11995,8 +12423,8 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UsedVecElementNested", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -12036,12 +12464,16 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeMapView { key_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedMapKey"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedMapVal"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12081,7 +12513,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeOptionView { value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedOptionElement"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12120,12 +12554,16 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeResultView { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedResultOk"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedErrorEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12162,7 +12600,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"r"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedRecursiveRoot"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12202,7 +12642,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Context"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12242,7 +12684,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"i"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"InvokerContractAuthEntry"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12280,7 +12724,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"e"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Executable"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12457,7 +12903,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"s"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructC"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12495,7 +12943,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"s"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"StructA"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12532,7 +12982,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"s"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedNonPubStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12571,7 +13023,9 @@ impl Contract { ok_type: &soroban_sdk::xdr::ScSpecTypeDefView::U32, error_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UsedNonPubError"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -12609,8 +13063,8 @@ impl Contract { value_types: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UsedTupleElement", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -12654,8 +13108,8 @@ impl Contract { value_types: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UsedTupleReturnElement", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), diff --git a/tests-expanded/test_tuples_tests.rs b/tests-expanded/test_tuples_tests.rs index 9f6089be6..649471cc4 100644 --- a/tests-expanded/test_tuples_tests.rs +++ b/tests-expanded/test_tuples_tests.rs @@ -715,7 +715,7 @@ mod test { use crate::{Contract, ContractClient}; use soroban_sdk::Env; mod wasm { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x1f\x05`\x01~\x01~`\x02~~\x01~`\x03~~~\x01~`\x03~\x7f\x7f\x00`\x02\x7f\x7f\x01~\x02\x19\x04\x01i\x012\x00\x00\x01i\x011\x00\x00\x01v\x01g\x00\x01\x01v\x01h\x00\x02\x03\x06\x05\x00\x03\x04\x00\x00\x05\x03\x01\x00\x10\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x80\x80\xc0\x00\x0b\x7f\x00A\x80\x80\xc0\x00\x0b\x7f\x00A\x80\x80\xc0\x00\x0b\x07E\x07\x06memory\x02\x00\x06tuple1\x00\x04\x06tuple2\x00\x07\x07void_fn\x00\x08\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xc8\x03\x05x\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x01B\x027\x03\x08 \x00 \x01A\x08jA\x01\x10\x85\x80\x80\x80\x00 \x01)\x03\x08\"\x00B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01 \x00B\x84\x80\x80\x80p\x837\x03\x08 \x01A\x08jA\x01\x10\x86\x80\x80\x80\x00!\x00 \x01A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\x1d\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x1a\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\xff\x01\x02\x02\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00\x02@\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00A\x00!\x02\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x02\x10\x85\x80\x80\x80\x00 \x01)\x03\x00\"\x03B\xff\x01\x83B\x04R\r\x00 \x01)\x03\x08\"\x00\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x01 \x02A\x07G\r\x00 \x00B\x08\x87!\x00\x0c\x02\x0b\x00\x0b \x00\x10\x80\x80\x80\x80\x00!\x00\x0b\x02@\x02@ \x00B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x00B\x08\x86B\x07\x84!\x00\x0c\x01\x0b \x00\x10\x81\x80\x80\x80\x00!\x00\x0b \x01 \x007\x03\x08 \x01 \x03B\x84\x80\x80\x80p\x837\x03\x00 \x01A\x02\x10\x86\x80\x80\x80\x00!\x00 \x01A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\x13\x00\x02@ \x00B\xff\x01\x83B\x02Q\r\x00\x00\x0bB\x02\x0b\x0b\t\x01\x00A\x80\x80\xc0\x00\x0b\x00\x00\xdf\x16\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06tuple1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03arg\x00\x00\x00\x03\xed\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06tuple2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03arg\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07void_fn\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08void_arg\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x1f\x05`\x01~\x01~`\x02~~\x01~`\x03~~~\x01~`\x03~\x7f\x7f\x00`\x02\x7f\x7f\x01~\x02\x19\x04\x01i\x012\x00\x00\x01i\x011\x00\x00\x01v\x01g\x00\x01\x01v\x01h\x00\x02\x03\x06\x05\x00\x03\x04\x00\x00\x05\x03\x01\x00\x10\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x80\x80\xc0\x00\x0b\x7f\x00A\x80\x80\xc0\x00\x0b\x7f\x00A\x80\x80\xc0\x00\x0b\x07E\x07\x06memory\x02\x00\x06tuple1\x00\x04\x06tuple2\x00\x07\x07void_fn\x00\x08\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xc8\x03\x05x\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x01B\x027\x03\x08 \x00 \x01A\x08jA\x01\x10\x85\x80\x80\x80\x00 \x01)\x03\x08\"\x00B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01 \x00B\x84\x80\x80\x80p\x837\x03\x08 \x01A\x08jA\x01\x10\x86\x80\x80\x80\x00!\x00 \x01A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\x1d\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x1a\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\xff\x01\x02\x02\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00\x02@\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00A\x00!\x02\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x02\x10\x85\x80\x80\x80\x00 \x01)\x03\x00\"\x03B\xff\x01\x83B\x04R\r\x00 \x01)\x03\x08\"\x00\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x01 \x02A\x07G\r\x00 \x00B\x08\x87!\x00\x0c\x02\x0b\x00\x0b \x00\x10\x80\x80\x80\x80\x00!\x00\x0b\x02@\x02@ \x00B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x00B\x08\x86B\x07\x84!\x00\x0c\x01\x0b \x00\x10\x81\x80\x80\x80\x00!\x00\x0b \x01 \x007\x03\x08 \x01 \x03B\x84\x80\x80\x80p\x837\x03\x00 \x01A\x02\x10\x86\x80\x80\x80\x00!\x00 \x01A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\x13\x00\x02@ \x00B\xff\x01\x83B\x02Q\r\x00\x00\x0bB\x02\x0b\x0b\t\x01\x00A\x80\x80\xc0\x00\x0b\x00\x00\xbf\x19\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06tuple1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03arg\x00\x00\x00\x03\xed\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06tuple2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03arg\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07void_fn\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08void_arg\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn tuple1(env: soroban_sdk::Env, arg: (u32,)) -> (u32,); fn tuple2(env: soroban_sdk::Env, arg: (u32, i64)) -> (u32, i64); @@ -1188,6 +1188,12 @@ mod test { } } } + impl ContractContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_tuples::test::wasm::ContractContext" + } + } pub static __SPEC_XDR_TYPE_CONTRACTCONTEXT: [u8; ContractContext::__SPEC_XDR_VIEW .const_xdr_len()] = ContractContext::spec_xdr(); impl ContractContext { @@ -1196,7 +1202,9 @@ mod test { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str( + ContractContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1756,6 +1764,12 @@ mod test { } } } + impl SubContractInvocation { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_tuples::test::wasm::SubContractInvocation" + } + } pub static __SPEC_XDR_TYPE_SUBCONTRACTINVOCATION: [u8; SubContractInvocation::__SPEC_XDR_VIEW.const_xdr_len()] = SubContractInvocation::spec_xdr(); @@ -1765,15 +1779,17 @@ mod test { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"SubContractInvocation"), + name: soroban_sdk::xdr::StringMView::new_str( + SubContractInvocation::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"context"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -1785,8 +1801,8 @@ mod test { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"InvokerContractAuthEntry", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -2271,6 +2287,12 @@ mod test { } } } + impl CreateContractHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_tuples::test::wasm::CreateContractHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTHOSTFNCONTEXT: [u8; CreateContractHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractHostFnContext::spec_xdr(); @@ -2280,15 +2302,17 @@ mod test { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFnContext"), + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractHostFnContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractExecutable", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -2810,6 +2834,12 @@ mod test { } } } + impl CreateContractWithConstructorHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_tuples::test::wasm::CreateContractWithConstructorHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTWITHCONSTRUCTORHOSTFNCONTEXT: [u8; CreateContractWithConstructorHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractWithConstructorHostFnContext::spec_xdr(); @@ -2819,8 +2849,8 @@ mod test { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractWithConstructorHostFnContext::spec_type_name(), ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { @@ -2837,8 +2867,8 @@ mod test { name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractExecutable", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -3487,68 +3517,67 @@ mod test { } } } + impl Context { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_tuples::test::wasm::Context" + } + } pub static __SPEC_XDR_TYPE_CONTEXT: [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] = Context::spec_xdr(); impl Context { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0( - soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Context"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", - ), - }, + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str(Context::spec_type_name()), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - ]), - }, - ); + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] { Context::__SPEC_XDR_VIEW.const_to_xdr() } @@ -4218,6 +4247,12 @@ mod test { } } } + impl ContractExecutable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_tuples::test::wasm::ContractExecutable" + } + } pub static __SPEC_XDR_TYPE_CONTRACTEXECUTABLE: [u8; ContractExecutable::__SPEC_XDR_VIEW .const_xdr_len()] = ContractExecutable::spec_xdr(); impl ContractExecutable { @@ -4226,7 +4261,9 @@ mod test { soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ContractExecutable::spec_type_name(), + ), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -4783,69 +4820,70 @@ mod test { } } } + impl InvokerContractAuthEntry { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_tuples::test::wasm::InvokerContractAuthEntry" + } + } pub static __SPEC_XDR_TYPE_INVOKERCONTRACTAUTHENTRY: [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] = InvokerContractAuthEntry::spec_xdr(); impl InvokerContractAuthEntry { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0( - soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"InvokerContractAuthEntry"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"SubContractInvocation", - ), - }, + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str( + InvokerContractAuthEntry::spec_type_name(), + ), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - ]), - }, - ); + }), + ], + ), + }); pub const fn spec_xdr( ) -> [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] { InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_to_xdr() @@ -5578,6 +5616,12 @@ mod test { } } } + impl Executable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_tuples::test::wasm::Executable" + } + } pub static __SPEC_XDR_TYPE_EXECUTABLE: [u8; Executable::__SPEC_XDR_VIEW.const_xdr_len()] = Executable::spec_xdr(); impl Executable { @@ -5586,7 +5630,7 @@ mod test { soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Executable"), + name: soroban_sdk::xdr::StringMView::new_str(Executable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { diff --git a/tests-expanded/test_udt_tests.rs b/tests-expanded/test_udt_tests.rs index f8a3aeff3..a5fa80efb 100644 --- a/tests-expanded/test_udt_tests.rs +++ b/tests-expanded/test_udt_tests.rs @@ -49,6 +49,12 @@ impl ::core::cmp::PartialEq for UdtEnum2 { __self_discr == __arg1_discr } } +impl UdtEnum2 { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtEnum2" + } +} pub static __SPEC_XDR_TYPE_UDTENUM2: [u8; UdtEnum2::__SPEC_XDR_VIEW.const_xdr_len()] = UdtEnum2::spec_xdr(); impl UdtEnum2 { @@ -56,7 +62,7 @@ impl UdtEnum2 { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum2"), + name: soroban_sdk::xdr::StringMView::new_str(UdtEnum2::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -417,6 +423,12 @@ impl ::core::cmp::PartialEq for UdtEnum { } } } +impl UdtEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtEnum" + } +} pub static __SPEC_XDR_TYPE_UDTENUM: [u8; UdtEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UdtEnum::spec_xdr(); impl UdtEnum { @@ -424,7 +436,7 @@ impl UdtEnum { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UdtEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -439,7 +451,9 @@ impl UdtEnum { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -452,7 +466,9 @@ impl UdtEnum { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum2"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -465,7 +481,9 @@ impl UdtEnum { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtTuple"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -1086,6 +1104,12 @@ impl ::core::cmp::PartialEq for UdtTuple { self.0 == other.0 && self.1 == other.1 } } +impl UdtTuple { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtTuple" + } +} pub static __SPEC_XDR_TYPE_UDTTUPLE: [u8; UdtTuple::__SPEC_XDR_VIEW.const_xdr_len()] = UdtTuple::spec_xdr(); impl UdtTuple { @@ -1093,7 +1117,7 @@ impl UdtTuple { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtTuple"), + name: soroban_sdk::xdr::StringMView::new_str(UdtTuple::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -1502,6 +1526,12 @@ impl ::core::cmp::PartialEq for UdtStruct { self.a == other.a && self.b == other.b && self.c == other.c } } +impl UdtStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtStruct" + } +} pub static __SPEC_XDR_TYPE_UDTSTRUCT: [u8; UdtStruct::__SPEC_XDR_VIEW.const_xdr_len()] = UdtStruct::spec_xdr(); impl UdtStruct { @@ -1509,7 +1539,7 @@ impl UdtStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UdtStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2004,6 +2034,12 @@ impl ::core::cmp::PartialEq for UdtRecursive { self.a == other.a && self.b == other.b } } +impl UdtRecursive { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtRecursive" + } +} pub static __SPEC_XDR_TYPE_UDTRECURSIVE: [u8; UdtRecursive::__SPEC_XDR_VIEW.const_xdr_len()] = UdtRecursive::spec_xdr(); impl UdtRecursive { @@ -2011,7 +2047,7 @@ impl UdtRecursive { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtRecursive"), + name: soroban_sdk::xdr::StringMView::new_str(UdtRecursive::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2025,7 +2061,9 @@ impl UdtRecursive { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtRecursive"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -2456,6 +2494,12 @@ impl ::core::cmp::PartialEq for RecursiveToEnum { self.a == other.a && self.b == other.b } } +impl RecursiveToEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::RecursiveToEnum" + } +} pub static __SPEC_XDR_TYPE_RECURSIVETOENUM: [u8; RecursiveToEnum::__SPEC_XDR_VIEW.const_xdr_len()] = RecursiveToEnum::spec_xdr(); impl RecursiveToEnum { @@ -2463,7 +2507,7 @@ impl RecursiveToEnum { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"RecursiveToEnum"), + name: soroban_sdk::xdr::StringMView::new_str(RecursiveToEnum::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -2478,7 +2522,9 @@ impl RecursiveToEnum { key_type: &soroban_sdk::xdr::ScSpecTypeDefView::U32, value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"RecursiveEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -2923,6 +2969,12 @@ impl ::core::cmp::PartialEq for RecursiveEnum { } } } +impl RecursiveEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::RecursiveEnum" + } +} pub static __SPEC_XDR_TYPE_RECURSIVEENUM: [u8; RecursiveEnum::__SPEC_XDR_VIEW.const_xdr_len()] = RecursiveEnum::spec_xdr(); impl RecursiveEnum { @@ -2930,7 +2982,7 @@ impl RecursiveEnum { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"RecursiveEnum"), + name: soroban_sdk::xdr::StringMView::new_str(RecursiveEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -2945,7 +2997,9 @@ impl RecursiveEnum { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"RecursiveToEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -3572,7 +3626,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"a"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -3581,7 +3637,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"b"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -3614,7 +3672,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"a"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtRecursive"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -3624,7 +3684,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeOptionView { value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtRecursive"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -3659,7 +3721,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"a"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"RecursiveEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -3676,7 +3740,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeOptionView { value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"RecursiveEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -4495,7 +4561,7 @@ mod test { mod test_with_wasm { use soroban_sdk::{symbol_short, vec, Env, Map}; mod contract { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01N\r`\x01~\x01~`\x03~~~\x01~`\x02~~\x01~`\x04~~~~\x01~`\x02\x7f\x7f\x00`\x00\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x05~\x7f\x7f\x7f\x7f\x00`\x02\x7f~\x00`\x01\x7f\x01~`\x03\x7f\x7f\x7f\x00`\x02\x7f\x7f\x01~\x02O\r\x01v\x013\x00\x00\x01v\x01h\x00\x01\x01i\x012\x00\x00\x01v\x011\x00\x02\x01i\x011\x00\x00\x01v\x018\x00\x00\x01m\x014\x00\x02\x01m\x011\x00\x02\x01v\x01g\x00\x02\x01b\x01j\x00\x02\x01m\x019\x00\x01\x01m\x01a\x00\x03\x01b\x01m\x00\x01\x03\x15\x14\x04\x05\x04\x06\x07\x08\t\t\t\x05\x05\x04\x02\x05\x00\n\x02\x0b\x0c\x05\x04\x05\x01p\x01\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xe8\x81\xc0\x00\x0b\x7f\x00A\xe8\x81\xc0\x00\x0b\x7f\x00A\xf0\x81\xc0\x00\x0b\x07L\x07\x06memory\x02\x00\x03add\x00\x19\trecursive\x00\x1b\x0erecursive_enum\x00\x1d\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\t\x01\x00A\x01\x0b\x03\x0e\x16\x17\n\xf1\x1d\x14\x85\x07\x04\x01\x7f\x02~\x01\x7f\x01~#\x80\x80\x80\x80\x00A\xc0\x00k\"\x02$\x80\x80\x80\x80\x00 \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\x9c\x80\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a\x02@\x02@ \x01)\x03\x00\"\x03B\xff\x01\x83B\xcb\x00Q\r\x00 \x00A\x04:\x00\x00\x0c\x01\x0b \x03\x10\x80\x80\x80\x80\x00!\x04 \x02A\x006\x02\x10 \x02 \x037\x03\x08 \x02 \x04B \x88>\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00\x02@\x02@\x02@\x02@ \x02)\x03\x18\"\x03B\x02Q\r\x00 \x03\xa7A\x01q\r\x00\x02@ \x02)\x03 \"\x03\xa7A\xff\x01q\"\x01A\xca\x00F\r\x00 \x01A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x03A\xf4\x80\xc0\x80\x00A\x04\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x04\x00\x01\x02\x03\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x04A\x00!\x05\x0c\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x03 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x03 \x03\xa7A\x01q\r\x03 \x02)\x03 !\x03A\x00!\x01\x02@\x03@ \x01A\x18F\r\x01 \x02A\x18j \x01jB\x027\x03\x00 \x01A\x08j!\x01\x0c\x00\x0b\x0b \x03B\xff\x01\x83B\xcc\x00R\r\x03 \x03A\x98\x81\xc0\x80\x00A\x03 \x02A\x18jA\x03\x10\x92\x80\x80\x80\x00 \x02A0j \x02)\x03\x18\x10\x93\x80\x80\x80\x00 \x02(\x020\r\x03 \x02)\x038!\x04 \x02A0j \x02)\x03 \x10\x93\x80\x80\x80\x00 \x02(\x020\r\x03 \x02)\x03(\"\x06B\xff\x01\x83B\xcb\x00R\r\x03 \x02)\x038!\x03A\x01!\x05\x0c\x04\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x02 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x02 \x03\xa7A\x01q\r\x02 \x02)\x03 \"\x03B\xff\x01\x83B\x04R\r\x02A\nA\x0fA\t \x03B \x88\xa7\"\x01A\x0fF\x1b \x01A\nF\x1b\"\x01A\tF\r\x02A\x02!\x05\x0c\x04\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x01 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x01 \x03\xa7A\x01q\r\x01 \x02)\x03 \"\x03B\xff\x01\x83B\xcb\x00R\r\x01A\x00!\x01\x02@\x03@ \x01A\x10F\r\x01 \x02A0j \x01jB\x027\x03\x00 \x01A\x08j!\x01\x0c\x00\x0b\x0b \x03 \x02A0j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x81\x80\x80\x80\x00\x1a \x02A\x18j \x02)\x030\x10\x93\x80\x80\x80\x00 \x02(\x02\x18A\x01F\r\x01 \x02)\x038\"\x03B\xff\x01\x83B\xcb\x00R\r\x01 \x02)\x03 !\x04A\x03!\x05\x0c\x02\x0b \x00A\x04:\x00\x00\x0c\x03\x0b \x00A\x04:\x00\x00\x0c\x02\x0b\x0b \x00 \x067\x03\x18 \x00 \x037\x03\x10 \x00 \x047\x03\x08 \x00 \x01:\x00\x01 \x00 \x05:\x00\x00\x0b \x02A\xc0\x00j$\x80\x80\x80\x80\x00\x0b\x02\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x8c\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\x9a\x80\x80\x80\x00\x00\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x1a\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x82\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b\xb5\x01\x02\x02\x7f\x02~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02 \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0bB\x01!\x04\x02@ \x01B\xff\x01\x83B\xcc\x00R\r\x00 \x01A\xb0\x81\xc0\x80\x00A\x02 \x02A\x02\x10\x92\x80\x80\x80\x00\x02@ \x02)\x03\x00\"\x01\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b \x02)\x03\x08\"\x05B\xff\x01\x83B\xcb\x00R\r\x00 \x00 \x057\x03\x10 \x00 \x017\x03\x08B\x00!\x04\x0b \x00 \x047\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b\xb5\x01\x02\x02\x7f\x02~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02 \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0bB\x01!\x04\x02@ \x01B\xff\x01\x83B\xcc\x00R\r\x00 \x01A\xb0\x81\xc0\x80\x00A\x02 \x02A\x02\x10\x92\x80\x80\x80\x00\x02@ \x02)\x03\x00\"\x01\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b \x02)\x03\x08\"\x05B\xff\x01\x83B\xcc\x00R\r\x00 \x00 \x057\x03\x10 \x00 \x017\x03\x08B\x00!\x04\x0b \x00 \x047\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b(\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xb8\x80\xc0\x80\x00\x1a\x0bC\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x0bx\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00B\x02!\x03\x02@ \x01(\x02\x08\"\x04 \x01(\x02\x0cO\r\x00 \x02 \x01)\x03\x00 \x04\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x10\x93\x80\x80\x80\x00 \x02)\x03\x00!\x03 \x00 \x02)\x03\x087\x03\x08 \x01 \x04A\x01j6\x02\x08\x0b \x00 \x037\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b\xd6\x04\x04\x02\x7f\x01~\x01\x7f\x05~#\x80\x80\x80\x80\x00A\xc0\x00k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00 \x02A\x10j \x02\x10\x8d\x80\x80\x80\x00\x02@\x02@\x02@ \x02-\x00\x10\"\x03A\x04F\r\x00 \x02)\x03 !\x01 \x02)\x03\x18!\x04 \x021\x00\x11!\x00 \x02A\x10j \x02A\x08j\x10\x8d\x80\x80\x80\x00 \x02-\x00\x10\"\x05A\x04F\r\x00 \x02)\x03 !\x06 \x02)\x03\x18!\x07 \x021\x00\x11!\x08B\x00!\tB\x00!\n\x02@\x02@\x02@\x02@ \x03\x0e\x04\x05\x02\x01\x00\x05\x0b \x01\x10\x80\x80\x80\x80\x00!\x00 \x02A\x006\x028 \x02 \x017\x030 \x02 \x00B \x88>\x02\x02\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x02)\x03 \"\x00\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@\x02@\x02@ \x00A\xd8\x81\xc0\x80\x00A\x02\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x06\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x05 \x02A0j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x030\"\x00B\x02Q\r\x05 \x00\xa7A\x01q\r\x05 \x02A\x18j \x02)\x038\x10\x95\x80\x80\x80\x00 \x02(\x02\x18A\x01F\r\x05 \x01B\xff\x01\x83B\x04R\r\x05 \x02)\x03(\"\x00 \x01B\x84\x80\x80\x80p\x83\"\x01\x10\x86\x80\x80\x80\x00B\x01R\r\x01 \x00 \x01\x10\x87\x80\x80\x80\x00\"\x00B\xff\x01\x83B\xcb\x00R\r\x05 \x00\x10\x80\x80\x80\x80\x00!\x01 \x02A\x006\x02\x10 \x02 \x007\x03\x08 \x02 \x01B \x88>\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x00B\x02Q\r\x05 \x00\xa7A\x01q\r\x05\x02@ \x02)\x03 \"\x00\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x06\x0b \x00A\xd8\x81\xc0\x80\x00A\x02\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x02\x02\x03\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x04 \x01B\xff\x01\x83B\x04R\r\x04\x0bB\x02!\x00\x0c\x02\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x02B\x00!\x00\x0c\x01\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x01 \x02A0j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x030\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x02A\x18j \x02)\x038\x10\x95\x80\x80\x80\x00 \x02(\x02\x18\r\x01 \x02)\x03(!\x05 \x02)\x03 !\x03B\x01!\x00\x0b \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1a \x02A\x83\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1aB\x02!\x01\x02@ \x00B\x02Q\r\x00\x02@ \x00\xa7A\x01qE\r\x00 \x02A\x18jA\xcc\x81\xc0\x80\x00A\t\x10\x9e\x80\x80\x80\x00 \x02(\x02\x18\r\x02 \x02)\x03 !\x00 \x02 \x057\x03 \x02 \x037\x03\x18 \x02 \x02A\x18j\x10\x9c\x80\x80\x80\x007\x03 \x02 \x007\x03\x18 \x02A\x18jA\x02\x10\x9f\x80\x80\x80\x00!\x01\x0c\x01\x0b \x02A\x18jA\xc0\x81\xc0\x80\x00A\x0c\x10\x9e\x80\x80\x80\x00 \x02(\x02\x18\r\x01 \x02 \x02)\x03 7\x03\x18 \x02A\x18jA\x01\x10\x9f\x80\x80\x80\x00!\x01\x0b \x02A\xc0\x00j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\xd6\x01\x02\x01~\x03\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03A\x00!\x04\x03@\x02@ \x04A\tG\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x05\x02@ \x01 \x04j-\x00\x00\"\x06A\xdf\x00F\r\x00\x02@\x02@ \x06APjA\xff\x01qA\nI\r\x00 \x06A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x06A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x06AEj!\x05\x0c\x02\x0b \x06ARj!\x05\x0c\x01\x0b \x06AKj!\x05\x0b \x03B\x06\x86 \x05\xadB\xff\x01\x83\x84!\x03 \x04A\x01j!\x04\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x89\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x00\x0b\x03\x00\x00\x0b\x0b\xf2\x01\x01\x00A\x80\x80\xc0\x00\x0b\xe8\x01SpEcV1\xf3\xb0\xab@i\rH\xb4SpEcV1\xaf\xf7\x93\xba\x9eM\xde\x9aSpEcV1\xeb\x9f\x12&\x9av(*SpEcV1\x16\'d8\xff\xc9\xb1\xf8SpEcV1\xc8\x12\x91\xfe\xd7\x13\xf5\x9cSpEcV1\xff{V \xab\r\xdcdSpEcV1\xe1oU\xdb\xd47\x98\x14UdtAUdtBUdtCUdtD\x00\x00b\x00\x10\x00\x04\x00\x00\x00f\x00\x10\x00\x04\x00\x00\x00j\x00\x10\x00\x04\x00\x00\x00n\x00\x10\x00\x04\x00\x00\x00abc\x00\x94\x00\x10\x00\x01\x00\x00\x00\x95\x00\x10\x00\x01\x00\x00\x00\x96\x00\x10\x00\x01\x00\x00\x00\x94\x00\x10\x00\x01\x00\x00\x00\x95\x00\x10\x00\x01\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\xc0\x00\x10\x00\x0c\x00\x00\x00\xcc\x00\x10\x00\t\x00\x00\x00\x00\xdb\x1c\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x07UdtEnum\x00\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x07UdtEnum\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07UdtEnum\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04UdtA\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtB\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\tUdtStruct\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtC\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x08UdtEnum2\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtD\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x08UdtTuple\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08UdtEnum2\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08UdtTuple\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x03\xea\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tUdtStruct\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\trecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x0cUdtRecursive\x00\x00\x00\x01\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x0cUdtRecursive\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cUdtRecursive\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x0cUdtRecursive\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rRecursiveEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fRecursiveToEnum\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fRecursiveToEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x03\xec\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\rRecursiveEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0erecursive_enum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\rRecursiveEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03key\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\rRecursiveEnum\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x07Context\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\x0fContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00\x18InvokerContractAuthEntry\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x15SubContractInvocation\x00\x00\x00\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bCreateContractHostFnContext\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00*CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nExecutable\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01N\r`\x01~\x01~`\x03~~~\x01~`\x02~~\x01~`\x04~~~~\x01~`\x02\x7f\x7f\x00`\x00\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x05~\x7f\x7f\x7f\x7f\x00`\x02\x7f~\x00`\x01\x7f\x01~`\x03\x7f\x7f\x7f\x00`\x02\x7f\x7f\x01~\x02O\r\x01v\x013\x00\x00\x01v\x01h\x00\x01\x01i\x012\x00\x00\x01v\x011\x00\x02\x01i\x011\x00\x00\x01v\x018\x00\x00\x01m\x014\x00\x02\x01m\x011\x00\x02\x01v\x01g\x00\x02\x01b\x01j\x00\x02\x01m\x019\x00\x01\x01m\x01a\x00\x03\x01b\x01m\x00\x01\x03\x15\x14\x04\x05\x04\x06\x07\x08\t\t\t\x05\x05\x04\x02\x05\x00\n\x02\x0b\x0c\x05\x04\x05\x01p\x01\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xe8\x81\xc0\x00\x0b\x7f\x00A\xe8\x81\xc0\x00\x0b\x7f\x00A\xf0\x81\xc0\x00\x0b\x07L\x07\x06memory\x02\x00\x03add\x00\x19\trecursive\x00\x1b\x0erecursive_enum\x00\x1d\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\t\x01\x00A\x01\x0b\x03\x0e\x16\x17\n\xf1\x1d\x14\x85\x07\x04\x01\x7f\x02~\x01\x7f\x01~#\x80\x80\x80\x80\x00A\xc0\x00k\"\x02$\x80\x80\x80\x80\x00 \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\x9c\x80\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a\x02@\x02@ \x01)\x03\x00\"\x03B\xff\x01\x83B\xcb\x00Q\r\x00 \x00A\x04:\x00\x00\x0c\x01\x0b \x03\x10\x80\x80\x80\x80\x00!\x04 \x02A\x006\x02\x10 \x02 \x037\x03\x08 \x02 \x04B \x88>\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00\x02@\x02@\x02@\x02@ \x02)\x03\x18\"\x03B\x02Q\r\x00 \x03\xa7A\x01q\r\x00\x02@ \x02)\x03 \"\x03\xa7A\xff\x01q\"\x01A\xca\x00F\r\x00 \x01A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x03A\xf4\x80\xc0\x80\x00A\x04\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x04\x00\x01\x02\x03\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x04A\x00!\x05\x0c\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x03 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x03 \x03\xa7A\x01q\r\x03 \x02)\x03 !\x03A\x00!\x01\x02@\x03@ \x01A\x18F\r\x01 \x02A\x18j \x01jB\x027\x03\x00 \x01A\x08j!\x01\x0c\x00\x0b\x0b \x03B\xff\x01\x83B\xcc\x00R\r\x03 \x03A\x98\x81\xc0\x80\x00A\x03 \x02A\x18jA\x03\x10\x92\x80\x80\x80\x00 \x02A0j \x02)\x03\x18\x10\x93\x80\x80\x80\x00 \x02(\x020\r\x03 \x02)\x038!\x04 \x02A0j \x02)\x03 \x10\x93\x80\x80\x80\x00 \x02(\x020\r\x03 \x02)\x03(\"\x06B\xff\x01\x83B\xcb\x00R\r\x03 \x02)\x038!\x03A\x01!\x05\x0c\x04\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x02 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x02 \x03\xa7A\x01q\r\x02 \x02)\x03 \"\x03B\xff\x01\x83B\x04R\r\x02A\nA\x0fA\t \x03B \x88\xa7\"\x01A\x0fF\x1b \x01A\nF\x1b\"\x01A\tF\r\x02A\x02!\x05\x0c\x04\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x01 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x01 \x03\xa7A\x01q\r\x01 \x02)\x03 \"\x03B\xff\x01\x83B\xcb\x00R\r\x01A\x00!\x01\x02@\x03@ \x01A\x10F\r\x01 \x02A0j \x01jB\x027\x03\x00 \x01A\x08j!\x01\x0c\x00\x0b\x0b \x03 \x02A0j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x81\x80\x80\x80\x00\x1a \x02A\x18j \x02)\x030\x10\x93\x80\x80\x80\x00 \x02(\x02\x18A\x01F\r\x01 \x02)\x038\"\x03B\xff\x01\x83B\xcb\x00R\r\x01 \x02)\x03 !\x04A\x03!\x05\x0c\x02\x0b \x00A\x04:\x00\x00\x0c\x03\x0b \x00A\x04:\x00\x00\x0c\x02\x0b\x0b \x00 \x067\x03\x18 \x00 \x037\x03\x10 \x00 \x047\x03\x08 \x00 \x01:\x00\x01 \x00 \x05:\x00\x00\x0b \x02A\xc0\x00j$\x80\x80\x80\x80\x00\x0b\x02\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x8c\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\x9a\x80\x80\x80\x00\x00\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x1a\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x82\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b\xb5\x01\x02\x02\x7f\x02~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02 \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0bB\x01!\x04\x02@ \x01B\xff\x01\x83B\xcc\x00R\r\x00 \x01A\xb0\x81\xc0\x80\x00A\x02 \x02A\x02\x10\x92\x80\x80\x80\x00\x02@ \x02)\x03\x00\"\x01\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b \x02)\x03\x08\"\x05B\xff\x01\x83B\xcb\x00R\r\x00 \x00 \x057\x03\x10 \x00 \x017\x03\x08B\x00!\x04\x0b \x00 \x047\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b\xb5\x01\x02\x02\x7f\x02~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02 \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0bB\x01!\x04\x02@ \x01B\xff\x01\x83B\xcc\x00R\r\x00 \x01A\xb0\x81\xc0\x80\x00A\x02 \x02A\x02\x10\x92\x80\x80\x80\x00\x02@ \x02)\x03\x00\"\x01\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b \x02)\x03\x08\"\x05B\xff\x01\x83B\xcc\x00R\r\x00 \x00 \x057\x03\x10 \x00 \x017\x03\x08B\x00!\x04\x0b \x00 \x047\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b(\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xb8\x80\xc0\x80\x00\x1a\x0bC\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x0bx\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00B\x02!\x03\x02@ \x01(\x02\x08\"\x04 \x01(\x02\x0cO\r\x00 \x02 \x01)\x03\x00 \x04\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x10\x93\x80\x80\x80\x00 \x02)\x03\x00!\x03 \x00 \x02)\x03\x087\x03\x08 \x01 \x04A\x01j6\x02\x08\x0b \x00 \x037\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b\xd6\x04\x04\x02\x7f\x01~\x01\x7f\x05~#\x80\x80\x80\x80\x00A\xc0\x00k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00 \x02A\x10j \x02\x10\x8d\x80\x80\x80\x00\x02@\x02@\x02@ \x02-\x00\x10\"\x03A\x04F\r\x00 \x02)\x03 !\x01 \x02)\x03\x18!\x04 \x021\x00\x11!\x00 \x02A\x10j \x02A\x08j\x10\x8d\x80\x80\x80\x00 \x02-\x00\x10\"\x05A\x04F\r\x00 \x02)\x03 !\x06 \x02)\x03\x18!\x07 \x021\x00\x11!\x08B\x00!\tB\x00!\n\x02@\x02@\x02@\x02@ \x03\x0e\x04\x05\x02\x01\x00\x05\x0b \x01\x10\x80\x80\x80\x80\x00!\x00 \x02A\x006\x028 \x02 \x017\x030 \x02 \x00B \x88>\x02\x02\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x02)\x03 \"\x00\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@\x02@\x02@ \x00A\xd8\x81\xc0\x80\x00A\x02\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x06\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x05 \x02A0j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x030\"\x00B\x02Q\r\x05 \x00\xa7A\x01q\r\x05 \x02A\x18j \x02)\x038\x10\x95\x80\x80\x80\x00 \x02(\x02\x18A\x01F\r\x05 \x01B\xff\x01\x83B\x04R\r\x05 \x02)\x03(\"\x00 \x01B\x84\x80\x80\x80p\x83\"\x01\x10\x86\x80\x80\x80\x00B\x01R\r\x01 \x00 \x01\x10\x87\x80\x80\x80\x00\"\x00B\xff\x01\x83B\xcb\x00R\r\x05 \x00\x10\x80\x80\x80\x80\x00!\x01 \x02A\x006\x02\x10 \x02 \x007\x03\x08 \x02 \x01B \x88>\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x00B\x02Q\r\x05 \x00\xa7A\x01q\r\x05\x02@ \x02)\x03 \"\x00\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x06\x0b \x00A\xd8\x81\xc0\x80\x00A\x02\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x02\x02\x03\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x04 \x01B\xff\x01\x83B\x04R\r\x04\x0bB\x02!\x00\x0c\x02\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x02B\x00!\x00\x0c\x01\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x01 \x02A0j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x030\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x02A\x18j \x02)\x038\x10\x95\x80\x80\x80\x00 \x02(\x02\x18\r\x01 \x02)\x03(!\x05 \x02)\x03 !\x03B\x01!\x00\x0b \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1a \x02A\x83\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1aB\x02!\x01\x02@ \x00B\x02Q\r\x00\x02@ \x00\xa7A\x01qE\r\x00 \x02A\x18jA\xcc\x81\xc0\x80\x00A\t\x10\x9e\x80\x80\x80\x00 \x02(\x02\x18\r\x02 \x02)\x03 !\x00 \x02 \x057\x03 \x02 \x037\x03\x18 \x02 \x02A\x18j\x10\x9c\x80\x80\x80\x007\x03 \x02 \x007\x03\x18 \x02A\x18jA\x02\x10\x9f\x80\x80\x80\x00!\x01\x0c\x01\x0b \x02A\x18jA\xc0\x81\xc0\x80\x00A\x0c\x10\x9e\x80\x80\x80\x00 \x02(\x02\x18\r\x01 \x02 \x02)\x03 7\x03\x18 \x02A\x18jA\x01\x10\x9f\x80\x80\x80\x00!\x01\x0b \x02A\xc0\x00j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\xd6\x01\x02\x01~\x03\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03A\x00!\x04\x03@\x02@ \x04A\tG\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x05\x02@ \x01 \x04j-\x00\x00\"\x06A\xdf\x00F\r\x00\x02@\x02@ \x06APjA\xff\x01qA\nI\r\x00 \x06A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x06A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x06AEj!\x05\x0c\x02\x0b \x06ARj!\x05\x0c\x01\x0b \x06AKj!\x05\x0b \x03B\x06\x86 \x05\xadB\xff\x01\x83\x84!\x03 \x04A\x01j!\x04\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x89\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x00\x0b\x03\x00\x00\x0b\x0b\xf2\x01\x01\x00A\x80\x80\xc0\x00\x0b\xe8\x01SpEcV1\xf3\xb0\xab@i\rH\xb4SpEcV1\xaf\xf7\x93\xba\x9eM\xde\x9aSpEcV1\xeb\x9f\x12&\x9av(*SpEcV1\x16\'d8\xff\xc9\xb1\xf8SpEcV1\xc8\x12\x91\xfe\xd7\x13\xf5\x9cSpEcV1\xff{V \xab\r\xdcdSpEcV1\xe1oU\xdb\xd47\x98\x14UdtAUdtBUdtCUdtD\x00\x00b\x00\x10\x00\x04\x00\x00\x00f\x00\x10\x00\x04\x00\x00\x00j\x00\x10\x00\x04\x00\x00\x00n\x00\x10\x00\x04\x00\x00\x00abc\x00\x94\x00\x10\x00\x01\x00\x00\x00\x95\x00\x10\x00\x01\x00\x00\x00\x96\x00\x10\x00\x01\x00\x00\x00\x94\x00\x10\x00\x01\x00\x00\x00\x95\x00\x10\x00\x01\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\xc0\x00\x10\x00\x0c\x00\x00\x00\xcc\x00\x10\x00\t\x00\x00\x00\x00\x87!\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x11test_udt::UdtEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x11test_udt::UdtEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11test_udt::UdtEnum\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04UdtA\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtB\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x13test_udt::UdtStruct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtC\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x12test_udt::UdtEnum2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtD\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x12test_udt::UdtTuple\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12test_udt::UdtEnum2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12test_udt::UdtTuple\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x03\xea\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13test_udt::UdtStruct\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\trecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x19test_udt::RecursiveToEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19test_udt::RecursiveToEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x03\xec\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0erecursive_enum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x00\x00\x00\x00\x03key\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn add(env: soroban_sdk::Env, a: UdtEnum, b: UdtEnum) -> i64; fn recursive(env: soroban_sdk::Env, a: UdtRecursive) -> Option; @@ -4951,6 +5017,12 @@ mod test_with_wasm { } } } + impl UdtTuple { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::UdtTuple" + } + } pub static __SPEC_XDR_TYPE_UDTTUPLE: [u8; UdtTuple::__SPEC_XDR_VIEW.const_xdr_len()] = UdtTuple::spec_xdr(); impl UdtTuple { @@ -4959,7 +5031,7 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtTuple"), + name: soroban_sdk::xdr::StringMView::new_str(UdtTuple::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5414,6 +5486,12 @@ mod test_with_wasm { } } } + impl UdtStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::UdtStruct" + } + } pub static __SPEC_XDR_TYPE_UDTSTRUCT: [u8; UdtStruct::__SPEC_XDR_VIEW.const_xdr_len()] = UdtStruct::spec_xdr(); impl UdtStruct { @@ -5422,7 +5500,7 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UdtStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5955,6 +6033,12 @@ mod test_with_wasm { } } } + impl UdtRecursive { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::UdtRecursive" + } + } pub static __SPEC_XDR_TYPE_UDTRECURSIVE: [u8; UdtRecursive::__SPEC_XDR_VIEW .const_xdr_len()] = UdtRecursive::spec_xdr(); impl UdtRecursive { @@ -5963,7 +6047,7 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtRecursive"), + name: soroban_sdk::xdr::StringMView::new_str(UdtRecursive::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -5977,8 +6061,8 @@ mod test_with_wasm { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UdtRecursive", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -6446,6 +6530,12 @@ mod test_with_wasm { } } } + impl RecursiveToEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::RecursiveToEnum" + } + } pub static __SPEC_XDR_TYPE_RECURSIVETOENUM: [u8; RecursiveToEnum::__SPEC_XDR_VIEW .const_xdr_len()] = RecursiveToEnum::spec_xdr(); impl RecursiveToEnum { @@ -6454,7 +6544,9 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"RecursiveToEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + RecursiveToEnum::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -6469,8 +6561,8 @@ mod test_with_wasm { key_type: &soroban_sdk::xdr::ScSpecTypeDefView::U32, value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"RecursiveEnum", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -6962,6 +7054,12 @@ mod test_with_wasm { } } } + impl ContractContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::ContractContext" + } + } pub static __SPEC_XDR_TYPE_CONTRACTCONTEXT: [u8; ContractContext::__SPEC_XDR_VIEW .const_xdr_len()] = ContractContext::spec_xdr(); impl ContractContext { @@ -6970,7 +7068,9 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractContext"), + name: soroban_sdk::xdr::StringMView::new_str( + ContractContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -7530,6 +7630,12 @@ mod test_with_wasm { } } } + impl SubContractInvocation { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::SubContractInvocation" + } + } pub static __SPEC_XDR_TYPE_SUBCONTRACTINVOCATION: [u8; SubContractInvocation::__SPEC_XDR_VIEW.const_xdr_len()] = SubContractInvocation::spec_xdr(); @@ -7539,15 +7645,17 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"SubContractInvocation"), + name: soroban_sdk::xdr::StringMView::new_str( + SubContractInvocation::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"context"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -7559,8 +7667,8 @@ mod test_with_wasm { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"InvokerContractAuthEntry", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -8045,6 +8153,12 @@ mod test_with_wasm { } } } + impl CreateContractHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::CreateContractHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTHOSTFNCONTEXT: [u8; CreateContractHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractHostFnContext::spec_xdr(); @@ -8054,15 +8168,17 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"CreateContractHostFnContext"), + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractHostFnContext::spec_type_name(), + ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractExecutable", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -8584,6 +8700,12 @@ mod test_with_wasm { } } } + impl CreateContractWithConstructorHostFnContext { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::CreateContractWithConstructorHostFnContext" + } + } pub static __SPEC_XDR_TYPE_CREATECONTRACTWITHCONSTRUCTORHOSTFNCONTEXT: [u8; CreateContractWithConstructorHostFnContext::__SPEC_XDR_VIEW.const_xdr_len()] = CreateContractWithConstructorHostFnContext::spec_xdr(); @@ -8593,8 +8715,8 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", + name: soroban_sdk::xdr::StringMView::new_str( + CreateContractWithConstructorHostFnContext::spec_type_name(), ), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { @@ -8611,8 +8733,8 @@ mod test_with_wasm { name: soroban_sdk::xdr::StringMView::new(b"executable"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractExecutable", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -9238,6 +9360,12 @@ mod test_with_wasm { } } } + impl UdtEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::UdtEnum" + } + } pub static __SPEC_XDR_TYPE_UDTENUM: [u8; UdtEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UdtEnum::spec_xdr(); impl UdtEnum { @@ -9246,7 +9374,7 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UdtEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -9261,8 +9389,8 @@ mod test_with_wasm { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UdtStruct", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -9276,8 +9404,8 @@ mod test_with_wasm { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UdtEnum2", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -9291,8 +9419,8 @@ mod test_with_wasm { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"UdtTuple", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -9990,6 +10118,12 @@ mod test_with_wasm { } } } + impl RecursiveEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::RecursiveEnum" + } + } pub static __SPEC_XDR_TYPE_RECURSIVEENUM: [u8; RecursiveEnum::__SPEC_XDR_VIEW .const_xdr_len()] = RecursiveEnum::spec_xdr(); impl RecursiveEnum { @@ -9998,7 +10132,9 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"RecursiveEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + RecursiveEnum::spec_type_name(), + ), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -10013,8 +10149,8 @@ mod test_with_wasm { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"RecursiveToEnum", + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), }, ), @@ -10608,68 +10744,67 @@ mod test_with_wasm { } } } + impl Context { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::Context" + } + } pub static __SPEC_XDR_TYPE_CONTEXT: [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] = Context::spec_xdr(); impl Context { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0( - soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Context"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"ContractContext", - ), - }, + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str(Context::spec_type_name()), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - ]), - }, - ); + }), + ], + ), + }); pub const fn spec_xdr() -> [u8; Context::__SPEC_XDR_VIEW.const_xdr_len()] { Context::__SPEC_XDR_VIEW.const_to_xdr() } @@ -11339,6 +11474,12 @@ mod test_with_wasm { } } } + impl ContractExecutable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::ContractExecutable" + } + } pub static __SPEC_XDR_TYPE_CONTRACTEXECUTABLE: [u8; ContractExecutable::__SPEC_XDR_VIEW .const_xdr_len()] = ContractExecutable::spec_xdr(); impl ContractExecutable { @@ -11347,7 +11488,9 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"ContractExecutable"), + name: soroban_sdk::xdr::StringMView::new_str( + ContractExecutable::spec_type_name(), + ), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -11904,69 +12047,70 @@ mod test_with_wasm { } } } + impl InvokerContractAuthEntry { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::InvokerContractAuthEntry" + } + } pub static __SPEC_XDR_TYPE_INVOKERCONTRACTAUTHENTRY: [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] = InvokerContractAuthEntry::spec_xdr(); impl InvokerContractAuthEntry { - const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0( - soroban_sdk::xdr::ScSpecUdtUnionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"InvokerContractAuthEntry"), - cases: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Contract"), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"SubContractInvocation", - ), - }, + const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + lib: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new_str( + InvokerContractAuthEntry::spec_type_name(), + ), + cases: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"Contract"), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( - soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithCtorHostFn", - ), - type_: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new( - b"CreateContractWithConstructorHostFnContext", - ), - }, + }), + soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0(soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new( + b"CreateContractWithCtorHostFn", + ), + type_: soroban_sdk::xdr::VecMView::new( + &[ + soroban_sdk::xdr::ScSpecTypeDefView::Udt(soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), ), - ]), - }, + }), + ], ), - ]), - }, - ); + }), + ], + ), + }); pub const fn spec_xdr( ) -> [u8; InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_xdr_len()] { InvokerContractAuthEntry::__SPEC_XDR_VIEW.const_to_xdr() @@ -12699,6 +12843,12 @@ mod test_with_wasm { } } } + impl Executable { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::Executable" + } + } pub static __SPEC_XDR_TYPE_EXECUTABLE: [u8; Executable::__SPEC_XDR_VIEW.const_xdr_len()] = Executable::spec_xdr(); impl Executable { @@ -12707,7 +12857,7 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Executable"), + name: soroban_sdk::xdr::StringMView::new_str(Executable::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::TupleV0( soroban_sdk::xdr::ScSpecUdtUnionCaseTupleV0View { @@ -13288,6 +13438,12 @@ mod test_with_wasm { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } + impl UdtEnum2 { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::test_with_wasm::contract::UdtEnum2" + } + } pub static __SPEC_XDR_TYPE_UDTENUM2: [u8; UdtEnum2::__SPEC_XDR_VIEW.const_xdr_len()] = UdtEnum2::spec_xdr(); impl UdtEnum2 { @@ -13296,7 +13452,7 @@ mod test_with_wasm { soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum2"), + name: soroban_sdk::xdr::StringMView::new_str(UdtEnum2::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), diff --git a/tests-expanded/test_udt_wasm32v1-none.rs b/tests-expanded/test_udt_wasm32v1-none.rs index 93314821d..d3f78e4b9 100644 --- a/tests-expanded/test_udt_wasm32v1-none.rs +++ b/tests-expanded/test_udt_wasm32v1-none.rs @@ -49,6 +49,12 @@ impl ::core::cmp::PartialEq for UdtEnum2 { __self_discr == __arg1_discr } } +impl UdtEnum2 { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtEnum2" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UDTENUM2: [u8; UdtEnum2::__SPEC_XDR_VIEW.const_xdr_len()] = UdtEnum2::spec_xdr(); @@ -57,7 +63,7 @@ impl UdtEnum2 { soroban_sdk::xdr::ScSpecEntryView::UdtEnumV0(soroban_sdk::xdr::ScSpecUdtEnumV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum2"), + name: soroban_sdk::xdr::StringMView::new_str(UdtEnum2::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtEnumCaseV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -188,6 +194,12 @@ impl ::core::cmp::PartialEq for UdtEnum { } } } +impl UdtEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UDTENUM: [u8; UdtEnum::__SPEC_XDR_VIEW.const_xdr_len()] = UdtEnum::spec_xdr(); @@ -196,7 +208,7 @@ impl UdtEnum { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum"), + name: soroban_sdk::xdr::StringMView::new_str(UdtEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -211,7 +223,9 @@ impl UdtEnum { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtStruct"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -224,7 +238,9 @@ impl UdtEnum { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum2"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -237,7 +253,9 @@ impl UdtEnum { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtTuple"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -407,6 +425,12 @@ impl ::core::cmp::PartialEq for UdtTuple { self.0 == other.0 && self.1 == other.1 } } +impl UdtTuple { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtTuple" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UDTTUPLE: [u8; UdtTuple::__SPEC_XDR_VIEW.const_xdr_len()] = UdtTuple::spec_xdr(); @@ -415,7 +439,7 @@ impl UdtTuple { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtTuple"), + name: soroban_sdk::xdr::StringMView::new_str(UdtTuple::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -546,6 +570,12 @@ impl ::core::cmp::PartialEq for UdtStruct { self.a == other.a && self.b == other.b && self.c == other.c } } +impl UdtStruct { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtStruct" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UDTSTRUCT: [u8; UdtStruct::__SPEC_XDR_VIEW.const_xdr_len()] = UdtStruct::spec_xdr(); @@ -554,7 +584,7 @@ impl UdtStruct { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtStruct"), + name: soroban_sdk::xdr::StringMView::new_str(UdtStruct::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -695,6 +725,12 @@ impl ::core::cmp::PartialEq for UdtRecursive { self.a == other.a && self.b == other.b } } +impl UdtRecursive { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::UdtRecursive" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_UDTRECURSIVE: [u8; UdtRecursive::__SPEC_XDR_VIEW.const_xdr_len()] = UdtRecursive::spec_xdr(); @@ -703,7 +739,7 @@ impl UdtRecursive { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"UdtRecursive"), + name: soroban_sdk::xdr::StringMView::new_str(UdtRecursive::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -717,7 +753,9 @@ impl UdtRecursive { &soroban_sdk::xdr::ScSpecTypeVecView { element_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtRecursive"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -838,6 +876,12 @@ impl ::core::cmp::PartialEq for RecursiveToEnum { self.a == other.a && self.b == other.b } } +impl RecursiveToEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::RecursiveToEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_RECURSIVETOENUM: [u8; RecursiveToEnum::__SPEC_XDR_VIEW.const_xdr_len()] = RecursiveToEnum::spec_xdr(); @@ -846,7 +890,7 @@ impl RecursiveToEnum { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"RecursiveToEnum"), + name: soroban_sdk::xdr::StringMView::new_str(RecursiveToEnum::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), @@ -861,7 +905,9 @@ impl RecursiveToEnum { key_type: &soroban_sdk::xdr::ScSpecTypeDefView::U32, value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"RecursiveEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -989,6 +1035,12 @@ impl ::core::cmp::PartialEq for RecursiveEnum { } } } +impl RecursiveEnum { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_udt::RecursiveEnum" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_RECURSIVEENUM: [u8; RecursiveEnum::__SPEC_XDR_VIEW.const_xdr_len()] = RecursiveEnum::spec_xdr(); @@ -997,7 +1049,7 @@ impl RecursiveEnum { soroban_sdk::xdr::ScSpecEntryView::UdtUnionV0(soroban_sdk::xdr::ScSpecUdtUnionV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"RecursiveEnum"), + name: soroban_sdk::xdr::StringMView::new_str(RecursiveEnum::spec_type_name()), cases: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtUnionCaseV0View::VoidV0( soroban_sdk::xdr::ScSpecUdtUnionCaseVoidV0View { @@ -1012,7 +1064,9 @@ impl RecursiveEnum { type_: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"RecursiveToEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), ]), @@ -1180,7 +1234,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"a"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -1189,7 +1245,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"b"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -1223,7 +1281,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"a"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtRecursive"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -1233,7 +1293,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeOptionView { value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"UdtRecursive"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -1269,7 +1331,9 @@ impl Contract { name: soroban_sdk::xdr::StringMView::new(b"a"), type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"RecursiveEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, @@ -1286,7 +1350,9 @@ impl Contract { &soroban_sdk::xdr::ScSpecTypeOptionView { value_type: &soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"RecursiveEnum"), + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), }, ), }, diff --git a/tests-expanded/test_workspace_contract_tests.rs b/tests-expanded/test_workspace_contract_tests.rs index ae0008891..54da69ee4 100644 --- a/tests-expanded/test_workspace_contract_tests.rs +++ b/tests-expanded/test_workspace_contract_tests.rs @@ -160,7 +160,7 @@ impl Contract { inputs: soroban_sdk::xdr::VecMView::new(&[]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Value"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); diff --git a/tests-expanded/test_workspace_contract_wasm32v1-none.rs b/tests-expanded/test_workspace_contract_wasm32v1-none.rs index 62d1bbf28..d7130e0aa 100644 --- a/tests-expanded/test_workspace_contract_wasm32v1-none.rs +++ b/tests-expanded/test_workspace_contract_wasm32v1-none.rs @@ -49,7 +49,7 @@ impl Contract { inputs: soroban_sdk::xdr::VecMView::new(&[]), outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::Udt( soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new(b"Value"), + name: soroban_sdk::xdr::StringMView::new_str(::spec_type_name()), }, )]), }); diff --git a/tests-expanded/test_workspace_lib_tests.rs b/tests-expanded/test_workspace_lib_tests.rs index 1d8a878dd..757f09314 100644 --- a/tests-expanded/test_workspace_lib_tests.rs +++ b/tests-expanded/test_workspace_lib_tests.rs @@ -33,13 +33,19 @@ impl ::core::cmp::PartialEq for Value { self.value == other.value } } +impl Value { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_workspace_lib::Value" + } +} pub static __SPEC_XDR_TYPE_VALUE: [u8; Value::__SPEC_XDR_VIEW.const_xdr_len()] = Value::spec_xdr(); impl Value { const __SPEC_XDR_VIEW: soroban_sdk::xdr::ScSpecEntryView<'static> = soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Value"), + name: soroban_sdk::xdr::StringMView::new_str(Value::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), diff --git a/tests-expanded/test_workspace_lib_wasm32v1-none.rs b/tests-expanded/test_workspace_lib_wasm32v1-none.rs index e4336695b..8902e089f 100644 --- a/tests-expanded/test_workspace_lib_wasm32v1-none.rs +++ b/tests-expanded/test_workspace_lib_wasm32v1-none.rs @@ -33,6 +33,12 @@ impl ::core::cmp::PartialEq for Value { self.value == other.value } } +impl Value { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_workspace_lib::Value" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_TYPE_VALUE: [u8; Value::__SPEC_XDR_VIEW.const_xdr_len()] = Value::spec_xdr(); impl Value { @@ -40,7 +46,7 @@ impl Value { soroban_sdk::xdr::ScSpecEntryView::UdtStructV0(soroban_sdk::xdr::ScSpecUdtStructV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"Value"), + name: soroban_sdk::xdr::StringMView::new_str(Value::spec_type_name()), fields: soroban_sdk::xdr::VecMView::new(&[ soroban_sdk::xdr::ScSpecUdtStructFieldV0View { doc: soroban_sdk::xdr::StringMView::new(b""), From 14ef20d7d1d1a269ef947811864eb4343f238cc5 Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Fri, 7 Aug 2026 13:18:28 +0000 Subject: [PATCH 02/11] resolve udt names to module paths --- soroban-spec-rust/src/syn_ext.rs | 167 ++++++++++++++++++++----------- 1 file changed, 108 insertions(+), 59 deletions(-) diff --git a/soroban-spec-rust/src/syn_ext.rs b/soroban-spec-rust/src/syn_ext.rs index 2caa9ca48..a3aff4a38 100644 --- a/soroban-spec-rust/src/syn_ext.rs +++ b/soroban-spec-rust/src/syn_ext.rs @@ -1,6 +1,7 @@ -use std::collections::{HashMap, HashSet}; +use std::collections::HashSet; -use proc_macro2::Ident; +use proc_macro2::{Ident, TokenStream}; +use quote::quote; use stellar_xdr::{ScSymbol, StringM}; use crate::types::GenerateError; @@ -40,62 +41,95 @@ pub fn str_to_ident(s: &(impl IntoIdent + ?Sized)) -> Result Vec<&str> { + name.split("::").collect() +} + /// The last `::`-separated segment of a fully qualified spec type name. fn last_segment(name: &str) -> &str { name.rsplit("::").next().unwrap_or(name) } +/// A Rust identifier for one segment of a qualified name. +/// +/// A module of the crate the type came from can be named for a Rust keyword, so +/// a segment that is not an identifier on its own is emitted raw. +fn segment_ident(s: &str) -> Result { + str_to_ident(s).or_else(|_| str_to_ident(format!("r#{s}").as_str())) +} + /// The Rust identifiers that name the user-defined types of a spec. /// /// A spec names a user-defined type by its fully qualified name -/// (`crate::module::Type`), which is not a Rust identifier, so generated -/// bindings name it by its last segment. Two types defined in different modules -/// can share a last segment, so a segment already claimed is numbered. +/// (`crate::module::Type`). Generated bindings mirror that name as a module +/// path, so every type is reachable at the path it reports for itself and two +/// types that share a last segment stay distinct. +/// +/// For the bindings to stay usable by name, the types are also named at the root +/// of the generated module. Only one type can claim a given last segment there, +/// so the first to claim it is named at the root and the rest are reached only +/// by their full path. #[derive(Debug, Default)] pub struct TypeNames { - renamed: HashMap, + defined: Vec, + aliased: HashSet, } impl TypeNames { - /// Resolves the identifiers for the fully qualified names of every - /// user-defined type a spec defines. + /// Resolves the names of every user-defined type a spec defines. pub fn new<'a>(defined: impl IntoIterator) -> Self { - // The first type to claim a last segment keeps it, so a type only ever - // loses its own name to one that came before it, never to a number - // handed to a type that collided with something else. + let defined: Vec = defined.into_iter().map(str::to_string).collect(); let mut taken = HashSet::new(); - let colliding: Vec<&str> = defined - .into_iter() - .filter(|name| !taken.insert(last_segment(name).to_string())) + let aliased = defined + .iter() + .filter(|name| taken.insert(last_segment(name).to_string())) + .cloned() .collect(); + Self { defined, aliased } + } - let mut renamed = HashMap::new(); - for name in colliding { - let base = last_segment(name); - let mut n = 1u32; - let ident = loop { - n += 1; - let ident = format!("{base}{n}"); - if taken.insert(ident.clone()) { - break ident; - } - }; - renamed.insert(name.to_string(), ident); - } - Self { renamed } - } - - /// The Rust identifier naming the user-defined type the given fully - /// qualified spec name refers to. - /// - /// A name this was not built from resolves to its own last segment, which is - /// what a spec containing only that one type would produce. + /// The identifier declaring the type, which is the last segment of its name. pub fn ident(&self, name: &(impl IntoIdent + ?Sized)) -> Result { + segment_ident(last_segment(&name.to_name()?)) + } + + /// The path referring to the type from `depth` modules below the root of the + /// generated module. + /// + /// Every reference is written from the root down, reaching it by stepping up + /// out of the module the reference is written in, so that a reference means + /// the same thing wherever it appears. + pub fn path( + &self, + name: &(impl IntoIdent + ?Sized), + depth: usize, + ) -> Result { let name = name.to_name()?; - match self.renamed.get(&name) { - Some(ident) => str_to_ident(ident.as_str()), - None => str_to_ident(last_segment(&name)), - } + let segments = segments(&name) + .into_iter() + .map(segment_ident) + .collect::, _>>()?; + let up = std::iter::repeat_n(quote!(super::), depth); + Ok(quote! { #(#up)* #(#segments)::* }) + } + + /// The module path a type is defined in, which is its name without its last + /// segment. + pub fn module_of(name: &str) -> Vec<&str> { + let mut s = segments(name); + s.pop(); + s + } + + /// The types this defines, in the order they were given. + pub fn defined(&self) -> impl Iterator { + self.defined.iter().map(String::as_str) + } + + /// Whether the type is the one named at the root for its last segment. + pub fn is_aliased(&self, name: &str) -> bool { + self.aliased.contains(name) } } @@ -104,35 +138,50 @@ mod test { use super::TypeNames; #[test] - fn names_by_last_segment() { - let names = TypeNames::new(["a::b::Thing", "a::c::Other"]); + fn declares_a_type_by_its_last_segment() { + let names = TypeNames::new(["a::b::Thing"]); assert_eq!(names.ident("a::b::Thing").unwrap(), "Thing"); - assert_eq!(names.ident("a::c::Other").unwrap(), "Other"); } #[test] - fn numbers_a_last_segment_already_claimed() { - // The first to claim `Thing` keeps it; the rest are numbered in order. - let names = TypeNames::new(["a::b::Thing", "a::c::Thing", "a::d::Thing"]); - assert_eq!(names.ident("a::b::Thing").unwrap(), "Thing"); - assert_eq!(names.ident("a::c::Thing").unwrap(), "Thing2"); - assert_eq!(names.ident("a::d::Thing").unwrap(), "Thing3"); + fn refers_to_a_type_by_its_whole_path() { + let names = TypeNames::new(["a::b::Thing"]); + assert_eq!( + names.path("a::b::Thing", 0).unwrap().to_string(), + "a :: b :: Thing" + ); } #[test] - fn skips_a_number_taken_by_a_type_of_that_name() { - // `Thing2` is a type in its own right, so the collision numbering steps - // over it rather than colliding with it in turn. - let names = TypeNames::new(["a::b::Thing", "a::c::Thing2", "a::d::Thing"]); - assert_eq!(names.ident("a::b::Thing").unwrap(), "Thing"); - assert_eq!(names.ident("a::c::Thing2").unwrap(), "Thing2"); - assert_eq!(names.ident("a::d::Thing").unwrap(), "Thing3"); + fn steps_up_out_of_the_module_a_reference_is_written_in() { + let names = TypeNames::new(["a::b::Thing"]); + assert_eq!( + names.path("a::b::Thing", 2).unwrap().to_string(), + "super :: super :: a :: b :: Thing" + ); } #[test] - fn unknown_name_falls_back_to_its_last_segment() { - let names = TypeNames::default(); - assert_eq!(names.ident("a::b::Thing").unwrap(), "Thing"); - assert_eq!(names.ident("Thing").unwrap(), "Thing"); + fn names_a_keyword_segment_raw() { + let names = TypeNames::new(["a::type::Thing"]); + assert_eq!( + names.path("a::type::Thing", 0).unwrap().to_string(), + "a :: r#type :: Thing" + ); + } + + #[test] + fn names_only_the_first_claim_on_a_last_segment_at_the_root() { + // The rest stay reachable, but only by their whole path. + let names = TypeNames::new(["a::b::Thing", "a::c::Thing", "a::d::Other"]); + assert!(names.is_aliased("a::b::Thing")); + assert!(!names.is_aliased("a::c::Thing")); + assert!(names.is_aliased("a::d::Other")); + } + + #[test] + fn a_module_is_a_name_without_its_last_segment() { + assert_eq!(TypeNames::module_of("a::b::Thing"), vec!["a", "b"]); + assert_eq!(TypeNames::module_of("Thing"), Vec::<&str>::new()); } } From e652d4fd58d7b5454aa54781d05d124b9fded8a4 Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Fri, 7 Aug 2026 13:22:13 +0000 Subject: [PATCH 03/11] export TypeNames from the crate root --- soroban-spec-rust/src/lib.rs | 2 +- soroban-spec-rust/src/types.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/soroban-spec-rust/src/lib.rs b/soroban-spec-rust/src/lib.rs index ddba770e4..e4b5dbb17 100644 --- a/soroban-spec-rust/src/lib.rs +++ b/soroban-spec-rust/src/lib.rs @@ -1,6 +1,6 @@ mod syn_ext; -use syn_ext::TypeNames; +pub use syn_ext::TypeNames; pub mod r#trait; pub mod types; diff --git a/soroban-spec-rust/src/types.rs b/soroban-spec-rust/src/types.rs index 780c04992..c8c8236a2 100644 --- a/soroban-spec-rust/src/types.rs +++ b/soroban-spec-rust/src/types.rs @@ -26,7 +26,7 @@ pub enum GenerateError { /// options can be added without breaking callers. /// /// ``` -/// use soroban_spec_rust::{types::generate_struct_with_options, GenerateOptions}; +/// use soroban_spec_rust::{types::generate_struct_with_options, GenerateOptions, TypeNames}; /// use stellar_xdr::ScSpecUdtStructV0; /// /// let spec = ScSpecUdtStructV0 { From bbf63e67aad328b3e5b42e78f9ca64ced143a82a Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Fri, 7 Aug 2026 15:29:55 +0000 Subject: [PATCH 04/11] generate bindings in mods mirroring type paths --- soroban-spec-rust/src/lib.rs | 103 +++++++++++++++++++++++-------- soroban-spec-rust/src/syn_ext.rs | 2 +- soroban-spec-rust/src/trait.rs | 8 ++- soroban-spec-rust/src/types.rs | 44 +++++++------ 4 files changed, 108 insertions(+), 49 deletions(-) diff --git a/soroban-spec-rust/src/lib.rs b/soroban-spec-rust/src/lib.rs index e4b5dbb17..e538f9970 100644 --- a/soroban-spec-rust/src/lib.rs +++ b/soroban-spec-rust/src/lib.rs @@ -1,6 +1,8 @@ mod syn_ext; pub use syn_ext::TypeNames; +use syn_ext::segment_ident; +use std::collections::BTreeMap; pub mod r#trait; pub mod types; @@ -147,38 +149,57 @@ pub fn generate_without_file_with_options( let trait_name = "Contract"; - let trait_ = r#trait::generate_trait(trait_name, &spec_fns, &names)?; - let structs = spec_structs - .iter() - .map(|s| generate_struct_with_options(s, opts, &names)) - .collect::, _>>()?; - let unions = spec_unions - .iter() - .map(|s| generate_union_with_options(s, opts, &names)) - .collect::, _>>()?; - let enums = spec_enums - .iter() - .map(|s| generate_enum_with_options(s, opts, &names)) - .collect::, _>>()?; - let error_enums = spec_error_enums - .iter() - .map(|s| generate_error_enum_with_options(s, opts, &names)) - .collect::, _>>()?; - let events = spec_events - .iter() - .map(|s| generate_event_with_options(s, opts, &names)) - .collect::, _>>()?; + let trait_ = r#trait::generate_trait(trait_name, &spec_fns, &names, 0)?; + + // Each user-defined type is emitted inside modules mirroring its fully + // qualified name, so a type is reachable at the path it reports for itself + // and two types sharing a last segment stay distinct. The depth a type is + // emitted at is how far a reference written inside it has to step back up. + let mut by_module: BTreeMap, Vec> = BTreeMap::new(); + macro_rules! emit { + ($specs:expr, $gen:ident) => { + for spec in $specs.iter() { + let name = spec.name.to_utf8_string_lossy(); + let module: Vec = TypeNames::module_of(&name) + .into_iter() + .map(str::to_string) + .collect(); + let tokens = $gen(spec, opts, &names, module.len())?; + by_module.entry(module).or_default().push(tokens); + } + }; + } + emit!(spec_structs, generate_struct_with_options); + emit!(spec_unions, generate_union_with_options); + emit!(spec_enums, generate_enum_with_options); + emit!(spec_error_enums, generate_error_enum_with_options); + + // An event is named by a symbol rather than a qualified name, so it has no + // path to mirror and stays at the root. + for spec in spec_events.iter() { + let tokens = generate_event_with_options(spec, opts, &names, 0)?; + by_module.entry(Vec::new()).or_default().push(tokens); + } + let types = nest_modules(&by_module, &[])?; + + // The types are named at the root too, so bindings stay usable by bare name. + // Only one type can claim a last segment there; the rest keep their path. + let aliases = names + .defined() + .filter(|n| names.is_aliased(n) && !TypeNames::module_of(n).is_empty()) + .map(|n| { + let path = names.path(n, 0)?; + Ok(quote! { pub use self::#path; }) + }) + .collect::, GenerateError>>()?; Ok(quote! { #[soroban_sdk::contractargs(name = "Args")] #[soroban_sdk::contractclient(name = "Client")] #trait_ - #(#structs)* - #(#unions)* - #(#enums)* - #(#error_enums)* - #(#events)* + #types + #(#aliases)* }) } @@ -197,6 +218,36 @@ pub fn generate_without_file_with_options( /// /// Returns a borrowed slice when no rewrite is needed, otherwise a /// freshly-owned `Vec` with the rewrite applied. +/// Nests generated items into the modules their types are defined in. +/// +/// Walks the module tree from `prefix` down, emitting the items defined at each +/// module alongside a `pub mod` for every distinct segment below it. +fn nest_modules( + by_module: &BTreeMap, Vec>, + prefix: &[String], +) -> Result { + let here = by_module.get(prefix).map(Vec::as_slice).unwrap_or(&[]); + // The distinct next segments below this module. Keys are sorted, so equal + // segments are adjacent and dedup collapses them. + let mut children: Vec<&String> = by_module + .keys() + .filter(|m| m.len() > prefix.len() && m.starts_with(prefix)) + .map(|m| &m[prefix.len()]) + .collect(); + children.dedup(); + let mods = children + .into_iter() + .map(|segment| { + let ident = segment_ident(segment)?; + let mut next = prefix.to_vec(); + next.push(segment.clone()); + let inner = nest_modules(by_module, &next)?; + Ok(quote! { pub mod #ident { #inner } }) + }) + .collect::, GenerateError>>()?; + Ok(quote! { #(#here)* #(#mods)* }) +} + fn apply_error_udt_override(specs: &[ScSpecEntry]) -> Cow<'_, [ScSpecEntry]> { // A user-defined type is named by its fully qualified name, so the enum is // recognized by the last segment of its name, and references are rewritten diff --git a/soroban-spec-rust/src/syn_ext.rs b/soroban-spec-rust/src/syn_ext.rs index a3aff4a38..2ec1f2b3a 100644 --- a/soroban-spec-rust/src/syn_ext.rs +++ b/soroban-spec-rust/src/syn_ext.rs @@ -55,7 +55,7 @@ fn last_segment(name: &str) -> &str { /// /// A module of the crate the type came from can be named for a Rust keyword, so /// a segment that is not an identifier on its own is emitted raw. -fn segment_ident(s: &str) -> Result { +pub fn segment_ident(s: &str) -> Result { str_to_ident(s).or_else(|_| str_to_ident(format!("r#{s}").as_str())) } diff --git a/soroban-spec-rust/src/trait.rs b/soroban-spec-rust/src/trait.rs index 805133bac..f23c5e1fc 100644 --- a/soroban-spec-rust/src/trait.rs +++ b/soroban-spec-rust/src/trait.rs @@ -16,11 +16,12 @@ pub fn generate_trait( name: &str, specs: &[&ScSpecFunctionV0], names: &TypeNames, + depth: usize, ) -> Result { let trait_ident = str_to_ident(name)?; let fns = specs .iter() - .map(|s| generate_function(s, names)) + .map(|s| generate_function(s, names, depth)) .collect::, _>>()?; Ok(quote! { pub trait #trait_ident { #(#fns;)* } @@ -38,6 +39,7 @@ pub fn generate_trait( pub fn generate_function( s: &ScSpecFunctionV0, names: &TypeNames, + depth: usize, ) -> Result { let fn_ident = str_to_ident(&s.name)?; let fn_inputs = s @@ -45,14 +47,14 @@ pub fn generate_function( .iter() .map(|input| { let name = str_to_ident(&input.name)?; - let type_ident = generate_type_ident(&input.type_, names)?; + let type_ident = generate_type_ident(&input.type_, names, depth)?; Ok(quote! { #name: #type_ident }) }) .collect::, GenerateError>>()?; let fn_output = s .outputs .to_option() - .map(|t| generate_type_ident(&t, names)) + .map(|t| generate_type_ident(&t, names, depth)) .transpose()? .map(|t| quote! { -> #t }); Ok(quote! { diff --git a/soroban-spec-rust/src/types.rs b/soroban-spec-rust/src/types.rs index c8c8236a2..a0ef0f274 100644 --- a/soroban-spec-rust/src/types.rs +++ b/soroban-spec-rust/src/types.rs @@ -35,7 +35,7 @@ pub enum GenerateError { /// name: "Point".try_into().unwrap(), /// fields: Default::default(), /// }; -/// let tokens = generate_struct_with_options(&spec, &GenerateOptions::default(), &TypeNames::default()).unwrap(); +/// let tokens = generate_struct_with_options(&spec, &GenerateOptions::default(), &TypeNames::default(), 0).unwrap(); /// assert!(tokens.to_string().contains("struct Point")); /// ``` /// @@ -54,7 +54,7 @@ pub struct GenerateOptions {} /// Constructs a token stream containing a single struct that mirrors the struct /// spec. pub fn generate_struct(spec: &ScSpecUdtStructV0) -> Result { - generate_struct_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) + generate_struct_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) } /// Constructs a token stream containing a single struct that mirrors the struct @@ -63,6 +63,7 @@ pub fn generate_struct_with_options( spec: &ScSpecUdtStructV0, _opts: &GenerateOptions, names: &TypeNames, + depth: usize, ) -> Result { let ident = names.ident(&spec.name)?; @@ -88,7 +89,7 @@ pub fn generate_struct_with_options( .fields .iter() .map(|f| { - let f_type = generate_type_ident(&f.type_, names)?; + let f_type = generate_type_ident(&f.type_, names, depth)?; Ok(quote! { pub #f_type }) }) .collect::, GenerateError>>()?; @@ -103,7 +104,7 @@ pub fn generate_struct_with_options( .iter() .map(|f| { let f_ident = str_to_ident(&f.name)?; - let f_type = generate_type_ident(&f.type_, names)?; + let f_type = generate_type_ident(&f.type_, names, depth)?; Ok(quote! { pub #f_ident: #f_type }) }) .collect::, GenerateError>>()?; @@ -118,7 +119,7 @@ pub fn generate_struct_with_options( /// Constructs a token stream containing a single enum that mirrors the union /// spec. pub fn generate_union(spec: &ScSpecUdtUnionV0) -> Result { - generate_union_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) + generate_union_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) } /// Constructs a token stream containing a single enum that mirrors the union @@ -127,6 +128,7 @@ pub fn generate_union_with_options( spec: &ScSpecUdtUnionV0, _opts: &GenerateOptions, names: &TypeNames, + depth: usize, ) -> Result { let ident = names.ident(&spec.name)?; if spec.lib.len() > 0 { @@ -150,7 +152,7 @@ pub fn generate_union_with_options( let v_type = t .type_ .iter() - .map(|t| generate_type_ident(t, names)) + .map(|t| generate_type_ident(t, names, depth)) .collect::, _>>()?; Ok(quote! { #v_ident ( #(#v_type),* ) }) } @@ -168,7 +170,7 @@ pub fn generate_union_with_options( /// Constructs a token stream containing a single enum that mirrors the enum /// spec. pub fn generate_enum(spec: &ScSpecUdtEnumV0) -> Result { - generate_enum_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) + generate_enum_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) } /// Constructs a token stream containing a single enum that mirrors the enum @@ -177,6 +179,7 @@ pub fn generate_enum_with_options( spec: &ScSpecUdtEnumV0, _opts: &GenerateOptions, names: &TypeNames, + _depth: usize, ) -> Result { let ident = names.ident(&spec.name)?; if spec.lib.len() > 0 { @@ -205,7 +208,7 @@ pub fn generate_enum_with_options( /// Constructs a token stream containing a single enum that mirrors the enum /// spec, that is intended for use with errors. pub fn generate_error_enum(spec: &ScSpecUdtErrorEnumV0) -> Result { - generate_error_enum_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) + generate_error_enum_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) } /// Constructs a token stream containing a single enum that mirrors the enum @@ -214,6 +217,7 @@ pub fn generate_error_enum_with_options( spec: &ScSpecUdtErrorEnumV0, _opts: &GenerateOptions, names: &TypeNames, + _depth: usize, ) -> Result { let ident = names.ident(&spec.name)?; if spec.lib.len() > 0 { @@ -242,7 +246,7 @@ pub fn generate_error_enum_with_options( /// Constructs a token stream containing a single struct that mirrors the event /// spec. pub fn generate_event(spec: &ScSpecEventV0) -> Result { - generate_event_with_options(spec, &GenerateOptions::default(), &TypeNames::default()) + generate_event_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) } /// Constructs a token stream containing a single struct that mirrors the event @@ -251,6 +255,7 @@ pub fn generate_event_with_options( spec: &ScSpecEventV0, _opts: &GenerateOptions, names: &TypeNames, + depth: usize, ) -> Result { let ident = names.ident(&spec.name)?; @@ -266,7 +271,7 @@ pub fn generate_event_with_options( .iter() .map(|p| { let p_ident = str_to_ident(&p.name)?; - let p_type = generate_type_ident(&p.type_, names)?; + let p_type = generate_type_ident(&p.type_, names, depth)?; Ok(match p.location { ScSpecEventParamLocationV0::TopicList => quote! { #[topic] @@ -289,6 +294,7 @@ pub fn generate_event_with_options( pub fn generate_type_ident( spec: &ScSpecTypeDef, names: &TypeNames, + depth: usize, ) -> Result { match spec { ScSpecTypeDef::Val => Ok(quote! { soroban_sdk::Val }), @@ -306,28 +312,28 @@ pub fn generate_type_ident( ScSpecTypeDef::MuxedAddress => Ok(quote! { soroban_sdk::MuxedAddress }), ScSpecTypeDef::String => Ok(quote! { soroban_sdk::String }), ScSpecTypeDef::Option(o) => { - let value_ident = generate_type_ident(&o.value_type, names)?; + let value_ident = generate_type_ident(&o.value_type, names, depth)?; Ok(quote! { Option<#value_ident> }) } ScSpecTypeDef::Result(r) => { - let ok_ident = generate_type_ident(&r.ok_type, names)?; - let error_ident = generate_type_ident(&r.error_type, names)?; + let ok_ident = generate_type_ident(&r.ok_type, names, depth)?; + let error_ident = generate_type_ident(&r.error_type, names, depth)?; Ok(quote! { Result<#ok_ident, #error_ident> }) } ScSpecTypeDef::Vec(v) => { - let element_ident = generate_type_ident(&v.element_type, names)?; + let element_ident = generate_type_ident(&v.element_type, names, depth)?; Ok(quote! { soroban_sdk::Vec<#element_ident> }) } ScSpecTypeDef::Map(m) => { - let key_ident = generate_type_ident(&m.key_type, names)?; - let value_ident = generate_type_ident(&m.value_type, names)?; + let key_ident = generate_type_ident(&m.key_type, names, depth)?; + let value_ident = generate_type_ident(&m.value_type, names, depth)?; Ok(quote! { soroban_sdk::Map<#key_ident, #value_ident> }) } ScSpecTypeDef::Tuple(t) => { let type_idents = t .value_types .iter() - .map(|t| generate_type_ident(t, names)) + .map(|t| generate_type_ident(t, names, depth)) .collect::, _>>()?; Ok(quote! { (#(#type_idents,)*) }) } @@ -336,8 +342,8 @@ pub fn generate_type_ident( Ok(quote! { soroban_sdk::BytesN<#n> }) } ScSpecTypeDef::Udt(u) => { - let ident = names.ident(&u.name)?; - Ok(quote! { #ident }) + let path = names.path(&u.name, depth)?; + Ok(quote! { #path }) } ScSpecTypeDef::Void => Ok(quote! { () }), ScSpecTypeDef::Timepoint => Ok(quote! { soroban_sdk::Timepoint }), From 5727dc54b5a341d59677329d2dfbcead90bbf877 Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Sat, 8 Aug 2026 01:20:54 +0000 Subject: [PATCH 05/11] sort imports in spec-rust lib --- soroban-spec-rust/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/soroban-spec-rust/src/lib.rs b/soroban-spec-rust/src/lib.rs index e538f9970..96aab8794 100644 --- a/soroban-spec-rust/src/lib.rs +++ b/soroban-spec-rust/src/lib.rs @@ -1,8 +1,8 @@ mod syn_ext; -pub use syn_ext::TypeNames; -use syn_ext::segment_ident; use std::collections::BTreeMap; +use syn_ext::segment_ident; +pub use syn_ext::TypeNames; pub mod r#trait; pub mod types; From 46366f3896c0ab0c7ab948b68e4fe5da6d1ca991 Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Tue, 11 Aug 2026 04:06:50 +0000 Subject: [PATCH 06/11] simplify spec type names before generating code --- soroban-sdk/src/tests/contract_docs.rs | 20 +- .../src/tests/contract_udt_raw_identifier.rs | 36 +- soroban-sdk/src/tests/contract_udt_struct.rs | 24 +- .../contract_udt_struct_aliased_import.rs | 12 +- .../src/tests/contract_udt_struct_tuple.rs | 16 +- ...ng_contract_address_executable_wasm.1.json | 8 +- .../test_invoke_contract.1.json | 36 +- soroban-spec-rust/src/lib.rs | 184 +- soroban-spec-rust/src/syn_ext.rs | 174 +- soroban-spec-rust/src/trait.rs | 16 +- soroban-spec-rust/src/types.rs | 68 +- soroban-spec/src/lib.rs | 1 + soroban-spec/src/simplify.rs | 311 +++ tests-expanded/test_attributes_tests.rs | 1721 +++++++++++++---- tests-expanded/test_import_contract_tests.rs | 2 +- .../test_import_contract_wasm32v1-none.rs | 2 +- tests-expanded/test_spec_shaking_v2_tests.rs | 4 +- .../test_spec_shaking_v2_wasm32v1-none.rs | 2 +- tests-expanded/test_udt_tests.rs | 2 +- 19 files changed, 1916 insertions(+), 723 deletions(-) create mode 100644 soroban-spec/src/simplify.rs diff --git a/soroban-sdk/src/tests/contract_docs.rs b/soroban-sdk/src/tests/contract_docs.rs index acff3009e..15462376f 100644 --- a/soroban-sdk/src/tests/contract_docs.rs +++ b/soroban-sdk/src/tests/contract_docs.rs @@ -57,7 +57,9 @@ mod struct_ { let entry = ScSpecEntry::from_xdr(__SPEC_XDR_TYPE_S, Limits::none()).unwrap(); let expect = ScSpecEntry::UdtStructV0(ScSpecUdtStructV0 { doc: "S holds a and\nb.".try_into().unwrap(), - name: "S".try_into().unwrap(), + name: "soroban_sdk::tests::contract_docs::struct_::S" + .try_into() + .unwrap(), lib: "".try_into().unwrap(), fields: [ ScSpecUdtStructFieldV0 { @@ -98,7 +100,9 @@ mod struct_tuple { let entry = ScSpecEntry::from_xdr(__SPEC_XDR_TYPE_S, Limits::none()).unwrap(); let expect = ScSpecEntry::UdtStructV0(ScSpecUdtStructV0 { doc: "S holds two u64s.".try_into().unwrap(), - name: "S".try_into().unwrap(), + name: "soroban_sdk::tests::contract_docs::struct_tuple::S" + .try_into() + .unwrap(), lib: "".try_into().unwrap(), fields: [ ScSpecUdtStructFieldV0 { @@ -145,7 +149,9 @@ mod enum_ { let expect = ScSpecEntry::UdtUnionV0(ScSpecUdtUnionV0 { doc: "E has variants A and B.".try_into().unwrap(), lib: "".try_into().unwrap(), - name: "E".try_into().unwrap(), + name: "soroban_sdk::tests::contract_docs::enum_::E" + .try_into() + .unwrap(), cases: [ ScSpecUdtUnionCaseV0::VoidV0(ScSpecUdtUnionCaseVoidV0 { doc: "A is\na.".try_into().unwrap(), @@ -191,7 +197,9 @@ mod enum_int { let entry = ScSpecEntry::from_xdr(__SPEC_XDR_TYPE_E, Limits::none()).unwrap(); let expect = ScSpecEntry::UdtEnumV0(ScSpecUdtEnumV0 { doc: "E has variants A and B.".try_into().unwrap(), - name: "E".try_into().unwrap(), + name: "soroban_sdk::tests::contract_docs::enum_int::E" + .try_into() + .unwrap(), lib: "".try_into().unwrap(), cases: [ ScSpecUdtEnumCaseV0 { @@ -235,7 +243,9 @@ mod enum_error_int { let entry = ScSpecEntry::from_xdr(__SPEC_XDR_TYPE_E, Limits::none()).unwrap(); let expect = ScSpecEntry::UdtErrorEnumV0(ScSpecUdtErrorEnumV0 { doc: "E has variants A and B.".try_into().unwrap(), - name: "E".try_into().unwrap(), + name: "soroban_sdk::tests::contract_docs::enum_error_int::E" + .try_into() + .unwrap(), lib: "".try_into().unwrap(), cases: [ ScSpecUdtErrorEnumCaseV0 { diff --git a/soroban-sdk/src/tests/contract_udt_raw_identifier.rs b/soroban-sdk/src/tests/contract_udt_raw_identifier.rs index f2a116cfc..9e31daea4 100644 --- a/soroban-sdk/src/tests/contract_udt_raw_identifier.rs +++ b/soroban-sdk/src/tests/contract_udt_raw_identifier.rs @@ -126,17 +126,23 @@ fn test_spec_contract() { doc: "".try_into().unwrap(), name: "fn".try_into().unwrap(), type_: ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "TestEnum".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_raw_identifier::TestEnum" + .try_into() + .unwrap(), }), }] .try_into() .unwrap(), outputs: [ScSpecTypeDef::Result(Box::new(ScSpecTypeResult { ok_type: Box::new(ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "TestType".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_raw_identifier::TestType" + .try_into() + .unwrap(), })), error_type: Box::new(ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "TestError".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_raw_identifier::TestError" + .try_into() + .unwrap(), })), }))] .try_into() @@ -179,7 +185,9 @@ fn test_spec_struct() { ScSpecEntry::UdtStructV0(ScSpecUdtStructV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), - name: "TestType".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_raw_identifier::TestType" + .try_into() + .unwrap(), fields: [ ScSpecUdtStructFieldV0 { doc: "".try_into().unwrap(), @@ -208,7 +216,9 @@ fn test_spec_struct() { ScSpecEntry::UdtStructV0(ScSpecUdtStructV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), - name: "type".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_raw_identifier::type" + .try_into() + .unwrap(), fields: [ScSpecUdtStructFieldV0 { doc: "".try_into().unwrap(), name: "value".try_into().unwrap(), @@ -226,7 +236,9 @@ fn test_spec_struct() { ScSpecEntry::UdtStructV0(ScSpecUdtStructV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), - name: "TupleStruct".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_raw_identifier::TupleStruct" + .try_into() + .unwrap(), fields: [ ScSpecUdtStructFieldV0 { doc: "".try_into().unwrap(), @@ -253,7 +265,9 @@ fn test_spec_enum() { ScSpecEntry::UdtEnumV0(ScSpecUdtEnumV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), - name: "TestEnum".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_raw_identifier::TestEnum" + .try_into() + .unwrap(), cases: [ ScSpecUdtEnumCaseV0 { doc: "".try_into().unwrap(), @@ -277,7 +291,9 @@ fn test_spec_enum() { ScSpecEntry::UdtErrorEnumV0(ScSpecUdtErrorEnumV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), - name: "TestError".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_raw_identifier::TestError" + .try_into() + .unwrap(), cases: [ScSpecUdtErrorEnumCaseV0 { doc: "".try_into().unwrap(), name: "Error".try_into().unwrap(), @@ -295,7 +311,9 @@ fn test_spec_enum() { ScSpecEntry::UdtUnionV0(ScSpecUdtUnionV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), - name: "TestTupleEnum".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_raw_identifier::TestTupleEnum" + .try_into() + .unwrap(), cases: [ ScSpecUdtUnionCaseV0::TupleV0(ScSpecUdtUnionCaseTupleV0 { doc: "".try_into().unwrap(), diff --git a/soroban-sdk/src/tests/contract_udt_struct.rs b/soroban-sdk/src/tests/contract_udt_struct.rs index b4f1085b0..ba4e7174c 100644 --- a/soroban-sdk/src/tests/contract_udt_struct.rs +++ b/soroban-sdk/src/tests/contract_udt_struct.rs @@ -135,14 +135,18 @@ fn test_spec() { doc: "".try_into().unwrap(), name: "a".try_into().unwrap(), type_: ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "Udt".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct::Udt" + .try_into() + .unwrap(), }), }, ScSpecFunctionInputV0 { doc: "".try_into().unwrap(), name: "b".try_into().unwrap(), type_: ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "Udt".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct::Udt" + .try_into() + .unwrap(), }), }, ] @@ -151,10 +155,14 @@ fn test_spec() { outputs: vec![ScSpecTypeDef::Tuple(Box::new(ScSpecTypeTuple { value_types: vec![ ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "Udt".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct::Udt" + .try_into() + .unwrap(), }), ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "Udt".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct::Udt" + .try_into() + .unwrap(), }), ] .try_into() @@ -178,14 +186,18 @@ fn test_spec_with_long_names() { doc: "".try_into().unwrap(), name: "a".try_into().unwrap(), type_: ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "UdtWithLongName".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct::UdtWithLongName" + .try_into() + .unwrap(), }), }, ScSpecFunctionInputV0 { doc: "".try_into().unwrap(), name: "b".try_into().unwrap(), type_: ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "UdtWithLongName".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct::UdtWithLongName" + .try_into() + .unwrap(), }), }, ] diff --git a/soroban-sdk/src/tests/contract_udt_struct_aliased_import.rs b/soroban-sdk/src/tests/contract_udt_struct_aliased_import.rs index a4722626f..a2ab8a4c5 100644 --- a/soroban-sdk/src/tests/contract_udt_struct_aliased_import.rs +++ b/soroban-sdk/src/tests/contract_udt_struct_aliased_import.rs @@ -98,7 +98,9 @@ fn test_spec() { let expect = ScSpecEntry::UdtStructV0(ScSpecUdtStructV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), - name: "Outer".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct_aliased_import::Outer" + .try_into() + .unwrap(), fields: vec![ ScSpecUdtStructFieldV0 { doc: "".try_into().unwrap(), @@ -111,7 +113,9 @@ fn test_spec() { type_: ScSpecTypeDef::Udt(ScSpecTypeUdt { // See module doc comment: named after the aliased // import, not the type's own spec'd name (below). - name: "Renamed".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct_aliased_import::inner::Inner" + .try_into() + .unwrap(), }), }, ] @@ -126,7 +130,9 @@ fn test_spec() { let expect = ScSpecEntry::UdtStructV0(ScSpecUdtStructV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), - name: "Inner".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct_aliased_import::inner::Inner" + .try_into() + .unwrap(), fields: vec![ ScSpecUdtStructFieldV0 { doc: "".try_into().unwrap(), diff --git a/soroban-sdk/src/tests/contract_udt_struct_tuple.rs b/soroban-sdk/src/tests/contract_udt_struct_tuple.rs index 207926e96..8a9ccaace 100644 --- a/soroban-sdk/src/tests/contract_udt_struct_tuple.rs +++ b/soroban-sdk/src/tests/contract_udt_struct_tuple.rs @@ -81,14 +81,18 @@ fn test_spec() { doc: "".try_into().unwrap(), name: "a".try_into().unwrap(), type_: ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "Udt".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct_tuple::Udt" + .try_into() + .unwrap(), }), }, ScSpecFunctionInputV0 { doc: "".try_into().unwrap(), name: "b".try_into().unwrap(), type_: ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "Udt".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct_tuple::Udt" + .try_into() + .unwrap(), }), }, ] @@ -97,10 +101,14 @@ fn test_spec() { outputs: std::vec![ScSpecTypeDef::Tuple(Box::new(ScSpecTypeTuple { value_types: std::vec![ ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "Udt".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct_tuple::Udt" + .try_into() + .unwrap(), }), ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: "Udt".try_into().unwrap(), + name: "soroban_sdk::tests::contract_udt_struct_tuple::Udt" + .try_into() + .unwrap(), }), ] .try_into() diff --git a/soroban-sdk/test_snapshots/tests/address/test_get_existing_contract_address_executable_wasm.1.json b/soroban-sdk/test_snapshots/tests/address/test_get_existing_contract_address_executable_wasm.1.json index cfcaddd85..70c63bebd 100644 --- a/soroban-sdk/test_snapshots/tests/address/test_get_existing_contract_address_executable_wasm.1.json +++ b/soroban-sdk/test_snapshots/tests/address/test_get_existing_contract_address_executable_wasm.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "1a457813221c5f226d780f3b5d0f3ce7d298570361765353760ef9aae0251d94" + "wasm": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7" }, "constructor_args": [] } @@ -70,7 +70,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "1a457813221c5f226d780f3b5d0f3ce7d298570361765353760ef9aae0251d94" + "wasm": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7" }, "storage": null } @@ -104,8 +104,8 @@ } } }, - "hash": "1a457813221c5f226d780f3b5d0f3ce7d298570361765353760ef9aae0251d94", - "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be801537045635631f3b0ab40690d48b4537045635631aff793ba9e4dde9a537045635631eb9f12269a76282a53704563563116276438ffc9b1f8537045635631c81291fed713f59c537045635631ff7b5620ab0ddc64537045635631e16f55dbd4379814556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc001000090000000087210e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000011746573745f7564743a3a556474456e756d000000000000000000000162000000000007d000000011746573745f7564743a3a556474456e756d000000000000010000000700000002000000000000000000000011746573745f7564743a3a556474456e756d00000000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d000000013746573745f7564743a3a556474537472756374000000000100000000000000045564744300000001000007d000000012746573745f7564743a3a556474456e756d3200000000000100000000000000045564744400000001000007d000000012746573745f7564743a3a5564745475706c65000000000003000000000000000000000012746573745f7564743a3a556474456e756d320000000000020000000000000001410000000000000a0000000000000001420000000000000f00000001000000000000000000000012746573745f7564743a3a5564745475706c6500000000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000013746573745f7564743a3a55647453747275637400000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d000000016746573745f7564743a3a556474526563757273697665000000000001000003e8000007d000000016746573745f7564743a3a556474526563757273697665000000000001000000000000000000000016746573745f7564743a3a55647452656375727369766500000000000200000000000000016100000000000011000000000000000162000000000003ea000007d000000016746573745f7564743a3a556474526563757273697665000000000002000000000000000000000017746573745f7564743a3a526563757273697665456e756d000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d000000019746573745f7564743a3a526563757273697665546f456e756d00000000000001000000000000000000000019746573745f7564743a3a526563757273697665546f456e756d0000000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000036b6579000000000400000001000003e9000003e8000007d000000017746573745f7564743a3a526563757273697665456e756d000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7", + "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be8015370456356311c8f201ad0d286b4537045635631dd0c966136ac0d25537045635631fb28a13fa92d6f1c537045635631241adaa8135d1e1c537045635631131c19bea57cff26537045635631ba36a478487b3dee5370456356314140810c80812d7e556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc001000090000000087210e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000011746573745f7564743a3a556474456e756d000000000000000000000162000000000007d000000011746573745f7564743a3a556474456e756d000000000000010000000700000002000000000000000000000011746573745f7564743a3a556474456e756d00000000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d000000013746573745f7564743a3a556474537472756374000000000100000000000000045564744300000001000007d000000012746573745f7564743a3a556474456e756d3200000000000100000000000000045564744400000001000007d000000012746573745f7564743a3a5564745475706c65000000000003000000000000000000000012746573745f7564743a3a556474456e756d320000000000020000000000000001410000000000000a0000000000000001420000000000000f00000001000000000000000000000012746573745f7564743a3a5564745475706c6500000000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000013746573745f7564743a3a55647453747275637400000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d000000016746573745f7564743a3a556474526563757273697665000000000001000003e8000007d000000016746573745f7564743a3a556474526563757273697665000000000001000000000000000000000016746573745f7564743a3a55647452656375727369766500000000000200000000000000016100000000000011000000000000000162000000000003ea000007d000000016746573745f7564743a3a556474526563757273697665000000000002000000000000000000000017746573745f7564743a3a526563757273697665456e756d000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d000000019746573745f7564743a3a526563757273697665546f456e756d00000000000001000000000000000000000019746573745f7564743a3a526563757273697665546f456e756d0000000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000036b6579000000000400000001000003e9000003e8000007d000000017746573745f7564743a3a526563757273697665456e756d000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/soroban-sdk/test_snapshots/tests/crypto_bls12_381/test_invoke_contract.1.json b/soroban-sdk/test_snapshots/tests/crypto_bls12_381/test_invoke_contract.1.json index 58cca38a8..29caac5a4 100644 --- a/soroban-sdk/test_snapshots/tests/crypto_bls12_381/test_invoke_contract.1.json +++ b/soroban-sdk/test_snapshots/tests/crypto_bls12_381/test_invoke_contract.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "edcc25ddf415ff5bb649f91a69d239027328a7b277cd2d2cabf8baebdfd75995" + "wasm": "1c8b2727f67b812c0112ec080d302f10b4225b41fd306611bdac9a7efb9fbd76" }, "constructor_args": [] } @@ -96,7 +96,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "edcc25ddf415ff5bb649f91a69d239027328a7b277cd2d2cabf8baebdfd75995" + "wasm": "1c8b2727f67b812c0112ec080d302f10b4225b41fd306611bdac9a7efb9fbd76" }, "storage": null } @@ -107,20 +107,6 @@ }, "live_until": 4095 }, - { - "entry": { - "last_modified_ledger_seq": 0, - "data": { - "contract_code": { - "ext": "v0", - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "code": "" - } - }, - "ext": "v0" - }, - "live_until": 4095 - }, { "entry": { "last_modified_ledger_seq": 0, @@ -144,8 +130,22 @@ } } }, - "hash": "edcc25ddf415ff5bb649f91a69d239027328a7b277cd2d2cabf8baebdfd75995", - "code": "0061736d0100000001320960047e7e7e7e017e60017e017e60027e7e017e60000060037e7f7f0060017f0060027f7e0060017f017e60037f7f7f017f026711016d01610000016201380001016301380001016301340001016301650001016301610001016301360002016301630002016301670002017601330001017601310002016201310000016201330002016901610001017801300002016901720002017601670002031413030104050606060607020302020305080808080405017001020205030100110621047f01418080c0000b7f0041c480c0000b7f00419481c0000b7f0041a081c0000b075708066d656d6f727902000c64756d6d795f76657269667900120a66725f7665635f676574001a0667315f6d756c001c0667325f6d756c001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030907010041010b01110aa7171302000b870503027f047e017f23808080800041f0016b22012480808080004100210241002d008080c080001a0240034020024128460d01200141086a20026a4202370300200241086a21020c000b0b0240200042ff018342cc00520d002000419c80c08000ad422086420484200141086aad4220864204844284808080d0001080808080001a2001290308220042ff018342c800520d0020001081808080004280808080708342808080808006520d0020014190016a4100413010a1808080001a200020014190016a4130109380808000200141306a20014190016a413010a3808080001a200141306a10948080800020014190016a20012903101095808080002001280290010d00200129039801210320014190016a410041e00010a1808080001a200320014190016a41e000109380808000200141306a20014190016a41e00010a3808080001a200141306a109480808000200141306a41306a10948080800020014190016a20012903181096808080002001280290010d00200129039801210420014190016a20012903201097808080002001280290010d00200129039801210520014190016a20012903281098808080002001280290014101460d00200129039801210620001082808080001083808080001a20031084808080001085808080001a200520041086808080002103200620041087808080002104420221004101210203402000210520024101712107410021022003210020070d000b200120053703900120014190016a1099808080002105420221004101210203402000210320024101712107410021022004210020070d000b2001200337039001200520014190016a1099808080001088808080002100200141f0016a2480808080002000420151ad0f0b000b1f00200042042001ad4220864204842002ad422086420484108b808080001a0b24000240200041e480c08000413010a080808000417f4a0d000f0b410e109f80808000000b4201017e420121020240200142ff018342c800520d002001108180808000428080808070834280808080800c520d0020002001370308420021020b200020023703000ba60102017f017e024002402001a741ff0171220241c600460d00420121032002410c470d010b41c480c08000ad42208642048442848080808004108c80808000108d8080800021030240024002400240200142ce0083420c520d00200342ff0183420c510d010b20012003108e80808000427f550d010c020b20014208882003420888540d010b20012003108f8080800021010b20002001370308420021030b200020033703000b4d01017f23808080800041106b22022480808080002002200110958080800042012101024020022802000d0020002002290308370308420021010b20002001370300200241106a2480808080000b4201017e420121020240200142ff018342c800520d0020011081808080004280808080708342808080808018520d0020002001370308420021020b200020023703000b17002000ad4220864204844284808080101090808080000b980101017f23808080800041106b2202248080808000200241818080800036020020022802001a024002400240200042ff018342cb00520d00200142ff01834204520d0020001089808080004220882001422088580d0120022000200142848080807083108a8080800010968080800020022802004101470d020b000b109b80808000000b20022903082100200241106a24808080800020000b0b00412b109f80808000000b6501017f23808080800041106b220224808080800020022000109780808000024020022802004101460d00200229030821002002200110968080800020022802004101460d00200020022903081086808080002100200241106a24808080800020000f0b000b6501017f23808080800041106b220224808080800020022000109880808000024020022802004101460d00200229030821002002200110968080800020022802004101460d00200020022903081087808080002100200241106a24808080800020000f0b000b0300000b0900109e80808000000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030baa0301057f02400240200241104f0d00200021030c010b024020002000410020006b41037122046a22054f0d002004417f6a21062000210302402004450d0020042107200021030340200320013a0000200341016a21032007417f6a22070d000b0b20064107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032005470d000b0b024020052005200220046b2202417c716a22034f0d00200141ff017141818284086c2107034020052007360200200541046a22052003490d000b0b200241037121020b02402003200320026a22074f0d002002417f6a2104024020024107712205450d000340200320013a0000200341016a21032005417f6a22050d000b0b20044107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032007470d000b0b20000bb907010c7f23808080800041106b210302400240200241104f0d00200021040c010b024020002000410020006b41037122056a22064f0d002005417f6a2107200021042001210802402005450d002005210920002104200121080340200420082d00003a0000200841016a2108200441016a21042009417f6a22090d000b0b20074107490d000340200420082d00003a0000200441016a200841016a2d00003a0000200441026a200841026a2d00003a0000200441036a200841036a2d00003a0000200441046a200841046a2d00003a0000200441056a200841056a2d00003a0000200441066a200841066a2d00003a0000200441076a200841076a2d00003a0000200841086a2108200441086a22042006470d000b0b2006200220056b2209417c7122076a210402400240200120056a220841037122010d00200620044f0d0120082101034020062001280200360200200141046a2101200641046a22062004490d000c020b0b410021022003410036020c2003410c6a20017221050240410420016b220a410171450d00200520082d00003a0000410121020b0240200a410271450d00200520026a200820026a2f01003b01000b200820016b21022001410374210b200328020c210502400240200641046a2004490d002006210c0c010b4100200b6b411871210d034020062005200b76200241046a22022802002205200d7472360200200641086a210a200641046a220c2106200a2004490d000b0b41002106200341003a0008200341003a00060240024020014101470d00200341086a210d410021014100210a4100210e0c010b200241056a2d0000210a2003200241046a2d000022013a0008200a410874210a4102210e200341066a210d0b02402008410171450d00200d200241046a200e6a2d00003a000020032d0006411074210620032d000821010b200c200a200672200141ff0171724100200b6b411871742005200b76723602000b20094103712102200820076a21010b02402004200420026a22064f0d002002417f6a2109024020024107712208450d000340200420012d00003a0000200141016a2101200441016a21042008417f6a22080d000b0b20094107490d000340200420012d00003a0000200441016a200141016a2d00003a0000200441026a200141026a2d00003a0000200441036a200141036a2d00003a0000200441046a200141046a2d00003a0000200441056a200141056a2d00003a0000200441066a200141066a2d00003a0000200441076a200141076a2d00003a0000200141086a2101200441086a22042006470d000b0b20000b0e0020002001200210a2808080000b0b9e010100418080c0000b940153704563563185570041dc7eb72266706670326672673167320000000e00100002000000100010000300000013001000020000001500100002000000170010000200000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000011a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab00bb1b0e636f6e747261637473706563763000000000000000000000000667315f6d756c000000000002000000000000000170000000000003ee000000600000000000000001730000000000000c00000001000003ee0000006000000000000000000000000667325f6d756c000000000002000000000000000170000000000003ee000000c00000000000000001730000000000000c00000001000003ee000000c000000001000000000000000000000014746573745f626c733a3a44756d6d7950726f6f6600000005000000000000000266700000000003ee00000030000000000000000366703200000003ee000000600000000000000002667200000000000c000000000000000267310000000003ee00000060000000000000000267320000000003ee000000c000000000000000000000000a66725f7665635f676574000000000002000000000000000676616c7565730000000003ea0000000c0000000000000005696e64657800000000000004000000010000000c00000000000000000000000c64756d6d795f76657269667900000001000000000000000570726f6f66000000000007d000000014746573745f626c733a3a44756d6d7950726f6f66000000010000000100000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "1c8b2727f67b812c0112ec080d302f10b4225b41fd306611bdac9a7efb9fbd76", + "code": "0061736d0100000001320960047e7e7e7e017e60017e017e60027e7e017e60000060037e7f7f0060017f0060027f7e0060017f017e60037f7f7f017f026711016d01610000016201380001016301380001016301340001016301650001016301610001016301360002016301630002016301670002017601330001017601310002016201310000016201330002016901610001017801300002016901720002017601670002031413030104050606060607020302020305080808080405017001020205030100110621047f01418080c0000b7f0041c480c0000b7f00419481c0000b7f0041a081c0000b075708066d656d6f727902000c64756d6d795f76657269667900120a66725f7665635f676574001a0667315f6d756c001c0667325f6d756c001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030907010041010b01110aa7171302000b870503027f047e017f23808080800041f0016b22012480808080004100210241002d008080c080001a0240034020024128460d01200141086a20026a4202370300200241086a21020c000b0b0240200042ff018342cc00520d002000419c80c08000ad422086420484200141086aad4220864204844284808080d0001080808080001a2001290308220042ff018342c800520d0020001081808080004280808080708342808080808006520d0020014190016a4100413010a1808080001a200020014190016a4130109380808000200141306a20014190016a413010a3808080001a200141306a10948080800020014190016a20012903101095808080002001280290010d00200129039801210320014190016a410041e00010a1808080001a200320014190016a41e000109380808000200141306a20014190016a41e00010a3808080001a200141306a109480808000200141306a41306a10948080800020014190016a20012903181096808080002001280290010d00200129039801210420014190016a20012903201097808080002001280290010d00200129039801210520014190016a20012903281098808080002001280290014101460d00200129039801210620001082808080001083808080001a20031084808080001085808080001a200520041086808080002103200620041087808080002104420221004101210203402000210520024101712107410021022003210020070d000b200120053703900120014190016a1099808080002105420221004101210203402000210320024101712107410021022004210020070d000b2001200337039001200520014190016a1099808080001088808080002100200141f0016a2480808080002000420151ad0f0b000b1f00200042042001ad4220864204842002ad422086420484108b808080001a0b24000240200041e480c08000413010a080808000417f4a0d000f0b410e109f80808000000b4201017e420121020240200142ff018342c800520d002001108180808000428080808070834280808080800c520d0020002001370308420021020b200020023703000ba60102017f017e024002402001a741ff0171220241c600460d00420121032002410c470d010b41c480c08000ad42208642048442848080808004108c80808000108d8080800021030240024002400240200142ce0083420c520d00200342ff0183420c510d010b20012003108e80808000427f550d010c020b20014208882003420888540d010b20012003108f8080800021010b20002001370308420021030b200020033703000b4d01017f23808080800041106b22022480808080002002200110958080800042012101024020022802000d0020002002290308370308420021010b20002001370300200241106a2480808080000b4201017e420121020240200142ff018342c800520d0020011081808080004280808080708342808080808018520d0020002001370308420021020b200020023703000b17002000ad4220864204844284808080101090808080000b980101017f23808080800041106b2202248080808000200241818080800036020020022802001a024002400240200042ff018342cb00520d00200142ff01834204520d0020001089808080004220882001422088580d0120022000200142848080807083108a8080800010968080800020022802004101470d020b000b109b80808000000b20022903082100200241106a24808080800020000b0b00412b109f80808000000b6501017f23808080800041106b220224808080800020022000109780808000024020022802004101460d00200229030821002002200110968080800020022802004101460d00200020022903081086808080002100200241106a24808080800020000f0b000b6501017f23808080800041106b220224808080800020022000109880808000024020022802004101460d00200229030821002002200110968080800020022802004101460d00200020022903081087808080002100200241106a24808080800020000f0b000b0300000b0900109e80808000000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030baa0301057f02400240200241104f0d00200021030c010b024020002000410020006b41037122046a22054f0d002004417f6a21062000210302402004450d0020042107200021030340200320013a0000200341016a21032007417f6a22070d000b0b20064107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032005470d000b0b024020052005200220046b2202417c716a22034f0d00200141ff017141818284086c2107034020052007360200200541046a22052003490d000b0b200241037121020b02402003200320026a22074f0d002002417f6a2104024020024107712205450d000340200320013a0000200341016a21032005417f6a22050d000b0b20044107490d000340200320013a0000200341076a20013a0000200341066a20013a0000200341056a20013a0000200341046a20013a0000200341036a20013a0000200341026a20013a0000200341016a20013a0000200341086a22032007470d000b0b20000bb907010c7f23808080800041106b210302400240200241104f0d00200021040c010b024020002000410020006b41037122056a22064f0d002005417f6a2107200021042001210802402005450d002005210920002104200121080340200420082d00003a0000200841016a2108200441016a21042009417f6a22090d000b0b20074107490d000340200420082d00003a0000200441016a200841016a2d00003a0000200441026a200841026a2d00003a0000200441036a200841036a2d00003a0000200441046a200841046a2d00003a0000200441056a200841056a2d00003a0000200441066a200841066a2d00003a0000200441076a200841076a2d00003a0000200841086a2108200441086a22042006470d000b0b2006200220056b2209417c7122076a210402400240200120056a220841037122010d00200620044f0d0120082101034020062001280200360200200141046a2101200641046a22062004490d000c020b0b410021022003410036020c2003410c6a20017221050240410420016b220a410171450d00200520082d00003a0000410121020b0240200a410271450d00200520026a200820026a2f01003b01000b200820016b21022001410374210b200328020c210502400240200641046a2004490d002006210c0c010b4100200b6b411871210d034020062005200b76200241046a22022802002205200d7472360200200641086a210a200641046a220c2106200a2004490d000b0b41002106200341003a0008200341003a00060240024020014101470d00200341086a210d410021014100210a4100210e0c010b200241056a2d0000210a2003200241046a2d000022013a0008200a410874210a4102210e200341066a210d0b02402008410171450d00200d200241046a200e6a2d00003a000020032d0006411074210620032d000821010b200c200a200672200141ff0171724100200b6b411871742005200b76723602000b20094103712102200820076a21010b02402004200420026a22064f0d002002417f6a2109024020024107712208450d000340200420012d00003a0000200141016a2101200441016a21042008417f6a22080d000b0b20094107490d000340200420012d00003a0000200441016a200141016a2d00003a0000200441026a200141026a2d00003a0000200441036a200141036a2d00003a0000200441046a200141046a2d00003a0000200441056a200141056a2d00003a0000200441066a200141066a2d00003a0000200441076a200141076a2d00003a0000200141086a2101200441086a22042006470d000b0b20000b0e0020002001200210a2808080000b0b9e010100418080c0000b94015370456356310e18eaf1972e690d66706670326672673167320000000e00100002000000100010000300000013001000020000001500100002000000170010000200000073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000011a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab00bb1b0e636f6e747261637473706563763000000000000000000000000667315f6d756c000000000002000000000000000170000000000003ee000000600000000000000001730000000000000c00000001000003ee0000006000000000000000000000000667325f6d756c000000000002000000000000000170000000000003ee000000c00000000000000001730000000000000c00000001000003ee000000c000000001000000000000000000000014746573745f626c733a3a44756d6d7950726f6f6600000005000000000000000266700000000003ee00000030000000000000000366703200000003ee000000600000000000000002667200000000000c000000000000000267310000000003ee00000060000000000000000267320000000003ee000000c000000000000000000000000a66725f7665635f676574000000000002000000000000000676616c7565730000000003ea0000000c0000000000000005696e64657800000000000004000000010000000c00000000000000000000000c64756d6d795f76657269667900000001000000000000000570726f6f66000000000007d000000014746573745f626c733a3a44756d6d7950726f6f66000000010000000100000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + } + }, + "ext": "v0" + }, + "live_until": 4095 + }, + { + "entry": { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" } }, "ext": "v0" diff --git a/soroban-spec-rust/src/lib.rs b/soroban-spec-rust/src/lib.rs index 96aab8794..184687ecf 100644 --- a/soroban-spec-rust/src/lib.rs +++ b/soroban-spec-rust/src/lib.rs @@ -1,8 +1,4 @@ mod syn_ext; - -use std::collections::BTreeMap; -use syn_ext::segment_ident; -pub use syn_ext::TypeNames; pub mod r#trait; pub mod types; @@ -111,7 +107,14 @@ pub fn generate_without_file_with_options( specs: &[ScSpecEntry], opts: &GenerateOptions, ) -> Result { - let specs = apply_error_udt_override(specs); + // The spec names each user-defined type by its fully qualified name + // (`mycrate::mymod::MyType`), while the generated code names it by a bare + // identifier, so the names are reduced to simple names before generation, + // rewriting references to keep them matched up with the types they refer + // to. Simplifying an already-simple spec changes nothing, so a caller that + // simplified first (to report on the renames) generates the same code. + let specs = soroban_spec::simplify::simplify(specs).spec; + let specs = apply_error_udt_override(&specs); let specs: &[ScSpecEntry] = &specs; let mut spec_fns = Vec::new(); @@ -131,75 +134,40 @@ pub fn generate_without_file_with_options( } } - // The identifiers naming the user-defined types this spec defines, resolved - // together so that two types whose fully qualified names share a last - // segment do not both claim it. - let defined: Vec = spec_structs - .iter() - .map(|s| s.name.to_utf8_string_lossy()) - .chain(spec_unions.iter().map(|s| s.name.to_utf8_string_lossy())) - .chain(spec_enums.iter().map(|s| s.name.to_utf8_string_lossy())) - .chain( - spec_error_enums - .iter() - .map(|s| s.name.to_utf8_string_lossy()), - ) - .collect(); - let names = TypeNames::new(defined.iter().map(String::as_str)); - let trait_name = "Contract"; - let trait_ = r#trait::generate_trait(trait_name, &spec_fns, &names, 0)?; - - // Each user-defined type is emitted inside modules mirroring its fully - // qualified name, so a type is reachable at the path it reports for itself - // and two types sharing a last segment stay distinct. The depth a type is - // emitted at is how far a reference written inside it has to step back up. - let mut by_module: BTreeMap, Vec> = BTreeMap::new(); - macro_rules! emit { - ($specs:expr, $gen:ident) => { - for spec in $specs.iter() { - let name = spec.name.to_utf8_string_lossy(); - let module: Vec = TypeNames::module_of(&name) - .into_iter() - .map(str::to_string) - .collect(); - let tokens = $gen(spec, opts, &names, module.len())?; - by_module.entry(module).or_default().push(tokens); - } - }; - } - emit!(spec_structs, generate_struct_with_options); - emit!(spec_unions, generate_union_with_options); - emit!(spec_enums, generate_enum_with_options); - emit!(spec_error_enums, generate_error_enum_with_options); - - // An event is named by a symbol rather than a qualified name, so it has no - // path to mirror and stays at the root. - for spec in spec_events.iter() { - let tokens = generate_event_with_options(spec, opts, &names, 0)?; - by_module.entry(Vec::new()).or_default().push(tokens); - } - let types = nest_modules(&by_module, &[])?; - - // The types are named at the root too, so bindings stay usable by bare name. - // Only one type can claim a last segment there; the rest keep their path. - let aliases = names - .defined() - .filter(|n| names.is_aliased(n) && !TypeNames::module_of(n).is_empty()) - .map(|n| { - let path = names.path(n, 0)?; - Ok(quote! { pub use self::#path; }) - }) - .collect::, GenerateError>>()?; + let trait_ = r#trait::generate_trait(trait_name, &spec_fns)?; + let structs = spec_structs + .iter() + .map(|s| generate_struct_with_options(s, opts)) + .collect::, _>>()?; + let unions = spec_unions + .iter() + .map(|s| generate_union_with_options(s, opts)) + .collect::, _>>()?; + let enums = spec_enums + .iter() + .map(|s| generate_enum_with_options(s, opts)) + .collect::, _>>()?; + let error_enums = spec_error_enums + .iter() + .map(|s| generate_error_enum_with_options(s, opts)) + .collect::, _>>()?; + let events = spec_events + .iter() + .map(|s| generate_event_with_options(s, opts)) + .collect::, _>>()?; Ok(quote! { #[soroban_sdk::contractargs(name = "Args")] #[soroban_sdk::contractclient(name = "Client")] #trait_ - #types - #(#aliases)* + #(#structs)* + #(#unions)* + #(#enums)* + #(#error_enums)* + #(#events)* }) } @@ -218,54 +186,16 @@ pub fn generate_without_file_with_options( /// /// Returns a borrowed slice when no rewrite is needed, otherwise a /// freshly-owned `Vec` with the rewrite applied. -/// Nests generated items into the modules their types are defined in. -/// -/// Walks the module tree from `prefix` down, emitting the items defined at each -/// module alongside a `pub mod` for every distinct segment below it. -fn nest_modules( - by_module: &BTreeMap, Vec>, - prefix: &[String], -) -> Result { - let here = by_module.get(prefix).map(Vec::as_slice).unwrap_or(&[]); - // The distinct next segments below this module. Keys are sorted, so equal - // segments are adjacent and dedup collapses them. - let mut children: Vec<&String> = by_module - .keys() - .filter(|m| m.len() > prefix.len() && m.starts_with(prefix)) - .map(|m| &m[prefix.len()]) - .collect(); - children.dedup(); - let mods = children - .into_iter() - .map(|segment| { - let ident = segment_ident(segment)?; - let mut next = prefix.to_vec(); - next.push(segment.clone()); - let inner = nest_modules(by_module, &next)?; - Ok(quote! { pub mod #ident { #inner } }) - }) - .collect::, GenerateError>>()?; - Ok(quote! { #(#here)* #(#mods)* }) -} - fn apply_error_udt_override(specs: &[ScSpecEntry]) -> Cow<'_, [ScSpecEntry]> { - // A user-defined type is named by its fully qualified name, so the enum is - // recognized by the last segment of its name, and references are rewritten - // to the whole of it so they resolve back to the entry defining it. - let error_udt_name = specs.iter().find_map(|e| match e { - ScSpecEntry::UdtErrorEnumV0(err) => { - let name = err.name.to_utf8_string_lossy(); - if name.rsplit("::").next().unwrap_or(&name) == "Error" { - Some(name) - } else { - None - } - } - _ => None, + let has_error_udt = specs.iter().any(|e| { + matches!( + e, + ScSpecEntry::UdtErrorEnumV0(err) if err.name.to_utf8_string_lossy() == "Error" + ) }); - if let Some(name) = error_udt_name { + if has_error_udt { let mut v = specs.to_vec(); - rewrite_error_to_udt(&mut v, &name); + rewrite_error_to_udt(&mut v); Cow::Owned(v) } else { Cow::Borrowed(specs) @@ -276,27 +206,27 @@ fn apply_error_udt_override(specs: &[ScSpecEntry]) -> Cow<'_, [ScSpecEntry]> { /// `ScSpecTypeDef::Udt { name: "Error" }`. Called only when the spec contains /// a user-defined error enum named `Error`, so the UDT reference resolves to /// that enum during code generation. -fn rewrite_error_to_udt(entries: &mut [ScSpecEntry], name: &str) { - fn rewrite_ty(t: &mut ScSpecTypeDef, name: &str) { +fn rewrite_error_to_udt(entries: &mut [ScSpecEntry]) { + fn rewrite_ty(t: &mut ScSpecTypeDef) { match t { ScSpecTypeDef::Error => { *t = ScSpecTypeDef::Udt(ScSpecTypeUdt { - name: name.try_into().unwrap(), + name: "Error".try_into().unwrap(), }); } - ScSpecTypeDef::Option(o) => rewrite_ty(&mut o.value_type, name), + ScSpecTypeDef::Option(o) => rewrite_ty(&mut o.value_type), ScSpecTypeDef::Result(r) => { - rewrite_ty(&mut r.ok_type, name); - rewrite_ty(&mut r.error_type, name); + rewrite_ty(&mut r.ok_type); + rewrite_ty(&mut r.error_type); } - ScSpecTypeDef::Vec(v) => rewrite_ty(&mut v.element_type, name), + ScSpecTypeDef::Vec(v) => rewrite_ty(&mut v.element_type), ScSpecTypeDef::Map(m) => { - rewrite_ty(&mut m.key_type, name); - rewrite_ty(&mut m.value_type, name); + rewrite_ty(&mut m.key_type); + rewrite_ty(&mut m.value_type); } ScSpecTypeDef::Tuple(tu) => { for vt in tu.value_types.iter_mut() { - rewrite_ty(vt, name); + rewrite_ty(vt); } } _ => {} @@ -306,22 +236,22 @@ fn rewrite_error_to_udt(entries: &mut [ScSpecEntry], name: &str) { match entry { ScSpecEntry::FunctionV0(f) => { for input in f.inputs.iter_mut() { - rewrite_ty(&mut input.type_, name); + rewrite_ty(&mut input.type_); } for output in f.outputs.iter_mut() { - rewrite_ty(output, name); + rewrite_ty(output); } } ScSpecEntry::UdtStructV0(s) => { for field in s.fields.iter_mut() { - rewrite_ty(&mut field.type_, name); + rewrite_ty(&mut field.type_); } } ScSpecEntry::UdtUnionV0(u) => { for case in u.cases.iter_mut() { if let ScSpecUdtUnionCaseV0::TupleV0(t) = case { for ty in t.type_.iter_mut() { - rewrite_ty(ty, name); + rewrite_ty(ty); } } } @@ -329,7 +259,7 @@ fn rewrite_error_to_udt(entries: &mut [ScSpecEntry], name: &str) { ScSpecEntry::UdtEnumV0(_) | ScSpecEntry::UdtErrorEnumV0(_) => {} ScSpecEntry::EventV0(e) => { for p in e.params.iter_mut() { - rewrite_ty(&mut p.type_, name); + rewrite_ty(&mut p.type_); } } } @@ -640,7 +570,7 @@ pub enum MyError { }; assert_eq!( u.name.to_utf8_string().unwrap(), - "MyError", + "test_add_u64::MyError", "error_type should be MyError UDT" ); } diff --git a/soroban-spec-rust/src/syn_ext.rs b/soroban-spec-rust/src/syn_ext.rs index 2ec1f2b3a..4c26f68d0 100644 --- a/soroban-spec-rust/src/syn_ext.rs +++ b/soroban-spec-rust/src/syn_ext.rs @@ -1,37 +1,30 @@ -use std::collections::HashSet; - -use proc_macro2::{Ident, TokenStream}; -use quote::quote; +use proc_macro2::Ident; use stellar_xdr::{ScSymbol, StringM}; use crate::types::GenerateError; pub trait IntoIdent { - /// The name as written in the spec. - fn to_name(&self) -> Result; - - fn into_ident(&self) -> Result { - let s = self.to_name()?; - syn::parse_str::(&s).map_err(|_| GenerateError::InvalidIdent(s)) - } + fn into_ident(&self) -> Result; } impl IntoIdent for str { - fn to_name(&self) -> Result { - Ok(self.to_string()) + fn into_ident(&self) -> Result { + syn::parse_str::(self).map_err(|_| GenerateError::InvalidIdent(self.to_string())) } } impl IntoIdent for StringM { - fn to_name(&self) -> Result { - self.to_utf8_string() - .map_err(|_| GenerateError::InvalidUtf8) + fn into_ident(&self) -> Result { + let s = self + .to_utf8_string() + .map_err(|_| GenerateError::InvalidUtf8)?; + s.as_str().into_ident() } } impl IntoIdent for ScSymbol { - fn to_name(&self) -> Result { - self.0.to_name() + fn into_ident(&self) -> Result { + self.0.into_ident() } } @@ -40,148 +33,3 @@ impl IntoIdent for ScSymbol { pub fn str_to_ident(s: &(impl IntoIdent + ?Sized)) -> Result { s.into_ident() } - -/// The `::`-separated segments of a fully qualified spec type name. -fn segments(name: &str) -> Vec<&str> { - name.split("::").collect() -} - -/// The last `::`-separated segment of a fully qualified spec type name. -fn last_segment(name: &str) -> &str { - name.rsplit("::").next().unwrap_or(name) -} - -/// A Rust identifier for one segment of a qualified name. -/// -/// A module of the crate the type came from can be named for a Rust keyword, so -/// a segment that is not an identifier on its own is emitted raw. -pub fn segment_ident(s: &str) -> Result { - str_to_ident(s).or_else(|_| str_to_ident(format!("r#{s}").as_str())) -} - -/// The Rust identifiers that name the user-defined types of a spec. -/// -/// A spec names a user-defined type by its fully qualified name -/// (`crate::module::Type`). Generated bindings mirror that name as a module -/// path, so every type is reachable at the path it reports for itself and two -/// types that share a last segment stay distinct. -/// -/// For the bindings to stay usable by name, the types are also named at the root -/// of the generated module. Only one type can claim a given last segment there, -/// so the first to claim it is named at the root and the rest are reached only -/// by their full path. -#[derive(Debug, Default)] -pub struct TypeNames { - defined: Vec, - aliased: HashSet, -} - -impl TypeNames { - /// Resolves the names of every user-defined type a spec defines. - pub fn new<'a>(defined: impl IntoIterator) -> Self { - let defined: Vec = defined.into_iter().map(str::to_string).collect(); - let mut taken = HashSet::new(); - let aliased = defined - .iter() - .filter(|name| taken.insert(last_segment(name).to_string())) - .cloned() - .collect(); - Self { defined, aliased } - } - - /// The identifier declaring the type, which is the last segment of its name. - pub fn ident(&self, name: &(impl IntoIdent + ?Sized)) -> Result { - segment_ident(last_segment(&name.to_name()?)) - } - - /// The path referring to the type from `depth` modules below the root of the - /// generated module. - /// - /// Every reference is written from the root down, reaching it by stepping up - /// out of the module the reference is written in, so that a reference means - /// the same thing wherever it appears. - pub fn path( - &self, - name: &(impl IntoIdent + ?Sized), - depth: usize, - ) -> Result { - let name = name.to_name()?; - let segments = segments(&name) - .into_iter() - .map(segment_ident) - .collect::, _>>()?; - let up = std::iter::repeat_n(quote!(super::), depth); - Ok(quote! { #(#up)* #(#segments)::* }) - } - - /// The module path a type is defined in, which is its name without its last - /// segment. - pub fn module_of(name: &str) -> Vec<&str> { - let mut s = segments(name); - s.pop(); - s - } - - /// The types this defines, in the order they were given. - pub fn defined(&self) -> impl Iterator { - self.defined.iter().map(String::as_str) - } - - /// Whether the type is the one named at the root for its last segment. - pub fn is_aliased(&self, name: &str) -> bool { - self.aliased.contains(name) - } -} - -#[cfg(test)] -mod test { - use super::TypeNames; - - #[test] - fn declares_a_type_by_its_last_segment() { - let names = TypeNames::new(["a::b::Thing"]); - assert_eq!(names.ident("a::b::Thing").unwrap(), "Thing"); - } - - #[test] - fn refers_to_a_type_by_its_whole_path() { - let names = TypeNames::new(["a::b::Thing"]); - assert_eq!( - names.path("a::b::Thing", 0).unwrap().to_string(), - "a :: b :: Thing" - ); - } - - #[test] - fn steps_up_out_of_the_module_a_reference_is_written_in() { - let names = TypeNames::new(["a::b::Thing"]); - assert_eq!( - names.path("a::b::Thing", 2).unwrap().to_string(), - "super :: super :: a :: b :: Thing" - ); - } - - #[test] - fn names_a_keyword_segment_raw() { - let names = TypeNames::new(["a::type::Thing"]); - assert_eq!( - names.path("a::type::Thing", 0).unwrap().to_string(), - "a :: r#type :: Thing" - ); - } - - #[test] - fn names_only_the_first_claim_on_a_last_segment_at_the_root() { - // The rest stay reachable, but only by their whole path. - let names = TypeNames::new(["a::b::Thing", "a::c::Thing", "a::d::Other"]); - assert!(names.is_aliased("a::b::Thing")); - assert!(!names.is_aliased("a::c::Thing")); - assert!(names.is_aliased("a::d::Other")); - } - - #[test] - fn a_module_is_a_name_without_its_last_segment() { - assert_eq!(TypeNames::module_of("a::b::Thing"), vec!["a", "b"]); - assert_eq!(TypeNames::module_of("Thing"), Vec::<&str>::new()); - } -} diff --git a/soroban-spec-rust/src/trait.rs b/soroban-spec-rust/src/trait.rs index f23c5e1fc..05d4ac45d 100644 --- a/soroban-spec-rust/src/trait.rs +++ b/soroban-spec-rust/src/trait.rs @@ -2,7 +2,7 @@ use proc_macro2::TokenStream; use quote::quote; use stellar_xdr::ScSpecFunctionV0; -use super::syn_ext::{str_to_ident, TypeNames}; +use super::syn_ext::str_to_ident; use super::types::{generate_type_ident, GenerateError}; // IMPORTANT: The "docs" fields of spec entries are not output in Rust token @@ -15,13 +15,11 @@ use super::types::{generate_type_ident, GenerateError}; pub fn generate_trait( name: &str, specs: &[&ScSpecFunctionV0], - names: &TypeNames, - depth: usize, ) -> Result { let trait_ident = str_to_ident(name)?; let fns = specs .iter() - .map(|s| generate_function(s, names, depth)) + .map(|s| generate_function(s)) .collect::, _>>()?; Ok(quote! { pub trait #trait_ident { #(#fns;)* } @@ -36,25 +34,21 @@ pub fn generate_trait( /// /// # Returns /// A `TokenStream` containing the generated function definition. -pub fn generate_function( - s: &ScSpecFunctionV0, - names: &TypeNames, - depth: usize, -) -> Result { +pub fn generate_function(s: &ScSpecFunctionV0) -> Result { let fn_ident = str_to_ident(&s.name)?; let fn_inputs = s .inputs .iter() .map(|input| { let name = str_to_ident(&input.name)?; - let type_ident = generate_type_ident(&input.type_, names, depth)?; + let type_ident = generate_type_ident(&input.type_)?; Ok(quote! { #name: #type_ident }) }) .collect::, GenerateError>>()?; let fn_output = s .outputs .to_option() - .map(|t| generate_type_ident(&t, names, depth)) + .map(|t| generate_type_ident(&t)) .transpose()? .map(|t| quote! { -> #t }); Ok(quote! { diff --git a/soroban-spec-rust/src/types.rs b/soroban-spec-rust/src/types.rs index a0ef0f274..854fc848d 100644 --- a/soroban-spec-rust/src/types.rs +++ b/soroban-spec-rust/src/types.rs @@ -5,7 +5,7 @@ use stellar_xdr::{ ScSpecUdtErrorEnumV0, ScSpecUdtStructV0, ScSpecUdtUnionV0, }; -use crate::syn_ext::{str_to_ident, TypeNames}; +use crate::syn_ext::str_to_ident; // IMPORTANT: The "docs" fields of spec entries are not output in Rust token // streams as rustdocs, because rustdocs can contain Rust code, and that code @@ -26,7 +26,7 @@ pub enum GenerateError { /// options can be added without breaking callers. /// /// ``` -/// use soroban_spec_rust::{types::generate_struct_with_options, GenerateOptions, TypeNames}; +/// use soroban_spec_rust::{types::generate_struct_with_options, GenerateOptions}; /// use stellar_xdr::ScSpecUdtStructV0; /// /// let spec = ScSpecUdtStructV0 { @@ -35,7 +35,7 @@ pub enum GenerateError { /// name: "Point".try_into().unwrap(), /// fields: Default::default(), /// }; -/// let tokens = generate_struct_with_options(&spec, &GenerateOptions::default(), &TypeNames::default(), 0).unwrap(); +/// let tokens = generate_struct_with_options(&spec, &GenerateOptions::default()).unwrap(); /// assert!(tokens.to_string().contains("struct Point")); /// ``` /// @@ -54,7 +54,7 @@ pub struct GenerateOptions {} /// Constructs a token stream containing a single struct that mirrors the struct /// spec. pub fn generate_struct(spec: &ScSpecUdtStructV0) -> Result { - generate_struct_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) + generate_struct_with_options(spec, &GenerateOptions::default()) } /// Constructs a token stream containing a single struct that mirrors the struct @@ -62,10 +62,8 @@ pub fn generate_struct(spec: &ScSpecUdtStructV0) -> Result Result { - let ident = names.ident(&spec.name)?; + let ident = str_to_ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; @@ -89,7 +87,7 @@ pub fn generate_struct_with_options( .fields .iter() .map(|f| { - let f_type = generate_type_ident(&f.type_, names, depth)?; + let f_type = generate_type_ident(&f.type_)?; Ok(quote! { pub #f_type }) }) .collect::, GenerateError>>()?; @@ -104,7 +102,7 @@ pub fn generate_struct_with_options( .iter() .map(|f| { let f_ident = str_to_ident(&f.name)?; - let f_type = generate_type_ident(&f.type_, names, depth)?; + let f_type = generate_type_ident(&f.type_)?; Ok(quote! { pub #f_ident: #f_type }) }) .collect::, GenerateError>>()?; @@ -119,7 +117,7 @@ pub fn generate_struct_with_options( /// Constructs a token stream containing a single enum that mirrors the union /// spec. pub fn generate_union(spec: &ScSpecUdtUnionV0) -> Result { - generate_union_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) + generate_union_with_options(spec, &GenerateOptions::default()) } /// Constructs a token stream containing a single enum that mirrors the union @@ -127,10 +125,8 @@ pub fn generate_union(spec: &ScSpecUdtUnionV0) -> Result Result { - let ident = names.ident(&spec.name)?; + let ident = str_to_ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; Ok(quote! { @@ -152,7 +148,7 @@ pub fn generate_union_with_options( let v_type = t .type_ .iter() - .map(|t| generate_type_ident(t, names, depth)) + .map(generate_type_ident) .collect::, _>>()?; Ok(quote! { #v_ident ( #(#v_type),* ) }) } @@ -170,7 +166,7 @@ pub fn generate_union_with_options( /// Constructs a token stream containing a single enum that mirrors the enum /// spec. pub fn generate_enum(spec: &ScSpecUdtEnumV0) -> Result { - generate_enum_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) + generate_enum_with_options(spec, &GenerateOptions::default()) } /// Constructs a token stream containing a single enum that mirrors the enum @@ -178,10 +174,8 @@ pub fn generate_enum(spec: &ScSpecUdtEnumV0) -> Result Result { - let ident = names.ident(&spec.name)?; + let ident = str_to_ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; Ok(quote! { @@ -208,7 +202,7 @@ pub fn generate_enum_with_options( /// Constructs a token stream containing a single enum that mirrors the enum /// spec, that is intended for use with errors. pub fn generate_error_enum(spec: &ScSpecUdtErrorEnumV0) -> Result { - generate_error_enum_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) + generate_error_enum_with_options(spec, &GenerateOptions::default()) } /// Constructs a token stream containing a single enum that mirrors the enum @@ -216,10 +210,8 @@ pub fn generate_error_enum(spec: &ScSpecUdtErrorEnumV0) -> Result Result { - let ident = names.ident(&spec.name)?; + let ident = str_to_ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; Ok(quote! { @@ -246,7 +238,7 @@ pub fn generate_error_enum_with_options( /// Constructs a token stream containing a single struct that mirrors the event /// spec. pub fn generate_event(spec: &ScSpecEventV0) -> Result { - generate_event_with_options(spec, &GenerateOptions::default(), &TypeNames::default(), 0) + generate_event_with_options(spec, &GenerateOptions::default()) } /// Constructs a token stream containing a single struct that mirrors the event @@ -254,10 +246,8 @@ pub fn generate_event(spec: &ScSpecEventV0) -> Result Result { - let ident = names.ident(&spec.name)?; + let ident = str_to_ident(&spec.name)?; if spec.lib.len() > 0 { let lib_ident = str_to_ident(&spec.lib)?; @@ -271,7 +261,7 @@ pub fn generate_event_with_options( .iter() .map(|p| { let p_ident = str_to_ident(&p.name)?; - let p_type = generate_type_ident(&p.type_, names, depth)?; + let p_type = generate_type_ident(&p.type_)?; Ok(match p.location { ScSpecEventParamLocationV0::TopicList => quote! { #[topic] @@ -291,11 +281,7 @@ pub fn generate_event_with_options( } } -pub fn generate_type_ident( - spec: &ScSpecTypeDef, - names: &TypeNames, - depth: usize, -) -> Result { +pub fn generate_type_ident(spec: &ScSpecTypeDef) -> Result { match spec { ScSpecTypeDef::Val => Ok(quote! { soroban_sdk::Val }), ScSpecTypeDef::U64 => Ok(quote! { u64 }), @@ -312,28 +298,28 @@ pub fn generate_type_ident( ScSpecTypeDef::MuxedAddress => Ok(quote! { soroban_sdk::MuxedAddress }), ScSpecTypeDef::String => Ok(quote! { soroban_sdk::String }), ScSpecTypeDef::Option(o) => { - let value_ident = generate_type_ident(&o.value_type, names, depth)?; + let value_ident = generate_type_ident(&o.value_type)?; Ok(quote! { Option<#value_ident> }) } ScSpecTypeDef::Result(r) => { - let ok_ident = generate_type_ident(&r.ok_type, names, depth)?; - let error_ident = generate_type_ident(&r.error_type, names, depth)?; + let ok_ident = generate_type_ident(&r.ok_type)?; + let error_ident = generate_type_ident(&r.error_type)?; Ok(quote! { Result<#ok_ident, #error_ident> }) } ScSpecTypeDef::Vec(v) => { - let element_ident = generate_type_ident(&v.element_type, names, depth)?; + let element_ident = generate_type_ident(&v.element_type)?; Ok(quote! { soroban_sdk::Vec<#element_ident> }) } ScSpecTypeDef::Map(m) => { - let key_ident = generate_type_ident(&m.key_type, names, depth)?; - let value_ident = generate_type_ident(&m.value_type, names, depth)?; + let key_ident = generate_type_ident(&m.key_type)?; + let value_ident = generate_type_ident(&m.value_type)?; Ok(quote! { soroban_sdk::Map<#key_ident, #value_ident> }) } ScSpecTypeDef::Tuple(t) => { let type_idents = t .value_types .iter() - .map(|t| generate_type_ident(t, names, depth)) + .map(generate_type_ident) .collect::, _>>()?; Ok(quote! { (#(#type_idents,)*) }) } @@ -342,8 +328,8 @@ pub fn generate_type_ident( Ok(quote! { soroban_sdk::BytesN<#n> }) } ScSpecTypeDef::Udt(u) => { - let path = names.path(&u.name, depth)?; - Ok(quote! { #path }) + let ident = str_to_ident(&u.name)?; + Ok(quote! { #ident }) } ScSpecTypeDef::Void => Ok(quote! { () }), ScSpecTypeDef::Timepoint => Ok(quote! { soroban_sdk::Timepoint }), diff --git a/soroban-spec/src/lib.rs b/soroban-spec/src/lib.rs index 9f454f1f2..3a56b4e9b 100644 --- a/soroban-spec/src/lib.rs +++ b/soroban-spec/src/lib.rs @@ -1,2 +1,3 @@ pub mod read; pub mod shaking; +pub mod simplify; diff --git a/soroban-spec/src/simplify.rs b/soroban-spec/src/simplify.rs new file mode 100644 index 000000000..12f2e6c03 --- /dev/null +++ b/soroban-spec/src/simplify.rs @@ -0,0 +1,311 @@ +use stellar_xdr::{ScSpecEntry, ScSpecTypeDef, ScSpecUdtUnionCaseV0}; + +/// A spec with its user-defined type names reduced to simple names, along +/// with how each type's name was resolved. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Simplified { + /// The spec entries with every user-defined type name reduced. + pub spec: Vec, + /// How each type the spec defines resolved to its simple name, in the + /// order the types are defined. + pub renames: Vec, +} + +/// How one user-defined type's name resolved during simplification. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Rename { + /// The name as it appears in the input spec. + pub from: String, + /// The name the type has in the simplified spec. + pub to: String, +} + +impl Rename { + /// Whether the type's name changed at all. + pub fn renamed(&self) -> bool { + self.from != self.to + } + + /// Whether the type could not keep the last segment of its name because + /// another type claimed it first. + pub fn collision(&self) -> bool { + self.to != last_segment(&self.from) + } +} + +/// The last `::`-separated segment of a fully qualified type name. +fn last_segment(name: &str) -> &str { + name.rsplit("::").next().unwrap_or(name) +} + +/// Reduces every user-defined type name in the spec from its fully qualified +/// form (`mycrate::mymod::MyType`) to its simple name (`MyType`), rewriting +/// every reference to a type to follow the type to its new name. +/// +/// The first type to claim a simple name keeps it, so two types whose names +/// share a last segment stay distinct: the rest are numbered (`MyType2`, +/// `MyType3`, …), stepping over names claimed by other types. A spec whose +/// type names are already simple comes back unchanged. +/// +/// A reference to a type the spec does not define is reduced to its last +/// segment, without claiming a name. +pub fn simplify(spec: &[ScSpecEntry]) -> Simplified { + // The names the spec defines, in definition order. + let defined: Vec = spec + .iter() + .filter_map(|entry| match entry { + ScSpecEntry::UdtStructV0(s) => Some(s.name.to_utf8_string_lossy()), + ScSpecEntry::UdtUnionV0(u) => Some(u.name.to_utf8_string_lossy()), + ScSpecEntry::UdtEnumV0(e) => Some(e.name.to_utf8_string_lossy()), + ScSpecEntry::UdtErrorEnumV0(e) => Some(e.name.to_utf8_string_lossy()), + _ => None, + }) + .collect(); + + // The first type to claim a last segment keeps it, so a type only ever + // loses its own name to one defined before it, never to a number handed + // to a type that collided with something else. + let mut taken = std::collections::HashSet::new(); + let colliding: Vec<&String> = defined + .iter() + .filter(|name| !taken.insert(last_segment(name).to_string())) + .collect(); + + let mut numbered = std::collections::HashMap::new(); + for name in colliding { + let base = last_segment(name); + let mut n = 1u32; + let simple = loop { + n += 1; + let simple = format!("{base}{n}"); + if taken.insert(simple.clone()) { + break simple; + } + }; + numbered.insert(name.clone(), simple); + } + + let renames: Vec = defined + .iter() + .map(|name| Rename { + from: name.clone(), + to: numbered + .get(name) + .cloned() + .unwrap_or_else(|| last_segment(name).to_string()), + }) + .collect(); + + let to: std::collections::HashMap<&str, &str> = renames + .iter() + .map(|r| (r.from.as_str(), r.to.as_str())) + .collect(); + let resolve = |name: &str| -> String { + to.get(name) + .map_or_else(|| last_segment(name).to_string(), ToString::to_string) + }; + + let mut spec = spec.to_vec(); + for entry in spec.iter_mut() { + match entry { + ScSpecEntry::FunctionV0(f) => { + for input in f.inputs.iter_mut() { + rewrite_ty(&mut input.type_, &resolve); + } + for output in f.outputs.iter_mut() { + rewrite_ty(output, &resolve); + } + } + ScSpecEntry::UdtStructV0(s) => { + s.name = resolve(&s.name.to_utf8_string_lossy()).try_into().unwrap(); + for field in s.fields.iter_mut() { + rewrite_ty(&mut field.type_, &resolve); + } + } + ScSpecEntry::UdtUnionV0(u) => { + u.name = resolve(&u.name.to_utf8_string_lossy()).try_into().unwrap(); + for case in u.cases.iter_mut() { + if let ScSpecUdtUnionCaseV0::TupleV0(t) = case { + for ty in t.type_.iter_mut() { + rewrite_ty(ty, &resolve); + } + } + } + } + ScSpecEntry::UdtEnumV0(e) => { + e.name = resolve(&e.name.to_utf8_string_lossy()).try_into().unwrap(); + } + ScSpecEntry::UdtErrorEnumV0(e) => { + e.name = resolve(&e.name.to_utf8_string_lossy()).try_into().unwrap(); + } + ScSpecEntry::EventV0(e) => { + for p in e.params.iter_mut() { + rewrite_ty(&mut p.type_, &resolve); + } + } + } + } + + Simplified { spec, renames } +} + +/// Rewrites the name of every user-defined type reference in the type. +fn rewrite_ty(t: &mut ScSpecTypeDef, resolve: &dyn Fn(&str) -> String) { + match t { + ScSpecTypeDef::Udt(u) => { + u.name = resolve(&u.name.to_utf8_string_lossy()).try_into().unwrap(); + } + ScSpecTypeDef::Option(o) => rewrite_ty(&mut o.value_type, resolve), + ScSpecTypeDef::Result(r) => { + rewrite_ty(&mut r.ok_type, resolve); + rewrite_ty(&mut r.error_type, resolve); + } + ScSpecTypeDef::Vec(v) => rewrite_ty(&mut v.element_type, resolve), + ScSpecTypeDef::Map(m) => { + rewrite_ty(&mut m.key_type, resolve); + rewrite_ty(&mut m.value_type, resolve); + } + ScSpecTypeDef::Tuple(tu) => { + for vt in tu.value_types.iter_mut() { + rewrite_ty(vt, resolve); + } + } + _ => {} + } +} + +#[cfg(test)] +mod test { + use super::{simplify, Rename}; + use stellar_xdr::{ + ScSpecEntry, ScSpecTypeDef, ScSpecTypeUdt, ScSpecUdtStructFieldV0, ScSpecUdtStructV0, + }; + + fn struct_entry(name: &str, field_type_names: &[&str]) -> ScSpecEntry { + ScSpecEntry::UdtStructV0(ScSpecUdtStructV0 { + doc: "".try_into().unwrap(), + lib: "".try_into().unwrap(), + name: name.try_into().unwrap(), + fields: field_type_names + .iter() + .map(|n| ScSpecUdtStructFieldV0 { + doc: "".try_into().unwrap(), + name: "f".try_into().unwrap(), + type_: ScSpecTypeDef::Udt(ScSpecTypeUdt { + name: (*n).try_into().unwrap(), + }), + }) + .collect::>() + .try_into() + .unwrap(), + }) + } + + fn names(spec: &[ScSpecEntry]) -> Vec<(String, Vec)> { + spec.iter() + .map(|e| match e { + ScSpecEntry::UdtStructV0(s) => ( + s.name.to_utf8_string_lossy(), + s.fields + .iter() + .map(|f| match &f.type_ { + ScSpecTypeDef::Udt(u) => u.name.to_utf8_string_lossy(), + _ => unreachable!(), + }) + .collect(), + ), + _ => unreachable!(), + }) + .collect() + } + + #[test] + fn reduces_a_qualified_name_to_its_last_segment() { + let spec = [struct_entry("mycrate::mymod::MyType", &[])]; + let simplified = simplify(&spec); + assert_eq!(names(&simplified.spec), [("MyType".to_string(), vec![])]); + assert_eq!( + simplified.renames, + [Rename { + from: "mycrate::mymod::MyType".to_string(), + to: "MyType".to_string(), + }] + ); + assert!(simplified.renames[0].renamed()); + assert!(!simplified.renames[0].collision()); + } + + #[test] + fn numbers_a_simple_name_already_claimed_and_matches_up_references() { + let spec = [ + struct_entry("mycrate::mymod::MyType", &["mycrate::myothermod::MyType"]), + struct_entry("mycrate::myothermod::MyType", &["mycrate::mymod::MyType"]), + ]; + let simplified = simplify(&spec); + assert_eq!( + names(&simplified.spec), + [ + ("MyType".to_string(), vec!["MyType2".to_string()]), + ("MyType2".to_string(), vec!["MyType".to_string()]), + ] + ); + assert!(!simplified.renames[0].collision()); + assert!(simplified.renames[1].collision()); + } + + #[test] + fn steps_over_a_name_claimed_by_a_type_of_that_name() { + // `MyType2` is a type in its own right, so the numbering steps over it + // rather than colliding with it in turn. + let spec = [ + struct_entry("a::MyType", &[]), + struct_entry("b::MyType2", &[]), + struct_entry("c::MyType", &[]), + ]; + let simplified = simplify(&spec); + assert_eq!( + simplified + .renames + .iter() + .map(|r| r.to.as_str()) + .collect::>(), + ["MyType", "MyType2", "MyType3"], + ); + } + + #[test] + fn a_spec_with_simple_names_comes_back_unchanged() { + let spec = [ + struct_entry("MyType", &["MyOther"]), + struct_entry("MyOther", &[]), + ]; + let simplified = simplify(&spec); + assert_eq!(simplified.spec, spec); + assert!(simplified.renames.iter().all(|r| !r.renamed())); + } + + #[test] + fn a_simple_name_keeps_its_claim_over_a_later_qualified_one() { + let spec = [struct_entry("MyType", &[]), struct_entry("a::MyType", &[])]; + let simplified = simplify(&spec); + assert_eq!( + simplified + .renames + .iter() + .map(|r| r.to.as_str()) + .collect::>(), + ["MyType", "MyType2"], + ); + } + + #[test] + fn a_reference_to_an_undefined_type_reduces_without_claiming() { + let spec = [struct_entry("a::MyType", &["elsewhere::Other"])]; + let simplified = simplify(&spec); + assert_eq!( + names(&simplified.spec), + [("MyType".to_string(), vec!["Other".to_string()])] + ); + assert_eq!(simplified.renames.len(), 1); + } +} diff --git a/tests-expanded/test_attributes_tests.rs b/tests-expanded/test_attributes_tests.rs index bf8628860..e8f49f28f 100644 --- a/tests-expanded/test_attributes_tests.rs +++ b/tests-expanded/test_attributes_tests.rs @@ -607,6 +607,18 @@ pub trait AttributeTrait { fn trait_default_stacked_cfg() -> u32 { 5 } + fn trait_override_stacked_cfg() -> u32 { + 7 + } + fn trait_override_negated_cfg() -> u32 { + 9 + } + fn trait_override_dual_cfg() -> u32 { + 11 + } + fn trait_default_dual_cfg() -> u32 { + 14 + } } ///AttributeTraitClient is a client for calling the contract defined in "AttributeTrait". pub struct AttributeTraitClient<'a> { @@ -915,192 +927,7 @@ impl<'a> AttributeTraitClient<'a> { } res } -} -///AttributeTraitArgs is a type for building arg lists for functions defined in "AttributeTrait". -pub struct AttributeTraitArgs; -impl AttributeTraitArgs { - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_override<'i>() -> () { - () - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_default<'i>() -> () { - () - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_default_stacked_cfg<'i>() -> () { - () - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override.const_to_xdr() - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_default: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_default", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_default( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default.const_to_xdr() - } -} -impl AttributeTraitSpec { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_default_stacked_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_default_stacked_cfg", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_default_stacked_cfg( - ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_xdr_len()] { - AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_to_xdr() - } -} -impl Contract { - pub fn always(value: AttributeType) -> u32 { - value.value - } - pub fn cfg_included(value: u32) -> u32 { - value - } - pub fn publish(env: Env, topic: u32, value: u32) { - AttributeEvent { topic, value }.publish(&env); - } -} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__always__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_ALWAYS: [u8; super::Contract::__SPEC_XDR_VIEW_always.const_xdr_len()] = - super::Contract::spec_xdr_always(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_always: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"always")), - inputs: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecFunctionInputV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"value"), - type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( - soroban_sdk::xdr::ScSpecTypeUdtView { - name: soroban_sdk::xdr::StringMView::new_str( - ::spec_type_name(), - ), - }, - ), - }, - ]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_always() -> [u8; Contract::__SPEC_XDR_VIEW_always.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_always.const_to_xdr() - } -} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__cfg_included__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_CFG_INCLUDED: [u8; super::Contract::__SPEC_XDR_VIEW_cfg_included - .const_xdr_len()] = super::Contract::spec_xdr_cfg_included(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_cfg_included: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"cfg_included", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecFunctionInputV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"value"), - type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, - }, - ]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_cfg_included( - ) -> [u8; Contract::__SPEC_XDR_VIEW_cfg_included.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_cfg_included.const_to_xdr() - } -} -impl Contract {} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__publish__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_PUBLISH: [u8; super::Contract::__SPEC_XDR_VIEW_publish - .const_xdr_len()] = super::Contract::spec_xdr_publish(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_publish: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"publish")), - inputs: soroban_sdk::xdr::VecMView::new(&[ - soroban_sdk::xdr::ScSpecFunctionInputV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"topic"), - type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, - }, - soroban_sdk::xdr::ScSpecFunctionInputV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::StringMView::new(b"value"), - type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, - }, - ]), - outputs: soroban_sdk::xdr::VecMView::new(&[]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_publish() -> [u8; Contract::__SPEC_XDR_VIEW_publish.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_publish.const_to_xdr() - } -} -impl<'a> ContractClient<'a> { - pub fn always(&self, value: &AttributeType) -> u32 { + pub fn trait_override_stacked_cfg(&self) -> u32 { use core::ops::Not; let old_auth_manager = self .env @@ -1125,21 +952,16 @@ impl<'a> ContractClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.invoke_contract( &self.address, - &{ - #[allow(deprecated)] - const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("always"); - SYMBOL - }, - ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_stacked_cfg") }, + ::soroban_sdk::Vec::new(&self.env), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn try_always( + pub fn try_trait_override_stacked_cfg( &self, - value: &AttributeType, ) -> Result< Result>::Error>, Result, @@ -1168,19 +990,15 @@ impl<'a> ContractClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.try_invoke_contract( &self.address, - &{ - #[allow(deprecated)] - const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("always"); - SYMBOL - }, - ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_stacked_cfg") }, + ::soroban_sdk::Vec::new(&self.env), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn cfg_included(&self, value: &u32) -> u32 { + pub fn trait_override_negated_cfg(&self) -> u32 { use core::ops::Not; let old_auth_manager = self .env @@ -1205,17 +1023,16 @@ impl<'a> ContractClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "cfg_included") }, - ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_negated_cfg") }, + ::soroban_sdk::Vec::new(&self.env), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn try_cfg_included( + pub fn try_trait_override_negated_cfg( &self, - value: &u32, ) -> Result< Result>::Error>, Result, @@ -1244,15 +1061,15 @@ impl<'a> ContractClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.try_invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "cfg_included") }, - ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_negated_cfg") }, + ::soroban_sdk::Vec::new(&self.env), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn publish(&self, topic: &u32, value: &u32) -> () { + pub fn trait_override_dual_cfg(&self) -> u32 { use core::ops::Not; let old_auth_manager = self .env @@ -1277,27 +1094,18 @@ impl<'a> ContractClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.invoke_contract( &self.address, - &{ - #[allow(deprecated)] - const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("publish"); - SYMBOL - }, - ::soroban_sdk::Vec::from_array( - &self.env, - [topic.into_val(&self.env), value.into_val(&self.env)], - ), + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_dual_cfg") }, + ::soroban_sdk::Vec::new(&self.env), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } - pub fn try_publish( + pub fn try_trait_override_dual_cfg( &self, - topic: &u32, - value: &u32, ) -> Result< - Result<(), <() as soroban_sdk::TryFromVal>::Error>, + Result>::Error>, Result, > { use core::ops::Not; @@ -1324,36 +1132,612 @@ impl<'a> ContractClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.try_invoke_contract( &self.address, - &{ - #[allow(deprecated)] - const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("publish"); - SYMBOL - }, - ::soroban_sdk::Vec::from_array( - &self.env, - [topic.into_val(&self.env), value.into_val(&self.env)], - ), + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_dual_cfg") }, + ::soroban_sdk::Vec::new(&self.env), ); if let Some(old_auth_manager) = old_auth_manager { self.env.host().set_auth_manager(old_auth_manager).unwrap(); } res } -} -impl ContractArgs { - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn always<'i>(value: &'i AttributeType) -> (&'i AttributeType,) { - (value,) - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn cfg_included<'i>(value: &'i u32) -> (&'i u32,) { - (value,) - } - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn publish<'i>(topic: &'i u32, value: &'i u32) -> (&'i u32, &'i u32) { + pub fn trait_default_dual_cfg(&self) -> u32 { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_default_dual_cfg") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn try_trait_default_dual_cfg( + &self, + ) -> Result< + Result>::Error>, + Result, + > { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.try_invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_default_dual_cfg") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } +} +///AttributeTraitArgs is a type for building arg lists for functions defined in "AttributeTrait". +pub struct AttributeTraitArgs; +impl AttributeTraitArgs { + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_default<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_default_stacked_cfg<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override_stacked_cfg<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override_negated_cfg<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override_dual_cfg<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_default_dual_cfg<'i>() -> () { + () + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override.const_to_xdr() + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_default: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_default", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_default( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default.const_to_xdr() + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_default_stacked_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_default_stacked_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_default_stacked_cfg( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_to_xdr() + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override_stacked_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override_stacked_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override_stacked_cfg( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_to_xdr() + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override_negated_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override_negated_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override_negated_cfg( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_to_xdr() + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override_dual_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override_dual_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override_dual_cfg( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_to_xdr() + } +} +impl AttributeTraitSpec { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_default_dual_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_default_dual_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_default_dual_cfg( + ) -> [u8; AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_xdr_len()] { + AttributeTraitSpec::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_to_xdr() + } +} +impl Contract { + pub fn always(value: AttributeType) -> u32 { + value.value + } + pub fn cfg_included(value: u32) -> u32 { + value + } + pub fn publish(env: Env, topic: u32, value: u32) { + AttributeEvent { topic, value }.publish(&env); + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__always__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_ALWAYS: [u8; super::Contract::__SPEC_XDR_VIEW_always.const_xdr_len()] = + super::Contract::spec_xdr_always(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_always: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"always")), + inputs: soroban_sdk::xdr::VecMView::new(&[ + soroban_sdk::xdr::ScSpecFunctionInputV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"value"), + type_: soroban_sdk::xdr::ScSpecTypeDefView::Udt( + soroban_sdk::xdr::ScSpecTypeUdtView { + name: soroban_sdk::xdr::StringMView::new_str( + ::spec_type_name(), + ), + }, + ), + }, + ]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_always() -> [u8; Contract::__SPEC_XDR_VIEW_always.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_always.const_to_xdr() + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__cfg_included__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_CFG_INCLUDED: [u8; super::Contract::__SPEC_XDR_VIEW_cfg_included + .const_xdr_len()] = super::Contract::spec_xdr_cfg_included(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_cfg_included: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"cfg_included", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[ + soroban_sdk::xdr::ScSpecFunctionInputV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"value"), + type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, + }, + ]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_cfg_included( + ) -> [u8; Contract::__SPEC_XDR_VIEW_cfg_included.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_cfg_included.const_to_xdr() + } +} +impl Contract {} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__publish__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_PUBLISH: [u8; super::Contract::__SPEC_XDR_VIEW_publish + .const_xdr_len()] = super::Contract::spec_xdr_publish(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_publish: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"publish")), + inputs: soroban_sdk::xdr::VecMView::new(&[ + soroban_sdk::xdr::ScSpecFunctionInputV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"topic"), + type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, + }, + soroban_sdk::xdr::ScSpecFunctionInputV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::StringMView::new(b"value"), + type_: soroban_sdk::xdr::ScSpecTypeDefView::U32, + }, + ]), + outputs: soroban_sdk::xdr::VecMView::new(&[]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_publish() -> [u8; Contract::__SPEC_XDR_VIEW_publish.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_publish.const_to_xdr() + } +} +impl<'a> ContractClient<'a> { + pub fn always(&self, value: &AttributeType) -> u32 { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.invoke_contract( + &self.address, + &{ + #[allow(deprecated)] + const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("always"); + SYMBOL + }, + ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn try_always( + &self, + value: &AttributeType, + ) -> Result< + Result>::Error>, + Result, + > { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.try_invoke_contract( + &self.address, + &{ + #[allow(deprecated)] + const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("always"); + SYMBOL + }, + ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn cfg_included(&self, value: &u32) -> u32 { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "cfg_included") }, + ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn try_cfg_included( + &self, + value: &u32, + ) -> Result< + Result>::Error>, + Result, + > { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.try_invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "cfg_included") }, + ::soroban_sdk::Vec::from_array(&self.env, [value.into_val(&self.env)]), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn publish(&self, topic: &u32, value: &u32) -> () { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.invoke_contract( + &self.address, + &{ + #[allow(deprecated)] + const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("publish"); + SYMBOL + }, + ::soroban_sdk::Vec::from_array( + &self.env, + [topic.into_val(&self.env), value.into_val(&self.env)], + ), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn try_publish( + &self, + topic: &u32, + value: &u32, + ) -> Result< + Result<(), <() as soroban_sdk::TryFromVal>::Error>, + Result, + > { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.try_invoke_contract( + &self.address, + &{ + #[allow(deprecated)] + const SYMBOL: soroban_sdk::Symbol = soroban_sdk::Symbol::short("publish"); + SYMBOL + }, + ::soroban_sdk::Vec::from_array( + &self.env, + [topic.into_val(&self.env), value.into_val(&self.env)], + ), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } +} +impl ContractArgs { + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn always<'i>(value: &'i AttributeType) -> (&'i AttributeType,) { + (value,) + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn cfg_included<'i>(value: &'i u32) -> (&'i u32,) { + (value,) + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn publish<'i>(topic: &'i u32, value: &'i u32) -> (&'i u32, &'i u32) { (topic, value) } } @@ -1529,62 +1913,368 @@ fn __Contract____2246acd8c5a7d7a27c1bbb827466a98b2233215f0f3fdd39122db001505b94e }; core::default::Default::default() } - f - }; - } - { - ::register( - "always", - #[allow(deprecated)] - &__Contract__always__invoke_raw_slice, - ); - ::register( - "cfg_included", - #[allow(deprecated)] - &__Contract__cfg_included__invoke_raw_slice, + f + }; + } + { + ::register( + "always", + #[allow(deprecated)] + &__Contract__always__invoke_raw_slice, + ); + ::register( + "cfg_included", + #[allow(deprecated)] + &__Contract__cfg_included__invoke_raw_slice, + ); + ::register( + "publish", + #[allow(deprecated)] + &__Contract__publish__invoke_raw_slice, + ); + } +} +impl AttributeTrait for Contract { + fn trait_override() -> u32 { + 3 + } + fn trait_override_stacked_cfg() -> u32 { + 8 + } + fn trait_override_negated_cfg() -> u32 { + 10 + } + fn trait_override_dual_cfg() -> u32 { + 12 + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__trait_override__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_TRAIT_OVERRIDE: [u8; super::Contract::__SPEC_XDR_VIEW_trait_override + .const_xdr_len()] = super::Contract::spec_xdr_trait_override(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override( + ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_trait_override.const_to_xdr() + } +} +impl Contract {} +impl Contract {} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__trait_override_stacked_cfg__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_TRAIT_OVERRIDE_STACKED_CFG: [u8; + super::Contract::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_xdr_len()] = + super::Contract::spec_xdr_trait_override_stacked_cfg(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override_stacked_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override_stacked_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override_stacked_cfg( + ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_trait_override_stacked_cfg.const_to_xdr() + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__trait_override_negated_cfg__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_TRAIT_OVERRIDE_NEGATED_CFG: [u8; + super::Contract::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_xdr_len()] = + super::Contract::spec_xdr_trait_override_negated_cfg(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override_negated_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override_negated_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override_negated_cfg( + ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_trait_override_negated_cfg.const_to_xdr() + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__trait_override_dual_cfg__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_TRAIT_OVERRIDE_DUAL_CFG: [u8; + super::Contract::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_xdr_len()] = + super::Contract::spec_xdr_trait_override_dual_cfg(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_override_dual_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_override_dual_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_override_dual_cfg( + ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_trait_override_dual_cfg.const_to_xdr() + } +} +impl Contract {} +impl Contract {} +impl Contract {} +impl<'a> ContractClient<'a> { + pub fn trait_override(&self) -> u32 { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn try_trait_override( + &self, + ) -> Result< + Result>::Error>, + Result, + > { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.try_invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn trait_override_stacked_cfg(&self) -> u32 { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_stacked_cfg") }, + ::soroban_sdk::Vec::new(&self.env), ); - ::register( - "publish", - #[allow(deprecated)] - &__Contract__publish__invoke_raw_slice, + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn try_trait_override_stacked_cfg( + &self, + ) -> Result< + Result>::Error>, + Result, + > { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.try_invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_stacked_cfg") }, + ::soroban_sdk::Vec::new(&self.env), ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res } -} -impl AttributeTrait for Contract { - fn trait_override() -> u32 { - 3 + pub fn trait_override_negated_cfg(&self) -> u32 { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_negated_cfg") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res } -} -#[doc(hidden)] -#[allow(non_snake_case)] -pub mod __Contract__trait_override__spec { - #[doc(hidden)] - #[allow(non_snake_case)] - #[allow(non_upper_case_globals)] - pub static __SPEC_XDR_FN_TRAIT_OVERRIDE: [u8; super::Contract::__SPEC_XDR_VIEW_trait_override - .const_xdr_len()] = super::Contract::spec_xdr_trait_override(); -} -impl Contract { - #[allow(non_upper_case_globals)] - const __SPEC_XDR_VIEW_trait_override: soroban_sdk::xdr::ScSpecEntryView<'static> = - soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { - doc: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"trait_override", - )), - inputs: soroban_sdk::xdr::VecMView::new(&[]), - outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), - }); - #[allow(non_snake_case)] - pub const fn spec_xdr_trait_override( - ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_override.const_xdr_len()] { - Contract::__SPEC_XDR_VIEW_trait_override.const_to_xdr() + pub fn try_trait_override_negated_cfg( + &self, + ) -> Result< + Result>::Error>, + Result, + > { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.try_invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_negated_cfg") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res } -} -impl Contract {} -impl Contract {} -impl<'a> ContractClient<'a> { - pub fn trait_override(&self) -> u32 { + pub fn trait_override_dual_cfg(&self) -> u32 { use core::ops::Not; let old_auth_manager = self .env @@ -1609,7 +2299,7 @@ impl<'a> ContractClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override") }, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_dual_cfg") }, ::soroban_sdk::Vec::new(&self.env), ); if let Some(old_auth_manager) = old_auth_manager { @@ -1617,7 +2307,7 @@ impl<'a> ContractClient<'a> { } res } - pub fn try_trait_override( + pub fn try_trait_override_dual_cfg( &self, ) -> Result< Result>::Error>, @@ -1647,7 +2337,7 @@ impl<'a> ContractClient<'a> { use soroban_sdk::{FromVal, IntoVal}; let res = self.env.try_invoke_contract( &self.address, - &{ soroban_sdk::Symbol::new(&self.env, "trait_override") }, + &{ soroban_sdk::Symbol::new(&self.env, "trait_override_dual_cfg") }, ::soroban_sdk::Vec::new(&self.env), ); if let Some(old_auth_manager) = old_auth_manager { @@ -1656,27 +2346,170 @@ impl<'a> ContractClient<'a> { res } } -impl ContractArgs { - #[inline(always)] - #[allow(clippy::unused_unit)] - pub fn trait_override<'i>() -> () { - () +impl ContractArgs { + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override_stacked_cfg<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override_negated_cfg<'i>() -> () { + () + } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_override_dual_cfg<'i>() -> () { + () + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] +#[allow(deprecated)] +pub fn __Contract__trait_override__invoke_raw(env: soroban_sdk::Env) -> soroban_sdk::Val { + soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( + ::trait_override(), + &env, + ) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] +pub fn __Contract__trait_override__invoke_raw_slice( + env: soroban_sdk::Env, + args: &[soroban_sdk::Val], +) -> soroban_sdk::Val { + if args.len() != 0usize { + { + ::core::panicking::panic_fmt(format_args!( + "invalid number of input arguments: {0} expected, got {1}", + 0usize, + args.len(), + )); + }; + } + #[allow(deprecated)] + __Contract__trait_override__invoke_raw(env) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] +pub extern "C" fn __Contract__trait_override__invoke_raw_extern() -> soroban_sdk::Val { + #[allow(deprecated)] + __Contract__trait_override__invoke_raw(soroban_sdk::Env::default()) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated( + note = "use `ContractClient::new(&env, &contract_id).trait_override_stacked_cfg` instead" +)] +#[allow(deprecated)] +pub fn __Contract__trait_override_stacked_cfg__invoke_raw( + env: soroban_sdk::Env, +) -> soroban_sdk::Val { + soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( + ::trait_override_stacked_cfg(), + &env, + ) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated( + note = "use `ContractClient::new(&env, &contract_id).trait_override_stacked_cfg` instead" +)] +pub fn __Contract__trait_override_stacked_cfg__invoke_raw_slice( + env: soroban_sdk::Env, + args: &[soroban_sdk::Val], +) -> soroban_sdk::Val { + if args.len() != 0usize { + { + ::core::panicking::panic_fmt(format_args!( + "invalid number of input arguments: {0} expected, got {1}", + 0usize, + args.len(), + )); + }; + } + #[allow(deprecated)] + __Contract__trait_override_stacked_cfg__invoke_raw(env) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated( + note = "use `ContractClient::new(&env, &contract_id).trait_override_stacked_cfg` instead" +)] +pub extern "C" fn __Contract__trait_override_stacked_cfg__invoke_raw_extern() -> soroban_sdk::Val { + #[allow(deprecated)] + __Contract__trait_override_stacked_cfg__invoke_raw(soroban_sdk::Env::default()) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated( + note = "use `ContractClient::new(&env, &contract_id).trait_override_negated_cfg` instead" +)] +#[allow(deprecated)] +pub fn __Contract__trait_override_negated_cfg__invoke_raw( + env: soroban_sdk::Env, +) -> soroban_sdk::Val { + soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( + ::trait_override_negated_cfg(), + &env, + ) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated( + note = "use `ContractClient::new(&env, &contract_id).trait_override_negated_cfg` instead" +)] +pub fn __Contract__trait_override_negated_cfg__invoke_raw_slice( + env: soroban_sdk::Env, + args: &[soroban_sdk::Val], +) -> soroban_sdk::Val { + if args.len() != 0usize { + { + ::core::panicking::panic_fmt(format_args!( + "invalid number of input arguments: {0} expected, got {1}", + 0usize, + args.len(), + )); + }; } + #[allow(deprecated)] + __Contract__trait_override_negated_cfg__invoke_raw(env) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] +#[deprecated( + note = "use `ContractClient::new(&env, &contract_id).trait_override_negated_cfg` instead" +)] +pub extern "C" fn __Contract__trait_override_negated_cfg__invoke_raw_extern() -> soroban_sdk::Val { + #[allow(deprecated)] + __Contract__trait_override_negated_cfg__invoke_raw(soroban_sdk::Env::default()) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated( + note = "use `ContractClient::new(&env, &contract_id).trait_override_dual_cfg` instead" +)] #[allow(deprecated)] -pub fn __Contract__trait_override__invoke_raw(env: soroban_sdk::Env) -> soroban_sdk::Val { +pub fn __Contract__trait_override_dual_cfg__invoke_raw(env: soroban_sdk::Env) -> soroban_sdk::Val { soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( - ::trait_override(), + ::trait_override_dual_cfg(), &env, ) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] -pub fn __Contract__trait_override__invoke_raw_slice( +#[deprecated( + note = "use `ContractClient::new(&env, &contract_id).trait_override_dual_cfg` instead" +)] +pub fn __Contract__trait_override_dual_cfg__invoke_raw_slice( env: soroban_sdk::Env, args: &[soroban_sdk::Val], ) -> soroban_sdk::Val { @@ -1690,14 +2523,16 @@ pub fn __Contract__trait_override__invoke_raw_slice( }; } #[allow(deprecated)] - __Contract__trait_override__invoke_raw(env) + __Contract__trait_override_dual_cfg__invoke_raw(env) } #[doc(hidden)] #[allow(non_snake_case)] -#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_override` instead")] -pub extern "C" fn __Contract__trait_override__invoke_raw_extern() -> soroban_sdk::Val { +#[deprecated( + note = "use `ContractClient::new(&env, &contract_id).trait_override_dual_cfg` instead" +)] +pub extern "C" fn __Contract__trait_override_dual_cfg__invoke_raw_extern() -> soroban_sdk::Val { #[allow(deprecated)] - __Contract__trait_override__invoke_raw(soroban_sdk::Env::default()) + __Contract__trait_override_dual_cfg__invoke_raw(soroban_sdk::Env::default()) } #[doc(hidden)] #[allow(non_snake_case)] @@ -1779,6 +2614,42 @@ pub extern "C" fn __Contract__trait_default_stacked_cfg__invoke_raw_extern() -> #[allow(deprecated)] __Contract__trait_default_stacked_cfg__invoke_raw(soroban_sdk::Env::default()) } +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_default_dual_cfg` instead")] +#[allow(deprecated)] +pub fn __Contract__trait_default_dual_cfg__invoke_raw(env: soroban_sdk::Env) -> soroban_sdk::Val { + soroban_sdk::IntoValForContractFn::into_val_for_contract_fn( + ::trait_default_dual_cfg(), + &env, + ) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_default_dual_cfg` instead")] +pub fn __Contract__trait_default_dual_cfg__invoke_raw_slice( + env: soroban_sdk::Env, + args: &[soroban_sdk::Val], +) -> soroban_sdk::Val { + if args.len() != 0usize { + { + ::core::panicking::panic_fmt(format_args!( + "invalid number of input arguments: {0} expected, got {1}", + 0usize, + args.len(), + )); + }; + } + #[allow(deprecated)] + __Contract__trait_default_dual_cfg__invoke_raw(env) +} +#[doc(hidden)] +#[allow(non_snake_case)] +#[deprecated(note = "use `ContractClient::new(&env, &contract_id).trait_default_dual_cfg` instead")] +pub extern "C" fn __Contract__trait_default_dual_cfg__invoke_raw_extern() -> soroban_sdk::Val { + #[allow(deprecated)] + __Contract__trait_default_dual_cfg__invoke_raw(soroban_sdk::Env::default()) +} impl Contract {} #[doc(hidden)] #[allow(non_snake_case)] @@ -1833,6 +2704,36 @@ impl Contract { Contract::__SPEC_XDR_VIEW_trait_default_stacked_cfg.const_to_xdr() } } +impl Contract {} +impl Contract {} +impl Contract {} +#[doc(hidden)] +#[allow(non_snake_case)] +pub mod __Contract__trait_default_dual_cfg__spec { + #[doc(hidden)] + #[allow(non_snake_case)] + #[allow(non_upper_case_globals)] + pub static __SPEC_XDR_FN_TRAIT_DEFAULT_DUAL_CFG: [u8; + super::Contract::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_xdr_len()] = + super::Contract::spec_xdr_trait_default_dual_cfg(); +} +impl Contract { + #[allow(non_upper_case_globals)] + const __SPEC_XDR_VIEW_trait_default_dual_cfg: soroban_sdk::xdr::ScSpecEntryView<'static> = + soroban_sdk::xdr::ScSpecEntryView::FunctionV0(soroban_sdk::xdr::ScSpecFunctionV0View { + doc: soroban_sdk::xdr::StringMView::new(b""), + name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( + b"trait_default_dual_cfg", + )), + inputs: soroban_sdk::xdr::VecMView::new(&[]), + outputs: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSpecTypeDefView::U32]), + }); + #[allow(non_snake_case)] + pub const fn spec_xdr_trait_default_dual_cfg( + ) -> [u8; Contract::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_xdr_len()] { + Contract::__SPEC_XDR_VIEW_trait_default_dual_cfg.const_to_xdr() + } +} impl<'a> ContractClient<'a> { pub fn trait_default(&self) -> u32 { use core::ops::Not; @@ -1976,6 +2877,77 @@ impl<'a> ContractClient<'a> { } res } + pub fn trait_default_dual_cfg(&self) -> u32 { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_default_dual_cfg") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } + pub fn try_trait_default_dual_cfg( + &self, + ) -> Result< + Result>::Error>, + Result, + > { + use core::ops::Not; + let old_auth_manager = self + .env + .in_contract() + .not() + .then(|| self.env.host().snapshot_auth_manager().unwrap()); + { + if let Some(set_auths) = self.set_auths { + self.env.set_auths(set_auths); + } + if let Some(mock_auths) = self.mock_auths { + self.env.mock_auths(mock_auths); + } + if self.mock_all_auths { + if self.allow_non_root_auth { + self.env.mock_all_auths_allowing_non_root_auth(); + } else { + self.env.mock_all_auths(); + } + } + } + use soroban_sdk::{FromVal, IntoVal}; + let res = self.env.try_invoke_contract( + &self.address, + &{ soroban_sdk::Symbol::new(&self.env, "trait_default_dual_cfg") }, + ::soroban_sdk::Vec::new(&self.env), + ); + if let Some(old_auth_manager) = old_auth_manager { + self.env.host().set_auth_manager(old_auth_manager).unwrap(); + } + res + } } impl ContractArgs { #[inline(always)] @@ -1988,11 +2960,16 @@ impl ContractArgs { pub fn trait_default_stacked_cfg<'i>() -> () { () } + #[inline(always)] + #[allow(clippy::unused_unit)] + pub fn trait_default_dual_cfg<'i>() -> () { + () + } } #[doc(hidden)] #[allow(non_snake_case)] #[allow(unused)] -fn __Contract__AttributeTrait__5c3dc6ba0d711665380c5f56dcc72fd5dd342c89561cb9e2302a58b4f4cac9dd_ctor( +fn __Contract__AttributeTrait__8ce1beb22d1cf3a30219e745dd54ab4127700ae1863a7e431a8fddbdbf3f961c_ctor( ) { #[allow(unsafe_code)] { @@ -2005,7 +2982,7 @@ fn __Contract__AttributeTrait__5c3dc6ba0d711665380c5f56dcc72fd5dd342c89561cb9e23 #[allow(non_snake_case)] extern "C" fn f() -> ::ctor::__support::CtorRetType { unsafe { - __Contract__AttributeTrait__5c3dc6ba0d711665380c5f56dcc72fd5dd342c89561cb9e2302a58b4f4cac9dd_ctor(); + __Contract__AttributeTrait__8ce1beb22d1cf3a30219e745dd54ab4127700ae1863a7e431a8fddbdbf3f961c_ctor(); }; core::default::Default::default() } @@ -2023,12 +3000,17 @@ fn __Contract__AttributeTrait__5c3dc6ba0d711665380c5f56dcc72fd5dd342c89561cb9e23 #[allow(deprecated)] &__Contract__trait_default_stacked_cfg__invoke_raw_slice, ); + ::register( + "trait_default_dual_cfg", + #[allow(deprecated)] + &__Contract__trait_default_dual_cfg__invoke_raw_slice, + ); } } #[doc(hidden)] #[allow(non_snake_case)] #[allow(unused)] -fn __Contract__AttributeTrait__969988e5ad11b5d89373fc419647b603f4e9508cb73e2783cdc5572a30929b70_ctor( +fn __Contract__AttributeTrait__8904c8f92c2fe5f69c478861e0735de7c22bffee3517a491a4450e32ee923b8f_ctor( ) { #[allow(unsafe_code)] { @@ -2041,7 +3023,7 @@ fn __Contract__AttributeTrait__969988e5ad11b5d89373fc419647b603f4e9508cb73e2783c #[allow(non_snake_case)] extern "C" fn f() -> ::ctor::__support::CtorRetType { unsafe { - __Contract__AttributeTrait__969988e5ad11b5d89373fc419647b603f4e9508cb73e2783cdc5572a30929b70_ctor(); + __Contract__AttributeTrait__8904c8f92c2fe5f69c478861e0735de7c22bffee3517a491a4450e32ee923b8f_ctor(); }; core::default::Default::default() } @@ -2054,6 +3036,21 @@ fn __Contract__AttributeTrait__969988e5ad11b5d89373fc419647b603f4e9508cb73e2783c #[allow(deprecated)] &__Contract__trait_override__invoke_raw_slice, ); + ::register( + "trait_override_stacked_cfg", + #[allow(deprecated)] + &__Contract__trait_override_stacked_cfg__invoke_raw_slice, + ); + ::register( + "trait_override_negated_cfg", + #[allow(deprecated)] + &__Contract__trait_override_negated_cfg__invoke_raw_slice, + ); + ::register( + "trait_override_dual_cfg", + #[allow(deprecated)] + &__Contract__trait_override_dual_cfg__invoke_raw_slice, + ); } } mod test { @@ -2072,9 +3069,9 @@ mod test { ignore: false, ignore_message: ::core::option::Option::None, source_file: "tests/attributes/src/lib.rs", - start_line: 89usize, + start_line: 138usize, start_col: 8usize, - end_line: 89usize, + end_line: 138usize, end_col: 22usize, compile_fail: false, no_run: false, @@ -2127,9 +3124,9 @@ mod test { ignore: false, ignore_message: ::core::option::Option::None, source_file: "tests/attributes/src/lib.rs", - start_line: 101usize, + start_line: 150usize, start_col: 8usize, - end_line: 101usize, + end_line: 150usize, end_col: 24usize, compile_fail: false, no_run: false, @@ -2169,9 +3166,9 @@ mod test { ignore: false, ignore_message: ::core::option::Option::None, source_file: "tests/attributes/src/lib.rs", - start_line: 110usize, + start_line: 159usize, start_col: 8usize, - end_line: 110usize, + end_line: 159usize, end_col: 51usize, compile_fail: false, no_run: false, @@ -2226,6 +3223,58 @@ mod test { } } }; + match (&client.trait_override_stacked_cfg(), &8) { + (left_val, right_val) => { + if !(*left_val == *right_val) { + let kind = ::core::panicking::AssertKind::Eq; + ::core::panicking::assert_failed( + kind, + &*left_val, + &*right_val, + ::core::option::Option::None, + ); + } + } + }; + match (&client.trait_override_negated_cfg(), &10) { + (left_val, right_val) => { + if !(*left_val == *right_val) { + let kind = ::core::panicking::AssertKind::Eq; + ::core::panicking::assert_failed( + kind, + &*left_val, + &*right_val, + ::core::option::Option::None, + ); + } + } + }; + match (&client.trait_override_dual_cfg(), &12) { + (left_val, right_val) => { + if !(*left_val == *right_val) { + let kind = ::core::panicking::AssertKind::Eq; + ::core::panicking::assert_failed( + kind, + &*left_val, + &*right_val, + ::core::option::Option::None, + ); + } + } + }; + match (&client.trait_default_dual_cfg(), &14) { + (left_val, right_val) => { + if !(*left_val == *right_val) { + let kind = ::core::panicking::AssertKind::Eq; + ::core::panicking::assert_failed( + kind, + &*left_val, + &*right_val, + ::core::option::Option::None, + ); + } + } + }; } extern crate test; #[rustc_test_marker = "test::test_specs_include_active_attribute_items"] @@ -2237,9 +3286,9 @@ mod test { ignore: false, ignore_message: ::core::option::Option::None, source_file: "tests/attributes/src/lib.rs", - start_line: 121usize, + start_line: 174usize, start_col: 8usize, - end_line: 121usize, + end_line: 174usize, end_col: 49usize, compile_fail: false, no_run: false, @@ -2367,7 +3416,7 @@ mod test { } } }; - let wasm = b"\x00asm\x01\x00\x00\x00\x01\x1f\x05`\x04~~~~\x01~`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~\x02\x1f\x05\x01m\x01a\x00\x00\x01b\x01j\x00\x01\x01v\x01g\x00\x01\x01m\x019\x00\x02\x01x\x011\x00\x01\x03\x07\x06\x03\x03\x01\x04\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xc0\x80\xc0\x00\x0b\x07\x88\x01\n\x06memory\x02\x00\x06always\x00\x05\x0ccfg_included\x00\x06\x07publish\x00\x07\rtrait_default\x00\x08\x19trait_default_stacked_cfg\x00\t\x0etrait_override\x00\n\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xdd\x03\x06\x85\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80\x10\x10\x80\x80\x80\x80\x00\x1a \x01)\x03\x08\"\x00B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00 \x00B\x84\x80\x80\x80p\x83\x0b\x1a\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0b \x00B\x84\x80\x80\x80p\x83\x0b\x9c\x02\x02\x02\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00 \x01B\xff\x01\x83B\x04R\r\x00A\x00!\x03A\x00-\x00\x8e\x80\xc0\x80\x00\x1aA\xac\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80\xf0\x01\x10\x81\x80\x80\x80\x00!\x04 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x08 \x02 \x047\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\xadB \x86B\x04\x84\"\x00B\x84\x80\x80\x80 \x10\x82\x80\x80\x80\x00!\x04 \x02 \x01B\x84\x80\x80\x80p\x837\x03\x10 \x04A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x00B\x84\x80\x80\x80\x10\x10\x83\x80\x80\x80\x00\x10\x84\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b\x08\x00B\x84\x80\x80\x80 \x0b\t\x00B\x84\x80\x80\x80\xd0\x00\x0b\x08\x00B\x84\x80\x80\x800\x0b\x0bD\x01\x00A\x80\x80\xc0\x00\x0b;SpEcV1i\t\xb7\x06*\x88\xd7\xf8SpEcV1\xbfO\xc3P\xd4\x14\xb5Vvalue\x00\x00\x00\x1c\x00\x10\x00\x05\x00\x00\x00attribute_event\x00\x93\x1c\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06always\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07publish\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ccfg_included\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rtrait_default\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eAttributeEvent\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0fattribute_event\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0etrait_override\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19trait_default_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + let wasm = b"\x00asm\x01\x00\x00\x00\x01\x1f\x05`\x04~~~~\x01~`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~\x02\x1f\x05\x01m\x01a\x00\x00\x01b\x01j\x00\x01\x01v\x01g\x00\x01\x01m\x019\x00\x02\x01x\x011\x00\x01\x03\x0b\n\x03\x03\x01\x04\x04\x04\x04\x04\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xc0\x80\xc0\x00\x0b\x07\xf5\x01\x0e\x06memory\x02\x00\x06always\x00\x05\x0ccfg_included\x00\x06\x07publish\x00\x07\rtrait_default\x00\x08\x16trait_default_dual_cfg\x00\t\x19trait_default_stacked_cfg\x00\n\x0etrait_override\x00\x0b\x17trait_override_dual_cfg\x00\x0c\x1atrait_override_negated_cfg\x00\r\x1atrait_override_stacked_cfg\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x85\x04\n\x85\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80\x10\x10\x80\x80\x80\x80\x00\x1a \x01)\x03\x08\"\x00B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00 \x00B\x84\x80\x80\x80p\x83\x0b\x1a\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0b \x00B\x84\x80\x80\x80p\x83\x0b\x9c\x02\x02\x02\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00 \x01B\xff\x01\x83B\x04R\r\x00A\x00!\x03A\x00-\x00\x8e\x80\xc0\x80\x00\x1aA\xac\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80\xf0\x01\x10\x81\x80\x80\x80\x00!\x04 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x08 \x02 \x047\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\xadB \x86B\x04\x84\"\x00B\x84\x80\x80\x80 \x10\x82\x80\x80\x80\x00!\x04 \x02 \x01B\x84\x80\x80\x80p\x837\x03\x10 \x04A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x00B\x84\x80\x80\x80\x10\x10\x83\x80\x80\x80\x00\x10\x84\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b\x08\x00B\x84\x80\x80\x80 \x0b\t\x00B\x84\x80\x80\x80\xe0\x01\x0b\t\x00B\x84\x80\x80\x80\xd0\x00\x0b\x08\x00B\x84\x80\x80\x800\x0b\t\x00B\x84\x80\x80\x80\xc0\x01\x0b\t\x00B\x84\x80\x80\x80\xa0\x01\x0b\t\x00B\x84\x80\x80\x80\x80\x01\x0b\x0bD\x01\x00A\x80\x80\xc0\x00\x0b;SpEcV1L\x0f\xecG\xb1\x13$mSpEcV1\xbfO\xc3P\xd4\x14\xb5Vvalue\x00\x00\x00\x1c\x00\x10\x00\x05\x00\x00\x00attribute_event\x00\xdb\x1d\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06always\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07publish\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ccfg_included\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rtrait_default\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eAttributeEvent\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0fattribute_event\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0etrait_override\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16trait_default_dual_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17trait_override_dual_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19trait_default_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1atrait_override_negated_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1atrait_override_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; let fn_names: HashSet = soroban_spec::read::from_wasm(wasm) .unwrap() .iter() @@ -2399,6 +3448,26 @@ mod test { "assertion failed: fn_names.contains(\"trait_default_stacked_cfg\")", ) } + if !fn_names.contains("trait_override_stacked_cfg") { + ::core::panicking::panic( + "assertion failed: fn_names.contains(\"trait_override_stacked_cfg\")", + ) + } + if !fn_names.contains("trait_override_negated_cfg") { + ::core::panicking::panic( + "assertion failed: fn_names.contains(\"trait_override_negated_cfg\")", + ) + } + if !fn_names.contains("trait_override_dual_cfg") { + ::core::panicking::panic( + "assertion failed: fn_names.contains(\"trait_override_dual_cfg\")", + ) + } + if !fn_names.contains("trait_default_dual_cfg") { + ::core::panicking::panic( + "assertion failed: fn_names.contains(\"trait_default_dual_cfg\")", + ) + } if !!fn_names.contains("cfg_excluded") { ::core::panicking::panic("assertion failed: !fn_names.contains(\"cfg_excluded\")") } diff --git a/tests-expanded/test_import_contract_tests.rs b/tests-expanded/test_import_contract_tests.rs index e9ff28bf6..2b409636f 100644 --- a/tests-expanded/test_import_contract_tests.rs +++ b/tests-expanded/test_import_contract_tests.rs @@ -6,7 +6,7 @@ extern crate core; use core::prelude::rust_2021::*; use soroban_sdk::{contract, contracterror, contractimpl, Address, Env}; mod addcontract { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x14\x04`\x01~\x01~`\x02\x7f~\x00`\x02~~\x01~`\x00\x00\x02\r\x02\x01i\x010\x00\x00\x01i\x01_\x00\x00\x03\x08\x07\x01\x01\x02\x03\x02\x02\x03\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\xa0\x80\xc0\x00\x0b\x07I\x07\x06memory\x02\x00\x03add\x00\x04\x08safe_add\x00\x06\x0csafe_add_two\x00\x07\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xf3\x04\x07]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc0\x00F\r\x00\x02@ \x02A\x06F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x88!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x80\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b;\x00\x02@\x02@ \x01B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x06\x84!\x01\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x8e\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@\x02@\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08\"\x01 \x00|\"\x00 \x01T\r\x01 \x02 \x00\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01G\r\x02\x0b\x00\x0b\x10\x85\x80\x80\x80\x00\x00\x0b \x02)\x03\x08!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\t\x00\x10\x88\x80\x80\x80\x00\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x03\x00\x00\x0b\x0b%\x01\x00A\x80\x80\xc0\x00\x0b\x1cSpEcV1\xd6\xb8`\x15\xac\x9ei\x1aSpEcV1\x95\xd0j*\x1d\xfam\xa3\x00\xeb\x1a\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13test_add_u64::Error\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08safe_add\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0csafe_add_two\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x07\xd0\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x14\x04`\x01~\x01~`\x02\x7f~\x00`\x02~~\x01~`\x00\x00\x02\r\x02\x01i\x010\x00\x00\x01i\x01_\x00\x00\x03\x08\x07\x01\x01\x02\x03\x02\x02\x03\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\xa0\x80\xc0\x00\x0b\x07I\x07\x06memory\x02\x00\x03add\x00\x04\x08safe_add\x00\x06\x0csafe_add_two\x00\x07\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xf3\x04\x07]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc0\x00F\r\x00\x02@ \x02A\x06F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x88!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x80\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b;\x00\x02@\x02@ \x01B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x06\x84!\x01\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x8e\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@\x02@\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08\"\x01 \x00|\"\x00 \x01T\r\x01 \x02 \x00\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01G\r\x02\x0b\x00\x0b\x10\x85\x80\x80\x80\x00\x00\x0b \x02)\x03\x08!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\t\x00\x10\x88\x80\x80\x80\x00\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x03\x00\x00\x0b\x0b%\x01\x00A\x80\x80\xc0\x00\x0b\x1cSpEcV1\xd22/\\\x8c\x82\xb2GSpEcV1\xa3z\xb5\xbfR\xaeOu\x00\xeb\x1a\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13test_add_u64::Error\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08safe_add\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0csafe_add_two\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x07\xd0\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn add(env: soroban_sdk::Env, a: u64, b: u64) -> u64; fn safe_add(env: soroban_sdk::Env, a: u64, b: u64) -> Result; diff --git a/tests-expanded/test_import_contract_wasm32v1-none.rs b/tests-expanded/test_import_contract_wasm32v1-none.rs index 0d7bf234c..7e7b6c1e5 100644 --- a/tests-expanded/test_import_contract_wasm32v1-none.rs +++ b/tests-expanded/test_import_contract_wasm32v1-none.rs @@ -6,7 +6,7 @@ extern crate core; use core::prelude::rust_2021::*; use soroban_sdk::{contract, contracterror, contractimpl, Address, Env}; mod addcontract { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x14\x04`\x01~\x01~`\x02\x7f~\x00`\x02~~\x01~`\x00\x00\x02\r\x02\x01i\x010\x00\x00\x01i\x01_\x00\x00\x03\x08\x07\x01\x01\x02\x03\x02\x02\x03\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\xa0\x80\xc0\x00\x0b\x07I\x07\x06memory\x02\x00\x03add\x00\x04\x08safe_add\x00\x06\x0csafe_add_two\x00\x07\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xf3\x04\x07]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc0\x00F\r\x00\x02@ \x02A\x06F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x88!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x80\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b;\x00\x02@\x02@ \x01B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x06\x84!\x01\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x8e\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@\x02@\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08\"\x01 \x00|\"\x00 \x01T\r\x01 \x02 \x00\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01G\r\x02\x0b\x00\x0b\x10\x85\x80\x80\x80\x00\x00\x0b \x02)\x03\x08!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\t\x00\x10\x88\x80\x80\x80\x00\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x03\x00\x00\x0b\x0b%\x01\x00A\x80\x80\xc0\x00\x0b\x1cSpEcV1\xd6\xb8`\x15\xac\x9ei\x1aSpEcV1\x95\xd0j*\x1d\xfam\xa3\x00\xeb\x1a\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13test_add_u64::Error\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08safe_add\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0csafe_add_two\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x07\xd0\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01\x14\x04`\x01~\x01~`\x02\x7f~\x00`\x02~~\x01~`\x00\x00\x02\r\x02\x01i\x010\x00\x00\x01i\x01_\x00\x00\x03\x08\x07\x01\x01\x02\x03\x02\x02\x03\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\x9c\x80\xc0\x00\x0b\x7f\x00A\xa0\x80\xc0\x00\x0b\x07I\x07\x06memory\x02\x00\x03add\x00\x04\x08safe_add\x00\x06\x0csafe_add_two\x00\x07\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xf3\x04\x07]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc0\x00F\r\x00\x02@ \x02A\x06F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x88!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x80\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b;\x00\x02@\x02@ \x01B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x06\x84!\x01\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x8e\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@\x02@\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08\"\x01 \x00|\"\x00 \x01T\r\x01 \x02 \x00\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01G\r\x02\x0b\x00\x0b\x10\x85\x80\x80\x80\x00\x00\x0b \x02)\x03\x08!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0b\t\x00\x10\x88\x80\x80\x80\x00\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00\x10\x82\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x03 \x02 \x01\x10\x82\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x00 \x02)\x03\x08!\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10!\x01\x02@ \x00 \x03|\"\x03 \x00T\r\x00 \x02 \x03\x10\x83\x80\x80\x80\x00 \x02(\x02\x00A\x01F\r\x01 \x02)\x03\x08!\x01\x0b \x02A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\x03\x00\x00\x0b\x0b%\x01\x00A\x80\x80\xc0\x00\x0b\x1cSpEcV1\xd22/\\\x8c\x82\xb2GSpEcV1\xa3z\xb5\xbfR\xaeOu\x00\xeb\x1a\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13test_add_u64::Error\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Overflow\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08safe_add\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0csafe_add_two\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x06\x00\x00\x07\xd0\x00\x00\x00\x15test_add_u64::MyError\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn add(env: soroban_sdk::Env, a: u64, b: u64) -> u64; fn safe_add(env: soroban_sdk::Env, a: u64, b: u64) -> Result; diff --git a/tests-expanded/test_spec_shaking_v2_tests.rs b/tests-expanded/test_spec_shaking_v2_tests.rs index 90b15470e..00a108f62 100644 --- a/tests-expanded/test_spec_shaking_v2_tests.rs +++ b/tests-expanded/test_spec_shaking_v2_tests.rs @@ -12984,7 +12984,7 @@ const _: () = { } }; mod wasm_imported { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\xa2=N\xc1p\x95\x90\xb2SpEcV1\xe9R\xa7\xe8b\x99\xa2\xc3SpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1V]\x80\\~\x1a\x08/SpEcV1\xcf)\x97]S\xb2\xfd)f1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xd3)\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\x0eJ\x07\xc3\x8bG\x9d\x91SpEcV1\x9a\xac\n*\xd8z\xf1rSpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\x14\xc8R\x91\x9a.T\x17SpEcV1)\xf5 \xed\x8b.\x0fuSpEcV1\xed\xbfE\xe8/\xbf\x90\x8cf1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xd3)\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn fn_enum_a(env: soroban_sdk::Env) -> EnumA; fn fn_error_a(env: soroban_sdk::Env, input: u32) -> Result; @@ -33022,7 +33022,7 @@ mod test { use soroban_sdk::xdr::ScSpecEntry; use std::collections::HashSet; use std::vec::Vec; - const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01^\x10`\x02~~\x01~`\x01~\x01~`\x03~~~\x01~`\x04~~~~\x01~`\x00\x00`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x01~\x00`\x02\x7f\x7f\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x02\x7f~\x00`\x05~\x7f\x7f\x7f\x7f\x00`\x03\x7f\x7f\x7f\x00`\x01\x7f\x01~\x02I\x0c\x01x\x011\x00\x00\x01v\x013\x00\x01\x01i\x012\x00\x01\x01v\x01h\x00\x02\x01v\x01g\x00\x00\x01m\x01a\x00\x03\x01b\x01m\x00\x02\x01b\x01j\x00\x00\x01v\x011\x00\x00\x01b\x018\x00\x01\x01x\x015\x00\x01\x01m\x019\x00\x02\x0365\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x05\x06\x00\x07\x05\x05\x05\x05\x05\x05\x01\x08\x01\x05\x01\t\n\x0b\x0c\x01\r\x0c\x01\x01\x01\x05\x01\x01\x01\x00\x01\x05\x05\x0e\x0f\x01\x05\x01\x01\x01\x04\x04\x04\x05\x01p\x01\x0c\x0c\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xd2\x88\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x07\x86\x04\x1f\x06memory\x02\x00\x11publish_data_type\x00\x17\x13publish_nested_data\x00\x1b\x14publish_nested_topic\x00\x1c\x11publish_ref_event\x00\x1e\x0epublish_simple\x00\x1f\x12publish_topic_type\x00 \x11with_assert_error\x00!\x12with_auth_contexts\x00#\nwith_error\x00$\x0fwith_executable\x00%\x11with_invoker_auth\x00*\x0fwith_lib_struct\x00-\x08with_map\x00.\x0cwith_non_pub\x00/\x12with_non_pub_error\x000\x0bwith_option\x001\x10with_panic_error\x002\x14with_panic_raw_error\x003\nwith_param\x004\x0ewith_recursion\x005\x0bwith_result\x006\x0bwith_return\x007\nwith_tuple\x00:\x11with_tuple_return\x00;\x08with_vec\x00<\x0fwith_vec_nested\x00=\x12with_wasm_imported\x00>\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\x11\x01\x00A\x01\x0b\x0b\x0f\x11\x13\x12\x0e\r\x14\x15\x16\x0c\x10\n\xac05\x0c\x00A\x00-\x00\x9c\x80\xc0\x80\x00\x1a\x0b\x16\x00A\x00-\x00\xfe\x80\xc0\x80\x00\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x8c\x81\xc0\x80\x00\x1a\x0bJ\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a\x0b6\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xec\x82\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xfa\x82\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xb2\x83\xc0\x80\x00\x1a\x0b\x86\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x00A\x84\x80\x80\x80\x006\x02\x04 \x00(\x02\x04\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x0b\x02\x00\x0bk\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xa8\x88\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xf8\x83\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x86\x84\xc0\x80\x00\x1a\x0b\xae\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\xb0\x86\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xa8\x81\xc0\x80\x00\x1aA\x00-\x00\x88\x83\xc0\x80\x00\x1aA\xf8\x86\xc0\x80\x00A\x19\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x18 \x00B\x84\x80\x80\x80\x107\x03\x10 \x00A\x88\x86\xc0\x80\x00A\x02 \x00A\x10jA\x02\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A j$\x80\x80\x80\x80\x00B\x02\x0bE\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00 \x01\x10\xb8\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01G\r\x00\x00\x0b \x02)\x03\x08!\x03 \x02A\x10j$\x80\x80\x80\x80\x00 \x03\x0b\x92\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00A\x00!\x03\x03~\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\x10\xb9\x80\x80\x80\x00!\x01 \x02A j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x0b\xc5\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xdd\x84\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xfc\x81\xc0\x80\x00\x1aA\x00-\x00\x8a\x82\xc0\x80\x00\x1aA\x00-\x00\xce\x83\xc0\x80\x00\x1aA\xab\x87\xc0\x80\x00A\x1b\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\xbd\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xd0\x82\xc0\x80\x00\x1aA\x00-\x00\xde\x82\xc0\x80\x00\x1aA\x00-\x00\xdc\x83\xc0\x80\x00\x1aA\xc6\x87\xc0\x80\x00A\x1c\x10\x98\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x01A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x00\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x06\x00B\x8b\xc8\x01\x0b\xc7\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00 \x00A\x85\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1a \x00A\x86\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xb6\x81\xc0\x80\x00\x1aA\xe4\x86\xc0\x80\x00A\x14\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xb0\x0c7\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xfc\x85\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x7f\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xa8\x86\xc0\x80\x00A\x08\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\xc4\x86\xc0\x80\x00A\x11\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b}\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x98\x82\xc0\x80\x00\x1aA\x00-\x00\x96\x83\xc0\x80\x00\x1aA\x91\x87\xc0\x80\x00A\x1a\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0bJ\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01qE\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xc2\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b\x0b\x00 \x00\x10\x8a\x80\x80\x80\x00\x1a\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x87\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x13\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\xa0\x05\x0b\xc0\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xb6\x88\xc0\x80\x00\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x08 \x01 \x007\x03\x00 \x01 \x02B \x88>\x02\x0c \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x00A\xc4\x84\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x01\x02\x00\x04\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x03\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01A\x10j \x01)\x03\x18\x10\xa9\x80\x80\x80\x00 \x01(\x02\x10A\x01G\r\x01\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x01\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x86\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\xc0\x80\x80\x80\x00\x00\x0bB\x01\x01~B\x01!\x02\x02@ \x01B\xff\x01\x83B\xc8\x00R\r\x00 \x01\x10\x89\x80\x80\x80\x00B\x80\x80\x80\x80p\x83B\x80\x80\x80\x80\x80\x04R\r\x00 \x00 \x017\x03\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\xd3\x07\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\xc0\x00k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x01A\x84\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x10 \x01 \x007\x03\x08 \x01 \x02B \x88>\x02\x14 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03 \"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\xe0\x85\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x00\x01\x02\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01)\x030!\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xe8\x88\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x02 \x011\x00 B\xcd\x00R\r\x02\x02@ \x01-\x00(\"\x03A\x0eF\r\x00 \x03A\xca\x00G\r\x03\x0b \x011\x008B\xcb\x00R\r\x02\x0c\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xc4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01A\x18j \x01)\x030\x10\xac\x80\x80\x80\x00 \x01(\x02\x18\r\x01 \x01A\x18j \x01)\x038\x10\xa9\x80\x80\x80\x00 \x01(\x02\x18A\x01G\r\x02\x0c\x01\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x89\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x00 \x01A0j \x01)\x03 \x10\xac\x80\x80\x80\x00 \x01(\x020\r\x00 \x01A0j \x01)\x03(\x10\xa9\x80\x80\x80\x00 \x01(\x020A\x01G\r\x01\x0b\x00\x0b \x01A\xc0\x00j$\x80\x80\x80\x80\x00B\x02\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x85\x80\x80\x80\x00\x1a\x0b\xb3\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@\x02@ \x01B\xff\x01\x83B\xcb\x00Q\r\x00 \x00B\x017\x03\x00\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x03 \x02A\x006\x02\x08 \x02 \x017\x03\x00 \x02 \x03B \x88>\x02\x0c \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00\x02@ \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00\x02@ \x02)\x03\x18\"\x01\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@ \x01A\x84\x89\xc0\x80\x00A\x01\x10\xa7\x80\x80\x80\x00B\xff\xff\xff\xff\x0fV\r\x00 \x02(\x02\x08 \x02(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00 \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00 \x02A\x10j \x02)\x03\x18\x10\xa9\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x01 \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0c\x02\x0b \x00B\x017\x03\x00\x0c\x01\x0b \x00B\x017\x03\x00\x0b \x02A j$\x80\x80\x80\x80\x00\x0b\x9e\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x00 \x01(\x02\x00\x1aA\x00!\x02A\x00-\x00\xfc\x89\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\xcb\x00R\r\x00 \x011\x00\x08B\xcd\x00Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bA\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x88\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a \x01A\x89\x80\x80\x80\x006\x02\x08 \x01(\x02\x08\x1a\x02@ \x00B\xff\x01\x83B\xcc\x00Q\r\x00\x00\x0bB\x02\x0bg\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xe2\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x08B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x12\x00A\x00-\x00\xb8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\x10\x0br\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xc4\x81\xc0\x80\x00\x1a\x02@ \x00B\x02Q\r\x00 \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xf8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bI\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xb4\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b@\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bB\x83\x80\x80\x80\xf0\x00\x10\xa2\x80\x80\x80\x00\x00\x0b\x8a\x02\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03A\x00-\x00\xa6\x82\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x02@\x03@ \x03A\x10F\r\x01 \x02A\x08j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x84\xc0\x80\x00A\x02 \x02A\x08jA\x02\x10\xab\x80\x80\x80\x00 \x021\x00\x08B\x04R\r\x00 \x02B\x027\x03\x18 \x02)\x03\x10\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x02A\x18jA\x01\x10\xab\x80\x80\x80\x00\x02@ \x02)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\x07F\r\x00 \x03A\xc1\x00G\r\x01 \x00\x10\x82\x80\x80\x80\x00\x1a\x0bA\x00-\x00\xf0\x80\xc0\x80\x00\x1a \x01B\xff\x01\x83B\x04R\r\x00 \x01B \x88\xa7A}jA}K\r\x01\x0b\x00\x0b \x02A j$\x80\x80\x80\x80\x00B\x02\x0b\x90\x04\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A0k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x01A\x81\x80\x80\x80\x006\x02 \x01(\x02 \x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x18 \x01 \x007\x03\x10 \x01 \x02B \x88>\x02\x1c \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03(\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\x98\x85\xc0\x80\x00A\x02\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x03\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\xcb\x00Q\r\x01\x0c\x02\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\x04R\r\x01\x0b \x01A0j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bZ\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x94\x84\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x08A\xf8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x00A\xf8\x85\xc0\x80\x00A\x01\x10\xb8\x80\x80\x80\x00\x02@ \x00(\x02\x00A\x01G\r\x00\x00\x0b \x00)\x03\x08!\x01 \x00B\x84\x80\x80\x80\x107\x03\x08 \x00 \x017\x03\x00 \x00\x10\xb9\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0b\xdb\x01\x02\x01~\x04\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03 \x02!\x04 \x01!\x05\x03@\x02@ \x04\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x06\x02@ \x05-\x00\x00\"\x07A\xdf\x00F\r\x00\x02@\x02@ \x07APjA\xff\x01qA\nI\r\x00 \x07A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x07A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x07AEj!\x06\x0c\x02\x0b \x07ARj!\x06\x0c\x01\x0b \x07AKj!\x06\x0b \x03B\x06\x86 \x06\xadB\xff\x01\x83\x84!\x03 \x04A\x7fj!\x04 \x05A\x01j!\x05\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x87\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x17\x00 \x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x84\x80\x80\x80\x00\x0b\xc4\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\x9a\x81\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00\x02@\x03@ \x02A\x10F\r\x01 \x01A\x08j \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x83\x80\x80\x80\x00\x1a \x01B\x027\x03\x18 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x18jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\x04R\r\x00 \x011\x00\x10B\x04Q\r\x01\x0b\x00\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xa4\x83\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x18A\xa8\x84\xc0\x80\x00A\x01 \x00A\x18jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x10 \x00 \x017\x03\x08 \x00A\x08j\x10\xb9\x80\x80\x80\x00!\x01 \x00A j$\x80\x80\x80\x80\x00 \x01\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8a\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8b\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x8d\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\xc0\x83\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\x04R\r\x00 \x01)\x03\x08B\xfe\x01\x83P\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x03\x00\x00\x0b\t\x00\x10\xbf\x80\x80\x80\x00\x00\x0b\x0b\xaa\n\x01\x00A\x80\x80\xc0\x00\x0b\xa0\nSpEcV1Hh\xdc\xaaa\x8d\xf7\rSpEcV1\xe7\xcf\x9b1n\x15\x13\xfeSpEcV1\xe2\x01y\xc9\x9a\xf8\xedtSpEcV1v1\x0eP\xa9C\xc7*SpEcV1\xa9<\xd8+\xb7\xa7\r\x17SpEcV1X\x03\xf6t\xc7\xd0\x01\"SpEcV1\'\xbd_A\r\x9a\x89\x02SpEcV1p\x8c\x0fN!\x082\xd8SpEcV1\xc2\xf4N\xbf\xebqvpSpEcV1K\xdf\'8m/\xe8\x1dSpEcV1@\xb9LO\xf9\xd1\xe8\xe2SpEcV1\xde\x1dMa\x01\xec\xb0ASpEcV1\xc2 \x1b\xdc\xc8gxZSpEcV1[Q+\xe9\xde\xd5\xf2>SpEcV1\xb3/\x97\xd5\x06\xbd3BSpEcV1?\xd9\xb3q\xdep>\xf3SpEcV1*\\\x9c\xf4e\xaa\x1e]SpEcV1u2\x0b\x97\xae\xcd\x86\xbfSpEcV1\x0c\xf0\xf6w\xfd\x1a\x1b\x94SpEcV1\'\xf2\xa2\xb9\xd0)\xc0uSpEcV1\xf5\xd4\x9b\xa3\xccI\x13\xf7SpEcV1\x84\x08Y\xae\xa0\xf128SpEcV1\r\xb76\xae\x93D\xef\x1aSpEcV1\x8b\x89\x1f#\xbd\x157\xf4SpEcV16\x83?\xf0\xcdW\xb1/SpEcV1\x94\xc7w/_\xebXcSpEcV1\xb4\xabN]\xe3\xeaA\xd6SpEcV1\x13?J\x12d\xden|SpEcV1q\xa3z;6\xa6R\x01SpEcV1q^\xe2&\x9di\x9d\x0eSpEcV1Y\xa66\xb3\xecxE\x13SpEcV1\xcf@%X\xde+J@SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1 \xfbl\x04B\x82\xc0\xb4SpEcV1\xe3\xf2\x9b5%a\xfb\xd6SpEcV1\xe6Q\xd5T\x13\x8a\xb7lSpEcV1[\xf4R\xdf\xdd\xb4\xb0\xbcSpEcV1\xaaX8\xde\xef\xbb6%SpEcV1k\xe4zxB\xd1+\x02val\x00\x00\x00\"\x02\x10\x00\x03\x00\x00\x00StellarAssetAccount\x00\x80\x04\x10\x00\x04\x00\x00\x000\x02\x10\x00\x0c\x00\x00\x00<\x02\x10\x00\x07\x00\x00\x00anested\x00\\\x02\x10\x00\x01\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00datat\x02\x10\x00\x04\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\x80\x02\x10\x00\x0c\x00\x00\x00\x8c\x02\x10\x00\t\x00\x00\x00ContractCreateContractHostFnCreateContractWithCtorHostFn\xa8\x02\x10\x00\x08\x00\x00\x00\xb0\x02\x10\x00\x14\x00\x00\x00\xc4\x02\x10\x00\x1c\x00\x00\x00A\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00xy\x00\x00\x04\x03\x10\x00\x01\x00\x00\x00\x05\x03\x10\x00\x01\x00\x00\x00inner\x00\x00\x00\x18\x03\x10\x00\x05\x00\x00\x00transfercoordsamount6\x03\x10\x00\x06\x00\x00\x00used_event_simplepayloadU\x03\x10\x00\x07\x00\x00\x00used_event_with_refsused_event_with_data_typeused_event_with_topic_typeused_event_with_nested_dataused_event_with_nested_topicSpEcV1\xb6\xb1Hy\xda\xca\xaf\xccSpEcV1\x9e)H\x8e\xf0\x01{{SpEcV1ULqD\xd3\xfa:\x1fSpEcV1\x15\xe5\x1a,\xc0\xc7\xef\xd4SpEcV1s\x94\x0c\x1926\x1d\x90SpEcV1\xa3J\xcf\xf7D\x93\x0bBSpEcV1L|{\r\xf4\xf2\x1a\xa8SpEcV1\xf1\xf9\x90\x07E*e\xfdargscontractfn_name\x00\x00\x00R\x04\x10\x00\x04\x00\x00\x00V\x04\x10\x00\x08\x00\x00\x00^\x04\x10\x00\x07\x00\x00\x00Wasm\x80\x04\x10\x00\x04\x00\x00\x00contextsub_invocations\x00\x00\x8c\x04\x10\x00\x07\x00\x00\x00\x93\x04\x10\x00\x0f\x00\x00\x00executablesalt\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00constructor_args\xd4\x04\x10\x00\x10\x00\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00SpEcV1\xa3\x16\n\x8f\xc9\x92\xd2\x11f1f2\x00\x00\n\x05\x10\x00\x02\x00\x00\x00\x0c\x05\x10\x00\x02\x00\x00\x00\x00\x87|\x0econtractspecv0\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::Context\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::wasm_imported::Executable\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleB\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleC\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_map\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01m\x00\x00\x00\x00\x00\x03\xec\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_vec\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UnusedEnum\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02K1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02K2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_param\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02ie\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_tuple\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01t\x00\x00\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bUnusedEvent\x00\x00\x00\x00\x01\x00\x00\x00\x0cunused_event\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UnusedStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_option\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01o\x00\x00\x00\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_result\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x07\xd0\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_return\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UnusedIntEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02U1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02U2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08NotFound\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07Invalid\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cwith_non_pub\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UnusedPubError\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Nope\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Fail\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0epublish_simple\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ewith_recursion\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01r\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedEventSimple\x00\x00\x00\x00\x01\x00\x00\x00\x11used_event_simple\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01X\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01Y\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04Send\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Recv\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_executable\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01e\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_lib_struct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_vec_nested\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UnusedNonPubError\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01y\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10with_panic_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventWithRefs\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x14used_event_with_refs\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UnusedNonPubStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08Transfer\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Mint\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedPanicErrorEnum\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Boom\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_data_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_ref_event\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_assert_error\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02ok\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_invoker_auth\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01i\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_tuple_return\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedAssertErrorEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12publish_topic_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_auth_contexts\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_non_pub_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_wasm_imported\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\tvec_inner\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13publish_nested_data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14publish_nested_topic\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14with_panic_raw_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15UsedEventWithDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x19used_event_with_data_type\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedEventWithTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1aused_event_with_topic_type\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17UsedEventWithNestedData\x00\x00\x00\x00\x01\x00\x00\x00\x1bused_event_with_nested_data\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.test_spec_shaking_v2::UnusedNonContractFnParam\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UsedEventWithNestedTopic\x00\x00\x00\x01\x00\x00\x00\x1cused_event_with_nested_topic\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04info\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::UnusedNonContractFnReturn\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01^\x10`\x02~~\x01~`\x01~\x01~`\x03~~~\x01~`\x04~~~~\x01~`\x00\x00`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x01~\x00`\x02\x7f\x7f\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x02\x7f~\x00`\x05~\x7f\x7f\x7f\x7f\x00`\x03\x7f\x7f\x7f\x00`\x01\x7f\x01~\x02I\x0c\x01x\x011\x00\x00\x01v\x013\x00\x01\x01i\x012\x00\x01\x01v\x01h\x00\x02\x01v\x01g\x00\x00\x01m\x01a\x00\x03\x01b\x01m\x00\x02\x01b\x01j\x00\x00\x01v\x011\x00\x00\x01b\x018\x00\x01\x01x\x015\x00\x01\x01m\x019\x00\x02\x0365\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x05\x06\x00\x07\x05\x05\x05\x05\x05\x05\x01\x08\x01\x05\x01\t\n\x0b\x0c\x01\r\x0c\x01\x01\x01\x05\x01\x01\x01\x00\x01\x05\x05\x0e\x0f\x01\x05\x01\x01\x01\x04\x04\x04\x05\x01p\x01\x0c\x0c\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xd2\x88\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x07\x86\x04\x1f\x06memory\x02\x00\x11publish_data_type\x00\x17\x13publish_nested_data\x00\x1b\x14publish_nested_topic\x00\x1c\x11publish_ref_event\x00\x1e\x0epublish_simple\x00\x1f\x12publish_topic_type\x00 \x11with_assert_error\x00!\x12with_auth_contexts\x00#\nwith_error\x00$\x0fwith_executable\x00%\x11with_invoker_auth\x00*\x0fwith_lib_struct\x00-\x08with_map\x00.\x0cwith_non_pub\x00/\x12with_non_pub_error\x000\x0bwith_option\x001\x10with_panic_error\x002\x14with_panic_raw_error\x003\nwith_param\x004\x0ewith_recursion\x005\x0bwith_result\x006\x0bwith_return\x007\nwith_tuple\x00:\x11with_tuple_return\x00;\x08with_vec\x00<\x0fwith_vec_nested\x00=\x12with_wasm_imported\x00>\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\x11\x01\x00A\x01\x0b\x0b\x0f\x11\x13\x12\x0e\r\x14\x15\x16\x0c\x10\n\xac05\x0c\x00A\x00-\x00\x9c\x80\xc0\x80\x00\x1a\x0b\x16\x00A\x00-\x00\xfe\x80\xc0\x80\x00\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x8c\x81\xc0\x80\x00\x1a\x0bJ\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a\x0b6\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xec\x82\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xfa\x82\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xb2\x83\xc0\x80\x00\x1a\x0b\x86\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x00A\x84\x80\x80\x80\x006\x02\x04 \x00(\x02\x04\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x0b\x02\x00\x0bk\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xa8\x88\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xf8\x83\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x86\x84\xc0\x80\x00\x1a\x0b\xae\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\xb0\x86\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xa8\x81\xc0\x80\x00\x1aA\x00-\x00\x88\x83\xc0\x80\x00\x1aA\xf8\x86\xc0\x80\x00A\x19\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x18 \x00B\x84\x80\x80\x80\x107\x03\x10 \x00A\x88\x86\xc0\x80\x00A\x02 \x00A\x10jA\x02\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A j$\x80\x80\x80\x80\x00B\x02\x0bE\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00 \x01\x10\xb8\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01G\r\x00\x00\x0b \x02)\x03\x08!\x03 \x02A\x10j$\x80\x80\x80\x80\x00 \x03\x0b\x92\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00A\x00!\x03\x03~\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\x10\xb9\x80\x80\x80\x00!\x01 \x02A j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x0b\xc5\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xdd\x84\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xfc\x81\xc0\x80\x00\x1aA\x00-\x00\x8a\x82\xc0\x80\x00\x1aA\x00-\x00\xce\x83\xc0\x80\x00\x1aA\xab\x87\xc0\x80\x00A\x1b\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\xbd\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xd0\x82\xc0\x80\x00\x1aA\x00-\x00\xde\x82\xc0\x80\x00\x1aA\x00-\x00\xdc\x83\xc0\x80\x00\x1aA\xc6\x87\xc0\x80\x00A\x1c\x10\x98\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x01A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x00\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x06\x00B\x8b\xc8\x01\x0b\xc7\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00 \x00A\x85\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1a \x00A\x86\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xb6\x81\xc0\x80\x00\x1aA\xe4\x86\xc0\x80\x00A\x14\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xb0\x0c7\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xfc\x85\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x7f\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xa8\x86\xc0\x80\x00A\x08\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\xc4\x86\xc0\x80\x00A\x11\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b}\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x98\x82\xc0\x80\x00\x1aA\x00-\x00\x96\x83\xc0\x80\x00\x1aA\x91\x87\xc0\x80\x00A\x1a\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0bJ\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01qE\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xc2\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b\x0b\x00 \x00\x10\x8a\x80\x80\x80\x00\x1a\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x87\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x13\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\xa0\x05\x0b\xc0\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xb6\x88\xc0\x80\x00\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x08 \x01 \x007\x03\x00 \x01 \x02B \x88>\x02\x0c \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x00A\xc4\x84\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x01\x02\x00\x04\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x03\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01A\x10j \x01)\x03\x18\x10\xa9\x80\x80\x80\x00 \x01(\x02\x10A\x01G\r\x01\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x01\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x86\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\xc0\x80\x80\x80\x00\x00\x0bB\x01\x01~B\x01!\x02\x02@ \x01B\xff\x01\x83B\xc8\x00R\r\x00 \x01\x10\x89\x80\x80\x80\x00B\x80\x80\x80\x80p\x83B\x80\x80\x80\x80\x80\x04R\r\x00 \x00 \x017\x03\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\xd3\x07\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\xc0\x00k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x01A\x84\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x10 \x01 \x007\x03\x08 \x01 \x02B \x88>\x02\x14 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03 \"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\xe0\x85\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x00\x01\x02\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01)\x030!\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xe8\x88\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x02 \x011\x00 B\xcd\x00R\r\x02\x02@ \x01-\x00(\"\x03A\x0eF\r\x00 \x03A\xca\x00G\r\x03\x0b \x011\x008B\xcb\x00R\r\x02\x0c\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xc4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01A\x18j \x01)\x030\x10\xac\x80\x80\x80\x00 \x01(\x02\x18\r\x01 \x01A\x18j \x01)\x038\x10\xa9\x80\x80\x80\x00 \x01(\x02\x18A\x01G\r\x02\x0c\x01\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x89\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x00 \x01A0j \x01)\x03 \x10\xac\x80\x80\x80\x00 \x01(\x020\r\x00 \x01A0j \x01)\x03(\x10\xa9\x80\x80\x80\x00 \x01(\x020A\x01G\r\x01\x0b\x00\x0b \x01A\xc0\x00j$\x80\x80\x80\x80\x00B\x02\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x85\x80\x80\x80\x00\x1a\x0b\xb3\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@\x02@ \x01B\xff\x01\x83B\xcb\x00Q\r\x00 \x00B\x017\x03\x00\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x03 \x02A\x006\x02\x08 \x02 \x017\x03\x00 \x02 \x03B \x88>\x02\x0c \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00\x02@ \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00\x02@ \x02)\x03\x18\"\x01\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@ \x01A\x84\x89\xc0\x80\x00A\x01\x10\xa7\x80\x80\x80\x00B\xff\xff\xff\xff\x0fV\r\x00 \x02(\x02\x08 \x02(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00 \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00 \x02A\x10j \x02)\x03\x18\x10\xa9\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x01 \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0c\x02\x0b \x00B\x017\x03\x00\x0c\x01\x0b \x00B\x017\x03\x00\x0b \x02A j$\x80\x80\x80\x80\x00\x0b\x9e\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x00 \x01(\x02\x00\x1aA\x00!\x02A\x00-\x00\xfc\x89\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\xcb\x00R\r\x00 \x011\x00\x08B\xcd\x00Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bA\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x88\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a \x01A\x89\x80\x80\x80\x006\x02\x08 \x01(\x02\x08\x1a\x02@ \x00B\xff\x01\x83B\xcc\x00Q\r\x00\x00\x0bB\x02\x0bg\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xe2\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x08B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x12\x00A\x00-\x00\xb8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\x10\x0br\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xc4\x81\xc0\x80\x00\x1a\x02@ \x00B\x02Q\r\x00 \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xf8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bI\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xb4\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b@\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bB\x83\x80\x80\x80\xf0\x00\x10\xa2\x80\x80\x80\x00\x00\x0b\x8a\x02\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03A\x00-\x00\xa6\x82\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x02@\x03@ \x03A\x10F\r\x01 \x02A\x08j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x84\xc0\x80\x00A\x02 \x02A\x08jA\x02\x10\xab\x80\x80\x80\x00 \x021\x00\x08B\x04R\r\x00 \x02B\x027\x03\x18 \x02)\x03\x10\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x02A\x18jA\x01\x10\xab\x80\x80\x80\x00\x02@ \x02)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\x07F\r\x00 \x03A\xc1\x00G\r\x01 \x00\x10\x82\x80\x80\x80\x00\x1a\x0bA\x00-\x00\xf0\x80\xc0\x80\x00\x1a \x01B\xff\x01\x83B\x04R\r\x00 \x01B \x88\xa7A}jA}K\r\x01\x0b\x00\x0b \x02A j$\x80\x80\x80\x80\x00B\x02\x0b\x90\x04\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A0k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x01A\x81\x80\x80\x80\x006\x02 \x01(\x02 \x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x18 \x01 \x007\x03\x10 \x01 \x02B \x88>\x02\x1c \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03(\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\x98\x85\xc0\x80\x00A\x02\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x03\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\xcb\x00Q\r\x01\x0c\x02\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\x04R\r\x01\x0b \x01A0j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bZ\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x94\x84\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x08A\xf8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x00A\xf8\x85\xc0\x80\x00A\x01\x10\xb8\x80\x80\x80\x00\x02@ \x00(\x02\x00A\x01G\r\x00\x00\x0b \x00)\x03\x08!\x01 \x00B\x84\x80\x80\x80\x107\x03\x08 \x00 \x017\x03\x00 \x00\x10\xb9\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0b\xdb\x01\x02\x01~\x04\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03 \x02!\x04 \x01!\x05\x03@\x02@ \x04\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x06\x02@ \x05-\x00\x00\"\x07A\xdf\x00F\r\x00\x02@\x02@ \x07APjA\xff\x01qA\nI\r\x00 \x07A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x07A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x07AEj!\x06\x0c\x02\x0b \x07ARj!\x06\x0c\x01\x0b \x07AKj!\x06\x0b \x03B\x06\x86 \x06\xadB\xff\x01\x83\x84!\x03 \x04A\x7fj!\x04 \x05A\x01j!\x05\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x87\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x17\x00 \x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x84\x80\x80\x80\x00\x0b\xc4\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\x9a\x81\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00\x02@\x03@ \x02A\x10F\r\x01 \x01A\x08j \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x83\x80\x80\x80\x00\x1a \x01B\x027\x03\x18 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x18jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\x04R\r\x00 \x011\x00\x10B\x04Q\r\x01\x0b\x00\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xa4\x83\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x18A\xa8\x84\xc0\x80\x00A\x01 \x00A\x18jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x10 \x00 \x017\x03\x08 \x00A\x08j\x10\xb9\x80\x80\x80\x00!\x01 \x00A j$\x80\x80\x80\x80\x00 \x01\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8a\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8b\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x8d\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\xc0\x83\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\x04R\r\x00 \x01)\x03\x08B\xfe\x01\x83P\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x03\x00\x00\x0b\t\x00\x10\xbf\x80\x80\x80\x00\x00\x0b\x0b\xaa\n\x01\x00A\x80\x80\xc0\x00\x0b\xa0\nSpEcV1\x08\xdeZ3[\x9d$\xdaSpEcV1\xbb\x90\xa2x\x83\x81k\"SpEcV1[\x06L\x8cz\xee\x02\x1fSpEcV1v1\x0eP\xa9C\xc7*SpEcV1\x8a\xe5=\x1a\xf0\x17R!SpEcV11\xf9t\"\x98\xdfi\xdcSpEcV1\x97-l\xe7_x1\x18SpEcV15\xf3\xd0\x07e\x80\x0e\xd4SpEcV1\xe5\xdaj\x10\x14HE\x1eSpEcV1vU\xa32=\x17d\x95SpEcV1\x89\x03\xee?E\xf2p5SpEcV1#\xc3\xe8\xe8\xcf\xc4$SSpEcV1/u\xfac0C(\x1fhSpEcV1\x88\x99\xe9\xe74\xab$eSpEcV1\xdeU7\xf7\xd73\xb5\x15SpEcV10\xeb\xf0Q\xb2i\xb3\xa5SpEcV1[X\xfa\x18\xb1\x91x\x12SpEcV1\x8e\xb1\x07\xfed\xf4+PSpEcV1\xd5\xf2\xe2\x83\x8c\xfeI\xa4SpEcV1\xfa\x9f0\x00\xa0\xbaseSpEcV1\xb1@\x99nm\x99\x8cJSpEcV14/\x98E\x87\x1eK\xacSpEcV1\xb2\x96M\xce\xaec\xaeFSpEcV1\xc5\xb5\xa0\xe3\x82\xd5\xc2CSpEcV1)An=\x13\xf6W\\SpEcV1\x1e\'N>\x0f0\xb4\xf7SpEcV1\xda\xc0\x9c\xab\x01\xbc\xfc\x1cSpEcV1\xad5\xeb\x93\xd5\xb0\xc3\x10SpEcV1\xa6zl\n>\x14\x95\xbdSpEcV1Xf\xf1s\xa7HE\xe6SpEcV10\xbfE.\xc2\xa5\xb8\x1dSpEcV1\xc8\x8b\x05\xb0\x8drepSpEcV1\xed]\x0eg\xfb\xae\x02VSpEcV1\xb2\xab\x81\x84\n\x0f\x95VSpEcV1\xd2L\xf6u\xd2h\x99\xe1SpEcV1?xz\xe4G\xd0\x83\xd9val\x00\x00\x00\"\x02\x10\x00\x03\x00\x00\x00StellarAssetAccount\x00\x80\x04\x10\x00\x04\x00\x00\x000\x02\x10\x00\x0c\x00\x00\x00<\x02\x10\x00\x07\x00\x00\x00anested\x00\\\x02\x10\x00\x01\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00datat\x02\x10\x00\x04\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\x80\x02\x10\x00\x0c\x00\x00\x00\x8c\x02\x10\x00\t\x00\x00\x00ContractCreateContractHostFnCreateContractWithCtorHostFn\xa8\x02\x10\x00\x08\x00\x00\x00\xb0\x02\x10\x00\x14\x00\x00\x00\xc4\x02\x10\x00\x1c\x00\x00\x00A\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00xy\x00\x00\x04\x03\x10\x00\x01\x00\x00\x00\x05\x03\x10\x00\x01\x00\x00\x00inner\x00\x00\x00\x18\x03\x10\x00\x05\x00\x00\x00transfercoordsamount6\x03\x10\x00\x06\x00\x00\x00used_event_simplepayloadU\x03\x10\x00\x07\x00\x00\x00used_event_with_refsused_event_with_data_typeused_event_with_topic_typeused_event_with_nested_dataused_event_with_nested_topicSpEcV1hwB\x0cv\x90\xa1_SpEcV1\xfe\x08\x1f\xe4M\x06t\xa0SpEcV1\x80\xb3\xa8\x94\xfc\"siSpEcV1\x90\xc2Z\xf3\xebO\xa9\xb6SpEcV1\xb17b\x11\x07\xb1\xe5\xf5SpEcV1QI\x9d\xb1v\xc3\xabbSpEcV1\xcd\xb2E{\xf6l\xd0eSpEcV1\x81C\xc9\x0b\xa9\x96\x0b\x06argscontractfn_name\x00\x00\x00R\x04\x10\x00\x04\x00\x00\x00V\x04\x10\x00\x08\x00\x00\x00^\x04\x10\x00\x07\x00\x00\x00Wasm\x80\x04\x10\x00\x04\x00\x00\x00contextsub_invocations\x00\x00\x8c\x04\x10\x00\x07\x00\x00\x00\x93\x04\x10\x00\x0f\x00\x00\x00executablesalt\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00constructor_args\xd4\x04\x10\x00\x10\x00\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00SpEcV1\x1dY\xce\\\xd0\x9e\x18\xe3f1f2\x00\x00\n\x05\x10\x00\x02\x00\x00\x00\x0c\x05\x10\x00\x02\x00\x00\x00\x00\x87|\x0econtractspecv0\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::Context\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::wasm_imported::Executable\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleB\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleC\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_map\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01m\x00\x00\x00\x00\x00\x03\xec\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_vec\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UnusedEnum\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02K1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02K2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_param\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02ie\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_tuple\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01t\x00\x00\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bUnusedEvent\x00\x00\x00\x00\x01\x00\x00\x00\x0cunused_event\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UnusedStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_option\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01o\x00\x00\x00\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_result\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x07\xd0\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_return\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UnusedIntEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02U1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02U2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08NotFound\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07Invalid\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cwith_non_pub\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UnusedPubError\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Nope\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Fail\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0epublish_simple\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ewith_recursion\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01r\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedEventSimple\x00\x00\x00\x00\x01\x00\x00\x00\x11used_event_simple\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01X\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01Y\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04Send\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Recv\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_executable\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01e\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_lib_struct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_vec_nested\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UnusedNonPubError\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01y\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10with_panic_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventWithRefs\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x14used_event_with_refs\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UnusedNonPubStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08Transfer\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Mint\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedPanicErrorEnum\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Boom\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_data_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_ref_event\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_assert_error\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02ok\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_invoker_auth\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01i\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_tuple_return\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedAssertErrorEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12publish_topic_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_auth_contexts\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_non_pub_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_wasm_imported\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\tvec_inner\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13publish_nested_data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14publish_nested_topic\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14with_panic_raw_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15UsedEventWithDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x19used_event_with_data_type\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedEventWithTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1aused_event_with_topic_type\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17UsedEventWithNestedData\x00\x00\x00\x00\x01\x00\x00\x00\x1bused_event_with_nested_data\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.test_spec_shaking_v2::UnusedNonContractFnParam\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UsedEventWithNestedTopic\x00\x00\x00\x01\x00\x00\x00\x1cused_event_with_nested_topic\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04info\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::UnusedNonContractFnReturn\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; extern crate test; #[rustc_test_marker = "test::test_spec_shaking_v2"] #[doc(hidden)] diff --git a/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs b/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs index 80d8724f8..7e9984884 100644 --- a/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs +++ b/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs @@ -5254,7 +5254,7 @@ impl soroban_sdk::TryFromVal for soroban_sdk::Val { } } mod wasm_imported { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\xa2=N\xc1p\x95\x90\xb2SpEcV1\xe9R\xa7\xe8b\x99\xa2\xc3SpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1V]\x80\\~\x1a\x08/SpEcV1\xcf)\x97]S\xb2\xfd)f1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xd3)\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\x0eJ\x07\xc3\x8bG\x9d\x91SpEcV1\x9a\xac\n*\xd8z\xf1rSpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\x14\xc8R\x91\x9a.T\x17SpEcV1)\xf5 \xed\x8b.\x0fuSpEcV1\xed\xbfE\xe8/\xbf\x90\x8cf1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xd3)\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn fn_enum_a(env: soroban_sdk::Env) -> EnumA; fn fn_error_a(env: soroban_sdk::Env, input: u32) -> Result; diff --git a/tests-expanded/test_udt_tests.rs b/tests-expanded/test_udt_tests.rs index a5fa80efb..77b0925a6 100644 --- a/tests-expanded/test_udt_tests.rs +++ b/tests-expanded/test_udt_tests.rs @@ -4561,7 +4561,7 @@ mod test { mod test_with_wasm { use soroban_sdk::{symbol_short, vec, Env, Map}; mod contract { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01N\r`\x01~\x01~`\x03~~~\x01~`\x02~~\x01~`\x04~~~~\x01~`\x02\x7f\x7f\x00`\x00\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x05~\x7f\x7f\x7f\x7f\x00`\x02\x7f~\x00`\x01\x7f\x01~`\x03\x7f\x7f\x7f\x00`\x02\x7f\x7f\x01~\x02O\r\x01v\x013\x00\x00\x01v\x01h\x00\x01\x01i\x012\x00\x00\x01v\x011\x00\x02\x01i\x011\x00\x00\x01v\x018\x00\x00\x01m\x014\x00\x02\x01m\x011\x00\x02\x01v\x01g\x00\x02\x01b\x01j\x00\x02\x01m\x019\x00\x01\x01m\x01a\x00\x03\x01b\x01m\x00\x01\x03\x15\x14\x04\x05\x04\x06\x07\x08\t\t\t\x05\x05\x04\x02\x05\x00\n\x02\x0b\x0c\x05\x04\x05\x01p\x01\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xe8\x81\xc0\x00\x0b\x7f\x00A\xe8\x81\xc0\x00\x0b\x7f\x00A\xf0\x81\xc0\x00\x0b\x07L\x07\x06memory\x02\x00\x03add\x00\x19\trecursive\x00\x1b\x0erecursive_enum\x00\x1d\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\t\x01\x00A\x01\x0b\x03\x0e\x16\x17\n\xf1\x1d\x14\x85\x07\x04\x01\x7f\x02~\x01\x7f\x01~#\x80\x80\x80\x80\x00A\xc0\x00k\"\x02$\x80\x80\x80\x80\x00 \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\x9c\x80\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a\x02@\x02@ \x01)\x03\x00\"\x03B\xff\x01\x83B\xcb\x00Q\r\x00 \x00A\x04:\x00\x00\x0c\x01\x0b \x03\x10\x80\x80\x80\x80\x00!\x04 \x02A\x006\x02\x10 \x02 \x037\x03\x08 \x02 \x04B \x88>\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00\x02@\x02@\x02@\x02@ \x02)\x03\x18\"\x03B\x02Q\r\x00 \x03\xa7A\x01q\r\x00\x02@ \x02)\x03 \"\x03\xa7A\xff\x01q\"\x01A\xca\x00F\r\x00 \x01A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x03A\xf4\x80\xc0\x80\x00A\x04\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x04\x00\x01\x02\x03\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x04A\x00!\x05\x0c\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x03 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x03 \x03\xa7A\x01q\r\x03 \x02)\x03 !\x03A\x00!\x01\x02@\x03@ \x01A\x18F\r\x01 \x02A\x18j \x01jB\x027\x03\x00 \x01A\x08j!\x01\x0c\x00\x0b\x0b \x03B\xff\x01\x83B\xcc\x00R\r\x03 \x03A\x98\x81\xc0\x80\x00A\x03 \x02A\x18jA\x03\x10\x92\x80\x80\x80\x00 \x02A0j \x02)\x03\x18\x10\x93\x80\x80\x80\x00 \x02(\x020\r\x03 \x02)\x038!\x04 \x02A0j \x02)\x03 \x10\x93\x80\x80\x80\x00 \x02(\x020\r\x03 \x02)\x03(\"\x06B\xff\x01\x83B\xcb\x00R\r\x03 \x02)\x038!\x03A\x01!\x05\x0c\x04\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x02 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x02 \x03\xa7A\x01q\r\x02 \x02)\x03 \"\x03B\xff\x01\x83B\x04R\r\x02A\nA\x0fA\t \x03B \x88\xa7\"\x01A\x0fF\x1b \x01A\nF\x1b\"\x01A\tF\r\x02A\x02!\x05\x0c\x04\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x01 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x01 \x03\xa7A\x01q\r\x01 \x02)\x03 \"\x03B\xff\x01\x83B\xcb\x00R\r\x01A\x00!\x01\x02@\x03@ \x01A\x10F\r\x01 \x02A0j \x01jB\x027\x03\x00 \x01A\x08j!\x01\x0c\x00\x0b\x0b \x03 \x02A0j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x81\x80\x80\x80\x00\x1a \x02A\x18j \x02)\x030\x10\x93\x80\x80\x80\x00 \x02(\x02\x18A\x01F\r\x01 \x02)\x038\"\x03B\xff\x01\x83B\xcb\x00R\r\x01 \x02)\x03 !\x04A\x03!\x05\x0c\x02\x0b \x00A\x04:\x00\x00\x0c\x03\x0b \x00A\x04:\x00\x00\x0c\x02\x0b\x0b \x00 \x067\x03\x18 \x00 \x037\x03\x10 \x00 \x047\x03\x08 \x00 \x01:\x00\x01 \x00 \x05:\x00\x00\x0b \x02A\xc0\x00j$\x80\x80\x80\x80\x00\x0b\x02\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x8c\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\x9a\x80\x80\x80\x00\x00\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x1a\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x82\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b\xb5\x01\x02\x02\x7f\x02~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02 \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0bB\x01!\x04\x02@ \x01B\xff\x01\x83B\xcc\x00R\r\x00 \x01A\xb0\x81\xc0\x80\x00A\x02 \x02A\x02\x10\x92\x80\x80\x80\x00\x02@ \x02)\x03\x00\"\x01\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b \x02)\x03\x08\"\x05B\xff\x01\x83B\xcb\x00R\r\x00 \x00 \x057\x03\x10 \x00 \x017\x03\x08B\x00!\x04\x0b \x00 \x047\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b\xb5\x01\x02\x02\x7f\x02~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02 \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0bB\x01!\x04\x02@ \x01B\xff\x01\x83B\xcc\x00R\r\x00 \x01A\xb0\x81\xc0\x80\x00A\x02 \x02A\x02\x10\x92\x80\x80\x80\x00\x02@ \x02)\x03\x00\"\x01\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b \x02)\x03\x08\"\x05B\xff\x01\x83B\xcc\x00R\r\x00 \x00 \x057\x03\x10 \x00 \x017\x03\x08B\x00!\x04\x0b \x00 \x047\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b(\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xb8\x80\xc0\x80\x00\x1a\x0bC\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x0bx\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00B\x02!\x03\x02@ \x01(\x02\x08\"\x04 \x01(\x02\x0cO\r\x00 \x02 \x01)\x03\x00 \x04\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x10\x93\x80\x80\x80\x00 \x02)\x03\x00!\x03 \x00 \x02)\x03\x087\x03\x08 \x01 \x04A\x01j6\x02\x08\x0b \x00 \x037\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b\xd6\x04\x04\x02\x7f\x01~\x01\x7f\x05~#\x80\x80\x80\x80\x00A\xc0\x00k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00 \x02A\x10j \x02\x10\x8d\x80\x80\x80\x00\x02@\x02@\x02@ \x02-\x00\x10\"\x03A\x04F\r\x00 \x02)\x03 !\x01 \x02)\x03\x18!\x04 \x021\x00\x11!\x00 \x02A\x10j \x02A\x08j\x10\x8d\x80\x80\x80\x00 \x02-\x00\x10\"\x05A\x04F\r\x00 \x02)\x03 !\x06 \x02)\x03\x18!\x07 \x021\x00\x11!\x08B\x00!\tB\x00!\n\x02@\x02@\x02@\x02@ \x03\x0e\x04\x05\x02\x01\x00\x05\x0b \x01\x10\x80\x80\x80\x80\x00!\x00 \x02A\x006\x028 \x02 \x017\x030 \x02 \x00B \x88>\x02\x02\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x02)\x03 \"\x00\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@\x02@\x02@ \x00A\xd8\x81\xc0\x80\x00A\x02\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x06\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x05 \x02A0j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x030\"\x00B\x02Q\r\x05 \x00\xa7A\x01q\r\x05 \x02A\x18j \x02)\x038\x10\x95\x80\x80\x80\x00 \x02(\x02\x18A\x01F\r\x05 \x01B\xff\x01\x83B\x04R\r\x05 \x02)\x03(\"\x00 \x01B\x84\x80\x80\x80p\x83\"\x01\x10\x86\x80\x80\x80\x00B\x01R\r\x01 \x00 \x01\x10\x87\x80\x80\x80\x00\"\x00B\xff\x01\x83B\xcb\x00R\r\x05 \x00\x10\x80\x80\x80\x80\x00!\x01 \x02A\x006\x02\x10 \x02 \x007\x03\x08 \x02 \x01B \x88>\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x00B\x02Q\r\x05 \x00\xa7A\x01q\r\x05\x02@ \x02)\x03 \"\x00\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x06\x0b \x00A\xd8\x81\xc0\x80\x00A\x02\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x02\x02\x03\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x04 \x01B\xff\x01\x83B\x04R\r\x04\x0bB\x02!\x00\x0c\x02\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x02B\x00!\x00\x0c\x01\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x01 \x02A0j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x030\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x02A\x18j \x02)\x038\x10\x95\x80\x80\x80\x00 \x02(\x02\x18\r\x01 \x02)\x03(!\x05 \x02)\x03 !\x03B\x01!\x00\x0b \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1a \x02A\x83\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1aB\x02!\x01\x02@ \x00B\x02Q\r\x00\x02@ \x00\xa7A\x01qE\r\x00 \x02A\x18jA\xcc\x81\xc0\x80\x00A\t\x10\x9e\x80\x80\x80\x00 \x02(\x02\x18\r\x02 \x02)\x03 !\x00 \x02 \x057\x03 \x02 \x037\x03\x18 \x02 \x02A\x18j\x10\x9c\x80\x80\x80\x007\x03 \x02 \x007\x03\x18 \x02A\x18jA\x02\x10\x9f\x80\x80\x80\x00!\x01\x0c\x01\x0b \x02A\x18jA\xc0\x81\xc0\x80\x00A\x0c\x10\x9e\x80\x80\x80\x00 \x02(\x02\x18\r\x01 \x02 \x02)\x03 7\x03\x18 \x02A\x18jA\x01\x10\x9f\x80\x80\x80\x00!\x01\x0b \x02A\xc0\x00j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\xd6\x01\x02\x01~\x03\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03A\x00!\x04\x03@\x02@ \x04A\tG\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x05\x02@ \x01 \x04j-\x00\x00\"\x06A\xdf\x00F\r\x00\x02@\x02@ \x06APjA\xff\x01qA\nI\r\x00 \x06A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x06A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x06AEj!\x05\x0c\x02\x0b \x06ARj!\x05\x0c\x01\x0b \x06AKj!\x05\x0b \x03B\x06\x86 \x05\xadB\xff\x01\x83\x84!\x03 \x04A\x01j!\x04\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x89\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x00\x0b\x03\x00\x00\x0b\x0b\xf2\x01\x01\x00A\x80\x80\xc0\x00\x0b\xe8\x01SpEcV1\xf3\xb0\xab@i\rH\xb4SpEcV1\xaf\xf7\x93\xba\x9eM\xde\x9aSpEcV1\xeb\x9f\x12&\x9av(*SpEcV1\x16\'d8\xff\xc9\xb1\xf8SpEcV1\xc8\x12\x91\xfe\xd7\x13\xf5\x9cSpEcV1\xff{V \xab\r\xdcdSpEcV1\xe1oU\xdb\xd47\x98\x14UdtAUdtBUdtCUdtD\x00\x00b\x00\x10\x00\x04\x00\x00\x00f\x00\x10\x00\x04\x00\x00\x00j\x00\x10\x00\x04\x00\x00\x00n\x00\x10\x00\x04\x00\x00\x00abc\x00\x94\x00\x10\x00\x01\x00\x00\x00\x95\x00\x10\x00\x01\x00\x00\x00\x96\x00\x10\x00\x01\x00\x00\x00\x94\x00\x10\x00\x01\x00\x00\x00\x95\x00\x10\x00\x01\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\xc0\x00\x10\x00\x0c\x00\x00\x00\xcc\x00\x10\x00\t\x00\x00\x00\x00\x87!\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x11test_udt::UdtEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x11test_udt::UdtEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11test_udt::UdtEnum\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04UdtA\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtB\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x13test_udt::UdtStruct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtC\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x12test_udt::UdtEnum2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtD\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x12test_udt::UdtTuple\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12test_udt::UdtEnum2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12test_udt::UdtTuple\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x03\xea\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13test_udt::UdtStruct\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\trecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x19test_udt::RecursiveToEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19test_udt::RecursiveToEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x03\xec\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0erecursive_enum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x00\x00\x00\x00\x03key\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01N\r`\x01~\x01~`\x03~~~\x01~`\x02~~\x01~`\x04~~~~\x01~`\x02\x7f\x7f\x00`\x00\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x05~\x7f\x7f\x7f\x7f\x00`\x02\x7f~\x00`\x01\x7f\x01~`\x03\x7f\x7f\x7f\x00`\x02\x7f\x7f\x01~\x02O\r\x01v\x013\x00\x00\x01v\x01h\x00\x01\x01i\x012\x00\x00\x01v\x011\x00\x02\x01i\x011\x00\x00\x01v\x018\x00\x00\x01m\x014\x00\x02\x01m\x011\x00\x02\x01v\x01g\x00\x02\x01b\x01j\x00\x02\x01m\x019\x00\x01\x01m\x01a\x00\x03\x01b\x01m\x00\x01\x03\x15\x14\x04\x05\x04\x06\x07\x08\t\t\t\x05\x05\x04\x02\x05\x00\n\x02\x0b\x0c\x05\x04\x05\x01p\x01\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xe8\x81\xc0\x00\x0b\x7f\x00A\xe8\x81\xc0\x00\x0b\x7f\x00A\xf0\x81\xc0\x00\x0b\x07L\x07\x06memory\x02\x00\x03add\x00\x19\trecursive\x00\x1b\x0erecursive_enum\x00\x1d\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\t\x01\x00A\x01\x0b\x03\x0e\x16\x17\n\xf1\x1d\x14\x85\x07\x04\x01\x7f\x02~\x01\x7f\x01~#\x80\x80\x80\x80\x00A\xc0\x00k\"\x02$\x80\x80\x80\x80\x00 \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\x9c\x80\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a\x02@\x02@ \x01)\x03\x00\"\x03B\xff\x01\x83B\xcb\x00Q\r\x00 \x00A\x04:\x00\x00\x0c\x01\x0b \x03\x10\x80\x80\x80\x80\x00!\x04 \x02A\x006\x02\x10 \x02 \x037\x03\x08 \x02 \x04B \x88>\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00\x02@\x02@\x02@\x02@ \x02)\x03\x18\"\x03B\x02Q\r\x00 \x03\xa7A\x01q\r\x00\x02@ \x02)\x03 \"\x03\xa7A\xff\x01q\"\x01A\xca\x00F\r\x00 \x01A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x03A\xf4\x80\xc0\x80\x00A\x04\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x04\x00\x01\x02\x03\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x04A\x00!\x05\x0c\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x03 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x03 \x03\xa7A\x01q\r\x03 \x02)\x03 !\x03A\x00!\x01\x02@\x03@ \x01A\x18F\r\x01 \x02A\x18j \x01jB\x027\x03\x00 \x01A\x08j!\x01\x0c\x00\x0b\x0b \x03B\xff\x01\x83B\xcc\x00R\r\x03 \x03A\x98\x81\xc0\x80\x00A\x03 \x02A\x18jA\x03\x10\x92\x80\x80\x80\x00 \x02A0j \x02)\x03\x18\x10\x93\x80\x80\x80\x00 \x02(\x020\r\x03 \x02)\x038!\x04 \x02A0j \x02)\x03 \x10\x93\x80\x80\x80\x00 \x02(\x020\r\x03 \x02)\x03(\"\x06B\xff\x01\x83B\xcb\x00R\r\x03 \x02)\x038!\x03A\x01!\x05\x0c\x04\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x02 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x02 \x03\xa7A\x01q\r\x02 \x02)\x03 \"\x03B\xff\x01\x83B\x04R\r\x02A\nA\x0fA\t \x03B \x88\xa7\"\x01A\x0fF\x1b \x01A\nF\x1b\"\x01A\tF\r\x02A\x02!\x05\x0c\x04\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x01 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x03B\x02Q\r\x01 \x03\xa7A\x01q\r\x01 \x02)\x03 \"\x03B\xff\x01\x83B\xcb\x00R\r\x01A\x00!\x01\x02@\x03@ \x01A\x10F\r\x01 \x02A0j \x01jB\x027\x03\x00 \x01A\x08j!\x01\x0c\x00\x0b\x0b \x03 \x02A0j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x81\x80\x80\x80\x00\x1a \x02A\x18j \x02)\x030\x10\x93\x80\x80\x80\x00 \x02(\x02\x18A\x01F\r\x01 \x02)\x038\"\x03B\xff\x01\x83B\xcb\x00R\r\x01 \x02)\x03 !\x04A\x03!\x05\x0c\x02\x0b \x00A\x04:\x00\x00\x0c\x03\x0b \x00A\x04:\x00\x00\x0c\x02\x0b\x0b \x00 \x067\x03\x18 \x00 \x037\x03\x10 \x00 \x047\x03\x08 \x00 \x01:\x00\x01 \x00 \x05:\x00\x00\x0b \x02A\xc0\x00j$\x80\x80\x80\x80\x00\x0b\x02\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x8c\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\x9a\x80\x80\x80\x00\x00\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x1a\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x82\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0b\xb5\x01\x02\x02\x7f\x02~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02 \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0bB\x01!\x04\x02@ \x01B\xff\x01\x83B\xcc\x00R\r\x00 \x01A\xb0\x81\xc0\x80\x00A\x02 \x02A\x02\x10\x92\x80\x80\x80\x00\x02@ \x02)\x03\x00\"\x01\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b \x02)\x03\x08\"\x05B\xff\x01\x83B\xcb\x00R\r\x00 \x00 \x057\x03\x10 \x00 \x017\x03\x08B\x00!\x04\x0b \x00 \x047\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b\xb5\x01\x02\x02\x7f\x02~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02 \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0bB\x01!\x04\x02@ \x01B\xff\x01\x83B\xcc\x00R\r\x00 \x01A\xb0\x81\xc0\x80\x00A\x02 \x02A\x02\x10\x92\x80\x80\x80\x00\x02@ \x02)\x03\x00\"\x01\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b \x02)\x03\x08\"\x05B\xff\x01\x83B\xcc\x00R\r\x00 \x00 \x057\x03\x10 \x00 \x017\x03\x08B\x00!\x04\x0b \x00 \x047\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b(\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xb8\x80\xc0\x80\x00\x1a\x0bC\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x0bx\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00B\x02!\x03\x02@ \x01(\x02\x08\"\x04 \x01(\x02\x0cO\r\x00 \x02 \x01)\x03\x00 \x04\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x10\x93\x80\x80\x80\x00 \x02)\x03\x00!\x03 \x00 \x02)\x03\x087\x03\x08 \x01 \x04A\x01j6\x02\x08\x0b \x00 \x037\x03\x00 \x02A\x10j$\x80\x80\x80\x80\x00\x0b\xd6\x04\x04\x02\x7f\x01~\x01\x7f\x05~#\x80\x80\x80\x80\x00A\xc0\x00k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00 \x02A\x10j \x02\x10\x8d\x80\x80\x80\x00\x02@\x02@\x02@ \x02-\x00\x10\"\x03A\x04F\r\x00 \x02)\x03 !\x01 \x02)\x03\x18!\x04 \x021\x00\x11!\x00 \x02A\x10j \x02A\x08j\x10\x8d\x80\x80\x80\x00 \x02-\x00\x10\"\x05A\x04F\r\x00 \x02)\x03 !\x06 \x02)\x03\x18!\x07 \x021\x00\x11!\x08B\x00!\tB\x00!\n\x02@\x02@\x02@\x02@ \x03\x0e\x04\x05\x02\x01\x00\x05\x0b \x01\x10\x80\x80\x80\x80\x00!\x00 \x02A\x006\x028 \x02 \x017\x030 \x02 \x00B \x88>\x02\x02\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x02)\x03 \"\x00\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@\x02@\x02@ \x00A\xd8\x81\xc0\x80\x00A\x02\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x06\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x05 \x02A0j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x030\"\x00B\x02Q\r\x05 \x00\xa7A\x01q\r\x05 \x02A\x18j \x02)\x038\x10\x95\x80\x80\x80\x00 \x02(\x02\x18A\x01F\r\x05 \x01B\xff\x01\x83B\x04R\r\x05 \x02)\x03(\"\x00 \x01B\x84\x80\x80\x80p\x83\"\x01\x10\x86\x80\x80\x80\x00B\x01R\r\x01 \x00 \x01\x10\x87\x80\x80\x80\x00\"\x00B\xff\x01\x83B\xcb\x00R\r\x05 \x00\x10\x80\x80\x80\x80\x00!\x01 \x02A\x006\x02\x10 \x02 \x007\x03\x08 \x02 \x01B \x88>\x02\x14 \x02A\x18j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x03\x18\"\x00B\x02Q\r\x05 \x00\xa7A\x01q\r\x05\x02@ \x02)\x03 \"\x00\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x06\x0b \x00A\xd8\x81\xc0\x80\x00A\x02\x10\x90\x80\x80\x80\x00B \x88\xa7\x0e\x02\x02\x03\x05\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x04 \x01B\xff\x01\x83B\x04R\r\x04\x0bB\x02!\x00\x0c\x02\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00\r\x02B\x00!\x00\x0c\x01\x0b \x02(\x02\x10 \x02(\x02\x14\x10\x91\x80\x80\x80\x00A\x01K\r\x01 \x02A0j \x02A\x08j\x10\x8f\x80\x80\x80\x00 \x02)\x030\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x02A\x18j \x02)\x038\x10\x95\x80\x80\x80\x00 \x02(\x02\x18\r\x01 \x02)\x03(!\x05 \x02)\x03 !\x03B\x01!\x00\x0b \x02A\x81\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1a \x02A\x83\x80\x80\x80\x006\x02\x18 \x02(\x02\x18\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1aB\x02!\x01\x02@ \x00B\x02Q\r\x00\x02@ \x00\xa7A\x01qE\r\x00 \x02A\x18jA\xcc\x81\xc0\x80\x00A\t\x10\x9e\x80\x80\x80\x00 \x02(\x02\x18\r\x02 \x02)\x03 !\x00 \x02 \x057\x03 \x02 \x037\x03\x18 \x02 \x02A\x18j\x10\x9c\x80\x80\x80\x007\x03 \x02 \x007\x03\x18 \x02A\x18jA\x02\x10\x9f\x80\x80\x80\x00!\x01\x0c\x01\x0b \x02A\x18jA\xc0\x81\xc0\x80\x00A\x0c\x10\x9e\x80\x80\x80\x00 \x02(\x02\x18\r\x01 \x02 \x02)\x03 7\x03\x18 \x02A\x18jA\x01\x10\x9f\x80\x80\x80\x00!\x01\x0b \x02A\xc0\x00j$\x80\x80\x80\x80\x00 \x01\x0f\x0b\x00\x0b\xd6\x01\x02\x01~\x03\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03A\x00!\x04\x03@\x02@ \x04A\tG\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x05\x02@ \x01 \x04j-\x00\x00\"\x06A\xdf\x00F\r\x00\x02@\x02@ \x06APjA\xff\x01qA\nI\r\x00 \x06A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x06A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x06AEj!\x05\x0c\x02\x0b \x06ARj!\x05\x0c\x01\x0b \x06AKj!\x05\x0b \x03B\x06\x86 \x05\xadB\xff\x01\x83\x84!\x03 \x04A\x01j!\x04\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x89\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x00\x0b\x03\x00\x00\x0b\x0b\xf2\x01\x01\x00A\x80\x80\xc0\x00\x0b\xe8\x01SpEcV1\x1c\x8f \x1a\xd0\xd2\x86\xb4SpEcV1\xdd\x0c\x96a6\xac\r%SpEcV1\xfb(\xa1?\xa9-o\x1cSpEcV1$\x1a\xda\xa8\x13]\x1e\x1cSpEcV1\x13\x1c\x19\xbe\xa5|\xff&SpEcV1\xba6\xa4xH{=\xeeSpEcV1A@\x81\x0c\x80\x81-~UdtAUdtBUdtCUdtD\x00\x00b\x00\x10\x00\x04\x00\x00\x00f\x00\x10\x00\x04\x00\x00\x00j\x00\x10\x00\x04\x00\x00\x00n\x00\x10\x00\x04\x00\x00\x00abc\x00\x94\x00\x10\x00\x01\x00\x00\x00\x95\x00\x10\x00\x01\x00\x00\x00\x96\x00\x10\x00\x01\x00\x00\x00\x94\x00\x10\x00\x01\x00\x00\x00\x95\x00\x10\x00\x01\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\xc0\x00\x10\x00\x0c\x00\x00\x00\xcc\x00\x10\x00\t\x00\x00\x00\x00\x87!\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03add\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x11test_udt::UdtEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x11test_udt::UdtEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11test_udt::UdtEnum\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04UdtA\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtB\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x13test_udt::UdtStruct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtC\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x12test_udt::UdtEnum2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04UdtD\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x12test_udt::UdtTuple\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12test_udt::UdtEnum2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12test_udt::UdtTuple\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x03\xea\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13test_udt::UdtStruct\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\trecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x16test_udt::UdtRecursive\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x19test_udt::RecursiveToEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19test_udt::RecursiveToEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x01b\x00\x00\x00\x00\x00\x03\xec\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0erecursive_enum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x00\x00\x00\x00\x03key\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x17test_udt::RecursiveEnum\x00\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn add(env: soroban_sdk::Env, a: UdtEnum, b: UdtEnum) -> i64; fn recursive(env: soroban_sdk::Env, a: UdtRecursive) -> Option; From 16a0da4b1dc806da4069baca3c8f44298b43d80c Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Tue, 11 Aug 2026 04:29:06 +0000 Subject: [PATCH 07/11] update tests masked by earlier suite aborts --- soroban-sdk-macros/src/map_type.rs | 4 ++-- .../test_with_wasm/test_exec.1.json | 8 ++++---- tests/spec_shaking_v2/src/test.rs | 18 +++++++++++++----- .../test/test_wasm_tuple1.1.json | 8 ++++---- .../test/test_wasm_tuple2.1.json | 8 ++++---- .../test_snapshots/test/test_wasm_void.1.json | 8 ++++---- .../test_with_wasm/test_add.1.json | 8 ++++---- .../test_with_wasm/test_recursive.1.json | 8 ++++---- .../test_with_wasm/test_recursive_enum.1.json | 8 ++++---- 9 files changed, 43 insertions(+), 35 deletions(-) diff --git a/soroban-sdk-macros/src/map_type.rs b/soroban-sdk-macros/src/map_type.rs index 9e0f99bff..499af2e3c 100644 --- a/soroban-sdk-macros/src/map_type.rs +++ b/soroban-sdk-macros/src/map_type.rs @@ -607,14 +607,14 @@ mod test { #[test] fn test_is_mapped_type_udt_unique_xdr_error() { let input: DeriveInput = parse_quote!( - struct MyTypeIsOverSixtyCharactersLongAndShouldFailToCompileDueToThat { + struct MyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThat { pub key: [u8; 32], } ); let err = is_mapped_type_udt(&input.ident, &input.generics).unwrap_err(); assert_eq!( err.to_string(), - "type `MyTypeIsOverSixtyCharactersLongAndShouldFailToCompileDueToThat` cannot be used in XDR spec: xdr value max length exceeded" + "type `MyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThat` cannot be used in XDR spec: xdr value max length exceeded" ); } diff --git a/tests/associated_type_contracttrait/test_snapshots/test_with_wasm/test_exec.1.json b/tests/associated_type_contracttrait/test_snapshots/test_with_wasm/test_exec.1.json index 645134937..024e80f5c 100644 --- a/tests/associated_type_contracttrait/test_snapshots/test_with_wasm/test_exec.1.json +++ b/tests/associated_type_contracttrait/test_snapshots/test_with_wasm/test_exec.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "a75ac3b01481367449e27069683938c155d5194a242149d76eca2e3a349bb13d" + "wasm": "252d2aa8bbe279e48eb7bc3bef078770c21534a9f9a51f8308f3e7d0e9ca44de" }, "constructor_args": [] } @@ -72,7 +72,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "a75ac3b01481367449e27069683938c155d5194a242149d76eca2e3a349bb13d" + "wasm": "252d2aa8bbe279e48eb7bc3bef078770c21534a9f9a51f8308f3e7d0e9ca44de" }, "storage": null } @@ -106,8 +106,8 @@ } } }, - "hash": "a75ac3b01481367449e27069683938c155d5194a242149d76eca2e3a349bb13d", - "code": "0061736d0100000001110360027e7e017e6000017e60027f7f017e02070101620169000003040301020105030100110621047f01418080c0000b7f00418f80c0000b7f00418f80c0000b7f00419080c0000b073806066d656d6f72790200046578656300010565786563320003015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030a3e031000418080c0800041071082808080000b1a002000ad4220864204842001ad4220864204841080808080000b1000418780c0800041081082808080000b0b180100418080c0000b0f64656661756c7464656661756c743200df150e636f6e747261637473706563763000000000000000000000000465786563000000000000000100000010000000000000000000000005657865633200000000000000000000010000001000000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "252d2aa8bbe279e48eb7bc3bef078770c21534a9f9a51f8308f3e7d0e9ca44de", + "code": "0061736d0100000001110360027e7e017e6000017e60027f7f017e02070101620169000003040301020105030100110621047f01418080c0000b7f00418f80c0000b7f00418f80c0000b7f00419080c0000b073806066d656d6f72790200046578656300010565786563320003015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030a3e031000418080c0800041071082808080000b1a002000ad4220864204842001ad4220864204841080808080000b1000418780c0800041081082808080000b0b180100418080c0000b0f64656661756c7464656661756c743200bf180e636f6e747261637473706563763000000000000000000000000465786563000000000000000100000010000000000000000000000005657865633200000000000000000000010000001000000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/tests/spec_shaking_v2/src/test.rs b/tests/spec_shaking_v2/src/test.rs index 0892c22cd..239737e9c 100644 --- a/tests/spec_shaking_v2/src/test.rs +++ b/tests/spec_shaking_v2/src/test.rs @@ -199,13 +199,21 @@ fn test_spec_shaking_v2() { } /// Extract the name from a non-function spec entry. +/// The simple name of the type or event the entry defines. +/// +/// A user-defined type is named in the spec by its fully qualified name +/// (`mycrate::mymod::MyType`); this test asserts which types survive shaking, +/// so it names each entry by the last segment. fn entry_name(entry: &ScSpecEntry) -> Option { + let last_segment = |name: std::string::String| -> std::string::String { + name.rsplit("::").next().unwrap_or(&name).into() + }; match entry { ScSpecEntry::FunctionV0(_) => None, - ScSpecEntry::UdtStructV0(s) => Some(s.name.to_utf8_string_lossy()), - ScSpecEntry::UdtUnionV0(u) => Some(u.name.to_utf8_string_lossy()), - ScSpecEntry::UdtEnumV0(e) => Some(e.name.to_utf8_string_lossy()), - ScSpecEntry::UdtErrorEnumV0(e) => Some(e.name.to_utf8_string_lossy()), - ScSpecEntry::EventV0(e) => Some(e.name.to_utf8_string_lossy()), + ScSpecEntry::UdtStructV0(s) => Some(last_segment(s.name.to_utf8_string_lossy())), + ScSpecEntry::UdtUnionV0(u) => Some(last_segment(u.name.to_utf8_string_lossy())), + ScSpecEntry::UdtEnumV0(e) => Some(last_segment(e.name.to_utf8_string_lossy())), + ScSpecEntry::UdtErrorEnumV0(e) => Some(last_segment(e.name.to_utf8_string_lossy())), + ScSpecEntry::EventV0(e) => Some(last_segment(e.name.to_utf8_string_lossy())), } } diff --git a/tests/tuples/test_snapshots/test/test_wasm_tuple1.1.json b/tests/tuples/test_snapshots/test/test_wasm_tuple1.1.json index b4ec55943..813296e10 100644 --- a/tests/tuples/test_snapshots/test/test_wasm_tuple1.1.json +++ b/tests/tuples/test_snapshots/test/test_wasm_tuple1.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "cfdb45c1ae815eefc3688b2ec047d40092559aa99fb3c2ade540dc06952837de" + "wasm": "6ff664e1acc52c3b4cba604dacd77a628b920e0f86f62fc869bac114d2a786b4" }, "constructor_args": [] } @@ -71,7 +71,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "cfdb45c1ae815eefc3688b2ec047d40092559aa99fb3c2ade540dc06952837de" + "wasm": "6ff664e1acc52c3b4cba604dacd77a628b920e0f86f62fc869bac114d2a786b4" }, "storage": null } @@ -105,8 +105,8 @@ } } }, - "hash": "cfdb45c1ae815eefc3688b2ec047d40092559aa99fb3c2ade540dc06952837de", - "code": "0061736d01000000011f0560017e017e60027e7e017e60037e7e7e017e60037e7f7f0060027f7f017e021904016901320000016901310000017601670001017601680002030605000304000005030100100621047f01418080c0000b7f00418080c0000b7f00418080c0000b7f00418080c0000b074507066d656d6f72790200067475706c65310004067475706c6532000707766f69645f666e0008015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030ac803057801017f23808080800041106b220124808080800002400240200042ff018342cb00520d00200142023703082000200141086a41011085808080002001290308220042ff01834204510d010b000b2001200042848080807083370308200141086a41011086808080002100200141106a24808080800020000b1d0020002001ad4220864204842002ad4220864204841083808080001a0b1a002000ad4220864204842001ad4220864204841082808080000bff0102027f017e23808080800041106b2201248080808000024002400240200042ff018342cb00520d00410021020240034020024110460d01200120026a4202370300200241086a21020c000b0b2000200141021085808080002001290300220342ff01834204520d0020012903082200a741ff0171220241c100460d0120024107470d00200042088721000c020b000b200010808080800021000b0240024020004280808080808080c0007c42ffffffffffffffff00560d00200042088642078421000c010b200010818080800021000b200120003703082001200342848080807083370300200141021086808080002100200141106a24808080800020000b13000240200042ff01834202510d00000b42020b0b090100418080c0000b0000df160e636f6e74726163747370656376300000000000000000000000067475706c6531000000000001000000000000000361726700000003ed000000010000000400000001000003ed00000001000000040000000000000000000000067475706c6532000000000001000000000000000361726700000003ed00000002000000040000000700000001000003ed000000020000000400000007000000000000000000000007766f69645f666e00000000010000000000000008766f69645f61726700000002000000010000000200000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "6ff664e1acc52c3b4cba604dacd77a628b920e0f86f62fc869bac114d2a786b4", + "code": "0061736d01000000011f0560017e017e60027e7e017e60037e7e7e017e60037e7f7f0060027f7f017e021904016901320000016901310000017601670001017601680002030605000304000005030100100621047f01418080c0000b7f00418080c0000b7f00418080c0000b7f00418080c0000b074507066d656d6f72790200067475706c65310004067475706c6532000707766f69645f666e0008015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030ac803057801017f23808080800041106b220124808080800002400240200042ff018342cb00520d00200142023703082000200141086a41011085808080002001290308220042ff01834204510d010b000b2001200042848080807083370308200141086a41011086808080002100200141106a24808080800020000b1d0020002001ad4220864204842002ad4220864204841083808080001a0b1a002000ad4220864204842001ad4220864204841082808080000bff0102027f017e23808080800041106b2201248080808000024002400240200042ff018342cb00520d00410021020240034020024110460d01200120026a4202370300200241086a21020c000b0b2000200141021085808080002001290300220342ff01834204520d0020012903082200a741ff0171220241c100460d0120024107470d00200042088721000c020b000b200010808080800021000b0240024020004280808080808080c0007c42ffffffffffffffff00560d00200042088642078421000c010b200010818080800021000b200120003703082001200342848080807083370300200141021086808080002100200141106a24808080800020000b13000240200042ff01834202510d00000b42020b0b090100418080c0000b0000bf190e636f6e74726163747370656376300000000000000000000000067475706c6531000000000001000000000000000361726700000003ed000000010000000400000001000003ed00000001000000040000000000000000000000067475706c6532000000000001000000000000000361726700000003ed00000002000000040000000700000001000003ed000000020000000400000007000000000000000000000007766f69645f666e00000000010000000000000008766f69645f61726700000002000000010000000200000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/tests/tuples/test_snapshots/test/test_wasm_tuple2.1.json b/tests/tuples/test_snapshots/test/test_wasm_tuple2.1.json index b4ec55943..813296e10 100644 --- a/tests/tuples/test_snapshots/test/test_wasm_tuple2.1.json +++ b/tests/tuples/test_snapshots/test/test_wasm_tuple2.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "cfdb45c1ae815eefc3688b2ec047d40092559aa99fb3c2ade540dc06952837de" + "wasm": "6ff664e1acc52c3b4cba604dacd77a628b920e0f86f62fc869bac114d2a786b4" }, "constructor_args": [] } @@ -71,7 +71,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "cfdb45c1ae815eefc3688b2ec047d40092559aa99fb3c2ade540dc06952837de" + "wasm": "6ff664e1acc52c3b4cba604dacd77a628b920e0f86f62fc869bac114d2a786b4" }, "storage": null } @@ -105,8 +105,8 @@ } } }, - "hash": "cfdb45c1ae815eefc3688b2ec047d40092559aa99fb3c2ade540dc06952837de", - "code": "0061736d01000000011f0560017e017e60027e7e017e60037e7e7e017e60037e7f7f0060027f7f017e021904016901320000016901310000017601670001017601680002030605000304000005030100100621047f01418080c0000b7f00418080c0000b7f00418080c0000b7f00418080c0000b074507066d656d6f72790200067475706c65310004067475706c6532000707766f69645f666e0008015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030ac803057801017f23808080800041106b220124808080800002400240200042ff018342cb00520d00200142023703082000200141086a41011085808080002001290308220042ff01834204510d010b000b2001200042848080807083370308200141086a41011086808080002100200141106a24808080800020000b1d0020002001ad4220864204842002ad4220864204841083808080001a0b1a002000ad4220864204842001ad4220864204841082808080000bff0102027f017e23808080800041106b2201248080808000024002400240200042ff018342cb00520d00410021020240034020024110460d01200120026a4202370300200241086a21020c000b0b2000200141021085808080002001290300220342ff01834204520d0020012903082200a741ff0171220241c100460d0120024107470d00200042088721000c020b000b200010808080800021000b0240024020004280808080808080c0007c42ffffffffffffffff00560d00200042088642078421000c010b200010818080800021000b200120003703082001200342848080807083370300200141021086808080002100200141106a24808080800020000b13000240200042ff01834202510d00000b42020b0b090100418080c0000b0000df160e636f6e74726163747370656376300000000000000000000000067475706c6531000000000001000000000000000361726700000003ed000000010000000400000001000003ed00000001000000040000000000000000000000067475706c6532000000000001000000000000000361726700000003ed00000002000000040000000700000001000003ed000000020000000400000007000000000000000000000007766f69645f666e00000000010000000000000008766f69645f61726700000002000000010000000200000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "6ff664e1acc52c3b4cba604dacd77a628b920e0f86f62fc869bac114d2a786b4", + "code": "0061736d01000000011f0560017e017e60027e7e017e60037e7e7e017e60037e7f7f0060027f7f017e021904016901320000016901310000017601670001017601680002030605000304000005030100100621047f01418080c0000b7f00418080c0000b7f00418080c0000b7f00418080c0000b074507066d656d6f72790200067475706c65310004067475706c6532000707766f69645f666e0008015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030ac803057801017f23808080800041106b220124808080800002400240200042ff018342cb00520d00200142023703082000200141086a41011085808080002001290308220042ff01834204510d010b000b2001200042848080807083370308200141086a41011086808080002100200141106a24808080800020000b1d0020002001ad4220864204842002ad4220864204841083808080001a0b1a002000ad4220864204842001ad4220864204841082808080000bff0102027f017e23808080800041106b2201248080808000024002400240200042ff018342cb00520d00410021020240034020024110460d01200120026a4202370300200241086a21020c000b0b2000200141021085808080002001290300220342ff01834204520d0020012903082200a741ff0171220241c100460d0120024107470d00200042088721000c020b000b200010808080800021000b0240024020004280808080808080c0007c42ffffffffffffffff00560d00200042088642078421000c010b200010818080800021000b200120003703082001200342848080807083370300200141021086808080002100200141106a24808080800020000b13000240200042ff01834202510d00000b42020b0b090100418080c0000b0000bf190e636f6e74726163747370656376300000000000000000000000067475706c6531000000000001000000000000000361726700000003ed000000010000000400000001000003ed00000001000000040000000000000000000000067475706c6532000000000001000000000000000361726700000003ed00000002000000040000000700000001000003ed000000020000000400000007000000000000000000000007766f69645f666e00000000010000000000000008766f69645f61726700000002000000010000000200000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/tests/tuples/test_snapshots/test/test_wasm_void.1.json b/tests/tuples/test_snapshots/test/test_wasm_void.1.json index b4ec55943..813296e10 100644 --- a/tests/tuples/test_snapshots/test/test_wasm_void.1.json +++ b/tests/tuples/test_snapshots/test/test_wasm_void.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "cfdb45c1ae815eefc3688b2ec047d40092559aa99fb3c2ade540dc06952837de" + "wasm": "6ff664e1acc52c3b4cba604dacd77a628b920e0f86f62fc869bac114d2a786b4" }, "constructor_args": [] } @@ -71,7 +71,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "cfdb45c1ae815eefc3688b2ec047d40092559aa99fb3c2ade540dc06952837de" + "wasm": "6ff664e1acc52c3b4cba604dacd77a628b920e0f86f62fc869bac114d2a786b4" }, "storage": null } @@ -105,8 +105,8 @@ } } }, - "hash": "cfdb45c1ae815eefc3688b2ec047d40092559aa99fb3c2ade540dc06952837de", - "code": "0061736d01000000011f0560017e017e60027e7e017e60037e7e7e017e60037e7f7f0060027f7f017e021904016901320000016901310000017601670001017601680002030605000304000005030100100621047f01418080c0000b7f00418080c0000b7f00418080c0000b7f00418080c0000b074507066d656d6f72790200067475706c65310004067475706c6532000707766f69645f666e0008015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030ac803057801017f23808080800041106b220124808080800002400240200042ff018342cb00520d00200142023703082000200141086a41011085808080002001290308220042ff01834204510d010b000b2001200042848080807083370308200141086a41011086808080002100200141106a24808080800020000b1d0020002001ad4220864204842002ad4220864204841083808080001a0b1a002000ad4220864204842001ad4220864204841082808080000bff0102027f017e23808080800041106b2201248080808000024002400240200042ff018342cb00520d00410021020240034020024110460d01200120026a4202370300200241086a21020c000b0b2000200141021085808080002001290300220342ff01834204520d0020012903082200a741ff0171220241c100460d0120024107470d00200042088721000c020b000b200010808080800021000b0240024020004280808080808080c0007c42ffffffffffffffff00560d00200042088642078421000c010b200010818080800021000b200120003703082001200342848080807083370300200141021086808080002100200141106a24808080800020000b13000240200042ff01834202510d00000b42020b0b090100418080c0000b0000df160e636f6e74726163747370656376300000000000000000000000067475706c6531000000000001000000000000000361726700000003ed000000010000000400000001000003ed00000001000000040000000000000000000000067475706c6532000000000001000000000000000361726700000003ed00000002000000040000000700000001000003ed000000020000000400000007000000000000000000000007766f69645f666e00000000010000000000000008766f69645f61726700000002000000010000000200000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "6ff664e1acc52c3b4cba604dacd77a628b920e0f86f62fc869bac114d2a786b4", + "code": "0061736d01000000011f0560017e017e60027e7e017e60037e7e7e017e60037e7f7f0060027f7f017e021904016901320000016901310000017601670001017601680002030605000304000005030100100621047f01418080c0000b7f00418080c0000b7f00418080c0000b7f00418080c0000b074507066d656d6f72790200067475706c65310004067475706c6532000707766f69645f666e0008015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030ac803057801017f23808080800041106b220124808080800002400240200042ff018342cb00520d00200142023703082000200141086a41011085808080002001290308220042ff01834204510d010b000b2001200042848080807083370308200141086a41011086808080002100200141106a24808080800020000b1d0020002001ad4220864204842002ad4220864204841083808080001a0b1a002000ad4220864204842001ad4220864204841082808080000bff0102027f017e23808080800041106b2201248080808000024002400240200042ff018342cb00520d00410021020240034020024110460d01200120026a4202370300200241086a21020c000b0b2000200141021085808080002001290300220342ff01834204520d0020012903082200a741ff0171220241c100460d0120024107470d00200042088721000c020b000b200010808080800021000b0240024020004280808080808080c0007c42ffffffffffffffff00560d00200042088642078421000c010b200010818080800021000b200120003703082001200342848080807083370300200141021086808080002100200141106a24808080800020000b13000240200042ff01834202510d00000b42020b0b090100418080c0000b0000bf190e636f6e74726163747370656376300000000000000000000000067475706c6531000000000001000000000000000361726700000003ed000000010000000400000001000003ed00000001000000040000000000000000000000067475706c6532000000000001000000000000000361726700000003ed00000002000000040000000700000001000003ed000000020000000400000007000000000000000000000007766f69645f666e00000000010000000000000008766f69645f61726700000002000000010000000200000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/tests/udt/test_snapshots/test_with_wasm/test_add.1.json b/tests/udt/test_snapshots/test_with_wasm/test_add.1.json index be568971e..9c8424b89 100644 --- a/tests/udt/test_snapshots/test_with_wasm/test_add.1.json +++ b/tests/udt/test_snapshots/test_with_wasm/test_add.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948" + "wasm": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7" }, "constructor_args": [] } @@ -72,7 +72,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948" + "wasm": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7" }, "storage": null } @@ -106,8 +106,8 @@ } } }, - "hash": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948", - "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be801537045635631f3b0ab40690d48b4537045635631aff793ba9e4dde9a537045635631eb9f12269a76282a53704563563116276438ffc9b1f8537045635631c81291fed713f59c537045635631ff7b5620ab0ddc64537045635631e16f55dbd4379814556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc0010000900000000db1c0e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000007556474456e756d00000000000000000162000000000007d000000007556474456e756d00000000010000000700000002000000000000000000000007556474456e756d0000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d0000000095564745374727563740000000000000100000000000000045564744300000001000007d000000008556474456e756d320000000100000000000000045564744400000001000007d0000000085564745475706c6500000003000000000000000000000008556474456e756d32000000020000000000000001410000000000000a0000000000000001420000000000000f000000010000000000000000000000085564745475706c650000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000009556474537472756374000000000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d00000000c55647452656375727369766500000001000003e8000007d00000000c5564745265637572736976650000000100000000000000000000000c5564745265637572736976650000000200000000000000016100000000000011000000000000000162000000000003ea000007d00000000c5564745265637572736976650000000200000000000000000000000d526563757273697665456e756d0000000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d00000000f526563757273697665546f456e756d000000000100000000000000000000000f526563757273697665546f456e756d000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d00000000d526563757273697665456e756d00000000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d00000000d526563757273697665456e756d00000000000000000000036b6579000000000400000001000003e9000003e8000007d00000000d526563757273697665456e756d0000000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7", + "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be8015370456356311c8f201ad0d286b4537045635631dd0c966136ac0d25537045635631fb28a13fa92d6f1c537045635631241adaa8135d1e1c537045635631131c19bea57cff26537045635631ba36a478487b3dee5370456356314140810c80812d7e556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc001000090000000087210e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000011746573745f7564743a3a556474456e756d000000000000000000000162000000000007d000000011746573745f7564743a3a556474456e756d000000000000010000000700000002000000000000000000000011746573745f7564743a3a556474456e756d00000000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d000000013746573745f7564743a3a556474537472756374000000000100000000000000045564744300000001000007d000000012746573745f7564743a3a556474456e756d3200000000000100000000000000045564744400000001000007d000000012746573745f7564743a3a5564745475706c65000000000003000000000000000000000012746573745f7564743a3a556474456e756d320000000000020000000000000001410000000000000a0000000000000001420000000000000f00000001000000000000000000000012746573745f7564743a3a5564745475706c6500000000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000013746573745f7564743a3a55647453747275637400000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d000000016746573745f7564743a3a556474526563757273697665000000000001000003e8000007d000000016746573745f7564743a3a556474526563757273697665000000000001000000000000000000000016746573745f7564743a3a55647452656375727369766500000000000200000000000000016100000000000011000000000000000162000000000003ea000007d000000016746573745f7564743a3a556474526563757273697665000000000002000000000000000000000017746573745f7564743a3a526563757273697665456e756d000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d000000019746573745f7564743a3a526563757273697665546f456e756d00000000000001000000000000000000000019746573745f7564743a3a526563757273697665546f456e756d0000000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000036b6579000000000400000001000003e9000003e8000007d000000017746573745f7564743a3a526563757273697665456e756d000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/tests/udt/test_snapshots/test_with_wasm/test_recursive.1.json b/tests/udt/test_snapshots/test_with_wasm/test_recursive.1.json index 6ad1a2777..c898cd6ee 100644 --- a/tests/udt/test_snapshots/test_with_wasm/test_recursive.1.json +++ b/tests/udt/test_snapshots/test_with_wasm/test_recursive.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948" + "wasm": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7" }, "constructor_args": [] } @@ -73,7 +73,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948" + "wasm": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7" }, "storage": null } @@ -107,8 +107,8 @@ } } }, - "hash": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948", - "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be801537045635631f3b0ab40690d48b4537045635631aff793ba9e4dde9a537045635631eb9f12269a76282a53704563563116276438ffc9b1f8537045635631c81291fed713f59c537045635631ff7b5620ab0ddc64537045635631e16f55dbd4379814556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc0010000900000000db1c0e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000007556474456e756d00000000000000000162000000000007d000000007556474456e756d00000000010000000700000002000000000000000000000007556474456e756d0000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d0000000095564745374727563740000000000000100000000000000045564744300000001000007d000000008556474456e756d320000000100000000000000045564744400000001000007d0000000085564745475706c6500000003000000000000000000000008556474456e756d32000000020000000000000001410000000000000a0000000000000001420000000000000f000000010000000000000000000000085564745475706c650000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000009556474537472756374000000000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d00000000c55647452656375727369766500000001000003e8000007d00000000c5564745265637572736976650000000100000000000000000000000c5564745265637572736976650000000200000000000000016100000000000011000000000000000162000000000003ea000007d00000000c5564745265637572736976650000000200000000000000000000000d526563757273697665456e756d0000000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d00000000f526563757273697665546f456e756d000000000100000000000000000000000f526563757273697665546f456e756d000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d00000000d526563757273697665456e756d00000000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d00000000d526563757273697665456e756d00000000000000000000036b6579000000000400000001000003e9000003e8000007d00000000d526563757273697665456e756d0000000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7", + "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be8015370456356311c8f201ad0d286b4537045635631dd0c966136ac0d25537045635631fb28a13fa92d6f1c537045635631241adaa8135d1e1c537045635631131c19bea57cff26537045635631ba36a478487b3dee5370456356314140810c80812d7e556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc001000090000000087210e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000011746573745f7564743a3a556474456e756d000000000000000000000162000000000007d000000011746573745f7564743a3a556474456e756d000000000000010000000700000002000000000000000000000011746573745f7564743a3a556474456e756d00000000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d000000013746573745f7564743a3a556474537472756374000000000100000000000000045564744300000001000007d000000012746573745f7564743a3a556474456e756d3200000000000100000000000000045564744400000001000007d000000012746573745f7564743a3a5564745475706c65000000000003000000000000000000000012746573745f7564743a3a556474456e756d320000000000020000000000000001410000000000000a0000000000000001420000000000000f00000001000000000000000000000012746573745f7564743a3a5564745475706c6500000000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000013746573745f7564743a3a55647453747275637400000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d000000016746573745f7564743a3a556474526563757273697665000000000001000003e8000007d000000016746573745f7564743a3a556474526563757273697665000000000001000000000000000000000016746573745f7564743a3a55647452656375727369766500000000000200000000000000016100000000000011000000000000000162000000000003ea000007d000000016746573745f7564743a3a556474526563757273697665000000000002000000000000000000000017746573745f7564743a3a526563757273697665456e756d000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d000000019746573745f7564743a3a526563757273697665546f456e756d00000000000001000000000000000000000019746573745f7564743a3a526563757273697665546f456e756d0000000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000036b6579000000000400000001000003e9000003e8000007d000000017746573745f7564743a3a526563757273697665456e756d000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" diff --git a/tests/udt/test_snapshots/test_with_wasm/test_recursive_enum.1.json b/tests/udt/test_snapshots/test_with_wasm/test_recursive_enum.1.json index be568971e..9c8424b89 100644 --- a/tests/udt/test_snapshots/test_with_wasm/test_recursive_enum.1.json +++ b/tests/udt/test_snapshots/test_with_wasm/test_recursive_enum.1.json @@ -18,7 +18,7 @@ } }, "executable": { - "wasm": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948" + "wasm": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7" }, "constructor_args": [] } @@ -72,7 +72,7 @@ "val": { "contract_instance": { "executable": { - "wasm": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948" + "wasm": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7" }, "storage": null } @@ -106,8 +106,8 @@ } } }, - "hash": "89a0503a4ef3132c6779d0ca9438d736401c2b3dc7691695c8378205ea625948", - "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be801537045635631f3b0ab40690d48b4537045635631aff793ba9e4dde9a537045635631eb9f12269a76282a53704563563116276438ffc9b1f8537045635631c81291fed713f59c537045635631ff7b5620ab0ddc64537045635631e16f55dbd4379814556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc0010000900000000db1c0e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000007556474456e756d00000000000000000162000000000007d000000007556474456e756d00000000010000000700000002000000000000000000000007556474456e756d0000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d0000000095564745374727563740000000000000100000000000000045564744300000001000007d000000008556474456e756d320000000100000000000000045564744400000001000007d0000000085564745475706c6500000003000000000000000000000008556474456e756d32000000020000000000000001410000000000000a0000000000000001420000000000000f000000010000000000000000000000085564745475706c650000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000009556474537472756374000000000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d00000000c55647452656375727369766500000001000003e8000007d00000000c5564745265637572736976650000000100000000000000000000000c5564745265637572736976650000000200000000000000016100000000000011000000000000000162000000000003ea000007d00000000c5564745265637572736976650000000200000000000000000000000d526563757273697665456e756d0000000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d00000000f526563757273697665546f456e756d000000000100000000000000000000000f526563757273697665546f456e756d000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d00000000d526563757273697665456e756d00000000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d00000000d526563757273697665456e756d00000000000000000000036b6579000000000400000001000003e9000003e8000007d00000000d526563757273697665456e756d0000000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e000000000000000007436f6e7465787400000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d00000000f436f6e7472616374436f6e7465787400000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e74657874000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e000000000000000000000f436f6e7472616374436f6e746578740000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000012436f6e747261637445786563757461626c650000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000015537562436f6e7472616374496e766f636174696f6e000000000000020000000000000007636f6e7465787400000007d00000000f436f6e7472616374436f6e7465787400000000000000000f7375625f696e766f636174696f6e7300000003ea000007d000000018496e766f6b6572436f6e747261637441757468456e747279000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e000000000000000018496e766f6b6572436f6e747261637441757468456e747279000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000015537562436f6e7472616374496e766f636174696f6e0000000000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000001b437265617465436f6e7472616374486f7374466e436f6e7465787400000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000001b437265617465436f6e7472616374486f7374466e436f6e746578740000000002000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000002a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000012436f6e747261637445786563757461626c650000000000000000000473616c74000003ee000000200000000200000000000000000000000a45786563757461626c650000000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" + "hash": "3693efd566a8e0a63612817cfd89e6175f669a0aca6db2ba845bfa701bf96ab7", + "code": "0061736d01000000014e0d60017e017e60037e7e7e017e60027e7e017e60047e7e7e7e017e60027f7f0060000060037e7f7f017e60027f7f017f60057e7f7f7f7f0060027f7e0060017f017e60037f7f7f0060027f7f017e024f0d017601330000017601680001016901320000017601310002016901310000017601380000016d01340002016d013100020176016700020162016a0002016d01390001016d016100030162016d00010315140405040607080909090505040205000a020b0c050405017001040405030100110621047f01418080c0000b7f0041e881c0000b7f0041e881c0000b7f0041f081c0000b074c07066d656d6f7279020003616464001909726563757273697665001b0e7265637572736976655f656e756d001d015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030909010041010b030e16170af11d14850704017f027e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a41002d00aa80c080001a41002d008e80c080001a200241818080800036021820022802181a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a108f808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341f480c080004104109080808000422088a70e0400010203050b200228021020022802141091808080000d04410021050c050b2002280210200228021410918080800041014b0d03200241186a200241086a108f80808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d032003419881c080004103200241186a4103109280808000200241306a200229031810938080800020022802300d0320022903382104200241306a200229032010938080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410918080800041014b0d02200241186a200241086a108f80808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410918080800041014b0d01200241186a200241086a108f80808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201081808080001a200241186a200229033010938080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b02000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841083808080003703082001200341016a360208420021020b200020023703000b1c0020002001ad4220864204842002ad422086420484108c808080000b1900024020012000490d00200120006b0f0b109a80808000000b3100024020022004460d00000b20002001ad4220864204842003ad4220864204842002ad422086420484108b808080001a0b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110828080800021010b20002003370300200020013703080bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cb00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000bb50102027f027e23808080800041106b2202248080808000410021030240034020034110460d01200220036a4202370300200341086a21030c000b0b420121040240200142ff018342cc00520d00200141b081c08000410220024102109280808000024020022903002201a741ff0171220341ca00460d002003410e470d010b2002290308220542ff018342cc00520d002000200537031020002001370308420021040b20002004370300200241106a2480808080000b2801017f23808080800041106b220041828080800036020c200028020c1a41002d00b880c080001a0b4301017f23808080800041106b220041818080800036020c200028020c1a200041838080800036020820002802081a41002d00d480c080001a41002d00c680c080001a0b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad42208642048410838080800010938080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a2002108d8080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a108d8080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a109880808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110848080800021010b200241c0006a24808080800020010f0b109a80808000000b090010a080808000000bf90102017f017e23808080800041206b2201248080808000200141828080800036020820012802081a41002d00b880c080001a200141086a2000109480808000024020012802084101460d00024002402001290318220010808080800042ffffffff0f560d00200141828080800036020820012802081a41002d00b880c080001a420221000c010b200141086a200010858080800010948080800020012802084101460d012001290310210020012903182102200141828080800036020820012802081a41002d00b880c080001a2001200237031020012000370308200141086a109c8080800021000b200141206a24808080800020000f0b000b240041b081c08000ad4220864204842000ad422086420484428480808020108a808080000b850704017f017e017f017e23808080800041c0006b2202248080808000200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a0240200042ff018342cb00520d00200010808080800021032002410036021020022000370308200220034220883e0214200241186a200241086a108f80808000200229031822004202510d002000a74101710d00024020022903202200a741ff0171220441ca00460d002004410e470d010b024002400240024002400240200041d881c080004102109080808000422088a70e020100060b2002280210200228021410918080800041014b0d05200241306a200241086a108f80808000200229033022004202510d052000a74101710d05200241186a200229033810958080800020022802184101460d05200142ff01834204520d052002290328220020014284808080708322011086808080004201520d0120002001108780808000220042ff018342cb00520d05200010808080800021012002410036021020022000370308200220014220883e0214200241186a200241086a108f80808000200229031822004202510d052000a74101710d05024020022903202200a741ff0171220441ca00460d002004410e470d060b200041d881c080004102109080808000422088a70e020203050b200228021020022802141091808080000d04200142ff01834204520d040b420221000c020b200228021020022802141091808080000d02420021000c010b2002280210200228021410918080800041014b0d01200241306a200241086a108f80808000200229033022004202510d012000a74101710d01200241186a200229033810958080800020022802180d012002290328210520022903202103420121000b200241818080800036021820022802181a200241838080800036021820022802181a41002d00d480c080001a41002d00c680c080001a42022101024020004202510d0002402000a7410171450d00200241186a41cc81c080004109109e8080800020022802180d022002290320210020022005370320200220033703182002200241186a109c8080800037032020022000370318200241186a4102109f8080800021010c010b200241186a41c081c08000410c109e8080800020022802180d0120022002290320370318200241186a4101109f8080800021010b200241c0006a24808080800020010f0b000bd60102017e037f02400240200241094b0d0042002103410021040340024020044109470d002003420886420e8421030c030b410121050240200120046a2d0000220641df00460d0002400240200641506a41ff0171410a490d00200641bf7f6a41ff0171411a490d012006419f7f6a41ff0171411a4f0d04200641456a21050c020b200641526a21050c010b2006414b6a21050b20034206862005ad42ff0183842103200441016a21040c000b0b2001ad4220864204842002ad42208642048410898080800021030b20004200370300200020033703080b1a002000ad4220864204842001ad4220864204841088808080000b0300000b0bf2010100418080c0000be8015370456356311c8f201ad0d286b4537045635631dd0c966136ac0d25537045635631fb28a13fa92d6f1c537045635631241adaa8135d1e1c537045635631131c19bea57cff26537045635631ba36a478487b3dee5370456356314140810c80812d7e556474415564744255647443556474440000620010000400000066001000040000006a001000040000006e0010000400000061626300940010000100000095001000010000009600100001000000940010000100000095001000010000004e6f74526563757273697665526563757273697665000000c00010000c000000cc001000090000000087210e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000011746573745f7564743a3a556474456e756d000000000000000000000162000000000007d000000011746573745f7564743a3a556474456e756d000000000000010000000700000002000000000000000000000011746573745f7564743a3a556474456e756d00000000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d000000013746573745f7564743a3a556474537472756374000000000100000000000000045564744300000001000007d000000012746573745f7564743a3a556474456e756d3200000000000100000000000000045564744400000001000007d000000012746573745f7564743a3a5564745475706c65000000000003000000000000000000000012746573745f7564743a3a556474456e756d320000000000020000000000000001410000000000000a0000000000000001420000000000000f00000001000000000000000000000012746573745f7564743a3a5564745475706c6500000000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000013746573745f7564743a3a55647453747275637400000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea0000000700000000000000000000000972656375727369766500000000000001000000000000000161000000000007d000000016746573745f7564743a3a556474526563757273697665000000000001000003e8000007d000000016746573745f7564743a3a556474526563757273697665000000000001000000000000000000000016746573745f7564743a3a55647452656375727369766500000000000200000000000000016100000000000011000000000000000162000000000003ea000007d000000016746573745f7564743a3a556474526563757273697665000000000002000000000000000000000017746573745f7564743a3a526563757273697665456e756d000000000200000000000000000000000c4e6f7452656375727369766500000001000000000000000952656375727369766500000000000001000007d000000019746573745f7564743a3a526563757273697665546f456e756d00000000000001000000000000000000000019746573745f7564743a3a526563757273697665546f456e756d0000000000000200000000000000016100000000000011000000000000000162000000000003ec00000004000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000000000000e7265637572736976655f656e756d000000000002000000000000000161000000000007d000000017746573745f7564743a3a526563757273697665456e756d0000000000000000036b6579000000000400000001000003e9000003e8000007d000000017746573745f7564743a3a526563757273697665456e756d000000000300000002000000e3436f6e74657874206f6620612073696e676c6520617574686f72697a65642063616c6c20706572666f726d656420627920616e20616464726573732e0a0a437573746f6d206163636f756e7420636f6e747261637473207468617420696d706c656d656e7420605f5f636865636b5f6175746860207370656369616c2066756e6374696f6e0a726563656976652061206c697374206f662060436f6e74657874602076616c75657320636f72726573706f6e64696e6720746f20616c6c207468652063616c6c7320746861740a6e65656420746f20626520617574686f72697a65642e00000000000000001a736f726f62616e5f73646b3a3a617574683a3a436f6e746578740000000000030000000100000014436f6e747261637420696e766f636174696f6e2e00000008436f6e747261637400000001000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000010000003d436f6e7472616374207468617420686173206120636f6e7374727563746f722077697468206e6f20617267756d656e747320697320637265617465642e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e7465787400000000000100000044436f6e7472616374207468617420686173206120636f6e7374727563746f7220776974682031206f72206d6f726520617267756d656e747320697320637265617465642e0000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e7465787400000000000001000000bd417574686f72697a6174696f6e20636f6e74657874206f6620612073696e676c6520636f6e74726163742063616c6c2e0a0a546869732073747275637420636f72726573706f6e647320746f20612060726571756972655f617574685f666f725f61726773602063616c6c20666f7220616e20616464726573730a66726f6d2060636f6e7472616374602066756e6374696f6e20776974682060666e5f6e616d6560206e616d6520616e642060617267736020617267756d656e74732e0000000000000000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e74657874000000000003000000000000000461726773000003ea000000000000000000000008636f6e7472616374000000130000000000000007666e5f6e616d650000000011000000020000005f436f6e74726163742065786563757461626c65207573656420666f72206372656174696e672061206e657720636f6e747261637420616e64207573656420696e0a60437265617465436f6e7472616374486f7374466e436f6e74657874602e000000000000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000010000000100000000000000045761736d00000001000003ee00000020000000010000003856616c7565206f6620636f6e7472616374206e6f646520696e20496e766f6b6572436f6e747261637441757468456e74727920747265652e0000000000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e000000020000000000000007636f6e7465787400000007d000000022736f726f62616e5f73646b3a3a617574683a3a436f6e7472616374436f6e746578740000000000000000000f7375625f696e766f636174696f6e7300000003ea000007d00000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000020000012f41206e6f646520696e207468652074726565206f6620617574686f72697a6174696f6e7320706572666f726d6564206f6e20626568616c66206f66207468652063757272656e740a636f6e747261637420617320696e766f6b6572206f662074686520636f6e7472616374732064656570657220696e207468652063616c6c20737461636b2e0a0a54686973206973207573656420617320616e20617267756d656e74206f662060617574686f72697a655f61735f63757272656e745f636f6e74726163746020686f73742066756e6374696f6e2e0a0a54686973207472656520636f72726573706f6e64732060726571756972655f617574685b5f666f725f617267735d602063616c6c73206f6e20626568616c66206f66207468650a63757272656e7420636f6e74726163742e00000000000000002b736f726f62616e5f73646b3a3a617574683a3a496e766f6b6572436f6e747261637441757468456e74727900000000030000000100000012496e766f6b65206120636f6e74726163742e000000000008436f6e747261637400000001000007d000000028736f726f62616e5f73646b3a3a617574683a3a537562436f6e7472616374496e766f636174696f6e0000000100000035437265617465206120636f6e74726163742070617373696e67203020617267756d656e747320746f20636f6e7374727563746f722e00000000000014437265617465436f6e7472616374486f7374466e00000001000007d00000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e746578740000000000010000003d437265617465206120636f6e74726163742070617373696e672030206f72206d6f726520617267756d656e747320746f20636f6e7374727563746f722e0000000000001c437265617465436f6e74726163745769746843746f72486f7374466e00000001000007d00000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e746578740000000000000100000076417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0000000000000000002e736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e7472616374486f7374466e436f6e74657874000000000002000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000001000000d6417574686f72697a6174696f6e20636f6e7465787420666f7220606372656174655f636f6e74726163746020686f73742066756e6374696f6e2074686174206372656174657320610a6e657720636f6e7472616374206f6e20626568616c66206f6620617574686f72697a657220616464726573732e0a54686973206973207468652073616d652061732060437265617465436f6e7472616374486f7374466e436f6e74657874602c2062757420616c736f206861730a636f6e747261637420636f6e7374727563746f7220617267756d656e74732e0000000000000000003d736f726f62616e5f73646b3a3a617574683a3a437265617465436f6e747261637457697468436f6e7374727563746f72486f7374466e436f6e74657874000000000000030000000000000010636f6e7374727563746f725f61726773000003ea00000000000000000000000a65786563757461626c650000000007d000000025736f726f62616e5f73646b3a3a617574683a3a436f6e747261637445786563757461626c65000000000000000000000473616c74000003ee0000002000000002000000000000000000000020736f726f62616e5f73646b3a3a616464726573733a3a45786563757461626c65000000030000000100000000000000045761736d00000001000003ee0000002000000000000000000000000c5374656c6c617241737365740000000000000000000000074163636f756e7400001e11636f6e7472616374656e766d6574617630000000000000001c00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000" } }, "ext": "v0" From 1038b57388cc3e312dba4756bb4399fb35bafd25 Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Tue, 11 Aug 2026 04:30:11 +0000 Subject: [PATCH 08/11] format long test type name --- soroban-sdk-macros/src/map_type.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/soroban-sdk-macros/src/map_type.rs b/soroban-sdk-macros/src/map_type.rs index 499af2e3c..52051c619 100644 --- a/soroban-sdk-macros/src/map_type.rs +++ b/soroban-sdk-macros/src/map_type.rs @@ -607,7 +607,8 @@ mod test { #[test] fn test_is_mapped_type_udt_unique_xdr_error() { let input: DeriveInput = parse_quote!( - struct MyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThat { + struct MyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThatMyTypeIsOverTwoHundredAndFiftySixCharactersLongAndShouldFailToCompileDueToThat + { pub key: [u8; 32], } ); From 9c4557270125466024815171c8aad58987eda337 Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Tue, 11 Aug 2026 04:35:34 +0000 Subject: [PATCH 09/11] regenerate stale spec shaking expanded test --- tests-expanded/test_spec_shaking_v2_tests.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tests-expanded/test_spec_shaking_v2_tests.rs b/tests-expanded/test_spec_shaking_v2_tests.rs index 00a108f62..226985cbe 100644 --- a/tests-expanded/test_spec_shaking_v2_tests.rs +++ b/tests-expanded/test_spec_shaking_v2_tests.rs @@ -33240,14 +33240,22 @@ mod test { }; } /// Extract the name from a non-function spec entry. + /// The simple name of the type or event the entry defines. + /// + /// A user-defined type is named in the spec by its fully qualified name + /// (`mycrate::mymod::MyType`); this test asserts which types survive shaking, + /// so it names each entry by the last segment. fn entry_name(entry: &ScSpecEntry) -> Option { + let last_segment = |name: std::string::String| -> std::string::String { + name.rsplit("::").next().unwrap_or(&name).into() + }; match entry { ScSpecEntry::FunctionV0(_) => None, - ScSpecEntry::UdtStructV0(s) => Some(s.name.to_utf8_string_lossy()), - ScSpecEntry::UdtUnionV0(u) => Some(u.name.to_utf8_string_lossy()), - ScSpecEntry::UdtEnumV0(e) => Some(e.name.to_utf8_string_lossy()), - ScSpecEntry::UdtErrorEnumV0(e) => Some(e.name.to_utf8_string_lossy()), - ScSpecEntry::EventV0(e) => Some(e.name.to_utf8_string_lossy()), + ScSpecEntry::UdtStructV0(s) => Some(last_segment(s.name.to_utf8_string_lossy())), + ScSpecEntry::UdtUnionV0(u) => Some(last_segment(u.name.to_utf8_string_lossy())), + ScSpecEntry::UdtEnumV0(e) => Some(last_segment(e.name.to_utf8_string_lossy())), + ScSpecEntry::UdtErrorEnumV0(e) => Some(last_segment(e.name.to_utf8_string_lossy())), + ScSpecEntry::EventV0(e) => Some(last_segment(e.name.to_utf8_string_lossy())), } } } From aeedcebcd8b8d5a3544c8b64011876603fbf8d7b Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Tue, 11 Aug 2026 07:41:16 +0000 Subject: [PATCH 10/11] simplify spec names as byte strings incl events --- soroban-spec-rust/src/lib.rs | 71 +++++++++++++++++ soroban-spec/src/simplify.rs | 144 +++++++++++++++++++++++++---------- 2 files changed, 175 insertions(+), 40 deletions(-) diff --git a/soroban-spec-rust/src/lib.rs b/soroban-spec-rust/src/lib.rs index 184687ecf..4dc5ebf38 100644 --- a/soroban-spec-rust/src/lib.rs +++ b/soroban-spec-rust/src/lib.rs @@ -728,4 +728,75 @@ pub enum Error { "#, ); } + + /// Two user-defined error enums sharing the simple name `Error` + /// (`a::Error`, `b::Error`), taken end-to-end through name + /// simplification, the error-udt override, and code generation. + #[test] + fn test_two_error_enums_sharing_a_simple_name() { + use stellar_xdr::{ + ScSpecEntry, ScSpecFunctionV0, ScSpecTypeDef, ScSpecTypeResult, ScSpecTypeUdt, + ScSpecUdtErrorEnumCaseV0, ScSpecUdtErrorEnumV0, + }; + + let error_enum = |name: &str| { + ScSpecEntry::UdtErrorEnumV0(ScSpecUdtErrorEnumV0 { + doc: "".try_into().unwrap(), + lib: "".try_into().unwrap(), + name: name.try_into().unwrap(), + cases: [ScSpecUdtErrorEnumCaseV0 { + doc: "".try_into().unwrap(), + name: "Failed".try_into().unwrap(), + value: 1, + }] + .try_into() + .unwrap(), + }) + }; + let func = |name: &str, error: ScSpecTypeDef| { + ScSpecEntry::FunctionV0(ScSpecFunctionV0 { + doc: "".try_into().unwrap(), + name: name.try_into().unwrap(), + inputs: [].try_into().unwrap(), + outputs: [ScSpecTypeDef::Result(Box::new(ScSpecTypeResult { + ok_type: Box::new(ScSpecTypeDef::U32), + error_type: Box::new(error), + }))] + .try_into() + .unwrap(), + }) + }; + let entries = [ + error_enum("mycrate::a::Error"), + error_enum("mycrate::b::Error"), + func( + "use_a", + ScSpecTypeDef::Udt(ScSpecTypeUdt { + name: "mycrate::a::Error".try_into().unwrap(), + }), + ), + func( + "use_b", + ScSpecTypeDef::Udt(ScSpecTypeUdt { + name: "mycrate::b::Error".try_into().unwrap(), + }), + ), + func("use_builtin", ScSpecTypeDef::Error), + ]; + + let code = super::generate_without_file(&entries) + .unwrap() + .to_formatted_string() + .unwrap(); + + // The first enum claims the simple name; the second is numbered. + assert!(code.contains("pub enum Error {"), "{code}"); + assert!(code.contains("pub enum Error2 {"), "{code}"); + // References follow their type: `use_a` resolves to `Error`, `use_b` + // to `Error2`, and the built-in error resolves through the error-udt + // override to the enum that claimed `Error`. + assert!(code.contains("Result"), "{code}"); + assert!(code.contains("Result"), "{code}"); + assert_eq!(code.matches("Result").count(), 2, "{code}"); + } } diff --git a/soroban-spec/src/simplify.rs b/soroban-spec/src/simplify.rs index 12f2e6c03..5fb530aec 100644 --- a/soroban-spec/src/simplify.rs +++ b/soroban-spec/src/simplify.rs @@ -1,5 +1,12 @@ use stellar_xdr::{ScSpecEntry, ScSpecTypeDef, ScSpecUdtUnionCaseV0}; +/// The most bytes a spec type name can hold (`SC_SPEC_TYPE_NAME_LIMIT`), which +/// bounds the names the numbering below may produce. +const TYPE_NAME_LIMIT: usize = 256; + +/// The most bytes an event name can hold (an `ScSymbol`). +const EVENT_NAME_LIMIT: usize = 32; + /// A spec with its user-defined type names reduced to simple names, along /// with how each type's name was resolved. #[derive(Debug, Clone, PartialEq, Eq)] @@ -12,12 +19,16 @@ pub struct Simplified { } /// How one user-defined type's name resolved during simplification. +/// +/// Spec names are byte strings that are not guaranteed to be valid UTF-8, so +/// the names are byte strings here too, preserved exactly as they appear in +/// the spec. Decode lossily only for display. #[derive(Debug, Clone, PartialEq, Eq)] pub struct Rename { /// The name as it appears in the input spec. - pub from: String, + pub from: Vec, /// The name the type has in the simplified spec. - pub to: String, + pub to: Vec, } impl Rename { @@ -34,8 +45,10 @@ impl Rename { } /// The last `::`-separated segment of a fully qualified type name. -fn last_segment(name: &str) -> &str { - name.rsplit("::").next().unwrap_or(name) +fn last_segment(name: &[u8]) -> &[u8] { + name.windows(2) + .rposition(|w| w == b"::") + .map_or(name, |i| &name[i + 2..]) } /// Reduces every user-defined type name in the spec from its fully qualified @@ -49,15 +62,23 @@ fn last_segment(name: &str) -> &str { /// /// A reference to a type the spec does not define is reduced to its last /// segment, without claiming a name. +/// +/// Names are treated as byte strings throughout and preserved exactly; the +/// spec does not guarantee valid UTF-8. A type whose numbered name cannot fit +/// the spec's name limit keeps its original name. pub fn simplify(spec: &[ScSpecEntry]) -> Simplified { - // The names the spec defines, in definition order. - let defined: Vec = spec + // The names the spec defines, in definition order, each with the most + // bytes its entry's name field can hold. Events define a name too: the + // generated bindings declare a type for each event, so an event and a + // type sharing a simple name are a collision like any other. + let defined: Vec<(Vec, usize)> = spec .iter() .filter_map(|entry| match entry { - ScSpecEntry::UdtStructV0(s) => Some(s.name.to_utf8_string_lossy()), - ScSpecEntry::UdtUnionV0(u) => Some(u.name.to_utf8_string_lossy()), - ScSpecEntry::UdtEnumV0(e) => Some(e.name.to_utf8_string_lossy()), - ScSpecEntry::UdtErrorEnumV0(e) => Some(e.name.to_utf8_string_lossy()), + ScSpecEntry::UdtStructV0(s) => Some((s.name.to_vec(), TYPE_NAME_LIMIT)), + ScSpecEntry::UdtUnionV0(u) => Some((u.name.to_vec(), TYPE_NAME_LIMIT)), + ScSpecEntry::UdtEnumV0(e) => Some((e.name.to_vec(), TYPE_NAME_LIMIT)), + ScSpecEntry::UdtErrorEnumV0(e) => Some((e.name.to_vec(), TYPE_NAME_LIMIT)), + ScSpecEntry::EventV0(e) => Some((e.name.to_vec(), EVENT_NAME_LIMIT)), _ => None, }) .collect(); @@ -66,18 +87,23 @@ pub fn simplify(spec: &[ScSpecEntry]) -> Simplified { // loses its own name to one defined before it, never to a number handed // to a type that collided with something else. let mut taken = std::collections::HashSet::new(); - let colliding: Vec<&String> = defined + let colliding: Vec<&(Vec, usize)> = defined .iter() - .filter(|name| !taken.insert(last_segment(name).to_string())) + .filter(|(name, _)| !taken.insert(last_segment(name).to_vec())) .collect(); let mut numbered = std::collections::HashMap::new(); - for name in colliding { + for (name, limit) in colliding { let base = last_segment(name); let mut n = 1u32; let simple = loop { n += 1; - let simple = format!("{base}{n}"); + let mut simple = base.to_vec(); + simple.extend_from_slice(n.to_string().as_bytes()); + if simple.len() > *limit { + // No numbered name fits, so the type keeps its original name. + break name.clone(); + } if taken.insert(simple.clone()) { break simple; } @@ -87,24 +113,26 @@ pub fn simplify(spec: &[ScSpecEntry]) -> Simplified { let renames: Vec = defined .iter() - .map(|name| Rename { + .map(|(name, _)| Rename { from: name.clone(), to: numbered .get(name) .cloned() - .unwrap_or_else(|| last_segment(name).to_string()), + .unwrap_or_else(|| last_segment(name).to_vec()), }) .collect(); - let to: std::collections::HashMap<&str, &str> = renames + let to: std::collections::HashMap<&[u8], &[u8]> = renames .iter() - .map(|r| (r.from.as_str(), r.to.as_str())) + .map(|r| (r.from.as_slice(), r.to.as_slice())) .collect(); - let resolve = |name: &str| -> String { + let resolve = |name: &[u8]| -> Vec { to.get(name) - .map_or_else(|| last_segment(name).to_string(), ToString::to_string) + .map_or_else(|| last_segment(name).to_vec(), |t| t.to_vec()) }; + // Every resolved name is a fragment of a name that fit the spec, or was + // length-checked when numbered, so conversion back cannot fail. let mut spec = spec.to_vec(); for entry in spec.iter_mut() { match entry { @@ -117,13 +145,13 @@ pub fn simplify(spec: &[ScSpecEntry]) -> Simplified { } } ScSpecEntry::UdtStructV0(s) => { - s.name = resolve(&s.name.to_utf8_string_lossy()).try_into().unwrap(); + s.name = resolve(&s.name).try_into().unwrap(); for field in s.fields.iter_mut() { rewrite_ty(&mut field.type_, &resolve); } } ScSpecEntry::UdtUnionV0(u) => { - u.name = resolve(&u.name.to_utf8_string_lossy()).try_into().unwrap(); + u.name = resolve(&u.name).try_into().unwrap(); for case in u.cases.iter_mut() { if let ScSpecUdtUnionCaseV0::TupleV0(t) = case { for ty in t.type_.iter_mut() { @@ -133,12 +161,13 @@ pub fn simplify(spec: &[ScSpecEntry]) -> Simplified { } } ScSpecEntry::UdtEnumV0(e) => { - e.name = resolve(&e.name.to_utf8_string_lossy()).try_into().unwrap(); + e.name = resolve(&e.name).try_into().unwrap(); } ScSpecEntry::UdtErrorEnumV0(e) => { - e.name = resolve(&e.name.to_utf8_string_lossy()).try_into().unwrap(); + e.name = resolve(&e.name).try_into().unwrap(); } ScSpecEntry::EventV0(e) => { + e.name = stellar_xdr::ScSymbol(resolve(&e.name).try_into().unwrap()); for p in e.params.iter_mut() { rewrite_ty(&mut p.type_, &resolve); } @@ -150,10 +179,10 @@ pub fn simplify(spec: &[ScSpecEntry]) -> Simplified { } /// Rewrites the name of every user-defined type reference in the type. -fn rewrite_ty(t: &mut ScSpecTypeDef, resolve: &dyn Fn(&str) -> String) { +fn rewrite_ty(t: &mut ScSpecTypeDef, resolve: &dyn Fn(&[u8]) -> Vec) { match t { ScSpecTypeDef::Udt(u) => { - u.name = resolve(&u.name.to_utf8_string_lossy()).try_into().unwrap(); + u.name = resolve(&u.name).try_into().unwrap(); } ScSpecTypeDef::Option(o) => rewrite_ty(&mut o.value_type, resolve), ScSpecTypeDef::Result(r) => { @@ -181,7 +210,7 @@ mod test { ScSpecEntry, ScSpecTypeDef, ScSpecTypeUdt, ScSpecUdtStructFieldV0, ScSpecUdtStructV0, }; - fn struct_entry(name: &str, field_type_names: &[&str]) -> ScSpecEntry { + fn struct_entry_bytes(name: &[u8], field_type_names: &[&[u8]]) -> ScSpecEntry { ScSpecEntry::UdtStructV0(ScSpecUdtStructV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), @@ -201,15 +230,25 @@ mod test { }) } - fn names(spec: &[ScSpecEntry]) -> Vec<(String, Vec)> { + fn struct_entry(name: &str, field_type_names: &[&str]) -> ScSpecEntry { + struct_entry_bytes( + name.as_bytes(), + &field_type_names + .iter() + .map(|n| n.as_bytes()) + .collect::>(), + ) + } + + fn names(spec: &[ScSpecEntry]) -> Vec<(Vec, Vec>)> { spec.iter() .map(|e| match e { ScSpecEntry::UdtStructV0(s) => ( - s.name.to_utf8_string_lossy(), + s.name.to_vec(), s.fields .iter() .map(|f| match &f.type_ { - ScSpecTypeDef::Udt(u) => u.name.to_utf8_string_lossy(), + ScSpecTypeDef::Udt(u) => u.name.to_vec(), _ => unreachable!(), }) .collect(), @@ -223,12 +262,12 @@ mod test { fn reduces_a_qualified_name_to_its_last_segment() { let spec = [struct_entry("mycrate::mymod::MyType", &[])]; let simplified = simplify(&spec); - assert_eq!(names(&simplified.spec), [("MyType".to_string(), vec![])]); + assert_eq!(names(&simplified.spec), [(b"MyType".to_vec(), vec![])]); assert_eq!( simplified.renames, [Rename { - from: "mycrate::mymod::MyType".to_string(), - to: "MyType".to_string(), + from: b"mycrate::mymod::MyType".to_vec(), + to: b"MyType".to_vec(), }] ); assert!(simplified.renames[0].renamed()); @@ -245,8 +284,8 @@ mod test { assert_eq!( names(&simplified.spec), [ - ("MyType".to_string(), vec!["MyType2".to_string()]), - ("MyType2".to_string(), vec!["MyType".to_string()]), + (b"MyType".to_vec(), vec![b"MyType2".to_vec()]), + (b"MyType2".to_vec(), vec![b"MyType".to_vec()]), ] ); assert!(!simplified.renames[0].collision()); @@ -267,9 +306,9 @@ mod test { simplified .renames .iter() - .map(|r| r.to.as_str()) + .map(|r| r.to.as_slice()) .collect::>(), - ["MyType", "MyType2", "MyType3"], + [b"MyType".as_slice(), b"MyType2", b"MyType3"], ); } @@ -292,9 +331,9 @@ mod test { simplified .renames .iter() - .map(|r| r.to.as_str()) + .map(|r| r.to.as_slice()) .collect::>(), - ["MyType", "MyType2"], + [b"MyType".as_slice(), b"MyType2"], ); } @@ -304,8 +343,33 @@ mod test { let simplified = simplify(&spec); assert_eq!( names(&simplified.spec), - [("MyType".to_string(), vec!["Other".to_string()])] + [(b"MyType".to_vec(), vec![b"Other".to_vec()])] ); assert_eq!(simplified.renames.len(), 1); } + + #[test] + fn a_name_that_is_not_utf8_is_preserved_byte_for_byte() { + // Spec names are byte strings with no UTF-8 guarantee. A lossy decode + // would swap each invalid byte for a multi-byte replacement character, + // changing the name and potentially overflowing the name limit. + let name = b"mycrate::\xff\xfeType"; + let spec = [struct_entry_bytes(name, &[name])]; + let simplified = simplify(&spec); + assert_eq!( + names(&simplified.spec), + [(b"\xff\xfeType".to_vec(), vec![b"\xff\xfeType".to_vec()])] + ); + } + + #[test] + fn a_name_whose_numbered_form_cannot_fit_keeps_its_original_name() { + let long = "x".repeat(256); + let spec = [ + struct_entry(&long, &[]), + struct_entry_bytes(long.as_bytes(), &[]), + ]; + let simplified = simplify(&spec); + assert_eq!(simplified.renames[1].to.as_slice(), long.as_bytes()); + } } From 54aabed358e6e2760de271f8b9cc662d7fef806c Mon Sep 17 00:00:00 2001 From: Leigh <351529+leighmcculloch@users.noreply.github.com> Date: Tue, 11 Aug 2026 09:09:07 +0000 Subject: [PATCH 11/11] qualify event names via widened spec name field --- Cargo.lock | 3 +- Cargo.toml | 2 +- soroban-sdk-macros/src/derive_event.rs | 22 +++- .../src/tests/contract_udt_raw_identifier.rs | 4 +- soroban-spec/src/simplify.rs | 6 +- stellar-asset-spec/Cargo.toml | 1 + stellar-asset-spec/src/tests/spec.rs | 21 +++- tests-expanded/test_attributes_tests.rs | 12 +- .../test_attributes_wasm32v1-none.rs | 10 +- tests-expanded/test_events_ref_tests.rs | 8 +- .../test_events_ref_wasm32v1-none.rs | 8 +- tests-expanded/test_events_tests.rs | 8 +- tests-expanded/test_events_wasm32v1-none.rs | 8 +- tests-expanded/test_spec_lib_tests.rs | 32 +++++- tests-expanded/test_spec_lib_wasm32v1-none.rs | 32 +++++- tests-expanded/test_spec_shaking_v2_tests.rs | 106 +++++++++++++----- .../test_spec_shaking_v2_wasm32v1-none.rs | 104 ++++++++++++----- 17 files changed, 300 insertions(+), 87 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26c1ea259..01c095b78 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1657,6 +1657,7 @@ name = "stellar-asset-spec" version = "27.0.5" dependencies = [ "soroban-sdk", + "soroban-spec", "soroban-token-sdk", "soroban-token-spec", ] @@ -1685,7 +1686,7 @@ dependencies = [ [[package]] name = "stellar-xdr" version = "28.0.0" -source = "git+https://github.com/stellar/rs-stellar-xdr?rev=99a031a6f6a0935f68c073705651bd1addca1fd4#99a031a6f6a0935f68c073705651bd1addca1fd4" +source = "git+https://github.com/stellar/rs-stellar-xdr?rev=4144fbd8d1c6281f122f382989a5a788431e5e19#4144fbd8d1c6281f122f382989a5a788431e5e19" dependencies = [ "arbitrary", "base64", diff --git a/Cargo.toml b/Cargo.toml index e8d130a83..67fbf8591 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,7 +59,7 @@ default-features = false # https://github.com/stellar/rs-stellar-xdr/pull/562 adding the borrowing # `*View` types and their const XDR serializers that the contract spec # generation in soroban-sdk-macros builds on. -stellar-xdr = { git = "https://github.com/stellar/rs-stellar-xdr", rev = "99a031a6f6a0935f68c073705651bd1addca1fd4" } +stellar-xdr = { git = "https://github.com/stellar/rs-stellar-xdr", rev = "4144fbd8d1c6281f122f382989a5a788431e5e19" } #soroban-env-common = { path = "../rs-soroban-env/soroban-env-common" } #soroban-env-guest = { path = "../rs-soroban-env/soroban-env-guest" } #soroban-env-host = { path = "../rs-soroban-env/soroban-env-host" } diff --git a/soroban-sdk-macros/src/derive_event.rs b/soroban-sdk-macros/src/derive_event.rs index 33056334c..c75e46668 100644 --- a/soroban-sdk-macros/src/derive_event.rs +++ b/soroban-sdk-macros/src/derive_event.rs @@ -12,8 +12,7 @@ use proc_macro2::Span; use proc_macro2::TokenStream as TokenStream2; use quote::{format_ident, quote}; use stellar_xdr::{ - ScSpecEventDataFormat, ScSpecEventParamLocationV0, ScSpecEventParamV0, ScSpecEventV0, ScSymbol, - StringM, + ScSpecEventDataFormat, ScSpecEventParamLocationV0, ScSpecEventParamV0, ScSpecEventV0, StringM, }; use syn::{ext::IdentExt as _, parse2, spanned::Spanned, Data, DeriveInput, Fields, LitStr, Path}; @@ -94,7 +93,7 @@ fn derive_impls(args: &ContractEventArgs, input: &DeriveInput) -> Result = errors @@ -183,7 +182,7 @@ fn derive_impls(args: &ContractEventArgs, input: &DeriveInput) -> Result Result Result &'static str { + ::core::concat!(::core::module_path!(), "::", #spec_type_name_lit) + } + } + }; let output = quote! { + #spec_type_name + #spec_gen #spec_shaking_impl diff --git a/soroban-sdk/src/tests/contract_udt_raw_identifier.rs b/soroban-sdk/src/tests/contract_udt_raw_identifier.rs index 9e31daea4..2ede8803f 100644 --- a/soroban-sdk/src/tests/contract_udt_raw_identifier.rs +++ b/soroban-sdk/src/tests/contract_udt_raw_identifier.rs @@ -343,7 +343,9 @@ fn test_spec_event() { ScSpecEntry::EventV0(ScSpecEventV0 { doc: "".try_into().unwrap(), lib: "".try_into().unwrap(), - name: ScSymbol("TestEvent".try_into().unwrap()), + name: "soroban_sdk::tests::contract_udt_raw_identifier::TestEvent" + .try_into() + .unwrap(), prefix_topics: [ScSymbol("test_event".try_into().unwrap())] .try_into() .unwrap(), diff --git a/soroban-spec/src/simplify.rs b/soroban-spec/src/simplify.rs index 5fb530aec..ffe2911d9 100644 --- a/soroban-spec/src/simplify.rs +++ b/soroban-spec/src/simplify.rs @@ -4,8 +4,8 @@ use stellar_xdr::{ScSpecEntry, ScSpecTypeDef, ScSpecUdtUnionCaseV0}; /// bounds the names the numbering below may produce. const TYPE_NAME_LIMIT: usize = 256; -/// The most bytes an event name can hold (an `ScSymbol`). -const EVENT_NAME_LIMIT: usize = 32; +/// The most bytes an event name can hold (`SC_SPEC_TYPE_NAME_LIMIT`). +const EVENT_NAME_LIMIT: usize = 256; /// A spec with its user-defined type names reduced to simple names, along /// with how each type's name was resolved. @@ -167,7 +167,7 @@ pub fn simplify(spec: &[ScSpecEntry]) -> Simplified { e.name = resolve(&e.name).try_into().unwrap(); } ScSpecEntry::EventV0(e) => { - e.name = stellar_xdr::ScSymbol(resolve(&e.name).try_into().unwrap()); + e.name = resolve(&e.name).try_into().unwrap(); for p in e.params.iter_mut() { rewrite_ty(&mut p.type_, &resolve); } diff --git a/stellar-asset-spec/Cargo.toml b/stellar-asset-spec/Cargo.toml index a4597be98..437606e4b 100644 --- a/stellar-asset-spec/Cargo.toml +++ b/stellar-asset-spec/Cargo.toml @@ -20,3 +20,4 @@ soroban-token-spec = { workspace = true } [dev-dependencies] soroban-sdk = { workspace = true, features = ["testutils"] } +soroban-spec = { workspace = true } diff --git a/stellar-asset-spec/src/tests/spec.rs b/stellar-asset-spec/src/tests/spec.rs index 28ba50b1e..0e4ec1bd3 100644 --- a/stellar-asset-spec/src/tests/spec.rs +++ b/stellar-asset-spec/src/tests/spec.rs @@ -6,6 +6,7 @@ use soroban_sdk::xdr::{ ScSpecTypeDef, StringM, }; use std::collections::HashSet; +use std::vec::Vec; #[test] fn test_stellar_asset_spec_xdr_len() { @@ -58,7 +59,10 @@ fn test_stellar_asset_spec_includes_token_spec() -> Result<(), Error> { // Read token spec entries, strip docs, and add sep0011_asset to event topics. let token_xdr = soroban_token_spec::xdr(); let token_cursor = std::io::Cursor::new(token_xdr); - let token_entries: HashSet = + // Each spec defines its entries in its own crate, so their fully + // qualified type and event names differ even where the entries otherwise + // match; names are reduced to simple names before comparing. + let token_entries: Vec = ScSpecEntry::read_xdr_iter(&mut Limited::new(token_cursor, Limits::none())) .map(|e| { e.map(|mut e| { @@ -69,12 +73,16 @@ fn test_stellar_asset_spec_includes_token_spec() -> Result<(), Error> { e }) }) - .collect::, _>>()?; + .collect::, _>>()?; + let token_entries: HashSet = soroban_spec::simplify::simplify(&token_entries) + .spec + .into_iter() + .collect(); // Read stellar asset spec entries and strip docs. let stellar_asset_xdr = crate::xdr(); let stellar_asset_cursor = std::io::Cursor::new(stellar_asset_xdr); - let stellar_asset_entries: HashSet = + let stellar_asset_entries: Vec = ScSpecEntry::read_xdr_iter(&mut Limited::new(stellar_asset_cursor, Limits::none())) .map(|e| { e.map(|mut e| { @@ -82,7 +90,12 @@ fn test_stellar_asset_spec_includes_token_spec() -> Result<(), Error> { e }) }) - .collect::, _>>()?; + .collect::, _>>()?; + let stellar_asset_entries: HashSet = + soroban_spec::simplify::simplify(&stellar_asset_entries) + .spec + .into_iter() + .collect(); // Check that all token entries (with sep0011_asset added to events) are // present in the stellar asset spec (which uses SAC-specific event types diff --git a/tests-expanded/test_attributes_tests.rs b/tests-expanded/test_attributes_tests.rs index e8f49f28f..d5c6c9e93 100644 --- a/tests-expanded/test_attributes_tests.rs +++ b/tests-expanded/test_attributes_tests.rs @@ -398,6 +398,12 @@ pub struct AttributeEvent { topic: u32, value: u32, } +impl AttributeEvent { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_attributes::AttributeEvent" + } +} pub static __SPEC_XDR_EVENT_ATTRIBUTEEVENT: [u8; AttributeEvent::__SPEC_XDR_VIEW.const_xdr_len()] = AttributeEvent::spec_xdr(); impl AttributeEvent { @@ -405,9 +411,7 @@ impl AttributeEvent { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"AttributeEvent", - )), + name: soroban_sdk::xdr::StringMView::new_str(AttributeEvent::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"attribute_event"), )]), @@ -3416,7 +3420,7 @@ mod test { } } }; - let wasm = b"\x00asm\x01\x00\x00\x00\x01\x1f\x05`\x04~~~~\x01~`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~\x02\x1f\x05\x01m\x01a\x00\x00\x01b\x01j\x00\x01\x01v\x01g\x00\x01\x01m\x019\x00\x02\x01x\x011\x00\x01\x03\x0b\n\x03\x03\x01\x04\x04\x04\x04\x04\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xc0\x80\xc0\x00\x0b\x07\xf5\x01\x0e\x06memory\x02\x00\x06always\x00\x05\x0ccfg_included\x00\x06\x07publish\x00\x07\rtrait_default\x00\x08\x16trait_default_dual_cfg\x00\t\x19trait_default_stacked_cfg\x00\n\x0etrait_override\x00\x0b\x17trait_override_dual_cfg\x00\x0c\x1atrait_override_negated_cfg\x00\r\x1atrait_override_stacked_cfg\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x85\x04\n\x85\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80\x10\x10\x80\x80\x80\x80\x00\x1a \x01)\x03\x08\"\x00B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00 \x00B\x84\x80\x80\x80p\x83\x0b\x1a\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0b \x00B\x84\x80\x80\x80p\x83\x0b\x9c\x02\x02\x02\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00 \x01B\xff\x01\x83B\x04R\r\x00A\x00!\x03A\x00-\x00\x8e\x80\xc0\x80\x00\x1aA\xac\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80\xf0\x01\x10\x81\x80\x80\x80\x00!\x04 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x08 \x02 \x047\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\xadB \x86B\x04\x84\"\x00B\x84\x80\x80\x80 \x10\x82\x80\x80\x80\x00!\x04 \x02 \x01B\x84\x80\x80\x80p\x837\x03\x10 \x04A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x00B\x84\x80\x80\x80\x10\x10\x83\x80\x80\x80\x00\x10\x84\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b\x08\x00B\x84\x80\x80\x80 \x0b\t\x00B\x84\x80\x80\x80\xe0\x01\x0b\t\x00B\x84\x80\x80\x80\xd0\x00\x0b\x08\x00B\x84\x80\x80\x800\x0b\t\x00B\x84\x80\x80\x80\xc0\x01\x0b\t\x00B\x84\x80\x80\x80\xa0\x01\x0b\t\x00B\x84\x80\x80\x80\x80\x01\x0b\x0bD\x01\x00A\x80\x80\xc0\x00\x0b;SpEcV1L\x0f\xecG\xb1\x13$mSpEcV1\xbfO\xc3P\xd4\x14\xb5Vvalue\x00\x00\x00\x1c\x00\x10\x00\x05\x00\x00\x00attribute_event\x00\xdb\x1d\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06always\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07publish\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ccfg_included\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rtrait_default\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eAttributeEvent\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0fattribute_event\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0etrait_override\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16trait_default_dual_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17trait_override_dual_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19trait_default_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1atrait_override_negated_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1atrait_override_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + let wasm = b"\x00asm\x01\x00\x00\x00\x01\x1f\x05`\x04~~~~\x01~`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~\x02\x1f\x05\x01m\x01a\x00\x00\x01b\x01j\x00\x01\x01v\x01g\x00\x01\x01m\x019\x00\x02\x01x\x011\x00\x01\x03\x0b\n\x03\x03\x01\x04\x04\x04\x04\x04\x04\x04\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xbb\x80\xc0\x00\x0b\x7f\x00A\xc0\x80\xc0\x00\x0b\x07\xf5\x01\x0e\x06memory\x02\x00\x06always\x00\x05\x0ccfg_included\x00\x06\x07publish\x00\x07\rtrait_default\x00\x08\x16trait_default_dual_cfg\x00\t\x19trait_default_stacked_cfg\x00\n\x0etrait_override\x00\x0b\x17trait_override_dual_cfg\x00\x0c\x1atrait_override_negated_cfg\x00\r\x1atrait_override_stacked_cfg\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x85\x04\n\x85\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80\x10\x10\x80\x80\x80\x80\x00\x1a \x01)\x03\x08\"\x00B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00 \x00B\x84\x80\x80\x80p\x83\x0b\x1a\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0b \x00B\x84\x80\x80\x80p\x83\x0b\x9c\x02\x02\x02\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00 \x01B\xff\x01\x83B\x04R\r\x00A\x00!\x03A\x00-\x00\x8e\x80\xc0\x80\x00\x1aA\xac\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80\xf0\x01\x10\x81\x80\x80\x80\x00!\x04 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x08 \x02 \x047\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\xadB \x86B\x04\x84\"\x00B\x84\x80\x80\x80 \x10\x82\x80\x80\x80\x00!\x04 \x02 \x01B\x84\x80\x80\x80p\x837\x03\x10 \x04A\xa4\x80\xc0\x80\x00\xadB \x86B\x04\x84 \x00B\x84\x80\x80\x80\x10\x10\x83\x80\x80\x80\x00\x10\x84\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b\x08\x00B\x84\x80\x80\x80 \x0b\t\x00B\x84\x80\x80\x80\xe0\x01\x0b\t\x00B\x84\x80\x80\x80\xd0\x00\x0b\x08\x00B\x84\x80\x80\x800\x0b\t\x00B\x84\x80\x80\x80\xc0\x01\x0b\t\x00B\x84\x80\x80\x80\xa0\x01\x0b\t\x00B\x84\x80\x80\x80\x80\x01\x0b\x0bD\x01\x00A\x80\x80\xc0\x00\x0b;SpEcV1L\x0f\xecG\xb1\x13$mSpEcV1R\xa4;\xb3\xef\x9b\x9e\xadvalue\x00\x00\x00\x1c\x00\x10\x00\x05\x00\x00\x00attribute_event\x00\xeb\x1d\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06always\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07publish\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_attributes::AttributeType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ccfg_included\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rtrait_default\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1ftest_attributes::AttributeEvent\x00\x00\x00\x00\x01\x00\x00\x00\x0fattribute_event\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x05topic\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05value\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0etrait_override\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16trait_default_dual_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17trait_override_dual_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19trait_default_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1atrait_override_negated_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1atrait_override_stacked_cfg\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; let fn_names: HashSet = soroban_spec::read::from_wasm(wasm) .unwrap() .iter() diff --git a/tests-expanded/test_attributes_wasm32v1-none.rs b/tests-expanded/test_attributes_wasm32v1-none.rs index 49578dcd6..65b2f03c6 100644 --- a/tests-expanded/test_attributes_wasm32v1-none.rs +++ b/tests-expanded/test_attributes_wasm32v1-none.rs @@ -135,6 +135,12 @@ pub struct AttributeEvent { topic: u32, value: u32, } +impl AttributeEvent { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_attributes::AttributeEvent" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_ATTRIBUTEEVENT: [u8; AttributeEvent::__SPEC_XDR_VIEW.const_xdr_len()] = AttributeEvent::spec_xdr(); @@ -143,9 +149,7 @@ impl AttributeEvent { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"AttributeEvent", - )), + name: soroban_sdk::xdr::StringMView::new_str(AttributeEvent::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"attribute_event"), )]), diff --git a/tests-expanded/test_events_ref_tests.rs b/tests-expanded/test_events_ref_tests.rs index ffe8a326b..63c10b4ce 100644 --- a/tests-expanded/test_events_ref_tests.rs +++ b/tests-expanded/test_events_ref_tests.rs @@ -142,6 +142,12 @@ pub struct Transfer<'a> { amount: &'a i128, to_muxed_id: Option<&'a u64>, } +impl<'a> Transfer<'a> { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_events_ref::Transfer" + } +} pub static __SPEC_XDR_EVENT_TRANSFER: [u8; Transfer::__SPEC_XDR_VIEW.const_xdr_len()] = Transfer::spec_xdr(); impl<'a> Transfer<'a> { @@ -149,7 +155,7 @@ impl<'a> Transfer<'a> { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"Transfer")), + name: soroban_sdk::xdr::StringMView::new_str(Transfer::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"transfer"), )]), diff --git a/tests-expanded/test_events_ref_wasm32v1-none.rs b/tests-expanded/test_events_ref_wasm32v1-none.rs index 81badcb1a..aa78edef4 100644 --- a/tests-expanded/test_events_ref_wasm32v1-none.rs +++ b/tests-expanded/test_events_ref_wasm32v1-none.rs @@ -30,6 +30,12 @@ pub struct Transfer<'a> { amount: &'a i128, to_muxed_id: Option<&'a u64>, } +impl<'a> Transfer<'a> { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_events_ref::Transfer" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_TRANSFER: [u8; Transfer::__SPEC_XDR_VIEW.const_xdr_len()] = Transfer::spec_xdr(); @@ -38,7 +44,7 @@ impl<'a> Transfer<'a> { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"Transfer")), + name: soroban_sdk::xdr::StringMView::new_str(Transfer::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"transfer"), )]), diff --git a/tests-expanded/test_events_tests.rs b/tests-expanded/test_events_tests.rs index 85ff4b3da..20103cafd 100644 --- a/tests-expanded/test_events_tests.rs +++ b/tests-expanded/test_events_tests.rs @@ -142,6 +142,12 @@ pub struct Transfer { amount: i128, to_muxed_id: Option, } +impl Transfer { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_events::Transfer" + } +} pub static __SPEC_XDR_EVENT_TRANSFER: [u8; Transfer::__SPEC_XDR_VIEW.const_xdr_len()] = Transfer::spec_xdr(); impl Transfer { @@ -149,7 +155,7 @@ impl Transfer { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"Transfer")), + name: soroban_sdk::xdr::StringMView::new_str(Transfer::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"transfer"), )]), diff --git a/tests-expanded/test_events_wasm32v1-none.rs b/tests-expanded/test_events_wasm32v1-none.rs index bce402829..a94ea0832 100644 --- a/tests-expanded/test_events_wasm32v1-none.rs +++ b/tests-expanded/test_events_wasm32v1-none.rs @@ -30,6 +30,12 @@ pub struct Transfer { amount: i128, to_muxed_id: Option, } +impl Transfer { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_events::Transfer" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_TRANSFER: [u8; Transfer::__SPEC_XDR_VIEW.const_xdr_len()] = Transfer::spec_xdr(); @@ -38,7 +44,7 @@ impl Transfer { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"Transfer")), + name: soroban_sdk::xdr::StringMView::new_str(Transfer::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"transfer"), )]), diff --git a/tests-expanded/test_spec_lib_tests.rs b/tests-expanded/test_spec_lib_tests.rs index d8078b015..0127f951c 100644 --- a/tests-expanded/test_spec_lib_tests.rs +++ b/tests-expanded/test_spec_lib_tests.rs @@ -6032,6 +6032,12 @@ impl ::core::cmp::PartialEq for EventA { self.f1 == other.f1 && self.f2 == other.f2 } } +impl EventA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EventA" + } +} pub static __SPEC_XDR_EVENT_EVENTA: [u8; EventA::__SPEC_XDR_VIEW.const_xdr_len()] = EventA::spec_xdr(); impl EventA { @@ -6039,7 +6045,7 @@ impl EventA { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventA")), + name: soroban_sdk::xdr::StringMView::new_str(EventA::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_a"), )]), @@ -6146,6 +6152,12 @@ impl ::core::cmp::PartialEq for EventB { self.f3 == other.f3 && self.f1 == other.f1 && self.f2 == other.f2 } } +impl EventB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EventB" + } +} pub static __SPEC_XDR_EVENT_EVENTB: [u8; EventB::__SPEC_XDR_VIEW.const_xdr_len()] = EventB::spec_xdr(); impl EventB { @@ -6153,7 +6165,7 @@ impl EventB { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventB")), + name: soroban_sdk::xdr::StringMView::new_str(EventB::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_b"), )]), @@ -6271,6 +6283,12 @@ impl ::core::cmp::PartialEq for EventC { self.f2 == other.f2 && self.f3 == other.f3 && self.f1 == other.f1 } } +impl EventC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EventC" + } +} pub static __SPEC_XDR_EVENT_EVENTC: [u8; EventC::__SPEC_XDR_VIEW.const_xdr_len()] = EventC::spec_xdr(); impl EventC { @@ -6278,7 +6296,7 @@ impl EventC { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventC")), + name: soroban_sdk::xdr::StringMView::new_str(EventC::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_c"), )]), @@ -6379,6 +6397,12 @@ impl ::core::cmp::PartialEq for EventD { true } } +impl EventD { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EventD" + } +} pub static __SPEC_XDR_EVENT_EVENTD: [u8; EventD::__SPEC_XDR_VIEW.const_xdr_len()] = EventD::spec_xdr(); impl EventD { @@ -6386,7 +6410,7 @@ impl EventD { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventD")), + name: soroban_sdk::xdr::StringMView::new_str(EventD::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_d"), )]), diff --git a/tests-expanded/test_spec_lib_wasm32v1-none.rs b/tests-expanded/test_spec_lib_wasm32v1-none.rs index c780b6f1e..52372ae7b 100644 --- a/tests-expanded/test_spec_lib_wasm32v1-none.rs +++ b/tests-expanded/test_spec_lib_wasm32v1-none.rs @@ -2464,6 +2464,12 @@ impl ::core::cmp::PartialEq for EventA { self.f1 == other.f1 && self.f2 == other.f2 } } +impl EventA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EventA" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_EVENTA: [u8; EventA::__SPEC_XDR_VIEW.const_xdr_len()] = EventA::spec_xdr(); @@ -2472,7 +2478,7 @@ impl EventA { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventA")), + name: soroban_sdk::xdr::StringMView::new_str(EventA::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_a"), )]), @@ -2583,6 +2589,12 @@ impl ::core::cmp::PartialEq for EventB { self.f3 == other.f3 && self.f1 == other.f1 && self.f2 == other.f2 } } +impl EventB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EventB" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_EVENTB: [u8; EventB::__SPEC_XDR_VIEW.const_xdr_len()] = EventB::spec_xdr(); @@ -2591,7 +2603,7 @@ impl EventB { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventB")), + name: soroban_sdk::xdr::StringMView::new_str(EventB::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_b"), )]), @@ -2713,6 +2725,12 @@ impl ::core::cmp::PartialEq for EventC { self.f2 == other.f2 && self.f3 == other.f3 && self.f1 == other.f1 } } +impl EventC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EventC" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_EVENTC: [u8; EventC::__SPEC_XDR_VIEW.const_xdr_len()] = EventC::spec_xdr(); @@ -2721,7 +2739,7 @@ impl EventC { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventC")), + name: soroban_sdk::xdr::StringMView::new_str(EventC::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_c"), )]), @@ -2826,6 +2844,12 @@ impl ::core::cmp::PartialEq for EventD { true } } +impl EventD { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_lib::EventD" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_EVENTD: [u8; EventD::__SPEC_XDR_VIEW.const_xdr_len()] = EventD::spec_xdr(); @@ -2834,7 +2858,7 @@ impl EventD { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventD")), + name: soroban_sdk::xdr::StringMView::new_str(EventD::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_d"), )]), diff --git a/tests-expanded/test_spec_shaking_v2_tests.rs b/tests-expanded/test_spec_shaking_v2_tests.rs index 226985cbe..d629a3968 100644 --- a/tests-expanded/test_spec_shaking_v2_tests.rs +++ b/tests-expanded/test_spec_shaking_v2_tests.rs @@ -4365,6 +4365,12 @@ impl ::core::cmp::PartialEq for UsedEventSimple { self.amount == other.amount && self.kind == other.kind } } +impl UsedEventSimple { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventSimple" + } +} pub static __SPEC_XDR_EVENT_USEDEVENTSIMPLE: [u8; UsedEventSimple::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventSimple::spec_xdr(); impl UsedEventSimple { @@ -4372,9 +4378,7 @@ impl UsedEventSimple { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventSimple", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventSimple::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_simple"), )]), @@ -4835,6 +4839,12 @@ impl ::core::cmp::PartialEq for UsedEventWithTopicType { self.amount == other.amount && self.kind == other.kind } } +impl UsedEventWithTopicType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithTopicType" + } +} pub static __SPEC_XDR_EVENT_USEDEVENTWITHTOPICTYPE: [u8; UsedEventWithTopicType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventWithTopicType::spec_xdr(); impl UsedEventWithTopicType { @@ -4842,9 +4852,7 @@ impl UsedEventWithTopicType { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithTopicType", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithTopicType::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_topic_type"), )]), @@ -5403,6 +5411,12 @@ impl ::core::cmp::PartialEq for UsedEventWithDataType { self.kind == other.kind && self.payload == other.payload } } +impl UsedEventWithDataType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithDataType" + } +} pub static __SPEC_XDR_EVENT_USEDEVENTWITHDATATYPE: [u8; UsedEventWithDataType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventWithDataType::spec_xdr(); impl UsedEventWithDataType { @@ -5410,9 +5424,7 @@ impl UsedEventWithDataType { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithDataType", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithDataType::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_data_type"), )]), @@ -6315,6 +6327,12 @@ impl ::core::cmp::PartialEq for UsedEventWithNestedTopic { self.amount == other.amount && self.info == other.info } } +impl UsedEventWithNestedTopic { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithNestedTopic" + } +} pub static __SPEC_XDR_EVENT_USEDEVENTWITHNESTEDTOPIC: [u8; UsedEventWithNestedTopic::__SPEC_XDR_VIEW.const_xdr_len()] = UsedEventWithNestedTopic::spec_xdr(); @@ -6323,9 +6341,7 @@ impl UsedEventWithNestedTopic { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithNestedTopic", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithNestedTopic::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_nested_topic"), )]), @@ -7224,6 +7240,12 @@ impl ::core::cmp::PartialEq for UsedEventWithNestedData { self.kind == other.kind && self.payload == other.payload } } +impl UsedEventWithNestedData { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithNestedData" + } +} pub static __SPEC_XDR_EVENT_USEDEVENTWITHNESTEDDATA: [u8; UsedEventWithNestedData::__SPEC_XDR_VIEW.const_xdr_len()] = UsedEventWithNestedData::spec_xdr(); impl UsedEventWithNestedData { @@ -7231,9 +7253,7 @@ impl UsedEventWithNestedData { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithNestedData", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithNestedData::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_nested_data"), )]), @@ -8479,6 +8499,12 @@ impl<'a> ::core::cmp::PartialEq for UsedEventWithRefs<'a> { self.kind == other.kind && self.payload == other.payload } } +impl<'a> UsedEventWithRefs<'a> { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithRefs" + } +} pub static __SPEC_XDR_EVENT_USEDEVENTWITHREFS: [u8; UsedEventWithRefs::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventWithRefs::spec_xdr(); impl<'a> UsedEventWithRefs<'a> { @@ -8486,9 +8512,7 @@ impl<'a> UsedEventWithRefs<'a> { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithRefs", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithRefs::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_refs"), )]), @@ -12984,7 +13008,7 @@ const _: () = { } }; mod wasm_imported { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\x0eJ\x07\xc3\x8bG\x9d\x91SpEcV1\x9a\xac\n*\xd8z\xf1rSpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\x14\xc8R\x91\x9a.T\x17SpEcV1)\xf5 \xed\x8b.\x0fuSpEcV1\xed\xbfE\xe8/\xbf\x90\x8cf1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xd3)\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\x0eJ\x07\xc3\x8bG\x9d\x91SpEcV1\x9a\xac\n*\xd8z\xf1rSpEcV1\xa4\xbaQ6!\xf4\xd2\x87SpEcV1\xa5\x85L\x0b6\x80\x01\'SpEcV1\x14\xc8R\x91\x9a.T\x17SpEcV1)\xf5 \xed\x8b.\x0fuSpEcV1\xed\xbfE\xe8/\xbf\x90\x8cf1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\x93*\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventB\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventC\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventD\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn fn_enum_a(env: soroban_sdk::Env) -> EnumA; fn fn_error_a(env: soroban_sdk::Env, input: u32) -> Result; @@ -25119,6 +25143,12 @@ mod wasm_imported { } } } + impl EventA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EventA" + } + } pub static __SPEC_XDR_EVENT_EVENTA: [u8; EventA::__SPEC_XDR_VIEW.const_xdr_len()] = EventA::spec_xdr(); impl EventA { @@ -25126,7 +25156,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventA")), + name: soroban_sdk::xdr::StringMView::new_str(EventA::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_a"), )]), @@ -25264,6 +25294,12 @@ mod wasm_imported { } } } + impl EventB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EventB" + } + } pub static __SPEC_XDR_EVENT_EVENTB: [u8; EventB::__SPEC_XDR_VIEW.const_xdr_len()] = EventB::spec_xdr(); impl EventB { @@ -25271,7 +25307,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventB")), + name: soroban_sdk::xdr::StringMView::new_str(EventB::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_b"), )]), @@ -25419,6 +25455,12 @@ mod wasm_imported { } } } + impl EventC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EventC" + } + } pub static __SPEC_XDR_EVENT_EVENTC: [u8; EventC::__SPEC_XDR_VIEW.const_xdr_len()] = EventC::spec_xdr(); impl EventC { @@ -25426,7 +25468,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventC")), + name: soroban_sdk::xdr::StringMView::new_str(EventC::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_c"), )]), @@ -25541,6 +25583,12 @@ mod wasm_imported { ::core::option::Option::Some(::core::cmp::Ordering::Equal) } } + impl EventD { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EventD" + } + } pub static __SPEC_XDR_EVENT_EVENTD: [u8; EventD::__SPEC_XDR_VIEW.const_xdr_len()] = EventD::spec_xdr(); impl EventD { @@ -25548,7 +25596,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventD")), + name: soroban_sdk::xdr::StringMView::new_str(EventD::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_d"), )]), @@ -26877,6 +26925,12 @@ impl ::core::cmp::PartialEq for UnusedEvent { self.data == other.data && self.kind == other.kind } } +impl UnusedEvent { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedEvent" + } +} pub static __SPEC_XDR_EVENT_UNUSEDEVENT: [u8; UnusedEvent::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedEvent::spec_xdr(); impl UnusedEvent { @@ -26884,9 +26938,7 @@ impl UnusedEvent { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UnusedEvent", - )), + name: soroban_sdk::xdr::StringMView::new_str(UnusedEvent::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"unused_event"), )]), @@ -33022,7 +33074,7 @@ mod test { use soroban_sdk::xdr::ScSpecEntry; use std::collections::HashSet; use std::vec::Vec; - const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01^\x10`\x02~~\x01~`\x01~\x01~`\x03~~~\x01~`\x04~~~~\x01~`\x00\x00`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x01~\x00`\x02\x7f\x7f\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x02\x7f~\x00`\x05~\x7f\x7f\x7f\x7f\x00`\x03\x7f\x7f\x7f\x00`\x01\x7f\x01~\x02I\x0c\x01x\x011\x00\x00\x01v\x013\x00\x01\x01i\x012\x00\x01\x01v\x01h\x00\x02\x01v\x01g\x00\x00\x01m\x01a\x00\x03\x01b\x01m\x00\x02\x01b\x01j\x00\x00\x01v\x011\x00\x00\x01b\x018\x00\x01\x01x\x015\x00\x01\x01m\x019\x00\x02\x0365\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x05\x06\x00\x07\x05\x05\x05\x05\x05\x05\x01\x08\x01\x05\x01\t\n\x0b\x0c\x01\r\x0c\x01\x01\x01\x05\x01\x01\x01\x00\x01\x05\x05\x0e\x0f\x01\x05\x01\x01\x01\x04\x04\x04\x05\x01p\x01\x0c\x0c\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xd2\x88\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x07\x86\x04\x1f\x06memory\x02\x00\x11publish_data_type\x00\x17\x13publish_nested_data\x00\x1b\x14publish_nested_topic\x00\x1c\x11publish_ref_event\x00\x1e\x0epublish_simple\x00\x1f\x12publish_topic_type\x00 \x11with_assert_error\x00!\x12with_auth_contexts\x00#\nwith_error\x00$\x0fwith_executable\x00%\x11with_invoker_auth\x00*\x0fwith_lib_struct\x00-\x08with_map\x00.\x0cwith_non_pub\x00/\x12with_non_pub_error\x000\x0bwith_option\x001\x10with_panic_error\x002\x14with_panic_raw_error\x003\nwith_param\x004\x0ewith_recursion\x005\x0bwith_result\x006\x0bwith_return\x007\nwith_tuple\x00:\x11with_tuple_return\x00;\x08with_vec\x00<\x0fwith_vec_nested\x00=\x12with_wasm_imported\x00>\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\x11\x01\x00A\x01\x0b\x0b\x0f\x11\x13\x12\x0e\r\x14\x15\x16\x0c\x10\n\xac05\x0c\x00A\x00-\x00\x9c\x80\xc0\x80\x00\x1a\x0b\x16\x00A\x00-\x00\xfe\x80\xc0\x80\x00\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x8c\x81\xc0\x80\x00\x1a\x0bJ\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a\x0b6\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xec\x82\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xfa\x82\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xb2\x83\xc0\x80\x00\x1a\x0b\x86\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x00A\x84\x80\x80\x80\x006\x02\x04 \x00(\x02\x04\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x0b\x02\x00\x0bk\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xa8\x88\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xf8\x83\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x86\x84\xc0\x80\x00\x1a\x0b\xae\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\xb0\x86\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xa8\x81\xc0\x80\x00\x1aA\x00-\x00\x88\x83\xc0\x80\x00\x1aA\xf8\x86\xc0\x80\x00A\x19\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x18 \x00B\x84\x80\x80\x80\x107\x03\x10 \x00A\x88\x86\xc0\x80\x00A\x02 \x00A\x10jA\x02\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A j$\x80\x80\x80\x80\x00B\x02\x0bE\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00 \x01\x10\xb8\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01G\r\x00\x00\x0b \x02)\x03\x08!\x03 \x02A\x10j$\x80\x80\x80\x80\x00 \x03\x0b\x92\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00A\x00!\x03\x03~\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\x10\xb9\x80\x80\x80\x00!\x01 \x02A j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x0b\xc5\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xdd\x84\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xfc\x81\xc0\x80\x00\x1aA\x00-\x00\x8a\x82\xc0\x80\x00\x1aA\x00-\x00\xce\x83\xc0\x80\x00\x1aA\xab\x87\xc0\x80\x00A\x1b\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\xbd\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xd0\x82\xc0\x80\x00\x1aA\x00-\x00\xde\x82\xc0\x80\x00\x1aA\x00-\x00\xdc\x83\xc0\x80\x00\x1aA\xc6\x87\xc0\x80\x00A\x1c\x10\x98\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x01A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x00\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x06\x00B\x8b\xc8\x01\x0b\xc7\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00 \x00A\x85\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1a \x00A\x86\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xb6\x81\xc0\x80\x00\x1aA\xe4\x86\xc0\x80\x00A\x14\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xb0\x0c7\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xfc\x85\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x7f\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xa8\x86\xc0\x80\x00A\x08\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\xc4\x86\xc0\x80\x00A\x11\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b}\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x98\x82\xc0\x80\x00\x1aA\x00-\x00\x96\x83\xc0\x80\x00\x1aA\x91\x87\xc0\x80\x00A\x1a\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0bJ\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01qE\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xc2\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b\x0b\x00 \x00\x10\x8a\x80\x80\x80\x00\x1a\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x87\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x13\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\xa0\x05\x0b\xc0\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xb6\x88\xc0\x80\x00\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x08 \x01 \x007\x03\x00 \x01 \x02B \x88>\x02\x0c \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x00A\xc4\x84\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x01\x02\x00\x04\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x03\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01A\x10j \x01)\x03\x18\x10\xa9\x80\x80\x80\x00 \x01(\x02\x10A\x01G\r\x01\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x01\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x86\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\xc0\x80\x80\x80\x00\x00\x0bB\x01\x01~B\x01!\x02\x02@ \x01B\xff\x01\x83B\xc8\x00R\r\x00 \x01\x10\x89\x80\x80\x80\x00B\x80\x80\x80\x80p\x83B\x80\x80\x80\x80\x80\x04R\r\x00 \x00 \x017\x03\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\xd3\x07\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\xc0\x00k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x01A\x84\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x10 \x01 \x007\x03\x08 \x01 \x02B \x88>\x02\x14 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03 \"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\xe0\x85\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x00\x01\x02\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01)\x030!\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xe8\x88\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x02 \x011\x00 B\xcd\x00R\r\x02\x02@ \x01-\x00(\"\x03A\x0eF\r\x00 \x03A\xca\x00G\r\x03\x0b \x011\x008B\xcb\x00R\r\x02\x0c\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xc4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01A\x18j \x01)\x030\x10\xac\x80\x80\x80\x00 \x01(\x02\x18\r\x01 \x01A\x18j \x01)\x038\x10\xa9\x80\x80\x80\x00 \x01(\x02\x18A\x01G\r\x02\x0c\x01\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x89\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x00 \x01A0j \x01)\x03 \x10\xac\x80\x80\x80\x00 \x01(\x020\r\x00 \x01A0j \x01)\x03(\x10\xa9\x80\x80\x80\x00 \x01(\x020A\x01G\r\x01\x0b\x00\x0b \x01A\xc0\x00j$\x80\x80\x80\x80\x00B\x02\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x85\x80\x80\x80\x00\x1a\x0b\xb3\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@\x02@ \x01B\xff\x01\x83B\xcb\x00Q\r\x00 \x00B\x017\x03\x00\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x03 \x02A\x006\x02\x08 \x02 \x017\x03\x00 \x02 \x03B \x88>\x02\x0c \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00\x02@ \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00\x02@ \x02)\x03\x18\"\x01\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@ \x01A\x84\x89\xc0\x80\x00A\x01\x10\xa7\x80\x80\x80\x00B\xff\xff\xff\xff\x0fV\r\x00 \x02(\x02\x08 \x02(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00 \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00 \x02A\x10j \x02)\x03\x18\x10\xa9\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x01 \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0c\x02\x0b \x00B\x017\x03\x00\x0c\x01\x0b \x00B\x017\x03\x00\x0b \x02A j$\x80\x80\x80\x80\x00\x0b\x9e\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x00 \x01(\x02\x00\x1aA\x00!\x02A\x00-\x00\xfc\x89\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\xcb\x00R\r\x00 \x011\x00\x08B\xcd\x00Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bA\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x88\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a \x01A\x89\x80\x80\x80\x006\x02\x08 \x01(\x02\x08\x1a\x02@ \x00B\xff\x01\x83B\xcc\x00Q\r\x00\x00\x0bB\x02\x0bg\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xe2\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x08B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x12\x00A\x00-\x00\xb8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\x10\x0br\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xc4\x81\xc0\x80\x00\x1a\x02@ \x00B\x02Q\r\x00 \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xf8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bI\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xb4\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b@\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bB\x83\x80\x80\x80\xf0\x00\x10\xa2\x80\x80\x80\x00\x00\x0b\x8a\x02\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03A\x00-\x00\xa6\x82\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x02@\x03@ \x03A\x10F\r\x01 \x02A\x08j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x84\xc0\x80\x00A\x02 \x02A\x08jA\x02\x10\xab\x80\x80\x80\x00 \x021\x00\x08B\x04R\r\x00 \x02B\x027\x03\x18 \x02)\x03\x10\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x02A\x18jA\x01\x10\xab\x80\x80\x80\x00\x02@ \x02)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\x07F\r\x00 \x03A\xc1\x00G\r\x01 \x00\x10\x82\x80\x80\x80\x00\x1a\x0bA\x00-\x00\xf0\x80\xc0\x80\x00\x1a \x01B\xff\x01\x83B\x04R\r\x00 \x01B \x88\xa7A}jA}K\r\x01\x0b\x00\x0b \x02A j$\x80\x80\x80\x80\x00B\x02\x0b\x90\x04\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A0k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x01A\x81\x80\x80\x80\x006\x02 \x01(\x02 \x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x18 \x01 \x007\x03\x10 \x01 \x02B \x88>\x02\x1c \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03(\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\x98\x85\xc0\x80\x00A\x02\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x03\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\xcb\x00Q\r\x01\x0c\x02\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\x04R\r\x01\x0b \x01A0j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bZ\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x94\x84\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x08A\xf8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x00A\xf8\x85\xc0\x80\x00A\x01\x10\xb8\x80\x80\x80\x00\x02@ \x00(\x02\x00A\x01G\r\x00\x00\x0b \x00)\x03\x08!\x01 \x00B\x84\x80\x80\x80\x107\x03\x08 \x00 \x017\x03\x00 \x00\x10\xb9\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0b\xdb\x01\x02\x01~\x04\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03 \x02!\x04 \x01!\x05\x03@\x02@ \x04\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x06\x02@ \x05-\x00\x00\"\x07A\xdf\x00F\r\x00\x02@\x02@ \x07APjA\xff\x01qA\nI\r\x00 \x07A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x07A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x07AEj!\x06\x0c\x02\x0b \x07ARj!\x06\x0c\x01\x0b \x07AKj!\x06\x0b \x03B\x06\x86 \x06\xadB\xff\x01\x83\x84!\x03 \x04A\x7fj!\x04 \x05A\x01j!\x05\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x87\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x17\x00 \x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x84\x80\x80\x80\x00\x0b\xc4\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\x9a\x81\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00\x02@\x03@ \x02A\x10F\r\x01 \x01A\x08j \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x83\x80\x80\x80\x00\x1a \x01B\x027\x03\x18 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x18jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\x04R\r\x00 \x011\x00\x10B\x04Q\r\x01\x0b\x00\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xa4\x83\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x18A\xa8\x84\xc0\x80\x00A\x01 \x00A\x18jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x10 \x00 \x017\x03\x08 \x00A\x08j\x10\xb9\x80\x80\x80\x00!\x01 \x00A j$\x80\x80\x80\x80\x00 \x01\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8a\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8b\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x8d\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\xc0\x83\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\x04R\r\x00 \x01)\x03\x08B\xfe\x01\x83P\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x03\x00\x00\x0b\t\x00\x10\xbf\x80\x80\x80\x00\x00\x0b\x0b\xaa\n\x01\x00A\x80\x80\xc0\x00\x0b\xa0\nSpEcV1\x08\xdeZ3[\x9d$\xdaSpEcV1\xbb\x90\xa2x\x83\x81k\"SpEcV1[\x06L\x8cz\xee\x02\x1fSpEcV1v1\x0eP\xa9C\xc7*SpEcV1\x8a\xe5=\x1a\xf0\x17R!SpEcV11\xf9t\"\x98\xdfi\xdcSpEcV1\x97-l\xe7_x1\x18SpEcV15\xf3\xd0\x07e\x80\x0e\xd4SpEcV1\xe5\xdaj\x10\x14HE\x1eSpEcV1vU\xa32=\x17d\x95SpEcV1\x89\x03\xee?E\xf2p5SpEcV1#\xc3\xe8\xe8\xcf\xc4$SSpEcV1/u\xfac0C(\x1fhSpEcV1\x88\x99\xe9\xe74\xab$eSpEcV1\xdeU7\xf7\xd73\xb5\x15SpEcV10\xeb\xf0Q\xb2i\xb3\xa5SpEcV1[X\xfa\x18\xb1\x91x\x12SpEcV1\x8e\xb1\x07\xfed\xf4+PSpEcV1\xd5\xf2\xe2\x83\x8c\xfeI\xa4SpEcV1\xfa\x9f0\x00\xa0\xbaseSpEcV1\xb1@\x99nm\x99\x8cJSpEcV14/\x98E\x87\x1eK\xacSpEcV1\xb2\x96M\xce\xaec\xaeFSpEcV1\xc5\xb5\xa0\xe3\x82\xd5\xc2CSpEcV1)An=\x13\xf6W\\SpEcV1\x1e\'N>\x0f0\xb4\xf7SpEcV1\xda\xc0\x9c\xab\x01\xbc\xfc\x1cSpEcV1\xad5\xeb\x93\xd5\xb0\xc3\x10SpEcV1\xa6zl\n>\x14\x95\xbdSpEcV1Xf\xf1s\xa7HE\xe6SpEcV10\xbfE.\xc2\xa5\xb8\x1dSpEcV1\xc8\x8b\x05\xb0\x8drepSpEcV1\xed]\x0eg\xfb\xae\x02VSpEcV1\xb2\xab\x81\x84\n\x0f\x95VSpEcV1\xd2L\xf6u\xd2h\x99\xe1SpEcV1?xz\xe4G\xd0\x83\xd9val\x00\x00\x00\"\x02\x10\x00\x03\x00\x00\x00StellarAssetAccount\x00\x80\x04\x10\x00\x04\x00\x00\x000\x02\x10\x00\x0c\x00\x00\x00<\x02\x10\x00\x07\x00\x00\x00anested\x00\\\x02\x10\x00\x01\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00datat\x02\x10\x00\x04\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\x80\x02\x10\x00\x0c\x00\x00\x00\x8c\x02\x10\x00\t\x00\x00\x00ContractCreateContractHostFnCreateContractWithCtorHostFn\xa8\x02\x10\x00\x08\x00\x00\x00\xb0\x02\x10\x00\x14\x00\x00\x00\xc4\x02\x10\x00\x1c\x00\x00\x00A\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00xy\x00\x00\x04\x03\x10\x00\x01\x00\x00\x00\x05\x03\x10\x00\x01\x00\x00\x00inner\x00\x00\x00\x18\x03\x10\x00\x05\x00\x00\x00transfercoordsamount6\x03\x10\x00\x06\x00\x00\x00used_event_simplepayloadU\x03\x10\x00\x07\x00\x00\x00used_event_with_refsused_event_with_data_typeused_event_with_topic_typeused_event_with_nested_dataused_event_with_nested_topicSpEcV1hwB\x0cv\x90\xa1_SpEcV1\xfe\x08\x1f\xe4M\x06t\xa0SpEcV1\x80\xb3\xa8\x94\xfc\"siSpEcV1\x90\xc2Z\xf3\xebO\xa9\xb6SpEcV1\xb17b\x11\x07\xb1\xe5\xf5SpEcV1QI\x9d\xb1v\xc3\xabbSpEcV1\xcd\xb2E{\xf6l\xd0eSpEcV1\x81C\xc9\x0b\xa9\x96\x0b\x06argscontractfn_name\x00\x00\x00R\x04\x10\x00\x04\x00\x00\x00V\x04\x10\x00\x08\x00\x00\x00^\x04\x10\x00\x07\x00\x00\x00Wasm\x80\x04\x10\x00\x04\x00\x00\x00contextsub_invocations\x00\x00\x8c\x04\x10\x00\x07\x00\x00\x00\x93\x04\x10\x00\x0f\x00\x00\x00executablesalt\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00constructor_args\xd4\x04\x10\x00\x10\x00\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00SpEcV1\x1dY\xce\\\xd0\x9e\x18\xe3f1f2\x00\x00\n\x05\x10\x00\x02\x00\x00\x00\x0c\x05\x10\x00\x02\x00\x00\x00\x00\x87|\x0econtractspecv0\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::Context\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::wasm_imported::Executable\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleB\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleC\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_map\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01m\x00\x00\x00\x00\x00\x03\xec\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_vec\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UnusedEnum\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02K1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02K2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_param\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02ie\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_tuple\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01t\x00\x00\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bUnusedEvent\x00\x00\x00\x00\x01\x00\x00\x00\x0cunused_event\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UnusedStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_option\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01o\x00\x00\x00\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_result\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x07\xd0\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_return\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UnusedIntEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02U1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02U2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08NotFound\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07Invalid\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cwith_non_pub\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UnusedPubError\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Nope\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Fail\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0epublish_simple\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ewith_recursion\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01r\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedEventSimple\x00\x00\x00\x00\x01\x00\x00\x00\x11used_event_simple\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01X\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01Y\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04Send\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Recv\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_executable\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01e\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_lib_struct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_vec_nested\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UnusedNonPubError\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01y\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10with_panic_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventWithRefs\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x14used_event_with_refs\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UnusedNonPubStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08Transfer\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Mint\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedPanicErrorEnum\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Boom\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_data_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_ref_event\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_assert_error\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02ok\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_invoker_auth\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01i\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_tuple_return\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedAssertErrorEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12publish_topic_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_auth_contexts\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_non_pub_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_wasm_imported\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\tvec_inner\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13publish_nested_data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14publish_nested_topic\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14with_panic_raw_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15UsedEventWithDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x19used_event_with_data_type\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedEventWithTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1aused_event_with_topic_type\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17UsedEventWithNestedData\x00\x00\x00\x00\x01\x00\x00\x00\x1bused_event_with_nested_data\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.test_spec_shaking_v2::UnusedNonContractFnParam\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UsedEventWithNestedTopic\x00\x00\x00\x01\x00\x00\x00\x1cused_event_with_nested_topic\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04info\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::UnusedNonContractFnReturn\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01^\x10`\x02~~\x01~`\x01~\x01~`\x03~~~\x01~`\x04~~~~\x01~`\x00\x00`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x01~\x00`\x02\x7f\x7f\x00`\x03~\x7f\x7f\x01~`\x02\x7f\x7f\x01\x7f`\x02\x7f~\x00`\x05~\x7f\x7f\x7f\x7f\x00`\x03\x7f\x7f\x7f\x00`\x01\x7f\x01~\x02I\x0c\x01x\x011\x00\x00\x01v\x013\x00\x01\x01i\x012\x00\x01\x01v\x01h\x00\x02\x01v\x01g\x00\x00\x01m\x01a\x00\x03\x01b\x01m\x00\x02\x01b\x01j\x00\x00\x01v\x011\x00\x00\x01b\x018\x00\x01\x01x\x015\x00\x01\x01m\x019\x00\x02\x0365\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x05\x06\x00\x07\x05\x05\x05\x05\x05\x05\x01\x08\x01\x05\x01\t\n\x0b\x0c\x01\r\x0c\x01\x01\x01\x05\x01\x01\x01\x00\x01\x05\x05\x0e\x0f\x01\x05\x01\x01\x01\x04\x04\x04\x05\x01p\x01\x0c\x0c\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xd2\x88\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x7f\x00A\xa0\x8a\xc0\x00\x0b\x07\x86\x04\x1f\x06memory\x02\x00\x11publish_data_type\x00\x17\x13publish_nested_data\x00\x1b\x14publish_nested_topic\x00\x1c\x11publish_ref_event\x00\x1e\x0epublish_simple\x00\x1f\x12publish_topic_type\x00 \x11with_assert_error\x00!\x12with_auth_contexts\x00#\nwith_error\x00$\x0fwith_executable\x00%\x11with_invoker_auth\x00*\x0fwith_lib_struct\x00-\x08with_map\x00.\x0cwith_non_pub\x00/\x12with_non_pub_error\x000\x0bwith_option\x001\x10with_panic_error\x002\x14with_panic_raw_error\x003\nwith_param\x004\x0ewith_recursion\x005\x0bwith_result\x006\x0bwith_return\x007\nwith_tuple\x00:\x11with_tuple_return\x00;\x08with_vec\x00<\x0fwith_vec_nested\x00=\x12with_wasm_imported\x00>\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\t\x11\x01\x00A\x01\x0b\x0b\x0f\x11\x13\x12\x0e\r\x14\x15\x16\x0c\x10\n\xac05\x0c\x00A\x00-\x00\x9c\x80\xc0\x80\x00\x1a\x0b\x16\x00A\x00-\x00\xfe\x80\xc0\x80\x00\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x8c\x81\xc0\x80\x00\x1a\x0bJ\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x81\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a\x0b6\x01\x01\x7f#\x80\x80\x80\x80\x00!\x00A\x00-\x00\xec\x82\xc0\x80\x00\x1a \x00A\x10k\"\x00A\x82\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xfa\x82\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xb2\x83\xc0\x80\x00\x1a\x0b\x86\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x00A\x84\x80\x80\x80\x006\x02\x04 \x00(\x02\x04\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x0b\x02\x00\x0bk\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00A\x83\x80\x80\x80\x006\x02\x0c \x00(\x02\x0c\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x00A\x83\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xa8\x88\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\xf8\x83\xc0\x80\x00\x1a\x0b\x0c\x00A\x00-\x00\x86\x84\xc0\x80\x00\x1a\x0b\xae\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\xb0\x86\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xa8\x81\xc0\x80\x00\x1aA\x00-\x00\x88\x83\xc0\x80\x00\x1aA\xf8\x86\xc0\x80\x00A\x19\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x18 \x00B\x84\x80\x80\x80\x107\x03\x10 \x00A\x88\x86\xc0\x80\x00A\x02 \x00A\x10jA\x02\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A j$\x80\x80\x80\x80\x00B\x02\x0bE\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00 \x01\x10\xb8\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01G\r\x00\x00\x0b \x02)\x03\x08!\x03 \x02A\x10j$\x80\x80\x80\x80\x00 \x03\x0b\x92\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00A\x00!\x03\x03~\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\x10\xb9\x80\x80\x80\x00!\x01 \x02A j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x8b\x80\x80\x80\x00\x0b\xc5\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xdd\x84\xc0\x80\x00A\x06\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xfc\x81\xc0\x80\x00\x1aA\x00-\x00\x8a\x82\xc0\x80\x00\x1aA\x00-\x00\xce\x83\xc0\x80\x00\x1aA\xab\x87\xc0\x80\x00A\x1b\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\xbd\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xd0\x82\xc0\x80\x00\x1aA\x00-\x00\xde\x82\xc0\x80\x00\x1aA\x00-\x00\xdc\x83\xc0\x80\x00\x1aA\xc6\x87\xc0\x80\x00A\x1c\x10\x98\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x01A\xa0\x86\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x00\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x06\x00B\x8b\xc8\x01\x0b\xc7\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00 \x00A\x85\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1a \x00A\x86\x80\x80\x80\x006\x02\x08 \x00(\x02\x08\x1aA\x00-\x00\xb6\x81\xc0\x80\x00\x1aA\xe4\x86\xc0\x80\x00A\x14\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xb0\x0c7\x03\x08 \x00A\xa8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x007\x03\x00 \x00A\xfc\x85\xc0\x80\x00A\x01 \x00A\x01\x10\x9a\x80\x80\x80\x007\x03\x08 \x01A\xdc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x7f\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xa8\x86\xc0\x80\x00A\x08\x10\x98\x80\x80\x80\x00!\x01A\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\xc4\x86\xc0\x80\x00A\x11\x10\x98\x80\x80\x80\x00 \x01\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b}\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x98\x82\xc0\x80\x00\x1aA\x00-\x00\x96\x83\xc0\x80\x00\x1aA\x91\x87\xc0\x80\x00A\x1a\x10\x98\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x99\x80\x80\x80\x00!\x01 \x00\x10\x9d\x80\x80\x80\x007\x03\x08 \x01A\xbc\x86\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0bJ\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01qE\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xc2\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b\x0b\x00 \x00\x10\x8a\x80\x80\x80\x00\x1a\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x87\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x13\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\xa0\x05\x0b\xc0\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xb6\x88\xc0\x80\x00\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x08 \x01 \x007\x03\x00 \x01 \x02B \x88>\x02\x0c \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@\x02@ \x00A\xc4\x84\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x01\x02\x00\x04\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x03\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x10j \x01\x10\xa6\x80\x80\x80\x00 \x01)\x03\x10\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01A\x10j \x01)\x03\x18\x10\xa9\x80\x80\x80\x00 \x01(\x02\x10A\x01G\r\x01\x0c\x02\x0b \x01(\x02\x08 \x01(\x02\x0c\x10\xa8\x80\x80\x80\x00\r\x01\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bJ\x02\x01~\x01\x7fB\x02!\x02\x02@ \x01(\x02\x08\"\x03 \x01(\x02\x0cO\r\x00 \x00 \x01)\x03\x00 \x03\xadB \x86B\x04\x84\x10\x88\x80\x80\x80\x007\x03\x08 \x01 \x03A\x01j6\x02\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\x1c\x00 \x00 \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x86\x80\x80\x80\x00\x0b\x19\x00\x02@ \x01 \x00I\r\x00 \x01 \x00k\x0f\x0b\x10\xc0\x80\x80\x80\x00\x00\x0bB\x01\x01~B\x01!\x02\x02@ \x01B\xff\x01\x83B\xc8\x00R\r\x00 \x01\x10\x89\x80\x80\x80\x00B\x80\x80\x80\x80p\x83B\x80\x80\x80\x80\x80\x04R\r\x00 \x00 \x017\x03\x08B\x00!\x02\x0b \x00 \x027\x03\x00\x0b\xd3\x07\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\xc0\x00k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xc4\x88\xc0\x80\x00\x1a \x01A\x84\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xf0\x87\xc0\x80\x00\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x8c\x88\xc0\x80\x00\x1a \x01A\x83\x80\x80\x80\x006\x02\x18 \x01(\x02\x18\x1aA\x00-\x00\xe2\x87\xc0\x80\x00\x1aA\x00-\x00\x9a\x88\xc0\x80\x00\x1aA\x00-\x00\xfe\x87\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x10 \x01 \x007\x03\x08 \x01 \x02B \x88>\x02\x14 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03 \"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\xe0\x85\xc0\x80\x00A\x03\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x03\x00\x01\x02\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01)\x030!\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xe8\x88\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x02 \x011\x00 B\xcd\x00R\r\x02\x02@ \x01-\x00(\"\x03A\x0eF\r\x00 \x03A\xca\x00G\r\x03\x0b \x011\x008B\xcb\x00R\r\x02\x0c\x03\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x01A0j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xc4\x89\xc0\x80\x00A\x02 \x01A0jA\x02\x10\xab\x80\x80\x80\x00 \x01A\x18j \x01)\x030\x10\xac\x80\x80\x80\x00 \x01(\x02\x18\r\x01 \x01A\x18j \x01)\x038\x10\xa9\x80\x80\x80\x00 \x01(\x02\x18A\x01G\r\x02\x0c\x01\x0b \x01(\x02\x10 \x01(\x02\x14\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x01A\x18j \x01A\x08j\x10\xa6\x80\x80\x80\x00 \x01)\x03\x18\"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00 \x01)\x03 !\x00A\x00!\x03\x02@\x03@ \x03A\x18F\r\x01 \x01A\x18j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x89\xc0\x80\x00A\x03 \x01A\x18jA\x03\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\xcb\x00R\r\x00 \x01A0j \x01)\x03 \x10\xac\x80\x80\x80\x00 \x01(\x020\r\x00 \x01A0j \x01)\x03(\x10\xa9\x80\x80\x80\x00 \x01(\x020A\x01G\r\x01\x0b\x00\x0b \x01A\xc0\x00j$\x80\x80\x80\x80\x00B\x02\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x85\x80\x80\x80\x00\x1a\x0b\xb3\x02\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@\x02@ \x01B\xff\x01\x83B\xcb\x00Q\r\x00 \x00B\x017\x03\x00\x0c\x01\x0b \x01\x10\x81\x80\x80\x80\x00!\x03 \x02A\x006\x02\x08 \x02 \x017\x03\x00 \x02 \x03B \x88>\x02\x0c \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00\x02@ \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00\x02@ \x02)\x03\x18\"\x01\xa7A\xff\x01q\"\x04A\xca\x00F\r\x00 \x04A\x0eG\r\x01\x0b\x02@ \x01A\x84\x89\xc0\x80\x00A\x01\x10\xa7\x80\x80\x80\x00B\xff\xff\xff\xff\x0fV\r\x00 \x02(\x02\x08 \x02(\x02\x0c\x10\xa8\x80\x80\x80\x00A\x01K\r\x00 \x02A\x10j \x02\x10\xa6\x80\x80\x80\x00 \x02)\x03\x10\"\x01B\x02Q\r\x00 \x01\xa7A\x01q\r\x00 \x02A\x10j \x02)\x03\x18\x10\xa9\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x01 \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0c\x02\x0b \x00B\x017\x03\x00\x0c\x01\x0b \x00B\x017\x03\x00\x0b \x02A j$\x80\x80\x80\x80\x00\x0b\x9e\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00 \x01A\x83\x80\x80\x80\x006\x02\x00 \x01(\x02\x00\x1aA\x00!\x02A\x00-\x00\xfc\x89\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\xcb\x00R\r\x00 \x011\x00\x08B\xcd\x00Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bA\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x88\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a \x01A\x89\x80\x80\x80\x006\x02\x08 \x01(\x02\x08\x1a\x02@ \x00B\xff\x01\x83B\xcc\x00Q\r\x00\x00\x0bB\x02\x0bg\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xe2\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x08B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x12\x00A\x00-\x00\xb8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\x10\x0br\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xc4\x81\xc0\x80\x00\x1a\x02@ \x00B\x02Q\r\x00 \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xf8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0bI\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bA\x00-\x00\xb4\x82\xc0\x80\x00\x1aB\x83\x80\x80\x80\x10\x10\xa2\x80\x80\x80\x00\x00\x0b@\x01\x01\x7f\x02@\x02@A\x01A\x02A\x00 \x00\xa7A\xff\x01q\"\x01\x1b \x01A\x01F\x1b\"\x01A\x02F\r\x00 \x01A\x01q\r\x01B\x02\x0f\x0b\x00\x0bB\x83\x80\x80\x80\xf0\x00\x10\xa2\x80\x80\x80\x00\x00\x0b\x8a\x02\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03A\x00-\x00\xa6\x82\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x02@\x03@ \x03A\x10F\r\x01 \x02A\x08j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xe4\x84\xc0\x80\x00A\x02 \x02A\x08jA\x02\x10\xab\x80\x80\x80\x00 \x021\x00\x08B\x04R\r\x00 \x02B\x027\x03\x18 \x02)\x03\x10\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x02A\x18jA\x01\x10\xab\x80\x80\x80\x00\x02@ \x02)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\x07F\r\x00 \x03A\xc1\x00G\r\x01 \x00\x10\x82\x80\x80\x80\x00\x1a\x0bA\x00-\x00\xf0\x80\xc0\x80\x00\x1a \x01B\xff\x01\x83B\x04R\r\x00 \x01B \x88\xa7A}jA}K\r\x01\x0b\x00\x0b \x02A j$\x80\x80\x80\x80\x00B\x02\x0b\x90\x04\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A0k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xea\x83\xc0\x80\x00\x1a \x01A\x81\x80\x80\x80\x006\x02 \x01(\x02 \x1aA\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xee\x81\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\xab\x80\x80\x80\x00 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcb\x00R\r\x00 \x00\x10\x81\x80\x80\x80\x00!\x02 \x01A\x006\x02\x18 \x01 \x007\x03\x10 \x01 \x02B \x88>\x02\x1c \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x00 \x00\xa7A\x01q\r\x00\x02@ \x01)\x03(\"\x00\xa7A\xff\x01q\"\x03A\xca\x00F\r\x00 \x03A\x0eG\r\x01\x0b\x02@\x02@\x02@ \x00A\x98\x85\xc0\x80\x00A\x02\x10\xa7\x80\x80\x80\x00B \x88\xa7\x0e\x02\x01\x00\x03\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x02 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x02 \x00\xa7A\x01q\r\x02 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x02 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\xcb\x00Q\r\x01\x0c\x02\x0b \x01(\x02\x18 \x01(\x02\x1c\x10\xa8\x80\x80\x80\x00A\x01K\r\x01 \x01A j \x01A\x10j\x10\xa6\x80\x80\x80\x00 \x01)\x03 \"\x00B\x02Q\r\x01 \x00\xa7A\x01q\r\x01 \x01)\x03(!\x00 \x01B\x027\x03 \x00B\xff\x01\x83B\xcc\x00R\r\x01 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00 B\x04R\r\x01\x0b \x01A0j$\x80\x80\x80\x80\x00B\x02\x0f\x0b\x00\x0bZ\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x94\x84\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x08A\xf8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x00A\xf8\x85\xc0\x80\x00A\x01\x10\xb8\x80\x80\x80\x00\x02@ \x00(\x02\x00A\x01G\r\x00\x00\x0b \x00)\x03\x08!\x01 \x00B\x84\x80\x80\x80\x107\x03\x08 \x00 \x017\x03\x00 \x00\x10\xb9\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0b\xdb\x01\x02\x01~\x04\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03 \x02!\x04 \x01!\x05\x03@\x02@ \x04\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x06\x02@ \x05-\x00\x00\"\x07A\xdf\x00F\r\x00\x02@\x02@ \x07APjA\xff\x01qA\nI\r\x00 \x07A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x07A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x07AEj!\x06\x0c\x02\x0b \x07ARj!\x06\x0c\x01\x0b \x07AKj!\x06\x0b \x03B\x06\x86 \x06\xadB\xff\x01\x83\x84!\x03 \x04A\x7fj!\x04 \x05A\x01j!\x05\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x87\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x17\x00 \x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x84\x80\x80\x80\x00\x0b\xc4\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\x9a\x81\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00\x02@\x03@ \x02A\x10F\r\x01 \x01A\x08j \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x83\x80\x80\x80\x00\x1a \x01B\x027\x03\x18 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x84\xc0\x80\x00A\x01 \x01A\x18jA\x01\x10\xab\x80\x80\x80\x00 \x011\x00\x18B\x04R\r\x00 \x011\x00\x10B\x04Q\r\x01\x0b\x00\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xa4\x83\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x18A\xa8\x84\xc0\x80\x00A\x01 \x00A\x18jA\x01\x10\x9a\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x10 \x00 \x017\x03\x08 \x00A\x08j\x10\xb9\x80\x80\x80\x00!\x01 \x00A j$\x80\x80\x80\x80\x00 \x01\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8a\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b0\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01A\x8b\x80\x80\x80\x006\x02\x0c \x01(\x02\x0c\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x8d\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\xc0\x83\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x90\x8a\xc0\x80\x00A\x02 \x01A\x02\x10\xab\x80\x80\x80\x00 \x011\x00\x00B\x04R\r\x00 \x01)\x03\x08B\xfe\x01\x83P\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x03\x00\x00\x0b\t\x00\x10\xbf\x80\x80\x80\x00\x00\x0b\x0b\xaa\n\x01\x00A\x80\x80\xc0\x00\x0b\xa0\nSpEcV1\x08\xdeZ3[\x9d$\xdaSpEcV1\xbb\x90\xa2x\x83\x81k\"SpEcV1[\x06L\x8cz\xee\x02\x1fSpEcV1\xc8#\x9d\xb4S\xa8.\xafSpEcV1\x8a\xe5=\x1a\xf0\x17R!SpEcV11\xf9t\"\x98\xdfi\xdcSpEcV1\x97-l\xe7_x1\x18SpEcV15\xf3\xd0\x07e\x80\x0e\xd4SpEcV1\xe5\xdaj\x10\x14HE\x1eSpEcV1vU\xa32=\x17d\x95SpEcV1\x89\x03\xee?E\xf2p5SpEcV1#\xc3\xe8\xe8\xcf\xc4$SSpEcV1/u\xfac0C(\x1fhSpEcV1\x88\x99\xe9\xe74\xab$eSpEcV1\xdeU7\xf7\xd73\xb5\x15SpEcV10\xeb\xf0Q\xb2i\xb3\xa5SpEcV1[X\xfa\x18\xb1\x91x\x12SpEcV1\x8e\xb1\x07\xfed\xf4+PSpEcV1\xd5\xf2\xe2\x83\x8c\xfeI\xa4SpEcV1\xfa\x9f0\x00\xa0\xbaseSpEcV1\xb1@\x99nm\x99\x8cJSpEcV14/\x98E\x87\x1eK\xacSpEcV1\xb2\x96M\xce\xaec\xaeFSpEcV1\xc5\xb5\xa0\xe3\x82\xd5\xc2CSpEcV1)An=\x13\xf6W\\SpEcV1\x0e\x1f>\xdeiM\xf3ZSpEcV1?\x01B1_\x1f>\x8fSpEcV1\xad5\xeb\x93\xd5\xb0\xc3\x10SpEcV1\xa6zl\n>\x14\x95\xbdSpEcV1Xf\xf1s\xa7HE\xe6SpEcV1\"j{\xe23\xf9WzSpEcV1z\xben\xeb\x97\x13\x94\xa6SpEcV1\xed]\x0eg\xfb\xae\x02VSpEcV1\xb2\xab\x81\x84\n\x0f\x95VSpEcV1\xd2L\xf6u\xd2h\x99\xe1SpEcV1?xz\xe4G\xd0\x83\xd9val\x00\x00\x00\"\x02\x10\x00\x03\x00\x00\x00StellarAssetAccount\x00\x80\x04\x10\x00\x04\x00\x00\x000\x02\x10\x00\x0c\x00\x00\x00<\x02\x10\x00\x07\x00\x00\x00anested\x00\\\x02\x10\x00\x01\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00datat\x02\x10\x00\x04\x00\x00\x00NotRecursiveRecursive\x00\x00\x00\x80\x02\x10\x00\x0c\x00\x00\x00\x8c\x02\x10\x00\t\x00\x00\x00ContractCreateContractHostFnCreateContractWithCtorHostFn\xa8\x02\x10\x00\x08\x00\x00\x00\xb0\x02\x10\x00\x14\x00\x00\x00\xc4\x02\x10\x00\x1c\x00\x00\x00A\x00\x00\x00]\x02\x10\x00\x06\x00\x00\x00xy\x00\x00\x04\x03\x10\x00\x01\x00\x00\x00\x05\x03\x10\x00\x01\x00\x00\x00inner\x00\x00\x00\x18\x03\x10\x00\x05\x00\x00\x00transfercoordsamount6\x03\x10\x00\x06\x00\x00\x00used_event_simplepayloadU\x03\x10\x00\x07\x00\x00\x00used_event_with_refsused_event_with_data_typeused_event_with_topic_typeused_event_with_nested_dataused_event_with_nested_topicSpEcV1hwB\x0cv\x90\xa1_SpEcV1\xfe\x08\x1f\xe4M\x06t\xa0SpEcV1\x80\xb3\xa8\x94\xfc\"siSpEcV1\x90\xc2Z\xf3\xebO\xa9\xb6SpEcV1\xb17b\x11\x07\xb1\xe5\xf5SpEcV1QI\x9d\xb1v\xc3\xabbSpEcV1\xcd\xb2E{\xf6l\xd0eSpEcV1\x81C\xc9\x0b\xa9\x96\x0b\x06argscontractfn_name\x00\x00\x00R\x04\x10\x00\x04\x00\x00\x00V\x04\x10\x00\x08\x00\x00\x00^\x04\x10\x00\x07\x00\x00\x00Wasm\x80\x04\x10\x00\x04\x00\x00\x00contextsub_invocations\x00\x00\x8c\x04\x10\x00\x07\x00\x00\x00\x93\x04\x10\x00\x0f\x00\x00\x00executablesalt\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00constructor_args\xd4\x04\x10\x00\x10\x00\x00\x00\xb4\x04\x10\x00\n\x00\x00\x00\xbe\x04\x10\x00\x04\x00\x00\x00SpEcV1\x1dY\xce\\\xd0\x9e\x18\xe3f1f2\x00\x00\n\x05\x10\x00\x02\x00\x00\x00\x0c\x05\x10\x00\x02\x00\x00\x00\x00\xf3~\x0econtractspecv0\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::wasm_imported::EnumC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::ErrorC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::EventA\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::EventB\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::EventC\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::wasm_imported::EventD\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::Context\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::wasm_imported::EnumIntC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::wasm_imported::Executable\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleA\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleB\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x001test_spec_shaking_v2::wasm_imported::StructTupleC\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x004test_spec_shaking_v2::wasm_imported::ContractContext\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00=test_spec_shaking_v2::wasm_imported::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00:test_spec_shaking_v2::wasm_imported::SubContractInvocation\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@test_spec_shaking_v2::wasm_imported::CreateContractHostFnContext\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Otest_spec_shaking_v2::wasm_imported::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x007test_spec_shaking_v2::wasm_imported::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_map\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01m\x00\x00\x00\x00\x00\x03\xec\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x07\xd0\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_vec\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UnusedEnum\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapKey\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02K1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02K2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 test_spec_shaking_v2::UsedMapVal\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_param\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02ie\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_tuple\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01t\x00\x00\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!test_spec_shaking_v2::UnusedEvent\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0cunused_event\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UnusedStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_option\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01o\x00\x00\x00\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_result\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x07\xd0\x00\x00\x00\"test_spec_shaking_v2::UsedResultOk\x00\x00\x00\x00\x07\xd0\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_return\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UnusedIntEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02U1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02U2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00#test_spec_shaking_v2::UsedErrorEnum\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08NotFound\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07Invalid\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cwith_non_pub\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UnusedPubError\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Nope\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedReturnEnum\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$test_spec_shaking_v2::UsedVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Fail\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedParamStruct\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0epublish_simple\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0ewith_recursion\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01r\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00%test_spec_shaking_v2::UsedEventSimple\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x11used_event_simple\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedNonPubStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedParamIntEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01X\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01Y\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefDataInner\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04Send\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Recv\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&test_spec_shaking_v2::UsedTupleElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_executable\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01e\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_lib_struct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_vec_nested\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UnusedNonPubError\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01y\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedOptionElement\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0cNotRecursive\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1etest_spec_shaking_v2::UsedLeaf\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\tRecursive\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveLeaf\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveRoot\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedRecursiveNode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10with_panic_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\'test_spec_shaking_v2::UsedEventWithRefs\x00\x00\x00\x00\x01\x00\x00\x00\x14used_event_with_refs\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00&test_spec_shaking_v2::UsedRefTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedRefDataType\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UnusedNonPubStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataInner\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08Transfer\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Mint\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedNestedInStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(test_spec_shaking_v2::UsedPanicErrorEnum\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Boom\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_data_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_ref_event\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_assert_error\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02ok\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_invoker_auth\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01i\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_tuple_return\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedAssertErrorEnum\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12publish_topic_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_auth_contexts\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01c\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_non_pub_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00%test_spec_shaking_v2::UsedNonPubError\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_wasm_imported\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::wasm_imported::StructA\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*test_spec_shaking_v2::UsedVecElementNested\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedVecInnerElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\tvec_inner\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13publish_nested_data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14publish_nested_topic\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14with_panic_raw_error\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04fail\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00+test_spec_shaking_v2::UsedEventWithDataType\x00\x00\x00\x00\x01\x00\x00\x00\x19used_event_with_data_type\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\'test_spec_shaking_v2::UsedEventDataType\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedTupleReturnElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedVecInnerVecElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,test_spec_shaking_v2::UsedEventWithTopicType\x00\x00\x00\x01\x00\x00\x00\x1aused_event_with_topic_type\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventTopicType\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-test_spec_shaking_v2::UsedEventWithNestedData\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1bused_event_with_nested_data\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00(test_spec_shaking_v2::UsedEventDataOuter\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.test_spec_shaking_v2::UnusedNonContractFnParam\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.test_spec_shaking_v2::UsedEventWithNestedTopic\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1cused_event_with_nested_topic\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04info\x00\x00\x07\xd0\x00\x00\x00)test_spec_shaking_v2::UsedEventTopicOuter\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/test_spec_shaking_v2::UnusedNonContractFnReturn\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventB\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventC\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventD\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; extern crate test; #[rustc_test_marker = "test::test_spec_shaking_v2"] #[doc(hidden)] diff --git a/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs b/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs index 7e9984884..45f14ea58 100644 --- a/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs +++ b/tests-expanded/test_spec_shaking_v2_wasm32v1-none.rs @@ -1819,6 +1819,12 @@ impl ::core::cmp::PartialEq for UsedEventSimple { self.amount == other.amount && self.kind == other.kind } } +impl UsedEventSimple { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventSimple" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_USEDEVENTSIMPLE: [u8; UsedEventSimple::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventSimple::spec_xdr(); @@ -1827,9 +1833,7 @@ impl UsedEventSimple { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventSimple", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventSimple::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_simple"), )]), @@ -2063,6 +2067,12 @@ impl ::core::cmp::PartialEq for UsedEventWithTopicType { self.amount == other.amount && self.kind == other.kind } } +impl UsedEventWithTopicType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithTopicType" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_USEDEVENTWITHTOPICTYPE: [u8; UsedEventWithTopicType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventWithTopicType::spec_xdr(); @@ -2071,9 +2081,7 @@ impl UsedEventWithTopicType { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithTopicType", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithTopicType::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_topic_type"), )]), @@ -2329,6 +2337,12 @@ impl ::core::cmp::PartialEq for UsedEventWithDataType { self.kind == other.kind && self.payload == other.payload } } +impl UsedEventWithDataType { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithDataType" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_USEDEVENTWITHDATATYPE: [u8; UsedEventWithDataType::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventWithDataType::spec_xdr(); @@ -2337,9 +2351,7 @@ impl UsedEventWithDataType { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithDataType", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithDataType::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_data_type"), )]), @@ -2715,6 +2727,12 @@ impl ::core::cmp::PartialEq for UsedEventWithNestedTopic { self.amount == other.amount && self.info == other.info } } +impl UsedEventWithNestedTopic { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithNestedTopic" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_USEDEVENTWITHNESTEDTOPIC: [u8; UsedEventWithNestedTopic::__SPEC_XDR_VIEW.const_xdr_len()] = @@ -2724,9 +2742,7 @@ impl UsedEventWithNestedTopic { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithNestedTopic", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithNestedTopic::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_nested_topic"), )]), @@ -3103,6 +3119,12 @@ impl ::core::cmp::PartialEq for UsedEventWithNestedData { self.kind == other.kind && self.payload == other.payload } } +impl UsedEventWithNestedData { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithNestedData" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_USEDEVENTWITHNESTEDDATA: [u8; UsedEventWithNestedData::__SPEC_XDR_VIEW.const_xdr_len()] = UsedEventWithNestedData::spec_xdr(); @@ -3111,9 +3133,7 @@ impl UsedEventWithNestedData { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithNestedData", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithNestedData::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_nested_data"), )]), @@ -3606,6 +3626,12 @@ impl<'a> ::core::cmp::PartialEq for UsedEventWithRefs<'a> { self.kind == other.kind && self.payload == other.payload } } +impl<'a> UsedEventWithRefs<'a> { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UsedEventWithRefs" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_USEDEVENTWITHREFS: [u8; UsedEventWithRefs::__SPEC_XDR_VIEW .const_xdr_len()] = UsedEventWithRefs::spec_xdr(); @@ -3614,9 +3640,7 @@ impl<'a> UsedEventWithRefs<'a> { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UsedEventWithRefs", - )), + name: soroban_sdk::xdr::StringMView::new_str(UsedEventWithRefs::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"used_event_with_refs"), )]), @@ -5254,7 +5278,7 @@ impl soroban_sdk::TryFromVal for soroban_sdk::Val { } } mod wasm_imported { - pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\x0eJ\x07\xc3\x8bG\x9d\x91SpEcV1\x9a\xac\n*\xd8z\xf1rSpEcV1K\xe6\x8ej\x19\x9en\xbdSpEcV1\x15\xf0Wx\x15\x83\xc0:SpEcV1\x14\xc8R\x91\x9a.T\x17SpEcV1)\xf5 \xed\x8b.\x0fuSpEcV1\xed\xbfE\xe8/\xbf\x90\x8cf1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\xd3)\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventD\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + pub const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01*\x07`\x02~~\x01~`\x03~~~\x01~`\x01~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x02\x7f~\x00\x02%\x06\x01b\x01j\x00\x00\x01x\x011\x00\x00\x01v\x01g\x00\x00\x01m\x019\x00\x01\x01i\x012\x00\x02\x01i\x011\x00\x02\x03\x0c\x0b\x03\x04\x03\x02\x00\x05\x03\x00\x00\x06\x06\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x82\x80\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x7f\x00A\x80\x81\xc0\x00\x0b\x07\x8e\x01\x0b\x06memory\x02\x00\tfn_enum_a\x00\x06\rfn_enum_int_a\x00\x08\nfn_error_a\x00\t\nfn_event_a\x00\n\nfn_event_d\x00\x0c\x0bfn_struct_a\x00\r\x11fn_struct_tuple_a\x00\x0e\x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\x8d\n\x0b\x95\x02\x03\x01\x7f\x01~\x03\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x82\x80\xc0\x80\x00\x1aB\x00!\x01A~!\x02\x03~\x02@\x02@\x02@\x02@\x02@ \x02E\r\x00A\x01!\x03 \x02A\x82\x80\xc0\x80\x00j-\x00\x00\"\x04A\xdf\x00F\r\x04 \x04APjA\xff\x01qA\nI\r\x02 \x04A\xbf\x7fjA\xff\x01qA\x1aI\r\x03\x02@ \x04A\x9f\x7fjA\xff\x01qA\x1aO\r\x00 \x04AEj!\x03\x0c\x05\x0b \x00 \x04\xadB\x08\x86B\x01\x847\x03\x00A\x80\x80\xc0\x80\x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x80\x80\x80\x80\x00!\x01\x0c\x01\x0b \x00 \x01B\x08\x86B\x0e\x84\"\x017\x02\x04\x0b \x00 \x017\x03\x00 \x00A\x01\x10\x87\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x04ARj!\x03\x0c\x01\x0b \x04AKj!\x03\x0b \x01B\x06\x86 \x03\xadB\xff\x01\x83\x84!\x01 \x02A\x01j!\x02\x0c\x00\x0b\x0b\x1a\x00 \x00\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x82\x80\x80\x80\x00\x0b\x12\x00A\x00-\x00\xc8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x800\x0b4\x00\x02@ \x00B\xff\x01\x83B\x04Q\r\x00\x00\x0bA\x00-\x00\x90\x80\xc0\x80\x00\x1aB\x83\x80\x80\x80 \x00B\x84\x80\x80\x80p\x83 \x00B\x80\x80\x80\x80\x10T\x1b\x0b\xe6\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\xcd\x00R\r\x00 \x01B\xff\x01\x83B\xc9\x00R\r\x00A\x00!\x03A\x00-\x00\x9e\x80\xc0\x80\x00\x1a \x02 \x007\x03\x08 \x02B\x8e\xcc\xc1\xfc\xac\xdd\xab\x017\x03\x00\x03@\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10jA\x02\x10\x87\x80\x80\x80\x00!\x00 \x02 \x017\x03\x10 \x00A\xf8\x80\xc0\x80\x00A\x01 \x02A\x10jA\x01\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x02A j$\x80\x80\x80\x80\x00B\x02\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x00\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x83\x80\x80\x80\x00\x0b\x91\x01\x03\x01\x7f\x01~\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xac\x80\xc0\x80\x00\x1a \x00B\x8e\xd2\xc1\xfc\xac\xdd\xab\x017\x03\x00B\x02!\x01A\x01!\x02\x02@\x03@ \x02E\r\x01 \x02A\x7fj!\x02B\x8e\xd2\xc1\xfc\xac\xdd\xab\x01!\x01\x0c\x00\x0b\x0b \x00 \x017\x03\x08 \x00A\x08jA\x01\x10\x87\x80\x80\x80\x00A\x04A\x00 \x00A\x08jA\x00\x10\x8b\x80\x80\x80\x00\x10\x81\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00\x02@ \x00B\xff\x01\x83B\x04R\r\x00A\x01A\x02A\x00 \x01\xa7A\xff\x01q\"\x03\x1b \x03A\x01F\x1b\"\x03A\x02F\r\x00A\x00-\x00\xba\x80\xc0\x80\x00\x1a \x02 \x03\xad7\x03\x08 \x02 \x00B\x84\x80\x80\x80p\x837\x03\x00A\xe8\x80\xc0\x80\x00A\x02 \x02A\x02\x10\x8b\x80\x80\x80\x00!\x00 \x02A\x10j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b\xbc\x01\x01\x01\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02A\x10j \x00\x10\x8f\x80\x80\x80\x00\x02@ \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x8f\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02)\x03\x18!\x01A\x00-\x00\xd6\x80\xc0\x80\x00\x1a \x02A\x10j \x00\x10\x90\x80\x80\x80\x00 \x02(\x02\x10\r\x00 \x02)\x03\x18!\x00 \x02A\x10j \x01\x10\x90\x80\x80\x80\x00 \x02(\x02\x10A\x01F\r\x00 \x02 \x02)\x03\x187\x03\x08 \x02 \x007\x03\x00 \x02A\x02\x10\x87\x80\x80\x80\x00!\x00 \x02A j$\x80\x80\x80\x80\x00 \x00\x0f\x0b\x00\x0b]\x02\x01\x7f\x01~\x02@\x02@ \x01\xa7A\xff\x01q\"\x02A\xc1\x00F\r\x00\x02@ \x02A\x07F\r\x00B\x01!\x03B\x83\x90\x80\x80\x80\x01!\x01\x0c\x02\x0b \x01B\x08\x87!\x01B\x00!\x03\x0c\x01\x0bB\x00!\x03 \x01\x10\x84\x80\x80\x80\x00!\x01\x0b \x00 \x037\x03\x00 \x00 \x017\x03\x08\x0bF\x00\x02@\x02@ \x01B\x80\x80\x80\x80\x80\x80\x80\xc0\x00|B\xff\xff\xff\xff\xff\xff\xff\xff\x00V\r\x00 \x01B\x08\x86B\x07\x84!\x01\x0c\x01\x0b \x01\x10\x85\x80\x80\x80\x00!\x01\x0b \x00B\x007\x03\x00 \x00 \x017\x03\x08\x0b\x0b\x8a\x01\x01\x00A\x80\x80\xc0\x00\x0b\x80\x01V2SpEcV1\x0eJ\x07\xc3\x8bG\x9d\x91SpEcV1\x9a\xac\n*\xd8z\xf1rSpEcV1\xa4\xbaQ6!\xf4\xd2\x87SpEcV1\xa5\x85L\x0b6\x80\x01\'SpEcV1\x14\xc8R\x91\x9a.T\x17SpEcV1)\xf5 \xed\x8b.\x0fuSpEcV1\xed\xbfE\xe8/\xbf\x90\x8cf1f2d\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00f\x00\x10\x00\x02\x00\x00\x00\x00\x93*\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\tfn_enum_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_error_a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05input\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_a\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nfn_event_d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bfn_struct_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rfn_enum_int_a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11fn_struct_tuple_a\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\xe3Context of a single authorized call performed by an address.\n\nCustom account contracts that implement `__check_auth` special function\nreceive a list of `Context` values corresponding to all the calls that\nneed to be authorized.\x00\x00\x00\x00\x00\x00\x00\x00\x1asoroban_sdk::auth::Context\x00\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x14Contract invocation.\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Contract that has a constructor with no arguments is created.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00DContract that has a constructor with 1 or more arguments is created.\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\xbdAuthorization context of a single contract call.\n\nThis struct corresponds to a `require_auth_for_args` call for an address\nfrom `contract` function with `fn_name` name and `args` arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08contract\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07fn_name\x00\x00\x00\x00\x11\x00\x00\x00\x02\x00\x00\x00_Contract executable used for creating a new contract and used in\n`CreateContractHostFnContext`.\x00\x00\x00\x00\x00\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x008Value of contract node in InvokerContractAuthEntry tree.\x00\x00\x00\x00\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x07context\x00\x00\x00\x07\xd0\x00\x00\x00\"soroban_sdk::auth::ContractContext\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fsub_invocations\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x02\x00\x00\x01/A node in the tree of authorizations performed on behalf of the current\ncontract as invoker of the contracts deeper in the call stack.\n\nThis is used as an argument of `authorize_as_current_contract` host function.\n\nThis tree corresponds `require_auth[_for_args]` calls on behalf of the\ncurrent contract.\x00\x00\x00\x00\x00\x00\x00\x00+soroban_sdk::auth::InvokerContractAuthEntry\x00\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x12Invoke a contract.\x00\x00\x00\x00\x00\x08Contract\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00(soroban_sdk::auth::SubContractInvocation\x00\x00\x00\x01\x00\x00\x005Create a contract passing 0 arguments to constructor.\x00\x00\x00\x00\x00\x00\x14CreateContractHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x01\x00\x00\x00=Create a contract passing 0 or more arguments to constructor.\x00\x00\x00\x00\x00\x00\x1cCreateContractWithCtorHostFn\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00vAuthorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\x00\x00\x00\x00\x00\x00\x00\x00\x00.soroban_sdk::auth::CreateContractHostFnContext\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00\xd6Authorization context for `create_contract` host function that creates a\nnew contract on behalf of authorizer address.\nThis is the same as `CreateContractHostFnContext`, but also has\ncontract constructor arguments.\x00\x00\x00\x00\x00\x00\x00\x00\x00=soroban_sdk::auth::CreateContractWithConstructorHostFnContext\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x10constructor_args\x00\x00\x03\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nexecutable\x00\x00\x00\x00\x07\xd0\x00\x00\x00%soroban_sdk::auth::ContractExecutable\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04salt\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 soroban_sdk::address::Executable\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Wasm\x00\x00\x00\x01\x00\x00\x03\xee\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStellarAsset\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07Account\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14test_spec_lib::EnumC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::ErrorC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventB\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventC\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15test_spec_lib::EventD\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_d\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructA\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructB\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16test_spec_lib::StructC\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntA\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntB\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17test_spec_lib::EnumIntC\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1btest_spec_lib::StructTupleC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; pub trait Contract { fn fn_enum_a(env: soroban_sdk::Env) -> EnumA; fn fn_error_a(env: soroban_sdk::Env, input: u32) -> Result; @@ -10275,6 +10299,12 @@ mod wasm_imported { } } } + impl EventA { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EventA" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_EVENTA: [u8; EventA::__SPEC_XDR_VIEW.const_xdr_len()] = EventA::spec_xdr(); @@ -10283,7 +10313,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventA")), + name: soroban_sdk::xdr::StringMView::new_str(EventA::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_a"), )]), @@ -10425,6 +10455,12 @@ mod wasm_imported { } } } + impl EventB { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EventB" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_EVENTB: [u8; EventB::__SPEC_XDR_VIEW.const_xdr_len()] = EventB::spec_xdr(); @@ -10433,7 +10469,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventB")), + name: soroban_sdk::xdr::StringMView::new_str(EventB::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_b"), )]), @@ -10585,6 +10621,12 @@ mod wasm_imported { } } } + impl EventC { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EventC" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_EVENTC: [u8; EventC::__SPEC_XDR_VIEW.const_xdr_len()] = EventC::spec_xdr(); @@ -10593,7 +10635,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventC")), + name: soroban_sdk::xdr::StringMView::new_str(EventC::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_c"), )]), @@ -10712,6 +10754,12 @@ mod wasm_imported { ::core::option::Option::Some(::core::cmp::Ordering::Equal) } } + impl EventD { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::wasm_imported::EventD" + } + } #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_EVENTD: [u8; EventD::__SPEC_XDR_VIEW.const_xdr_len()] = EventD::spec_xdr(); @@ -10720,7 +10768,7 @@ mod wasm_imported { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new(b"EventD")), + name: soroban_sdk::xdr::StringMView::new_str(EventD::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"event_d"), )]), @@ -11230,6 +11278,12 @@ impl ::core::cmp::PartialEq for UnusedEvent { self.data == other.data && self.kind == other.kind } } +impl UnusedEvent { + #[doc(hidden)] + pub const fn spec_type_name() -> &'static str { + "test_spec_shaking_v2::UnusedEvent" + } +} #[link_section = "contractspecv0"] pub static __SPEC_XDR_EVENT_UNUSEDEVENT: [u8; UnusedEvent::__SPEC_XDR_VIEW.const_xdr_len()] = UnusedEvent::spec_xdr(); @@ -11238,9 +11292,7 @@ impl UnusedEvent { soroban_sdk::xdr::ScSpecEntryView::EventV0(soroban_sdk::xdr::ScSpecEventV0View { doc: soroban_sdk::xdr::StringMView::new(b""), lib: soroban_sdk::xdr::StringMView::new(b""), - name: soroban_sdk::xdr::ScSymbolView(soroban_sdk::xdr::StringMView::new( - b"UnusedEvent", - )), + name: soroban_sdk::xdr::StringMView::new_str(UnusedEvent::spec_type_name()), prefix_topics: soroban_sdk::xdr::VecMView::new(&[soroban_sdk::xdr::ScSymbolView( soroban_sdk::xdr::StringMView::new(b"unused_event"), )]),