hotshot_contract_adapter/bindings/
plonkverifier.rs

1///Module containing a contract's types and functions.
2/**
3
4```solidity
5library BN254 {
6    type BaseField is uint256;
7    type ScalarField is uint256;
8    struct G1Point { BaseField x; BaseField y; }
9}
10```*/
11#[allow(
12    non_camel_case_types,
13    non_snake_case,
14    clippy::pub_underscore_fields,
15    clippy::style,
16    clippy::empty_structs_with_brackets
17)]
18pub mod BN254 {
19    use alloy::sol_types as alloy_sol_types;
20
21    use super::*;
22    #[derive(Default, Debug, PartialEq, Eq, Hash)]
23    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
24    #[derive(Clone)]
25    pub struct BaseField(alloy::sol_types::private::primitives::aliases::U256);
26    const _: () = {
27        use alloy::sol_types as alloy_sol_types;
28        #[automatically_derived]
29        impl alloy_sol_types::private::SolTypeValue<BaseField>
30            for alloy::sol_types::private::primitives::aliases::U256
31        {
32            #[inline]
33            fn stv_to_tokens(
34                &self,
35            ) -> <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::Token<'_>
36            {
37                alloy_sol_types::private::SolTypeValue::<
38                    alloy::sol_types::sol_data::Uint<256>,
39                >::stv_to_tokens(self)
40            }
41            #[inline]
42            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
43                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize(self)
44                    .0
45            }
46            #[inline]
47            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
48                <alloy::sol_types::sol_data::Uint<
49                    256,
50                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
51            }
52            #[inline]
53            fn stv_abi_packed_encoded_size(&self) -> usize {
54                <alloy::sol_types::sol_data::Uint<
55                    256,
56                > as alloy_sol_types::SolType>::abi_encoded_size(self)
57            }
58        }
59        #[automatically_derived]
60        impl BaseField {
61            /// The Solidity type name.
62            pub const NAME: &'static str = stringify!(@ name);
63            /// Convert from the underlying value type.
64            #[inline]
65            pub const fn from(value: alloy::sol_types::private::primitives::aliases::U256) -> Self {
66                Self(value)
67            }
68            /// Return the underlying value.
69            #[inline]
70            pub const fn into(self) -> alloy::sol_types::private::primitives::aliases::U256 {
71                self.0
72            }
73            /// Return the single encoding of this value, delegating to the
74            /// underlying type.
75            #[inline]
76            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
77                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
78            }
79            /// Return the packed encoding of this value, delegating to the
80            /// underlying type.
81            #[inline]
82            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
83                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
84            }
85        }
86        #[automatically_derived]
87        impl alloy_sol_types::SolType for BaseField {
88            type RustType = alloy::sol_types::private::primitives::aliases::U256;
89            type Token<'a> =
90                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::Token<'a>;
91            const SOL_NAME: &'static str = Self::NAME;
92            const ENCODED_SIZE: Option<usize> =
93                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::ENCODED_SIZE;
94            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
95                256,
96            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
97            #[inline]
98            fn valid_token(token: &Self::Token<'_>) -> bool {
99                Self::type_check(token).is_ok()
100            }
101            #[inline]
102            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
103                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::type_check(
104                    token,
105                )
106            }
107            #[inline]
108            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
109                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::detokenize(
110                    token,
111                )
112            }
113        }
114        #[automatically_derived]
115        impl alloy_sol_types::EventTopic for BaseField {
116            #[inline]
117            fn topic_preimage_length(rust: &Self::RustType) -> usize {
118                <alloy::sol_types::sol_data::Uint<
119                    256,
120                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
121            }
122            #[inline]
123            fn encode_topic_preimage(
124                rust: &Self::RustType,
125                out: &mut alloy_sol_types::private::Vec<u8>,
126            ) {
127                <alloy::sol_types::sol_data::Uint<
128                    256,
129                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
130            }
131            #[inline]
132            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
133                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic(
134                    rust,
135                )
136            }
137        }
138    };
139    #[derive(Default, Debug, PartialEq, Eq, Hash)]
140    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
141    #[derive(Clone)]
142    pub struct ScalarField(alloy::sol_types::private::primitives::aliases::U256);
143    const _: () = {
144        use alloy::sol_types as alloy_sol_types;
145        #[automatically_derived]
146        impl alloy_sol_types::private::SolTypeValue<ScalarField>
147            for alloy::sol_types::private::primitives::aliases::U256
148        {
149            #[inline]
150            fn stv_to_tokens(
151                &self,
152            ) -> <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::Token<'_>
153            {
154                alloy_sol_types::private::SolTypeValue::<
155                    alloy::sol_types::sol_data::Uint<256>,
156                >::stv_to_tokens(self)
157            }
158            #[inline]
159            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
160                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::tokenize(self)
161                    .0
162            }
163            #[inline]
164            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
165                <alloy::sol_types::sol_data::Uint<
166                    256,
167                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
168            }
169            #[inline]
170            fn stv_abi_packed_encoded_size(&self) -> usize {
171                <alloy::sol_types::sol_data::Uint<
172                    256,
173                > as alloy_sol_types::SolType>::abi_encoded_size(self)
174            }
175        }
176        #[automatically_derived]
177        impl ScalarField {
178            /// The Solidity type name.
179            pub const NAME: &'static str = stringify!(@ name);
180            /// Convert from the underlying value type.
181            #[inline]
182            pub const fn from(value: alloy::sol_types::private::primitives::aliases::U256) -> Self {
183                Self(value)
184            }
185            /// Return the underlying value.
186            #[inline]
187            pub const fn into(self) -> alloy::sol_types::private::primitives::aliases::U256 {
188                self.0
189            }
190            /// Return the single encoding of this value, delegating to the
191            /// underlying type.
192            #[inline]
193            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
194                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
195            }
196            /// Return the packed encoding of this value, delegating to the
197            /// underlying type.
198            #[inline]
199            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
200                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
201            }
202        }
203        #[automatically_derived]
204        impl alloy_sol_types::SolType for ScalarField {
205            type RustType = alloy::sol_types::private::primitives::aliases::U256;
206            type Token<'a> =
207                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::Token<'a>;
208            const SOL_NAME: &'static str = Self::NAME;
209            const ENCODED_SIZE: Option<usize> =
210                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::ENCODED_SIZE;
211            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
212                256,
213            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
214            #[inline]
215            fn valid_token(token: &Self::Token<'_>) -> bool {
216                Self::type_check(token).is_ok()
217            }
218            #[inline]
219            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
220                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::type_check(
221                    token,
222                )
223            }
224            #[inline]
225            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
226                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::SolType>::detokenize(
227                    token,
228                )
229            }
230        }
231        #[automatically_derived]
232        impl alloy_sol_types::EventTopic for ScalarField {
233            #[inline]
234            fn topic_preimage_length(rust: &Self::RustType) -> usize {
235                <alloy::sol_types::sol_data::Uint<
236                    256,
237                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
238            }
239            #[inline]
240            fn encode_topic_preimage(
241                rust: &Self::RustType,
242                out: &mut alloy_sol_types::private::Vec<u8>,
243            ) {
244                <alloy::sol_types::sol_data::Uint<
245                    256,
246                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
247            }
248            #[inline]
249            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
250                <alloy::sol_types::sol_data::Uint<256> as alloy_sol_types::EventTopic>::encode_topic(
251                    rust,
252                )
253            }
254        }
255    };
256    #[derive(Default, Debug, PartialEq, Eq, Hash)]
257    /**```solidity
258    struct G1Point { BaseField x; BaseField y; }
259    ```*/
260    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
261    #[derive(Clone)]
262    pub struct G1Point {
263        #[allow(missing_docs)]
264        pub x: <BaseField as alloy::sol_types::SolType>::RustType,
265        #[allow(missing_docs)]
266        pub y: <BaseField as alloy::sol_types::SolType>::RustType,
267    }
268    #[allow(
269        non_camel_case_types,
270        non_snake_case,
271        clippy::pub_underscore_fields,
272        clippy::style
273    )]
274    const _: () = {
275        use alloy::sol_types as alloy_sol_types;
276        #[doc(hidden)]
277        type UnderlyingSolTuple<'a> = (BaseField, BaseField);
278        #[doc(hidden)]
279        type UnderlyingRustTuple<'a> = (
280            <BaseField as alloy::sol_types::SolType>::RustType,
281            <BaseField as alloy::sol_types::SolType>::RustType,
282        );
283        #[cfg(test)]
284        #[allow(dead_code, unreachable_patterns)]
285        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
286            match _t {
287                alloy_sol_types::private::AssertTypeEq::<
288                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
289                >(_) => {},
290            }
291        }
292        #[automatically_derived]
293        #[doc(hidden)]
294        impl ::core::convert::From<G1Point> for UnderlyingRustTuple<'_> {
295            fn from(value: G1Point) -> Self {
296                (value.x, value.y)
297            }
298        }
299        #[automatically_derived]
300        #[doc(hidden)]
301        impl ::core::convert::From<UnderlyingRustTuple<'_>> for G1Point {
302            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
303                Self {
304                    x: tuple.0,
305                    y: tuple.1,
306                }
307            }
308        }
309        #[automatically_derived]
310        impl alloy_sol_types::SolValue for G1Point {
311            type SolType = Self;
312        }
313        #[automatically_derived]
314        impl alloy_sol_types::private::SolTypeValue<Self> for G1Point {
315            #[inline]
316            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
317                (
318                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.x),
319                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.y),
320                )
321            }
322            #[inline]
323            fn stv_abi_encoded_size(&self) -> usize {
324                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
325                    return size;
326                }
327                let tuple =
328                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
329                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
330            }
331            #[inline]
332            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
333                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
334            }
335            #[inline]
336            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
337                let tuple =
338                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
339                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encode_packed_to(
340                    &tuple, out,
341                )
342            }
343            #[inline]
344            fn stv_abi_packed_encoded_size(&self) -> usize {
345                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
346                    return size;
347                }
348                let tuple =
349                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
350                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_packed_encoded_size(
351                    &tuple,
352                )
353            }
354        }
355        #[automatically_derived]
356        impl alloy_sol_types::SolType for G1Point {
357            type RustType = Self;
358            type Token<'a> = <UnderlyingSolTuple<'a> as alloy_sol_types::SolType>::Token<'a>;
359            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
360            const ENCODED_SIZE: Option<usize> =
361                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::ENCODED_SIZE;
362            const PACKED_ENCODED_SIZE: Option<usize> =
363                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
364            #[inline]
365            fn valid_token(token: &Self::Token<'_>) -> bool {
366                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
367            }
368            #[inline]
369            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
370                let tuple = <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::detokenize(token);
371                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
372            }
373        }
374        #[automatically_derived]
375        impl alloy_sol_types::SolStruct for G1Point {
376            const NAME: &'static str = "G1Point";
377            #[inline]
378            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
379                alloy_sol_types::private::Cow::Borrowed("G1Point(uint256 x,uint256 y)")
380            }
381            #[inline]
382            fn eip712_components(
383            ) -> alloy_sol_types::private::Vec<alloy_sol_types::private::Cow<'static, str>>
384            {
385                alloy_sol_types::private::Vec::new()
386            }
387            #[inline]
388            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
389                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
390            }
391            #[inline]
392            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
393                [
394                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.x).0,
395                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.y).0,
396                ]
397                .concat()
398            }
399        }
400        #[automatically_derived]
401        impl alloy_sol_types::EventTopic for G1Point {
402            #[inline]
403            fn topic_preimage_length(rust: &Self::RustType) -> usize {
404                0usize
405                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.x)
406                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.y)
407            }
408            #[inline]
409            fn encode_topic_preimage(
410                rust: &Self::RustType,
411                out: &mut alloy_sol_types::private::Vec<u8>,
412            ) {
413                out.reserve(<Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust));
414                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.x, out);
415                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.y, out);
416            }
417            #[inline]
418            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
419                let mut out = alloy_sol_types::private::Vec::new();
420                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, &mut out);
421                alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out))
422            }
423        }
424    };
425    use alloy::contract as alloy_contract;
426    /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
427
428    See the [wrapper's documentation](`BN254Instance`) for more details.*/
429    #[inline]
430    pub const fn new<
431        T: alloy_contract::private::Transport + ::core::clone::Clone,
432        P: alloy_contract::private::Provider<T, N>,
433        N: alloy_contract::private::Network,
434    >(
435        address: alloy_sol_types::private::Address,
436        provider: P,
437    ) -> BN254Instance<T, P, N> {
438        BN254Instance::<T, P, N>::new(address, provider)
439    }
440    /**A [`BN254`](self) instance.
441
442    Contains type-safe methods for interacting with an on-chain instance of the
443    [`BN254`](self) contract located at a given `address`, using a given
444    provider `P`.
445
446    If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
447    documentation on how to provide it), the `deploy` and `deploy_builder` methods can
448    be used to deploy a new instance of the contract.
449
450    See the [module-level documentation](self) for all the available methods.*/
451    #[derive(Clone)]
452    pub struct BN254Instance<T, P, N = alloy_contract::private::Ethereum> {
453        address: alloy_sol_types::private::Address,
454        provider: P,
455        _network_transport: ::core::marker::PhantomData<(N, T)>,
456    }
457    #[automatically_derived]
458    impl<T, P, N> ::core::fmt::Debug for BN254Instance<T, P, N> {
459        #[inline]
460        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
461            f.debug_tuple("BN254Instance").field(&self.address).finish()
462        }
463    }
464    /// Instantiation and getters/setters.
465    #[automatically_derived]
466    impl<
467            T: alloy_contract::private::Transport + ::core::clone::Clone,
468            P: alloy_contract::private::Provider<T, N>,
469            N: alloy_contract::private::Network,
470        > BN254Instance<T, P, N>
471    {
472        /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
473
474        See the [wrapper's documentation](`BN254Instance`) for more details.*/
475        #[inline]
476        pub const fn new(address: alloy_sol_types::private::Address, provider: P) -> Self {
477            Self {
478                address,
479                provider,
480                _network_transport: ::core::marker::PhantomData,
481            }
482        }
483        /// Returns a reference to the address.
484        #[inline]
485        pub const fn address(&self) -> &alloy_sol_types::private::Address {
486            &self.address
487        }
488        /// Sets the address.
489        #[inline]
490        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
491            self.address = address;
492        }
493        /// Sets the address and returns `self`.
494        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
495            self.set_address(address);
496            self
497        }
498        /// Returns a reference to the provider.
499        #[inline]
500        pub const fn provider(&self) -> &P {
501            &self.provider
502        }
503    }
504    impl<T, P: ::core::clone::Clone, N> BN254Instance<T, &P, N> {
505        /// Clones the provider and returns a new instance with the cloned provider.
506        #[inline]
507        pub fn with_cloned_provider(self) -> BN254Instance<T, P, N> {
508            BN254Instance {
509                address: self.address,
510                provider: ::core::clone::Clone::clone(&self.provider),
511                _network_transport: ::core::marker::PhantomData,
512            }
513        }
514    }
515    /// Function calls.
516    #[automatically_derived]
517    impl<
518            T: alloy_contract::private::Transport + ::core::clone::Clone,
519            P: alloy_contract::private::Provider<T, N>,
520            N: alloy_contract::private::Network,
521        > BN254Instance<T, P, N>
522    {
523        /// Creates a new call builder using this contract instance's provider and address.
524        ///
525        /// Note that the call can be any function call, not just those defined in this
526        /// contract. Prefer using the other methods for building type-safe contract calls.
527        pub fn call_builder<C: alloy_sol_types::SolCall>(
528            &self,
529            call: &C,
530        ) -> alloy_contract::SolCallBuilder<T, &P, C, N> {
531            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
532        }
533    }
534    /// Event filters.
535    #[automatically_derived]
536    impl<
537            T: alloy_contract::private::Transport + ::core::clone::Clone,
538            P: alloy_contract::private::Provider<T, N>,
539            N: alloy_contract::private::Network,
540        > BN254Instance<T, P, N>
541    {
542        /// Creates a new event filter using this contract instance's provider and address.
543        ///
544        /// Note that the type can be any event, not just those defined in this contract.
545        /// Prefer using the other methods for building type-safe event filters.
546        pub fn event_filter<E: alloy_sol_types::SolEvent>(
547            &self,
548        ) -> alloy_contract::Event<T, &P, E, N> {
549            alloy_contract::Event::new_sol(&self.provider, &self.address)
550        }
551    }
552}
553///Module containing a contract's types and functions.
554/**
555
556```solidity
557library IPlonkVerifier {
558    struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
559    struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
560}
561```*/
562#[allow(
563    non_camel_case_types,
564    non_snake_case,
565    clippy::pub_underscore_fields,
566    clippy::style,
567    clippy::empty_structs_with_brackets
568)]
569pub mod IPlonkVerifier {
570    use alloy::sol_types as alloy_sol_types;
571
572    use super::*;
573    #[derive()]
574    /**```solidity
575    struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
576    ```*/
577    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
578    #[derive(Clone)]
579    pub struct PlonkProof {
580        #[allow(missing_docs)]
581        pub wire0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
582        #[allow(missing_docs)]
583        pub wire1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
584        #[allow(missing_docs)]
585        pub wire2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
586        #[allow(missing_docs)]
587        pub wire3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
588        #[allow(missing_docs)]
589        pub wire4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
590        #[allow(missing_docs)]
591        pub prodPerm: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
592        #[allow(missing_docs)]
593        pub split0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
594        #[allow(missing_docs)]
595        pub split1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
596        #[allow(missing_docs)]
597        pub split2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
598        #[allow(missing_docs)]
599        pub split3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
600        #[allow(missing_docs)]
601        pub split4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
602        #[allow(missing_docs)]
603        pub zeta: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
604        #[allow(missing_docs)]
605        pub zetaOmega: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
606        #[allow(missing_docs)]
607        pub wireEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
608        #[allow(missing_docs)]
609        pub wireEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
610        #[allow(missing_docs)]
611        pub wireEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
612        #[allow(missing_docs)]
613        pub wireEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
614        #[allow(missing_docs)]
615        pub wireEval4: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
616        #[allow(missing_docs)]
617        pub sigmaEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
618        #[allow(missing_docs)]
619        pub sigmaEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
620        #[allow(missing_docs)]
621        pub sigmaEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
622        #[allow(missing_docs)]
623        pub sigmaEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
624        #[allow(missing_docs)]
625        pub prodPermZetaOmegaEval: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
626    }
627    #[allow(
628        non_camel_case_types,
629        non_snake_case,
630        clippy::pub_underscore_fields,
631        clippy::style
632    )]
633    const _: () = {
634        use alloy::sol_types as alloy_sol_types;
635        #[doc(hidden)]
636        type UnderlyingSolTuple<'a> = (
637            BN254::G1Point,
638            BN254::G1Point,
639            BN254::G1Point,
640            BN254::G1Point,
641            BN254::G1Point,
642            BN254::G1Point,
643            BN254::G1Point,
644            BN254::G1Point,
645            BN254::G1Point,
646            BN254::G1Point,
647            BN254::G1Point,
648            BN254::G1Point,
649            BN254::G1Point,
650            BN254::ScalarField,
651            BN254::ScalarField,
652            BN254::ScalarField,
653            BN254::ScalarField,
654            BN254::ScalarField,
655            BN254::ScalarField,
656            BN254::ScalarField,
657            BN254::ScalarField,
658            BN254::ScalarField,
659            BN254::ScalarField,
660        );
661        #[doc(hidden)]
662        type UnderlyingRustTuple<'a> = (
663            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
664            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
665            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
666            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
667            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
668            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
669            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
670            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
671            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
672            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
673            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
674            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
675            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
676            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
677            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
678            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
679            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
680            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
681            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
682            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
683            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
684            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
685            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
686        );
687        #[cfg(test)]
688        #[allow(dead_code, unreachable_patterns)]
689        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
690            match _t {
691                alloy_sol_types::private::AssertTypeEq::<
692                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
693                >(_) => {},
694            }
695        }
696        #[automatically_derived]
697        #[doc(hidden)]
698        impl ::core::convert::From<PlonkProof> for UnderlyingRustTuple<'_> {
699            fn from(value: PlonkProof) -> Self {
700                (
701                    value.wire0,
702                    value.wire1,
703                    value.wire2,
704                    value.wire3,
705                    value.wire4,
706                    value.prodPerm,
707                    value.split0,
708                    value.split1,
709                    value.split2,
710                    value.split3,
711                    value.split4,
712                    value.zeta,
713                    value.zetaOmega,
714                    value.wireEval0,
715                    value.wireEval1,
716                    value.wireEval2,
717                    value.wireEval3,
718                    value.wireEval4,
719                    value.sigmaEval0,
720                    value.sigmaEval1,
721                    value.sigmaEval2,
722                    value.sigmaEval3,
723                    value.prodPermZetaOmegaEval,
724                )
725            }
726        }
727        #[automatically_derived]
728        #[doc(hidden)]
729        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PlonkProof {
730            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
731                Self {
732                    wire0: tuple.0,
733                    wire1: tuple.1,
734                    wire2: tuple.2,
735                    wire3: tuple.3,
736                    wire4: tuple.4,
737                    prodPerm: tuple.5,
738                    split0: tuple.6,
739                    split1: tuple.7,
740                    split2: tuple.8,
741                    split3: tuple.9,
742                    split4: tuple.10,
743                    zeta: tuple.11,
744                    zetaOmega: tuple.12,
745                    wireEval0: tuple.13,
746                    wireEval1: tuple.14,
747                    wireEval2: tuple.15,
748                    wireEval3: tuple.16,
749                    wireEval4: tuple.17,
750                    sigmaEval0: tuple.18,
751                    sigmaEval1: tuple.19,
752                    sigmaEval2: tuple.20,
753                    sigmaEval3: tuple.21,
754                    prodPermZetaOmegaEval: tuple.22,
755                }
756            }
757        }
758        #[automatically_derived]
759        impl alloy_sol_types::SolValue for PlonkProof {
760            type SolType = Self;
761        }
762        #[automatically_derived]
763        impl alloy_sol_types::private::SolTypeValue<Self> for PlonkProof {
764            #[inline]
765            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
766                (
767                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire0),
768                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire1),
769                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire2),
770                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire3),
771                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire4),
772                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.prodPerm),
773                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split0),
774                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split1),
775                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split2),
776                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split3),
777                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split4),
778                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.zeta),
779                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.zetaOmega),
780                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval0),
781                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval1),
782                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval2),
783                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval3),
784                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.wireEval4),
785                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.sigmaEval0),
786                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.sigmaEval1),
787                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.sigmaEval2),
788                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(&self.sigmaEval3),
789                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
790                        &self.prodPermZetaOmegaEval,
791                    ),
792                )
793            }
794            #[inline]
795            fn stv_abi_encoded_size(&self) -> usize {
796                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
797                    return size;
798                }
799                let tuple =
800                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
801                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
802            }
803            #[inline]
804            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
805                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
806            }
807            #[inline]
808            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
809                let tuple =
810                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
811                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encode_packed_to(
812                    &tuple, out,
813                )
814            }
815            #[inline]
816            fn stv_abi_packed_encoded_size(&self) -> usize {
817                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
818                    return size;
819                }
820                let tuple =
821                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
822                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_packed_encoded_size(
823                    &tuple,
824                )
825            }
826        }
827        #[automatically_derived]
828        impl alloy_sol_types::SolType for PlonkProof {
829            type RustType = Self;
830            type Token<'a> = <UnderlyingSolTuple<'a> as alloy_sol_types::SolType>::Token<'a>;
831            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
832            const ENCODED_SIZE: Option<usize> =
833                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::ENCODED_SIZE;
834            const PACKED_ENCODED_SIZE: Option<usize> =
835                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
836            #[inline]
837            fn valid_token(token: &Self::Token<'_>) -> bool {
838                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
839            }
840            #[inline]
841            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
842                let tuple = <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::detokenize(token);
843                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
844            }
845        }
846        #[automatically_derived]
847        impl alloy_sol_types::SolStruct for PlonkProof {
848            const NAME: &'static str = "PlonkProof";
849            #[inline]
850            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
851                alloy_sol_types::private::Cow::Borrowed(
852                    "PlonkProof(BN254.G1Point wire0,BN254.G1Point wire1,BN254.G1Point wire2,BN254.G1Point wire3,BN254.G1Point wire4,BN254.G1Point prodPerm,BN254.G1Point split0,BN254.G1Point split1,BN254.G1Point split2,BN254.G1Point split3,BN254.G1Point split4,BN254.G1Point zeta,BN254.G1Point zetaOmega,uint256 wireEval0,uint256 wireEval1,uint256 wireEval2,uint256 wireEval3,uint256 wireEval4,uint256 sigmaEval0,uint256 sigmaEval1,uint256 sigmaEval2,uint256 sigmaEval3,uint256 prodPermZetaOmegaEval)",
853                )
854            }
855            #[inline]
856            fn eip712_components(
857            ) -> alloy_sol_types::private::Vec<alloy_sol_types::private::Cow<'static, str>>
858            {
859                let mut components = alloy_sol_types::private::Vec::with_capacity(13);
860                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
861                components
862                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
863                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
864                components
865                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
866                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
867                components
868                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
869                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
870                components
871                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
872                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
873                components
874                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
875                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
876                components
877                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
878                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
879                components
880                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
881                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
882                components
883                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
884                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
885                components
886                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
887                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
888                components
889                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
890                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
891                components
892                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
893                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
894                components
895                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
896                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
897                components
898                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
899                components
900            }
901            #[inline]
902            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
903                [
904                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire0).0,
905                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire1).0,
906                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire2).0,
907                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire3).0,
908                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.wire4).0,
909                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.prodPerm)
910                        .0,
911                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split0).0,
912                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split1).0,
913                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split2).0,
914                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split3).0,
915                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.split4).0,
916                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.zeta).0,
917                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(&self.zetaOmega)
918                        .0,
919                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
920                        &self.wireEval0,
921                    )
922                    .0,
923                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
924                        &self.wireEval1,
925                    )
926                    .0,
927                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
928                        &self.wireEval2,
929                    )
930                    .0,
931                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
932                        &self.wireEval3,
933                    )
934                    .0,
935                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
936                        &self.wireEval4,
937                    )
938                    .0,
939                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
940                        &self.sigmaEval0,
941                    )
942                    .0,
943                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
944                        &self.sigmaEval1,
945                    )
946                    .0,
947                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
948                        &self.sigmaEval2,
949                    )
950                    .0,
951                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
952                        &self.sigmaEval3,
953                    )
954                    .0,
955                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
956                        &self.prodPermZetaOmegaEval,
957                    )
958                    .0,
959                ]
960                .concat()
961            }
962        }
963        #[automatically_derived]
964        impl alloy_sol_types::EventTopic for PlonkProof {
965            #[inline]
966            fn topic_preimage_length(rust: &Self::RustType) -> usize {
967                0usize
968                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
969                        &rust.wire0,
970                    )
971                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
972                        &rust.wire1,
973                    )
974                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
975                        &rust.wire2,
976                    )
977                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
978                        &rust.wire3,
979                    )
980                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
981                        &rust.wire4,
982                    )
983                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
984                        &rust.prodPerm,
985                    )
986                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
987                        &rust.split0,
988                    )
989                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
990                        &rust.split1,
991                    )
992                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
993                        &rust.split2,
994                    )
995                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
996                        &rust.split3,
997                    )
998                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
999                        &rust.split4,
1000                    )
1001                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1002                        &rust.zeta,
1003                    )
1004                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1005                        &rust.zetaOmega,
1006                    )
1007                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1008                        &rust.wireEval0,
1009                    )
1010                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1011                        &rust.wireEval1,
1012                    )
1013                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1014                        &rust.wireEval2,
1015                    )
1016                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1017                        &rust.wireEval3,
1018                    )
1019                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1020                        &rust.wireEval4,
1021                    )
1022                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1023                        &rust.sigmaEval0,
1024                    )
1025                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1026                        &rust.sigmaEval1,
1027                    )
1028                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1029                        &rust.sigmaEval2,
1030                    )
1031                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1032                        &rust.sigmaEval3,
1033                    )
1034                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1035                        &rust.prodPermZetaOmegaEval,
1036                    )
1037            }
1038            #[inline]
1039            fn encode_topic_preimage(
1040                rust: &Self::RustType,
1041                out: &mut alloy_sol_types::private::Vec<u8>,
1042            ) {
1043                out.reserve(<Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust));
1044                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1045                    &rust.wire0,
1046                    out,
1047                );
1048                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1049                    &rust.wire1,
1050                    out,
1051                );
1052                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1053                    &rust.wire2,
1054                    out,
1055                );
1056                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1057                    &rust.wire3,
1058                    out,
1059                );
1060                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1061                    &rust.wire4,
1062                    out,
1063                );
1064                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1065                    &rust.prodPerm,
1066                    out,
1067                );
1068                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1069                    &rust.split0,
1070                    out,
1071                );
1072                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1073                    &rust.split1,
1074                    out,
1075                );
1076                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1077                    &rust.split2,
1078                    out,
1079                );
1080                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1081                    &rust.split3,
1082                    out,
1083                );
1084                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1085                    &rust.split4,
1086                    out,
1087                );
1088                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1089                    &rust.zeta, out,
1090                );
1091                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1092                    &rust.zetaOmega,
1093                    out,
1094                );
1095                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1096                    &rust.wireEval0,
1097                    out,
1098                );
1099                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1100                    &rust.wireEval1,
1101                    out,
1102                );
1103                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1104                    &rust.wireEval2,
1105                    out,
1106                );
1107                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1108                    &rust.wireEval3,
1109                    out,
1110                );
1111                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1112                    &rust.wireEval4,
1113                    out,
1114                );
1115                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1116                    &rust.sigmaEval0,
1117                    out,
1118                );
1119                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1120                    &rust.sigmaEval1,
1121                    out,
1122                );
1123                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1124                    &rust.sigmaEval2,
1125                    out,
1126                );
1127                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1128                    &rust.sigmaEval3,
1129                    out,
1130                );
1131                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1132                    &rust.prodPermZetaOmegaEval,
1133                    out,
1134                );
1135            }
1136            #[inline]
1137            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
1138                let mut out = alloy_sol_types::private::Vec::new();
1139                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, &mut out);
1140                alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out))
1141            }
1142        }
1143    };
1144    #[derive()]
1145    /**```solidity
1146    struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
1147    ```*/
1148    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1149    #[derive(Clone)]
1150    pub struct VerifyingKey {
1151        #[allow(missing_docs)]
1152        pub domainSize: alloy::sol_types::private::primitives::aliases::U256,
1153        #[allow(missing_docs)]
1154        pub numInputs: alloy::sol_types::private::primitives::aliases::U256,
1155        #[allow(missing_docs)]
1156        pub sigma0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1157        #[allow(missing_docs)]
1158        pub sigma1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1159        #[allow(missing_docs)]
1160        pub sigma2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1161        #[allow(missing_docs)]
1162        pub sigma3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1163        #[allow(missing_docs)]
1164        pub sigma4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1165        #[allow(missing_docs)]
1166        pub q1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1167        #[allow(missing_docs)]
1168        pub q2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1169        #[allow(missing_docs)]
1170        pub q3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1171        #[allow(missing_docs)]
1172        pub q4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1173        #[allow(missing_docs)]
1174        pub qM12: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1175        #[allow(missing_docs)]
1176        pub qM34: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1177        #[allow(missing_docs)]
1178        pub qO: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1179        #[allow(missing_docs)]
1180        pub qC: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1181        #[allow(missing_docs)]
1182        pub qH1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1183        #[allow(missing_docs)]
1184        pub qH2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1185        #[allow(missing_docs)]
1186        pub qH3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1187        #[allow(missing_docs)]
1188        pub qH4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1189        #[allow(missing_docs)]
1190        pub qEcc: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1191        #[allow(missing_docs)]
1192        pub g2LSB: alloy::sol_types::private::FixedBytes<32>,
1193        #[allow(missing_docs)]
1194        pub g2MSB: alloy::sol_types::private::FixedBytes<32>,
1195    }
1196    #[allow(
1197        non_camel_case_types,
1198        non_snake_case,
1199        clippy::pub_underscore_fields,
1200        clippy::style
1201    )]
1202    const _: () = {
1203        use alloy::sol_types as alloy_sol_types;
1204        #[doc(hidden)]
1205        type UnderlyingSolTuple<'a> = (
1206            alloy::sol_types::sol_data::Uint<256>,
1207            alloy::sol_types::sol_data::Uint<256>,
1208            BN254::G1Point,
1209            BN254::G1Point,
1210            BN254::G1Point,
1211            BN254::G1Point,
1212            BN254::G1Point,
1213            BN254::G1Point,
1214            BN254::G1Point,
1215            BN254::G1Point,
1216            BN254::G1Point,
1217            BN254::G1Point,
1218            BN254::G1Point,
1219            BN254::G1Point,
1220            BN254::G1Point,
1221            BN254::G1Point,
1222            BN254::G1Point,
1223            BN254::G1Point,
1224            BN254::G1Point,
1225            BN254::G1Point,
1226            alloy::sol_types::sol_data::FixedBytes<32>,
1227            alloy::sol_types::sol_data::FixedBytes<32>,
1228        );
1229        #[doc(hidden)]
1230        type UnderlyingRustTuple<'a> = (
1231            alloy::sol_types::private::primitives::aliases::U256,
1232            alloy::sol_types::private::primitives::aliases::U256,
1233            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1234            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1235            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1236            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1237            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1238            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1239            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1240            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1241            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1242            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1243            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1244            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1245            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1246            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1247            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1248            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1249            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1250            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1251            alloy::sol_types::private::FixedBytes<32>,
1252            alloy::sol_types::private::FixedBytes<32>,
1253        );
1254        #[cfg(test)]
1255        #[allow(dead_code, unreachable_patterns)]
1256        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
1257            match _t {
1258                alloy_sol_types::private::AssertTypeEq::<
1259                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1260                >(_) => {},
1261            }
1262        }
1263        #[automatically_derived]
1264        #[doc(hidden)]
1265        impl ::core::convert::From<VerifyingKey> for UnderlyingRustTuple<'_> {
1266            fn from(value: VerifyingKey) -> Self {
1267                (
1268                    value.domainSize,
1269                    value.numInputs,
1270                    value.sigma0,
1271                    value.sigma1,
1272                    value.sigma2,
1273                    value.sigma3,
1274                    value.sigma4,
1275                    value.q1,
1276                    value.q2,
1277                    value.q3,
1278                    value.q4,
1279                    value.qM12,
1280                    value.qM34,
1281                    value.qO,
1282                    value.qC,
1283                    value.qH1,
1284                    value.qH2,
1285                    value.qH3,
1286                    value.qH4,
1287                    value.qEcc,
1288                    value.g2LSB,
1289                    value.g2MSB,
1290                )
1291            }
1292        }
1293        #[automatically_derived]
1294        #[doc(hidden)]
1295        impl ::core::convert::From<UnderlyingRustTuple<'_>> for VerifyingKey {
1296            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1297                Self {
1298                    domainSize: tuple.0,
1299                    numInputs: tuple.1,
1300                    sigma0: tuple.2,
1301                    sigma1: tuple.3,
1302                    sigma2: tuple.4,
1303                    sigma3: tuple.5,
1304                    sigma4: tuple.6,
1305                    q1: tuple.7,
1306                    q2: tuple.8,
1307                    q3: tuple.9,
1308                    q4: tuple.10,
1309                    qM12: tuple.11,
1310                    qM34: tuple.12,
1311                    qO: tuple.13,
1312                    qC: tuple.14,
1313                    qH1: tuple.15,
1314                    qH2: tuple.16,
1315                    qH3: tuple.17,
1316                    qH4: tuple.18,
1317                    qEcc: tuple.19,
1318                    g2LSB: tuple.20,
1319                    g2MSB: tuple.21,
1320                }
1321            }
1322        }
1323        #[automatically_derived]
1324        impl alloy_sol_types::SolValue for VerifyingKey {
1325            type SolType = Self;
1326        }
1327        #[automatically_derived]
1328        impl alloy_sol_types::private::SolTypeValue<Self> for VerifyingKey {
1329            #[inline]
1330            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
1331                (
1332                    <alloy::sol_types::sol_data::Uint<
1333                        256,
1334                    > as alloy_sol_types::SolType>::tokenize(&self.domainSize),
1335                    <alloy::sol_types::sol_data::Uint<
1336                        256,
1337                    > as alloy_sol_types::SolType>::tokenize(&self.numInputs),
1338                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma0),
1339                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma1),
1340                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma2),
1341                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma3),
1342                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma4),
1343                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q1),
1344                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q2),
1345                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q3),
1346                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q4),
1347                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM12),
1348                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM34),
1349                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qO),
1350                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qC),
1351                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH1),
1352                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH2),
1353                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH3),
1354                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH4),
1355                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qEcc),
1356                    <alloy::sol_types::sol_data::FixedBytes<
1357                        32,
1358                    > as alloy_sol_types::SolType>::tokenize(&self.g2LSB),
1359                    <alloy::sol_types::sol_data::FixedBytes<
1360                        32,
1361                    > as alloy_sol_types::SolType>::tokenize(&self.g2MSB),
1362                )
1363            }
1364            #[inline]
1365            fn stv_abi_encoded_size(&self) -> usize {
1366                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
1367                    return size;
1368                }
1369                let tuple =
1370                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
1371                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
1372            }
1373            #[inline]
1374            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
1375                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
1376            }
1377            #[inline]
1378            fn stv_abi_encode_packed_to(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
1379                let tuple =
1380                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
1381                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_encode_packed_to(
1382                    &tuple, out,
1383                )
1384            }
1385            #[inline]
1386            fn stv_abi_packed_encoded_size(&self) -> usize {
1387                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
1388                    return size;
1389                }
1390                let tuple =
1391                    <UnderlyingRustTuple<'_> as ::core::convert::From<Self>>::from(self.clone());
1392                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::abi_packed_encoded_size(
1393                    &tuple,
1394                )
1395            }
1396        }
1397        #[automatically_derived]
1398        impl alloy_sol_types::SolType for VerifyingKey {
1399            type RustType = Self;
1400            type Token<'a> = <UnderlyingSolTuple<'a> as alloy_sol_types::SolType>::Token<'a>;
1401            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
1402            const ENCODED_SIZE: Option<usize> =
1403                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::ENCODED_SIZE;
1404            const PACKED_ENCODED_SIZE: Option<usize> =
1405                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
1406            #[inline]
1407            fn valid_token(token: &Self::Token<'_>) -> bool {
1408                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
1409            }
1410            #[inline]
1411            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
1412                let tuple = <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::detokenize(token);
1413                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
1414            }
1415        }
1416        #[automatically_derived]
1417        impl alloy_sol_types::SolStruct for VerifyingKey {
1418            const NAME: &'static str = "VerifyingKey";
1419            #[inline]
1420            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
1421                alloy_sol_types::private::Cow::Borrowed(
1422                    "VerifyingKey(uint256 domainSize,uint256 numInputs,BN254.G1Point sigma0,BN254.G1Point sigma1,BN254.G1Point sigma2,BN254.G1Point sigma3,BN254.G1Point sigma4,BN254.G1Point q1,BN254.G1Point q2,BN254.G1Point q3,BN254.G1Point q4,BN254.G1Point qM12,BN254.G1Point qM34,BN254.G1Point qO,BN254.G1Point qC,BN254.G1Point qH1,BN254.G1Point qH2,BN254.G1Point qH3,BN254.G1Point qH4,BN254.G1Point qEcc,bytes32 g2LSB,bytes32 g2MSB)",
1423                )
1424            }
1425            #[inline]
1426            fn eip712_components(
1427            ) -> alloy_sol_types::private::Vec<alloy_sol_types::private::Cow<'static, str>>
1428            {
1429                let mut components = alloy_sol_types::private::Vec::with_capacity(18);
1430                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1431                components
1432                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1433                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1434                components
1435                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1436                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1437                components
1438                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1439                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1440                components
1441                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1442                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1443                components
1444                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1445                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1446                components
1447                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1448                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1449                components
1450                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1451                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1452                components
1453                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1454                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1455                components
1456                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1457                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1458                components
1459                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1460                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1461                components
1462                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1463                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1464                components
1465                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1466                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1467                components
1468                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1469                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1470                components
1471                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1472                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1473                components
1474                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1475                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1476                components
1477                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1478                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1479                components
1480                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1481                components.push(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type());
1482                components
1483                    .extend(<BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components());
1484                components
1485            }
1486            #[inline]
1487            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
1488                [
1489                    <alloy::sol_types::sol_data::Uint<
1490                        256,
1491                    > as alloy_sol_types::SolType>::eip712_data_word(&self.domainSize)
1492                        .0,
1493                    <alloy::sol_types::sol_data::Uint<
1494                        256,
1495                    > as alloy_sol_types::SolType>::eip712_data_word(&self.numInputs)
1496                        .0,
1497                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1498                            &self.sigma0,
1499                        )
1500                        .0,
1501                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1502                            &self.sigma1,
1503                        )
1504                        .0,
1505                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1506                            &self.sigma2,
1507                        )
1508                        .0,
1509                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1510                            &self.sigma3,
1511                        )
1512                        .0,
1513                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1514                            &self.sigma4,
1515                        )
1516                        .0,
1517                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1518                            &self.q1,
1519                        )
1520                        .0,
1521                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1522                            &self.q2,
1523                        )
1524                        .0,
1525                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1526                            &self.q3,
1527                        )
1528                        .0,
1529                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1530                            &self.q4,
1531                        )
1532                        .0,
1533                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1534                            &self.qM12,
1535                        )
1536                        .0,
1537                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1538                            &self.qM34,
1539                        )
1540                        .0,
1541                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1542                            &self.qO,
1543                        )
1544                        .0,
1545                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1546                            &self.qC,
1547                        )
1548                        .0,
1549                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1550                            &self.qH1,
1551                        )
1552                        .0,
1553                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1554                            &self.qH2,
1555                        )
1556                        .0,
1557                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1558                            &self.qH3,
1559                        )
1560                        .0,
1561                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1562                            &self.qH4,
1563                        )
1564                        .0,
1565                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1566                            &self.qEcc,
1567                        )
1568                        .0,
1569                    <alloy::sol_types::sol_data::FixedBytes<
1570                        32,
1571                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2LSB)
1572                        .0,
1573                    <alloy::sol_types::sol_data::FixedBytes<
1574                        32,
1575                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2MSB)
1576                        .0,
1577                ]
1578                    .concat()
1579            }
1580        }
1581        #[automatically_derived]
1582        impl alloy_sol_types::EventTopic for VerifyingKey {
1583            #[inline]
1584            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1585                0usize
1586                    + <alloy::sol_types::sol_data::Uint<
1587                        256,
1588                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1589                        &rust.domainSize,
1590                    )
1591                    + <alloy::sol_types::sol_data::Uint<
1592                        256,
1593                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1594                        &rust.numInputs,
1595                    )
1596                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1597                        &rust.sigma0,
1598                    )
1599                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1600                        &rust.sigma1,
1601                    )
1602                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1603                        &rust.sigma2,
1604                    )
1605                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1606                        &rust.sigma3,
1607                    )
1608                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1609                        &rust.sigma4,
1610                    )
1611                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1612                        &rust.q1,
1613                    )
1614                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1615                        &rust.q2,
1616                    )
1617                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1618                        &rust.q3,
1619                    )
1620                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1621                        &rust.q4,
1622                    )
1623                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1624                        &rust.qM12,
1625                    )
1626                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1627                        &rust.qM34,
1628                    )
1629                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1630                        &rust.qO,
1631                    )
1632                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1633                        &rust.qC,
1634                    )
1635                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1636                        &rust.qH1,
1637                    )
1638                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1639                        &rust.qH2,
1640                    )
1641                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1642                        &rust.qH3,
1643                    )
1644                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1645                        &rust.qH4,
1646                    )
1647                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1648                        &rust.qEcc,
1649                    )
1650                    + <alloy::sol_types::sol_data::FixedBytes<
1651                        32,
1652                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2LSB)
1653                    + <alloy::sol_types::sol_data::FixedBytes<
1654                        32,
1655                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2MSB)
1656            }
1657            #[inline]
1658            fn encode_topic_preimage(
1659                rust: &Self::RustType,
1660                out: &mut alloy_sol_types::private::Vec<u8>,
1661            ) {
1662                out.reserve(<Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust));
1663                <alloy::sol_types::sol_data::Uint<
1664                    256,
1665                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
1666                    &rust.domainSize,
1667                    out,
1668                );
1669                <alloy::sol_types::sol_data::Uint<
1670                    256,
1671                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
1672                    &rust.numInputs,
1673                    out,
1674                );
1675                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1676                    &rust.sigma0,
1677                    out,
1678                );
1679                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1680                    &rust.sigma1,
1681                    out,
1682                );
1683                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1684                    &rust.sigma2,
1685                    out,
1686                );
1687                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1688                    &rust.sigma3,
1689                    out,
1690                );
1691                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1692                    &rust.sigma4,
1693                    out,
1694                );
1695                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1696                    &rust.q1, out,
1697                );
1698                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1699                    &rust.q2, out,
1700                );
1701                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1702                    &rust.q3, out,
1703                );
1704                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1705                    &rust.q4, out,
1706                );
1707                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1708                    &rust.qM12, out,
1709                );
1710                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1711                    &rust.qM34, out,
1712                );
1713                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1714                    &rust.qO, out,
1715                );
1716                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1717                    &rust.qC, out,
1718                );
1719                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1720                    &rust.qH1, out,
1721                );
1722                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1723                    &rust.qH2, out,
1724                );
1725                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1726                    &rust.qH3, out,
1727                );
1728                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1729                    &rust.qH4, out,
1730                );
1731                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1732                    &rust.qEcc, out,
1733                );
1734                <alloy::sol_types::sol_data::FixedBytes<
1735                    32,
1736                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
1737                    &rust.g2LSB,
1738                    out,
1739                );
1740                <alloy::sol_types::sol_data::FixedBytes<
1741                    32,
1742                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
1743                    &rust.g2MSB,
1744                    out,
1745                );
1746            }
1747            #[inline]
1748            fn encode_topic(rust: &Self::RustType) -> alloy_sol_types::abi::token::WordToken {
1749                let mut out = alloy_sol_types::private::Vec::new();
1750                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, &mut out);
1751                alloy_sol_types::abi::token::WordToken(alloy_sol_types::private::keccak256(out))
1752            }
1753        }
1754    };
1755    use alloy::contract as alloy_contract;
1756    /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
1757
1758    See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
1759    #[inline]
1760    pub const fn new<
1761        T: alloy_contract::private::Transport + ::core::clone::Clone,
1762        P: alloy_contract::private::Provider<T, N>,
1763        N: alloy_contract::private::Network,
1764    >(
1765        address: alloy_sol_types::private::Address,
1766        provider: P,
1767    ) -> IPlonkVerifierInstance<T, P, N> {
1768        IPlonkVerifierInstance::<T, P, N>::new(address, provider)
1769    }
1770    /**A [`IPlonkVerifier`](self) instance.
1771
1772    Contains type-safe methods for interacting with an on-chain instance of the
1773    [`IPlonkVerifier`](self) contract located at a given `address`, using a given
1774    provider `P`.
1775
1776    If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
1777    documentation on how to provide it), the `deploy` and `deploy_builder` methods can
1778    be used to deploy a new instance of the contract.
1779
1780    See the [module-level documentation](self) for all the available methods.*/
1781    #[derive(Clone)]
1782    pub struct IPlonkVerifierInstance<T, P, N = alloy_contract::private::Ethereum> {
1783        address: alloy_sol_types::private::Address,
1784        provider: P,
1785        _network_transport: ::core::marker::PhantomData<(N, T)>,
1786    }
1787    #[automatically_derived]
1788    impl<T, P, N> ::core::fmt::Debug for IPlonkVerifierInstance<T, P, N> {
1789        #[inline]
1790        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
1791            f.debug_tuple("IPlonkVerifierInstance")
1792                .field(&self.address)
1793                .finish()
1794        }
1795    }
1796    /// Instantiation and getters/setters.
1797    #[automatically_derived]
1798    impl<
1799            T: alloy_contract::private::Transport + ::core::clone::Clone,
1800            P: alloy_contract::private::Provider<T, N>,
1801            N: alloy_contract::private::Network,
1802        > IPlonkVerifierInstance<T, P, N>
1803    {
1804        /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
1805
1806        See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
1807        #[inline]
1808        pub const fn new(address: alloy_sol_types::private::Address, provider: P) -> Self {
1809            Self {
1810                address,
1811                provider,
1812                _network_transport: ::core::marker::PhantomData,
1813            }
1814        }
1815        /// Returns a reference to the address.
1816        #[inline]
1817        pub const fn address(&self) -> &alloy_sol_types::private::Address {
1818            &self.address
1819        }
1820        /// Sets the address.
1821        #[inline]
1822        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
1823            self.address = address;
1824        }
1825        /// Sets the address and returns `self`.
1826        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
1827            self.set_address(address);
1828            self
1829        }
1830        /// Returns a reference to the provider.
1831        #[inline]
1832        pub const fn provider(&self) -> &P {
1833            &self.provider
1834        }
1835    }
1836    impl<T, P: ::core::clone::Clone, N> IPlonkVerifierInstance<T, &P, N> {
1837        /// Clones the provider and returns a new instance with the cloned provider.
1838        #[inline]
1839        pub fn with_cloned_provider(self) -> IPlonkVerifierInstance<T, P, N> {
1840            IPlonkVerifierInstance {
1841                address: self.address,
1842                provider: ::core::clone::Clone::clone(&self.provider),
1843                _network_transport: ::core::marker::PhantomData,
1844            }
1845        }
1846    }
1847    /// Function calls.
1848    #[automatically_derived]
1849    impl<
1850            T: alloy_contract::private::Transport + ::core::clone::Clone,
1851            P: alloy_contract::private::Provider<T, N>,
1852            N: alloy_contract::private::Network,
1853        > IPlonkVerifierInstance<T, P, N>
1854    {
1855        /// Creates a new call builder using this contract instance's provider and address.
1856        ///
1857        /// Note that the call can be any function call, not just those defined in this
1858        /// contract. Prefer using the other methods for building type-safe contract calls.
1859        pub fn call_builder<C: alloy_sol_types::SolCall>(
1860            &self,
1861            call: &C,
1862        ) -> alloy_contract::SolCallBuilder<T, &P, C, N> {
1863            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
1864        }
1865    }
1866    /// Event filters.
1867    #[automatically_derived]
1868    impl<
1869            T: alloy_contract::private::Transport + ::core::clone::Clone,
1870            P: alloy_contract::private::Provider<T, N>,
1871            N: alloy_contract::private::Network,
1872        > IPlonkVerifierInstance<T, P, N>
1873    {
1874        /// Creates a new event filter using this contract instance's provider and address.
1875        ///
1876        /// Note that the type can be any event, not just those defined in this contract.
1877        /// Prefer using the other methods for building type-safe event filters.
1878        pub fn event_filter<E: alloy_sol_types::SolEvent>(
1879            &self,
1880        ) -> alloy_contract::Event<T, &P, E, N> {
1881            alloy_contract::Event::new_sol(&self.provider, &self.address)
1882        }
1883    }
1884}
1885/**
1886
1887Generated by the following Solidity interface...
1888```solidity
1889library BN254 {
1890    type BaseField is uint256;
1891    type ScalarField is uint256;
1892    struct G1Point {
1893        BaseField x;
1894        BaseField y;
1895    }
1896}
1897
1898library IPlonkVerifier {
1899    struct PlonkProof {
1900        BN254.G1Point wire0;
1901        BN254.G1Point wire1;
1902        BN254.G1Point wire2;
1903        BN254.G1Point wire3;
1904        BN254.G1Point wire4;
1905        BN254.G1Point prodPerm;
1906        BN254.G1Point split0;
1907        BN254.G1Point split1;
1908        BN254.G1Point split2;
1909        BN254.G1Point split3;
1910        BN254.G1Point split4;
1911        BN254.G1Point zeta;
1912        BN254.G1Point zetaOmega;
1913        BN254.ScalarField wireEval0;
1914        BN254.ScalarField wireEval1;
1915        BN254.ScalarField wireEval2;
1916        BN254.ScalarField wireEval3;
1917        BN254.ScalarField wireEval4;
1918        BN254.ScalarField sigmaEval0;
1919        BN254.ScalarField sigmaEval1;
1920        BN254.ScalarField sigmaEval2;
1921        BN254.ScalarField sigmaEval3;
1922        BN254.ScalarField prodPermZetaOmegaEval;
1923    }
1924    struct VerifyingKey {
1925        uint256 domainSize;
1926        uint256 numInputs;
1927        BN254.G1Point sigma0;
1928        BN254.G1Point sigma1;
1929        BN254.G1Point sigma2;
1930        BN254.G1Point sigma3;
1931        BN254.G1Point sigma4;
1932        BN254.G1Point q1;
1933        BN254.G1Point q2;
1934        BN254.G1Point q3;
1935        BN254.G1Point q4;
1936        BN254.G1Point qM12;
1937        BN254.G1Point qM34;
1938        BN254.G1Point qO;
1939        BN254.G1Point qC;
1940        BN254.G1Point qH1;
1941        BN254.G1Point qH2;
1942        BN254.G1Point qH3;
1943        BN254.G1Point qH4;
1944        BN254.G1Point qEcc;
1945        bytes32 g2LSB;
1946        bytes32 g2MSB;
1947    }
1948}
1949
1950interface PlonkVerifier {
1951    error InvalidPlonkArgs();
1952    error UnsupportedDegree();
1953    error WrongPlonkVK();
1954
1955    function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
1956}
1957```
1958
1959...which was generated by the following JSON ABI:
1960```json
1961[
1962  {
1963    "type": "function",
1964    "name": "verify",
1965    "inputs": [
1966      {
1967        "name": "verifyingKey",
1968        "type": "tuple",
1969        "internalType": "struct IPlonkVerifier.VerifyingKey",
1970        "components": [
1971          {
1972            "name": "domainSize",
1973            "type": "uint256",
1974            "internalType": "uint256"
1975          },
1976          {
1977            "name": "numInputs",
1978            "type": "uint256",
1979            "internalType": "uint256"
1980          },
1981          {
1982            "name": "sigma0",
1983            "type": "tuple",
1984            "internalType": "struct BN254.G1Point",
1985            "components": [
1986              {
1987                "name": "x",
1988                "type": "uint256",
1989                "internalType": "BN254.BaseField"
1990              },
1991              {
1992                "name": "y",
1993                "type": "uint256",
1994                "internalType": "BN254.BaseField"
1995              }
1996            ]
1997          },
1998          {
1999            "name": "sigma1",
2000            "type": "tuple",
2001            "internalType": "struct BN254.G1Point",
2002            "components": [
2003              {
2004                "name": "x",
2005                "type": "uint256",
2006                "internalType": "BN254.BaseField"
2007              },
2008              {
2009                "name": "y",
2010                "type": "uint256",
2011                "internalType": "BN254.BaseField"
2012              }
2013            ]
2014          },
2015          {
2016            "name": "sigma2",
2017            "type": "tuple",
2018            "internalType": "struct BN254.G1Point",
2019            "components": [
2020              {
2021                "name": "x",
2022                "type": "uint256",
2023                "internalType": "BN254.BaseField"
2024              },
2025              {
2026                "name": "y",
2027                "type": "uint256",
2028                "internalType": "BN254.BaseField"
2029              }
2030            ]
2031          },
2032          {
2033            "name": "sigma3",
2034            "type": "tuple",
2035            "internalType": "struct BN254.G1Point",
2036            "components": [
2037              {
2038                "name": "x",
2039                "type": "uint256",
2040                "internalType": "BN254.BaseField"
2041              },
2042              {
2043                "name": "y",
2044                "type": "uint256",
2045                "internalType": "BN254.BaseField"
2046              }
2047            ]
2048          },
2049          {
2050            "name": "sigma4",
2051            "type": "tuple",
2052            "internalType": "struct BN254.G1Point",
2053            "components": [
2054              {
2055                "name": "x",
2056                "type": "uint256",
2057                "internalType": "BN254.BaseField"
2058              },
2059              {
2060                "name": "y",
2061                "type": "uint256",
2062                "internalType": "BN254.BaseField"
2063              }
2064            ]
2065          },
2066          {
2067            "name": "q1",
2068            "type": "tuple",
2069            "internalType": "struct BN254.G1Point",
2070            "components": [
2071              {
2072                "name": "x",
2073                "type": "uint256",
2074                "internalType": "BN254.BaseField"
2075              },
2076              {
2077                "name": "y",
2078                "type": "uint256",
2079                "internalType": "BN254.BaseField"
2080              }
2081            ]
2082          },
2083          {
2084            "name": "q2",
2085            "type": "tuple",
2086            "internalType": "struct BN254.G1Point",
2087            "components": [
2088              {
2089                "name": "x",
2090                "type": "uint256",
2091                "internalType": "BN254.BaseField"
2092              },
2093              {
2094                "name": "y",
2095                "type": "uint256",
2096                "internalType": "BN254.BaseField"
2097              }
2098            ]
2099          },
2100          {
2101            "name": "q3",
2102            "type": "tuple",
2103            "internalType": "struct BN254.G1Point",
2104            "components": [
2105              {
2106                "name": "x",
2107                "type": "uint256",
2108                "internalType": "BN254.BaseField"
2109              },
2110              {
2111                "name": "y",
2112                "type": "uint256",
2113                "internalType": "BN254.BaseField"
2114              }
2115            ]
2116          },
2117          {
2118            "name": "q4",
2119            "type": "tuple",
2120            "internalType": "struct BN254.G1Point",
2121            "components": [
2122              {
2123                "name": "x",
2124                "type": "uint256",
2125                "internalType": "BN254.BaseField"
2126              },
2127              {
2128                "name": "y",
2129                "type": "uint256",
2130                "internalType": "BN254.BaseField"
2131              }
2132            ]
2133          },
2134          {
2135            "name": "qM12",
2136            "type": "tuple",
2137            "internalType": "struct BN254.G1Point",
2138            "components": [
2139              {
2140                "name": "x",
2141                "type": "uint256",
2142                "internalType": "BN254.BaseField"
2143              },
2144              {
2145                "name": "y",
2146                "type": "uint256",
2147                "internalType": "BN254.BaseField"
2148              }
2149            ]
2150          },
2151          {
2152            "name": "qM34",
2153            "type": "tuple",
2154            "internalType": "struct BN254.G1Point",
2155            "components": [
2156              {
2157                "name": "x",
2158                "type": "uint256",
2159                "internalType": "BN254.BaseField"
2160              },
2161              {
2162                "name": "y",
2163                "type": "uint256",
2164                "internalType": "BN254.BaseField"
2165              }
2166            ]
2167          },
2168          {
2169            "name": "qO",
2170            "type": "tuple",
2171            "internalType": "struct BN254.G1Point",
2172            "components": [
2173              {
2174                "name": "x",
2175                "type": "uint256",
2176                "internalType": "BN254.BaseField"
2177              },
2178              {
2179                "name": "y",
2180                "type": "uint256",
2181                "internalType": "BN254.BaseField"
2182              }
2183            ]
2184          },
2185          {
2186            "name": "qC",
2187            "type": "tuple",
2188            "internalType": "struct BN254.G1Point",
2189            "components": [
2190              {
2191                "name": "x",
2192                "type": "uint256",
2193                "internalType": "BN254.BaseField"
2194              },
2195              {
2196                "name": "y",
2197                "type": "uint256",
2198                "internalType": "BN254.BaseField"
2199              }
2200            ]
2201          },
2202          {
2203            "name": "qH1",
2204            "type": "tuple",
2205            "internalType": "struct BN254.G1Point",
2206            "components": [
2207              {
2208                "name": "x",
2209                "type": "uint256",
2210                "internalType": "BN254.BaseField"
2211              },
2212              {
2213                "name": "y",
2214                "type": "uint256",
2215                "internalType": "BN254.BaseField"
2216              }
2217            ]
2218          },
2219          {
2220            "name": "qH2",
2221            "type": "tuple",
2222            "internalType": "struct BN254.G1Point",
2223            "components": [
2224              {
2225                "name": "x",
2226                "type": "uint256",
2227                "internalType": "BN254.BaseField"
2228              },
2229              {
2230                "name": "y",
2231                "type": "uint256",
2232                "internalType": "BN254.BaseField"
2233              }
2234            ]
2235          },
2236          {
2237            "name": "qH3",
2238            "type": "tuple",
2239            "internalType": "struct BN254.G1Point",
2240            "components": [
2241              {
2242                "name": "x",
2243                "type": "uint256",
2244                "internalType": "BN254.BaseField"
2245              },
2246              {
2247                "name": "y",
2248                "type": "uint256",
2249                "internalType": "BN254.BaseField"
2250              }
2251            ]
2252          },
2253          {
2254            "name": "qH4",
2255            "type": "tuple",
2256            "internalType": "struct BN254.G1Point",
2257            "components": [
2258              {
2259                "name": "x",
2260                "type": "uint256",
2261                "internalType": "BN254.BaseField"
2262              },
2263              {
2264                "name": "y",
2265                "type": "uint256",
2266                "internalType": "BN254.BaseField"
2267              }
2268            ]
2269          },
2270          {
2271            "name": "qEcc",
2272            "type": "tuple",
2273            "internalType": "struct BN254.G1Point",
2274            "components": [
2275              {
2276                "name": "x",
2277                "type": "uint256",
2278                "internalType": "BN254.BaseField"
2279              },
2280              {
2281                "name": "y",
2282                "type": "uint256",
2283                "internalType": "BN254.BaseField"
2284              }
2285            ]
2286          },
2287          {
2288            "name": "g2LSB",
2289            "type": "bytes32",
2290            "internalType": "bytes32"
2291          },
2292          {
2293            "name": "g2MSB",
2294            "type": "bytes32",
2295            "internalType": "bytes32"
2296          }
2297        ]
2298      },
2299      {
2300        "name": "publicInput",
2301        "type": "uint256[7]",
2302        "internalType": "uint256[7]"
2303      },
2304      {
2305        "name": "proof",
2306        "type": "tuple",
2307        "internalType": "struct IPlonkVerifier.PlonkProof",
2308        "components": [
2309          {
2310            "name": "wire0",
2311            "type": "tuple",
2312            "internalType": "struct BN254.G1Point",
2313            "components": [
2314              {
2315                "name": "x",
2316                "type": "uint256",
2317                "internalType": "BN254.BaseField"
2318              },
2319              {
2320                "name": "y",
2321                "type": "uint256",
2322                "internalType": "BN254.BaseField"
2323              }
2324            ]
2325          },
2326          {
2327            "name": "wire1",
2328            "type": "tuple",
2329            "internalType": "struct BN254.G1Point",
2330            "components": [
2331              {
2332                "name": "x",
2333                "type": "uint256",
2334                "internalType": "BN254.BaseField"
2335              },
2336              {
2337                "name": "y",
2338                "type": "uint256",
2339                "internalType": "BN254.BaseField"
2340              }
2341            ]
2342          },
2343          {
2344            "name": "wire2",
2345            "type": "tuple",
2346            "internalType": "struct BN254.G1Point",
2347            "components": [
2348              {
2349                "name": "x",
2350                "type": "uint256",
2351                "internalType": "BN254.BaseField"
2352              },
2353              {
2354                "name": "y",
2355                "type": "uint256",
2356                "internalType": "BN254.BaseField"
2357              }
2358            ]
2359          },
2360          {
2361            "name": "wire3",
2362            "type": "tuple",
2363            "internalType": "struct BN254.G1Point",
2364            "components": [
2365              {
2366                "name": "x",
2367                "type": "uint256",
2368                "internalType": "BN254.BaseField"
2369              },
2370              {
2371                "name": "y",
2372                "type": "uint256",
2373                "internalType": "BN254.BaseField"
2374              }
2375            ]
2376          },
2377          {
2378            "name": "wire4",
2379            "type": "tuple",
2380            "internalType": "struct BN254.G1Point",
2381            "components": [
2382              {
2383                "name": "x",
2384                "type": "uint256",
2385                "internalType": "BN254.BaseField"
2386              },
2387              {
2388                "name": "y",
2389                "type": "uint256",
2390                "internalType": "BN254.BaseField"
2391              }
2392            ]
2393          },
2394          {
2395            "name": "prodPerm",
2396            "type": "tuple",
2397            "internalType": "struct BN254.G1Point",
2398            "components": [
2399              {
2400                "name": "x",
2401                "type": "uint256",
2402                "internalType": "BN254.BaseField"
2403              },
2404              {
2405                "name": "y",
2406                "type": "uint256",
2407                "internalType": "BN254.BaseField"
2408              }
2409            ]
2410          },
2411          {
2412            "name": "split0",
2413            "type": "tuple",
2414            "internalType": "struct BN254.G1Point",
2415            "components": [
2416              {
2417                "name": "x",
2418                "type": "uint256",
2419                "internalType": "BN254.BaseField"
2420              },
2421              {
2422                "name": "y",
2423                "type": "uint256",
2424                "internalType": "BN254.BaseField"
2425              }
2426            ]
2427          },
2428          {
2429            "name": "split1",
2430            "type": "tuple",
2431            "internalType": "struct BN254.G1Point",
2432            "components": [
2433              {
2434                "name": "x",
2435                "type": "uint256",
2436                "internalType": "BN254.BaseField"
2437              },
2438              {
2439                "name": "y",
2440                "type": "uint256",
2441                "internalType": "BN254.BaseField"
2442              }
2443            ]
2444          },
2445          {
2446            "name": "split2",
2447            "type": "tuple",
2448            "internalType": "struct BN254.G1Point",
2449            "components": [
2450              {
2451                "name": "x",
2452                "type": "uint256",
2453                "internalType": "BN254.BaseField"
2454              },
2455              {
2456                "name": "y",
2457                "type": "uint256",
2458                "internalType": "BN254.BaseField"
2459              }
2460            ]
2461          },
2462          {
2463            "name": "split3",
2464            "type": "tuple",
2465            "internalType": "struct BN254.G1Point",
2466            "components": [
2467              {
2468                "name": "x",
2469                "type": "uint256",
2470                "internalType": "BN254.BaseField"
2471              },
2472              {
2473                "name": "y",
2474                "type": "uint256",
2475                "internalType": "BN254.BaseField"
2476              }
2477            ]
2478          },
2479          {
2480            "name": "split4",
2481            "type": "tuple",
2482            "internalType": "struct BN254.G1Point",
2483            "components": [
2484              {
2485                "name": "x",
2486                "type": "uint256",
2487                "internalType": "BN254.BaseField"
2488              },
2489              {
2490                "name": "y",
2491                "type": "uint256",
2492                "internalType": "BN254.BaseField"
2493              }
2494            ]
2495          },
2496          {
2497            "name": "zeta",
2498            "type": "tuple",
2499            "internalType": "struct BN254.G1Point",
2500            "components": [
2501              {
2502                "name": "x",
2503                "type": "uint256",
2504                "internalType": "BN254.BaseField"
2505              },
2506              {
2507                "name": "y",
2508                "type": "uint256",
2509                "internalType": "BN254.BaseField"
2510              }
2511            ]
2512          },
2513          {
2514            "name": "zetaOmega",
2515            "type": "tuple",
2516            "internalType": "struct BN254.G1Point",
2517            "components": [
2518              {
2519                "name": "x",
2520                "type": "uint256",
2521                "internalType": "BN254.BaseField"
2522              },
2523              {
2524                "name": "y",
2525                "type": "uint256",
2526                "internalType": "BN254.BaseField"
2527              }
2528            ]
2529          },
2530          {
2531            "name": "wireEval0",
2532            "type": "uint256",
2533            "internalType": "BN254.ScalarField"
2534          },
2535          {
2536            "name": "wireEval1",
2537            "type": "uint256",
2538            "internalType": "BN254.ScalarField"
2539          },
2540          {
2541            "name": "wireEval2",
2542            "type": "uint256",
2543            "internalType": "BN254.ScalarField"
2544          },
2545          {
2546            "name": "wireEval3",
2547            "type": "uint256",
2548            "internalType": "BN254.ScalarField"
2549          },
2550          {
2551            "name": "wireEval4",
2552            "type": "uint256",
2553            "internalType": "BN254.ScalarField"
2554          },
2555          {
2556            "name": "sigmaEval0",
2557            "type": "uint256",
2558            "internalType": "BN254.ScalarField"
2559          },
2560          {
2561            "name": "sigmaEval1",
2562            "type": "uint256",
2563            "internalType": "BN254.ScalarField"
2564          },
2565          {
2566            "name": "sigmaEval2",
2567            "type": "uint256",
2568            "internalType": "BN254.ScalarField"
2569          },
2570          {
2571            "name": "sigmaEval3",
2572            "type": "uint256",
2573            "internalType": "BN254.ScalarField"
2574          },
2575          {
2576            "name": "prodPermZetaOmegaEval",
2577            "type": "uint256",
2578            "internalType": "BN254.ScalarField"
2579          }
2580        ]
2581      }
2582    ],
2583    "outputs": [
2584      {
2585        "name": "",
2586        "type": "bool",
2587        "internalType": "bool"
2588      }
2589    ],
2590    "stateMutability": "view"
2591  },
2592  {
2593    "type": "error",
2594    "name": "InvalidPlonkArgs",
2595    "inputs": []
2596  },
2597  {
2598    "type": "error",
2599    "name": "UnsupportedDegree",
2600    "inputs": []
2601  },
2602  {
2603    "type": "error",
2604    "name": "WrongPlonkVK",
2605    "inputs": []
2606  }
2607]
2608```*/
2609#[allow(
2610    non_camel_case_types,
2611    non_snake_case,
2612    clippy::pub_underscore_fields,
2613    clippy::style,
2614    clippy::empty_structs_with_brackets
2615)]
2616pub mod PlonkVerifier {
2617    use alloy::sol_types as alloy_sol_types;
2618
2619    use super::*;
2620    /// The creation / init bytecode of the contract.
2621    ///
2622    /// ```text
2623    ///0x61229d610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004612031565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c6848484610271565b90505b9392505050565b80516100db90610465565b6100e88160200151610465565b6100f58160400151610465565b6101028160600151610465565b61010f8160800151610465565b61011c8160a00151610465565b6101298160c00151610465565b6101368160e00151610465565b610144816101000151610465565b610152816101200151610465565b610160816101400151610465565b61016e816101600151610465565b61017c816101800151610465565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206122715f395f51905f5281108061026d5760405162461bcd60e51b815260206004820152601b60248201527f426e3235343a20696e76616c6964207363616c6172206669656c64000000000060448201526064015b60405180910390fd5b5050565b5f8360200151600714610297576040516320fa9d8960e11b815260040160405180910390fd5b5f6102a3858585610513565b90505f6102b2865f0151610a73565b90505f6102c4828460a0015188610e51565b90506102e160405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526103158761016001516103108961018001518860e00151610eae565b610f4f565b91505f5f6103258b88878c610ff3565b91509150610336816103108461122b565b925061034f836103108b61016001518a60a00151610eae565b60a08801516040880151602001519194505f5160206122715f395f51905f52918290820990508160e08a015182099050610392856103108d610180015184610eae565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061045387826104468961122b565b61044e6112c8565b611395565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561049e57505050565b82516020840151826003848585860985090883828309148382108484101616935050508161050e5760405162461bcd60e51b815260206004820152601760248201527f426e3235343a20696e76616c696420473120706f696e740000000000000000006044820152606401610264565b505050565b6105536040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206122715f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a7b611d0e565b816201000003610bba576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610cfa576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610e38576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e7260405180606001604052805f81526020015f81526020015f81525090565b610e7c8484611475565b808252610e8c90859085906114c6565b60208201528051610ea290859084908690611535565b60408201529392505050565b604080518082019091525f8082526020820152610ec9611d32565b8351815260208085015190820152604081018390525f60608360808460076107d05a03fa90508080610ef9575f5ffd5b5080610f475760405162461bcd60e51b815260206004820152601960248201527f426e3235343a207363616c6172206d756c206661696c656421000000000000006044820152606401610264565b505092915050565b604080518082019091525f8082526020820152610f6a611d50565b8351815260208085015181830152835160408301528301516060808301919091525f908360c08460066107d05a03fa90508080610fa5575f5ffd5b5080610f475760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c6564210000006044820152606401610264565b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f61102687878787611683565b90505f5160206122715f395f51905f525f611042888789611b4d565b905061104e818361221e565b60c08901516101a08801519192509081908490819083098408925061107a856103108a5f015184610eae565b955083828209905083846101c08a01518309840892506110a2866103108a6020015184610eae565b955083828209905083846101e08a01518309840892506110ca866103108a6040015184610eae565b955083828209905083846102008a01518309840892506110f2866103108a6060015184610eae565b955083828209905083846102208a015183098408925061111a866103108a6080015184610eae565b955083828209905083846102408a0151830984089250611142866103108d6040015184610eae565b955083828209905083846102608a015183098408925061116a866103108d6060015184610eae565b955083828209905083846102808a0151830984089250611192866103108d6080015184610eae565b955083828209905083846102a08a01518309840892506111ba866103108d60a0015184610eae565b95505f8a60e00151905084856102c08b01518309850893506111e4876103108b60a0015184610eae565b965061121a6112146040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610eae565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611252575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516112969190612251565b6112c0907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761221e565b905292915050565b6112ef60405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f519150806114675760405162461bcd60e51b815260206004820152601c60248201527f426e3235343a2050616972696e6720636865636b206661696c656421000000006044820152606401610264565b50151590505b949350505050565b81515f905f5160206122715f395f51905f52908380156114b6578493505f5b828110156114aa57838586099450600101611494565b506001840393506114bd565b6001830393505b50505092915050565b5f826001036114d7575060016100c9565b815f036114e557505f6100c9565b60208401515f5160206122715f395f51905f52905f908281860990508580156115135760018703925061151a565b6001840392505b5061152482611c38565b915082828209979650505050505050565b5f5f5160206122715f395f51905f528282036115ae5760015f5b60078110156115a357818603611580578681600781106115715761157161220a565b6020020151935050505061146d565b828061158e5761158e61223d565b6040890151602001518309915060010161154f565b505f9250505061146d565b6115b6611d6e565b6040870151600160c0838101828152920190805b60078110156115f75760208403935085868a85518903088309808552601f199093019291506001016115ca565b505050505f5f5f90506001838960408c01515f5b600781101561164b578882518a85518c88518a0909098981880896505088898d84518c03088609945060209384019392830192919091019060010161160b565b50505050809250505f61165d83611c38565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206122715f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506117f08760a0015186610eae565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506118b7866103108c60c0015188856118b2919061221e565b610eae565b95506118d0866103108c60e001518a6101a00151610eae565b95506118ea866103108c61010001518a6101c00151610eae565b9550611904866103108c61012001518a6101e00151610eae565b955061191e866103108c61014001518a6102000151610eae565b9550806101c08801516101a0890151099250611943866103108c610160015186610eae565b9550806102008801516101e0890151099250611968866103108c610180015186610eae565b95506101a08701519250808384099150808283099150808284099250611997866103108c6101e0015186610eae565b95506101c087015192508083840991508082830991508082840992506119c6866103108c610200015186610eae565b95506101e087015192508083840991508082830991508082840992506119f5866103108c610220015186610eae565b95506102008701519250808384099150808283099150808284099250611a24866103108c610240015186610eae565b9550611a41866103108c6101a001516118b28b6102200151611cd9565b9550611a52868b6101c00151610f4f565b9550806101c08801516101a0890151099250806101e08801518409925080610200880151840992508061022088015184099250611a98866103108c610260015186610eae565b9550611aa6885f0151611cd9565b9450611aba866103108960c0015188610eae565b955080600189510860a08a0151909350819080099150808284099250808386099450611aee866103108960e0015188610eae565b9550808386099450611b098661031089610100015188610eae565b9550808386099450611b248661031089610120015188610eae565b9550808386099450611b3f8661031089610140015188610eae565b9a9950505050505050505050565b5f5f5f5160206122715f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f5f5f5f5160206122715f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611cd25760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c6564210000006044820152606401610264565b5050919050565b5f611cf15f5160206122715f395f51905f5283612251565b611d08905f5160206122715f395f51905f5261221e565b92915050565b60405180606001604052805f81526020015f8152602001611d2d611d6e565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611dc457611dc4611d8c565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611dc457611dc4611d8c565b5f60408284031215611dfe575f5ffd5b6040805190810167ffffffffffffffff81118282101715611e2157611e21611d8c565b604052823581526020928301359281019290925250919050565b5f82601f830112611e4a575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611e6d57611e6d611d8c565b6040528060e0840185811115611e81575f5ffd5b845b81811015611e9b578035835260209283019201611e83565b509195945050505050565b5f6104808284031215611eb7575f5ffd5b611ebf611da0565b9050611ecb8383611dee565b8152611eda8360408401611dee565b6020820152611eec8360808401611dee565b6040820152611efe8360c08401611dee565b6060820152611f11836101008401611dee565b6080820152611f24836101408401611dee565b60a0820152611f37836101808401611dee565b60c0820152611f4a836101c08401611dee565b60e0820152611f5d836102008401611dee565b610100820152611f71836102408401611dee565b610120820152611f85836102808401611dee565b610140820152611f99836102c08401611dee565b610160820152611fad836103008401611dee565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215612045575f5ffd5b610500811215612053575f5ffd5b5061205c611dca565b84358152602080860135908201526120778660408701611dee565b60408201526120898660808701611dee565b606082015261209b8660c08701611dee565b60808201526120ae866101008701611dee565b60a08201526120c1866101408701611dee565b60c08201526120d4866101808701611dee565b60e08201526120e7866101c08701611dee565b6101008201526120fb866102008701611dee565b61012082015261210f866102408701611dee565b610140820152612123866102808701611dee565b610160820152612137866102c08701611dee565b61018082015261214b866103008701611dee565b6101a082015261215f866103408701611dee565b6101c0820152612173866103808701611dee565b6101e0820152612187866103c08701611dee565b61020082015261219b866104008701611dee565b6102208201526121af866104408701611dee565b6102408201526121c3866104808701611dee565b6102608201526104c08501356102808201526104e08501356102a082015292506121f1856105008601611e3b565b9150612201856105e08601611ea6565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b81810381811115611d0857634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261226b57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a
2624    /// ```
2625    #[rustfmt::skip]
2626    #[allow(clippy::all)]
2627    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
2628        b"a\"\x9Da\x004`\x0B\x82\x82\x829\x80Q_\x1A`s\x14`(WcNH{q`\xE0\x1B_R_`\x04R`$_\xFD[0_R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a 1V[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02qV[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x04eV[a\0\xE8\x81` \x01Qa\x04eV[a\0\xF5\x81`@\x01Qa\x04eV[a\x01\x02\x81``\x01Qa\x04eV[a\x01\x0F\x81`\x80\x01Qa\x04eV[a\x01\x1C\x81`\xA0\x01Qa\x04eV[a\x01)\x81`\xC0\x01Qa\x04eV[a\x016\x81`\xE0\x01Qa\x04eV[a\x01D\x81a\x01\0\x01Qa\x04eV[a\x01R\x81a\x01 \x01Qa\x04eV[a\x01`\x81a\x01@\x01Qa\x04eV[a\x01n\x81a\x01`\x01Qa\x04eV[a\x01|\x81a\x01\x80\x01Qa\x04eV[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a\"q_9_Q\x90_R\x81\x10\x80a\x02mW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7FBn254: invalid scalar field\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02\x97W`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02\xA3\x85\x85\x85a\x05\x13V[\x90P_a\x02\xB2\x86_\x01Qa\nsV[\x90P_a\x02\xC4\x82\x84`\xA0\x01Q\x88a\x0EQV[\x90Pa\x02\xE1`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x03\x15\x87a\x01`\x01Qa\x03\x10\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0E\xAEV[a\x0FOV[\x91P__a\x03%\x8B\x88\x87\x8Ca\x0F\xF3V[\x91P\x91Pa\x036\x81a\x03\x10\x84a\x12+V[\x92Pa\x03O\x83a\x03\x10\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0E\xAEV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a\"q_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03\x92\x85a\x03\x10\x8Da\x01\x80\x01Q\x84a\x0E\xAEV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04S\x87\x82a\x04F\x89a\x12+V[a\x04Na\x12\xC8V[a\x13\x95V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04\x9EWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x05\x0EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02dV[PPPV[a\x05S`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a\"q_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n{a\x1D\x0EV[\x81b\x01\0\0\x03a\x0B\xBAW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\xFAW`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\x0E8W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0Er`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E|\x84\x84a\x14uV[\x80\x82Ra\x0E\x8C\x90\x85\x90\x85\x90a\x14\xC6V[` \x82\x01R\x80Qa\x0E\xA2\x90\x85\x90\x84\x90\x86\x90a\x155V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1D2V[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x81\x01\x83\x90R_``\x83`\x80\x84`\x07a\x07\xD0Z\x03\xFA\x90P\x80\x80a\x0E\xF9W__\xFD[P\x80a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x19`$\x82\x01R\x7FBn254: scalar mul failed!\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02dV[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Fja\x1DPV[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x83\x01R\x83\x01Q``\x80\x83\x01\x91\x90\x91R_\x90\x83`\xC0\x84`\x06a\x07\xD0Z\x03\xFA\x90P\x80\x80a\x0F\xA5W__\xFD[P\x80a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: group addition failed!\0\0\0`D\x82\x01R`d\x01a\x02dV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10&\x87\x87\x87\x87a\x16\x83V[\x90P_Q` a\"q_9_Q\x90_R_a\x10B\x88\x87\x89a\x1BMV[\x90Pa\x10N\x81\x83a\"\x1EV[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x10z\x85a\x03\x10\x8A_\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xA2\x86a\x03\x10\x8A` \x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xCA\x86a\x03\x10\x8A`@\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xF2\x86a\x03\x10\x8A``\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x11\x1A\x86a\x03\x10\x8A`\x80\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x11B\x86a\x03\x10\x8D`@\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x11j\x86a\x03\x10\x8D``\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x11\x92\x86a\x03\x10\x8D`\x80\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x11\xBA\x86a\x03\x10\x8D`\xA0\x01Q\x84a\x0E\xAEV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\xE4\x87a\x03\x10\x8B`\xA0\x01Q\x84a\x0E\xAEV[\x96Pa\x12\x1Aa\x12\x14`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0E\xAEV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x12RWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x12\x96\x91\x90a\"QV[a\x12\xC0\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa\"\x1EV[\x90R\x92\x91PPV[a\x12\xEF`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x14gW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x02dV[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a\"q_9_Q\x90_R\x90\x83\x80\x15a\x14\xB6W\x84\x93P_[\x82\x81\x10\x15a\x14\xAAW\x83\x85\x86\t\x94P`\x01\x01a\x14\x94V[P`\x01\x84\x03\x93Pa\x14\xBDV[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x14\xD7WP`\x01a\0\xC9V[\x81_\x03a\x14\xE5WP_a\0\xC9V[` \x84\x01Q_Q` a\"q_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x15\x13W`\x01\x87\x03\x92Pa\x15\x1AV[`\x01\x84\x03\x92P[Pa\x15$\x82a\x1C8V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a\"q_9_Q\x90_R\x82\x82\x03a\x15\xAEW`\x01_[`\x07\x81\x10\x15a\x15\xA3W\x81\x86\x03a\x15\x80W\x86\x81`\x07\x81\x10a\x15qWa\x15qa\"\nV[` \x02\x01Q\x93PPPPa\x14mV[\x82\x80a\x15\x8EWa\x15\x8Ea\"=V[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x15OV[P_\x92PPPa\x14mV[a\x15\xB6a\x1DnV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x15\xF7W` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x15\xCAV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x16KW\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x16\x0BV[PPPP\x80\x92PP_a\x16]\x83a\x1C8V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a\"q_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x17\xF0\x87`\xA0\x01Q\x86a\x0E\xAEV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x18\xB7\x86a\x03\x10\x8C`\xC0\x01Q\x88\x85a\x18\xB2\x91\x90a\"\x1EV[a\x0E\xAEV[\x95Pa\x18\xD0\x86a\x03\x10\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0E\xAEV[\x95Pa\x18\xEA\x86a\x03\x10\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0E\xAEV[\x95Pa\x19\x04\x86a\x03\x10\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0E\xAEV[\x95Pa\x19\x1E\x86a\x03\x10\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x19C\x86a\x03\x10\x8Ca\x01`\x01Q\x86a\x0E\xAEV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x19h\x86a\x03\x10\x8Ca\x01\x80\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x97\x86a\x03\x10\x8Ca\x01\xE0\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\xC6\x86a\x03\x10\x8Ca\x02\0\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\xF5\x86a\x03\x10\x8Ca\x02 \x01Q\x86a\x0E\xAEV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x1A$\x86a\x03\x10\x8Ca\x02@\x01Q\x86a\x0E\xAEV[\x95Pa\x1AA\x86a\x03\x10\x8Ca\x01\xA0\x01Qa\x18\xB2\x8Ba\x02 \x01Qa\x1C\xD9V[\x95Pa\x1AR\x86\x8Ba\x01\xC0\x01Qa\x0FOV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x1A\x98\x86a\x03\x10\x8Ca\x02`\x01Q\x86a\x0E\xAEV[\x95Pa\x1A\xA6\x88_\x01Qa\x1C\xD9V[\x94Pa\x1A\xBA\x86a\x03\x10\x89`\xC0\x01Q\x88a\x0E\xAEV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x1A\xEE\x86a\x03\x10\x89`\xE0\x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B\t\x86a\x03\x10\x89a\x01\0\x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B$\x86a\x03\x10\x89a\x01 \x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B?\x86a\x03\x10\x89a\x01@\x01Q\x88a\x0E\xAEV[\x9A\x99PPPPPPPPPPV[___Q` a\"q_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[____Q` a\"q_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1C\xD2W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: pow precompile failed!\0\0\0`D\x82\x01R`d\x01a\x02dV[PP\x91\x90PV[_a\x1C\xF1_Q` a\"q_9_Q\x90_R\x83a\"QV[a\x1D\x08\x90_Q` a\"q_9_Q\x90_Ra\"\x1EV[\x92\x91PPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1D-a\x1DnV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1D\xC4Wa\x1D\xC4a\x1D\x8CV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1D\xC4Wa\x1D\xC4a\x1D\x8CV[_`@\x82\x84\x03\x12\x15a\x1D\xFEW__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1E!Wa\x1E!a\x1D\x8CV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1EJW__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1EmWa\x1Ema\x1D\x8CV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1E\x81W__\xFD[\x84[\x81\x81\x10\x15a\x1E\x9BW\x805\x83R` \x92\x83\x01\x92\x01a\x1E\x83V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1E\xB7W__\xFD[a\x1E\xBFa\x1D\xA0V[\x90Pa\x1E\xCB\x83\x83a\x1D\xEEV[\x81Ra\x1E\xDA\x83`@\x84\x01a\x1D\xEEV[` \x82\x01Ra\x1E\xEC\x83`\x80\x84\x01a\x1D\xEEV[`@\x82\x01Ra\x1E\xFE\x83`\xC0\x84\x01a\x1D\xEEV[``\x82\x01Ra\x1F\x11\x83a\x01\0\x84\x01a\x1D\xEEV[`\x80\x82\x01Ra\x1F$\x83a\x01@\x84\x01a\x1D\xEEV[`\xA0\x82\x01Ra\x1F7\x83a\x01\x80\x84\x01a\x1D\xEEV[`\xC0\x82\x01Ra\x1FJ\x83a\x01\xC0\x84\x01a\x1D\xEEV[`\xE0\x82\x01Ra\x1F]\x83a\x02\0\x84\x01a\x1D\xEEV[a\x01\0\x82\x01Ra\x1Fq\x83a\x02@\x84\x01a\x1D\xEEV[a\x01 \x82\x01Ra\x1F\x85\x83a\x02\x80\x84\x01a\x1D\xEEV[a\x01@\x82\x01Ra\x1F\x99\x83a\x02\xC0\x84\x01a\x1D\xEEV[a\x01`\x82\x01Ra\x1F\xAD\x83a\x03\0\x84\x01a\x1D\xEEV[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a EW__\xFD[a\x05\0\x81\x12\x15a SW__\xFD[Pa \\a\x1D\xCAV[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra w\x86`@\x87\x01a\x1D\xEEV[`@\x82\x01Ra \x89\x86`\x80\x87\x01a\x1D\xEEV[``\x82\x01Ra \x9B\x86`\xC0\x87\x01a\x1D\xEEV[`\x80\x82\x01Ra \xAE\x86a\x01\0\x87\x01a\x1D\xEEV[`\xA0\x82\x01Ra \xC1\x86a\x01@\x87\x01a\x1D\xEEV[`\xC0\x82\x01Ra \xD4\x86a\x01\x80\x87\x01a\x1D\xEEV[`\xE0\x82\x01Ra \xE7\x86a\x01\xC0\x87\x01a\x1D\xEEV[a\x01\0\x82\x01Ra \xFB\x86a\x02\0\x87\x01a\x1D\xEEV[a\x01 \x82\x01Ra!\x0F\x86a\x02@\x87\x01a\x1D\xEEV[a\x01@\x82\x01Ra!#\x86a\x02\x80\x87\x01a\x1D\xEEV[a\x01`\x82\x01Ra!7\x86a\x02\xC0\x87\x01a\x1D\xEEV[a\x01\x80\x82\x01Ra!K\x86a\x03\0\x87\x01a\x1D\xEEV[a\x01\xA0\x82\x01Ra!_\x86a\x03@\x87\x01a\x1D\xEEV[a\x01\xC0\x82\x01Ra!s\x86a\x03\x80\x87\x01a\x1D\xEEV[a\x01\xE0\x82\x01Ra!\x87\x86a\x03\xC0\x87\x01a\x1D\xEEV[a\x02\0\x82\x01Ra!\x9B\x86a\x04\0\x87\x01a\x1D\xEEV[a\x02 \x82\x01Ra!\xAF\x86a\x04@\x87\x01a\x1D\xEEV[a\x02@\x82\x01Ra!\xC3\x86a\x04\x80\x87\x01a\x1D\xEEV[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa!\xF1\x85a\x05\0\x86\x01a\x1E;V[\x91Pa\"\x01\x85a\x05\xE0\x86\x01a\x1E\xA6V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a\x1D\x08WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\"kWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08\x1C\0\n",
2629    );
2630    /// The runtime bytecode of the contract, as deployed on the network.
2631    ///
2632    /// ```text
2633    ///0x7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004612031565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c6848484610271565b90505b9392505050565b80516100db90610465565b6100e88160200151610465565b6100f58160400151610465565b6101028160600151610465565b61010f8160800151610465565b61011c8160a00151610465565b6101298160c00151610465565b6101368160e00151610465565b610144816101000151610465565b610152816101200151610465565b610160816101400151610465565b61016e816101600151610465565b61017c816101800151610465565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206122715f395f51905f5281108061026d5760405162461bcd60e51b815260206004820152601b60248201527f426e3235343a20696e76616c6964207363616c6172206669656c64000000000060448201526064015b60405180910390fd5b5050565b5f8360200151600714610297576040516320fa9d8960e11b815260040160405180910390fd5b5f6102a3858585610513565b90505f6102b2865f0151610a73565b90505f6102c4828460a0015188610e51565b90506102e160405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526103158761016001516103108961018001518860e00151610eae565b610f4f565b91505f5f6103258b88878c610ff3565b91509150610336816103108461122b565b925061034f836103108b61016001518a60a00151610eae565b60a08801516040880151602001519194505f5160206122715f395f51905f52918290820990508160e08a015182099050610392856103108d610180015184610eae565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061045387826104468961122b565b61044e6112c8565b611395565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561049e57505050565b82516020840151826003848585860985090883828309148382108484101616935050508161050e5760405162461bcd60e51b815260206004820152601760248201527f426e3235343a20696e76616c696420473120706f696e740000000000000000006044820152606401610264565b505050565b6105536040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206122715f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a7b611d0e565b816201000003610bba576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610cfa576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610e38576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e7260405180606001604052805f81526020015f81526020015f81525090565b610e7c8484611475565b808252610e8c90859085906114c6565b60208201528051610ea290859084908690611535565b60408201529392505050565b604080518082019091525f8082526020820152610ec9611d32565b8351815260208085015190820152604081018390525f60608360808460076107d05a03fa90508080610ef9575f5ffd5b5080610f475760405162461bcd60e51b815260206004820152601960248201527f426e3235343a207363616c6172206d756c206661696c656421000000000000006044820152606401610264565b505092915050565b604080518082019091525f8082526020820152610f6a611d50565b8351815260208085015181830152835160408301528301516060808301919091525f908360c08460066107d05a03fa90508080610fa5575f5ffd5b5080610f475760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c6564210000006044820152606401610264565b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f61102687878787611683565b90505f5160206122715f395f51905f525f611042888789611b4d565b905061104e818361221e565b60c08901516101a08801519192509081908490819083098408925061107a856103108a5f015184610eae565b955083828209905083846101c08a01518309840892506110a2866103108a6020015184610eae565b955083828209905083846101e08a01518309840892506110ca866103108a6040015184610eae565b955083828209905083846102008a01518309840892506110f2866103108a6060015184610eae565b955083828209905083846102208a015183098408925061111a866103108a6080015184610eae565b955083828209905083846102408a0151830984089250611142866103108d6040015184610eae565b955083828209905083846102608a015183098408925061116a866103108d6060015184610eae565b955083828209905083846102808a0151830984089250611192866103108d6080015184610eae565b955083828209905083846102a08a01518309840892506111ba866103108d60a0015184610eae565b95505f8a60e00151905084856102c08b01518309850893506111e4876103108b60a0015184610eae565b965061121a6112146040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610eae565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611252575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516112969190612251565b6112c0907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4761221e565b905292915050565b6112ef60405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f519150806114675760405162461bcd60e51b815260206004820152601c60248201527f426e3235343a2050616972696e6720636865636b206661696c656421000000006044820152606401610264565b50151590505b949350505050565b81515f905f5160206122715f395f51905f52908380156114b6578493505f5b828110156114aa57838586099450600101611494565b506001840393506114bd565b6001830393505b50505092915050565b5f826001036114d7575060016100c9565b815f036114e557505f6100c9565b60208401515f5160206122715f395f51905f52905f908281860990508580156115135760018703925061151a565b6001840392505b5061152482611c38565b915082828209979650505050505050565b5f5f5160206122715f395f51905f528282036115ae5760015f5b60078110156115a357818603611580578681600781106115715761157161220a565b6020020151935050505061146d565b828061158e5761158e61223d565b6040890151602001518309915060010161154f565b505f9250505061146d565b6115b6611d6e565b6040870151600160c0838101828152920190805b60078110156115f75760208403935085868a85518903088309808552601f199093019291506001016115ca565b505050505f5f5f90506001838960408c01515f5b600781101561164b578882518a85518c88518a0909098981880896505088898d84518c03088609945060209384019392830192919091019060010161160b565b50505050809250505f61165d83611c38565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206122715f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506117f08760a0015186610eae565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506118b7866103108c60c0015188856118b2919061221e565b610eae565b95506118d0866103108c60e001518a6101a00151610eae565b95506118ea866103108c61010001518a6101c00151610eae565b9550611904866103108c61012001518a6101e00151610eae565b955061191e866103108c61014001518a6102000151610eae565b9550806101c08801516101a0890151099250611943866103108c610160015186610eae565b9550806102008801516101e0890151099250611968866103108c610180015186610eae565b95506101a08701519250808384099150808283099150808284099250611997866103108c6101e0015186610eae565b95506101c087015192508083840991508082830991508082840992506119c6866103108c610200015186610eae565b95506101e087015192508083840991508082830991508082840992506119f5866103108c610220015186610eae565b95506102008701519250808384099150808283099150808284099250611a24866103108c610240015186610eae565b9550611a41866103108c6101a001516118b28b6102200151611cd9565b9550611a52868b6101c00151610f4f565b9550806101c08801516101a0890151099250806101e08801518409925080610200880151840992508061022088015184099250611a98866103108c610260015186610eae565b9550611aa6885f0151611cd9565b9450611aba866103108960c0015188610eae565b955080600189510860a08a0151909350819080099150808284099250808386099450611aee866103108960e0015188610eae565b9550808386099450611b098661031089610100015188610eae565b9550808386099450611b248661031089610120015188610eae565b9550808386099450611b3f8661031089610140015188610eae565b9a9950505050505050505050565b5f5f5f5160206122715f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f5f5f5f5160206122715f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611cd25760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c6564210000006044820152606401610264565b5050919050565b5f611cf15f5160206122715f395f51905f5283612251565b611d08905f5160206122715f395f51905f5261221e565b92915050565b60405180606001604052805f81526020015f8152602001611d2d611d6e565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611dc457611dc4611d8c565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611dc457611dc4611d8c565b5f60408284031215611dfe575f5ffd5b6040805190810167ffffffffffffffff81118282101715611e2157611e21611d8c565b604052823581526020928301359281019290925250919050565b5f82601f830112611e4a575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611e6d57611e6d611d8c565b6040528060e0840185811115611e81575f5ffd5b845b81811015611e9b578035835260209283019201611e83565b509195945050505050565b5f6104808284031215611eb7575f5ffd5b611ebf611da0565b9050611ecb8383611dee565b8152611eda8360408401611dee565b6020820152611eec8360808401611dee565b6040820152611efe8360c08401611dee565b6060820152611f11836101008401611dee565b6080820152611f24836101408401611dee565b60a0820152611f37836101808401611dee565b60c0820152611f4a836101c08401611dee565b60e0820152611f5d836102008401611dee565b610100820152611f71836102408401611dee565b610120820152611f85836102808401611dee565b610140820152611f99836102c08401611dee565b610160820152611fad836103008401611dee565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215612045575f5ffd5b610500811215612053575f5ffd5b5061205c611dca565b84358152602080860135908201526120778660408701611dee565b60408201526120898660808701611dee565b606082015261209b8660c08701611dee565b60808201526120ae866101008701611dee565b60a08201526120c1866101408701611dee565b60c08201526120d4866101808701611dee565b60e08201526120e7866101c08701611dee565b6101008201526120fb866102008701611dee565b61012082015261210f866102408701611dee565b610140820152612123866102808701611dee565b610160820152612137866102c08701611dee565b61018082015261214b866103008701611dee565b6101a082015261215f866103408701611dee565b6101c0820152612173866103808701611dee565b6101e0820152612187866103c08701611dee565b61020082015261219b866104008701611dee565b6102208201526121af866104408701611dee565b6102408201526121c3866104808701611dee565b6102608201526104c08501356102808201526104e08501356102a082015292506121f1856105008601611e3b565b9150612201856105e08601611ea6565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b81810381811115611d0857634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f8261226b57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a
2634    /// ```
2635    #[rustfmt::skip]
2636    #[allow(clippy::all)]
2637    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
2638        b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a 1V[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02qV[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x04eV[a\0\xE8\x81` \x01Qa\x04eV[a\0\xF5\x81`@\x01Qa\x04eV[a\x01\x02\x81``\x01Qa\x04eV[a\x01\x0F\x81`\x80\x01Qa\x04eV[a\x01\x1C\x81`\xA0\x01Qa\x04eV[a\x01)\x81`\xC0\x01Qa\x04eV[a\x016\x81`\xE0\x01Qa\x04eV[a\x01D\x81a\x01\0\x01Qa\x04eV[a\x01R\x81a\x01 \x01Qa\x04eV[a\x01`\x81a\x01@\x01Qa\x04eV[a\x01n\x81a\x01`\x01Qa\x04eV[a\x01|\x81a\x01\x80\x01Qa\x04eV[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a\"q_9_Q\x90_R\x81\x10\x80a\x02mW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1B`$\x82\x01R\x7FBn254: invalid scalar field\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02\x97W`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02\xA3\x85\x85\x85a\x05\x13V[\x90P_a\x02\xB2\x86_\x01Qa\nsV[\x90P_a\x02\xC4\x82\x84`\xA0\x01Q\x88a\x0EQV[\x90Pa\x02\xE1`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x03\x15\x87a\x01`\x01Qa\x03\x10\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0E\xAEV[a\x0FOV[\x91P__a\x03%\x8B\x88\x87\x8Ca\x0F\xF3V[\x91P\x91Pa\x036\x81a\x03\x10\x84a\x12+V[\x92Pa\x03O\x83a\x03\x10\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0E\xAEV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a\"q_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03\x92\x85a\x03\x10\x8Da\x01\x80\x01Q\x84a\x0E\xAEV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04S\x87\x82a\x04F\x89a\x12+V[a\x04Na\x12\xC8V[a\x13\x95V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04\x9EWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x05\x0EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FBn254: invalid G1 point\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02dV[PPPV[a\x05S`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a\"q_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n{a\x1D\x0EV[\x81b\x01\0\0\x03a\x0B\xBAW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\xFAW`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\x0E8W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0Er`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E|\x84\x84a\x14uV[\x80\x82Ra\x0E\x8C\x90\x85\x90\x85\x90a\x14\xC6V[` \x82\x01R\x80Qa\x0E\xA2\x90\x85\x90\x84\x90\x86\x90a\x155V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1D2V[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x81\x01\x83\x90R_``\x83`\x80\x84`\x07a\x07\xD0Z\x03\xFA\x90P\x80\x80a\x0E\xF9W__\xFD[P\x80a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x19`$\x82\x01R\x7FBn254: scalar mul failed!\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x02dV[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Fja\x1DPV[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x83\x01R\x83\x01Q``\x80\x83\x01\x91\x90\x91R_\x90\x83`\xC0\x84`\x06a\x07\xD0Z\x03\xFA\x90P\x80\x80a\x0F\xA5W__\xFD[P\x80a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: group addition failed!\0\0\0`D\x82\x01R`d\x01a\x02dV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x10&\x87\x87\x87\x87a\x16\x83V[\x90P_Q` a\"q_9_Q\x90_R_a\x10B\x88\x87\x89a\x1BMV[\x90Pa\x10N\x81\x83a\"\x1EV[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x10z\x85a\x03\x10\x8A_\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xA2\x86a\x03\x10\x8A` \x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xCA\x86a\x03\x10\x8A`@\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xF2\x86a\x03\x10\x8A``\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x11\x1A\x86a\x03\x10\x8A`\x80\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x11B\x86a\x03\x10\x8D`@\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x11j\x86a\x03\x10\x8D``\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x11\x92\x86a\x03\x10\x8D`\x80\x01Q\x84a\x0E\xAEV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x11\xBA\x86a\x03\x10\x8D`\xA0\x01Q\x84a\x0E\xAEV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\xE4\x87a\x03\x10\x8B`\xA0\x01Q\x84a\x0E\xAEV[\x96Pa\x12\x1Aa\x12\x14`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0E\xAEV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x12RWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x12\x96\x91\x90a\"QV[a\x12\xC0\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa\"\x1EV[\x90R\x92\x91PPV[a\x12\xEF`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x14gW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBn254: Pairing check failed!\0\0\0\0`D\x82\x01R`d\x01a\x02dV[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a\"q_9_Q\x90_R\x90\x83\x80\x15a\x14\xB6W\x84\x93P_[\x82\x81\x10\x15a\x14\xAAW\x83\x85\x86\t\x94P`\x01\x01a\x14\x94V[P`\x01\x84\x03\x93Pa\x14\xBDV[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x14\xD7WP`\x01a\0\xC9V[\x81_\x03a\x14\xE5WP_a\0\xC9V[` \x84\x01Q_Q` a\"q_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x15\x13W`\x01\x87\x03\x92Pa\x15\x1AV[`\x01\x84\x03\x92P[Pa\x15$\x82a\x1C8V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a\"q_9_Q\x90_R\x82\x82\x03a\x15\xAEW`\x01_[`\x07\x81\x10\x15a\x15\xA3W\x81\x86\x03a\x15\x80W\x86\x81`\x07\x81\x10a\x15qWa\x15qa\"\nV[` \x02\x01Q\x93PPPPa\x14mV[\x82\x80a\x15\x8EWa\x15\x8Ea\"=V[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x15OV[P_\x92PPPa\x14mV[a\x15\xB6a\x1DnV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x15\xF7W` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x15\xCAV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x16KW\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x16\x0BV[PPPP\x80\x92PP_a\x16]\x83a\x1C8V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a\"q_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x17\xF0\x87`\xA0\x01Q\x86a\x0E\xAEV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x18\xB7\x86a\x03\x10\x8C`\xC0\x01Q\x88\x85a\x18\xB2\x91\x90a\"\x1EV[a\x0E\xAEV[\x95Pa\x18\xD0\x86a\x03\x10\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0E\xAEV[\x95Pa\x18\xEA\x86a\x03\x10\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0E\xAEV[\x95Pa\x19\x04\x86a\x03\x10\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0E\xAEV[\x95Pa\x19\x1E\x86a\x03\x10\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x19C\x86a\x03\x10\x8Ca\x01`\x01Q\x86a\x0E\xAEV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x19h\x86a\x03\x10\x8Ca\x01\x80\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x97\x86a\x03\x10\x8Ca\x01\xE0\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\xC6\x86a\x03\x10\x8Ca\x02\0\x01Q\x86a\x0E\xAEV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\xF5\x86a\x03\x10\x8Ca\x02 \x01Q\x86a\x0E\xAEV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x1A$\x86a\x03\x10\x8Ca\x02@\x01Q\x86a\x0E\xAEV[\x95Pa\x1AA\x86a\x03\x10\x8Ca\x01\xA0\x01Qa\x18\xB2\x8Ba\x02 \x01Qa\x1C\xD9V[\x95Pa\x1AR\x86\x8Ba\x01\xC0\x01Qa\x0FOV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x1A\x98\x86a\x03\x10\x8Ca\x02`\x01Q\x86a\x0E\xAEV[\x95Pa\x1A\xA6\x88_\x01Qa\x1C\xD9V[\x94Pa\x1A\xBA\x86a\x03\x10\x89`\xC0\x01Q\x88a\x0E\xAEV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x1A\xEE\x86a\x03\x10\x89`\xE0\x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B\t\x86a\x03\x10\x89a\x01\0\x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B$\x86a\x03\x10\x89a\x01 \x01Q\x88a\x0E\xAEV[\x95P\x80\x83\x86\t\x94Pa\x1B?\x86a\x03\x10\x89a\x01@\x01Q\x88a\x0E\xAEV[\x9A\x99PPPPPPPPPPV[___Q` a\"q_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[____Q` a\"q_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1C\xD2W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FBn254: pow precompile failed!\0\0\0`D\x82\x01R`d\x01a\x02dV[PP\x91\x90PV[_a\x1C\xF1_Q` a\"q_9_Q\x90_R\x83a\"QV[a\x1D\x08\x90_Q` a\"q_9_Q\x90_Ra\"\x1EV[\x92\x91PPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1D-a\x1DnV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1D\xC4Wa\x1D\xC4a\x1D\x8CV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1D\xC4Wa\x1D\xC4a\x1D\x8CV[_`@\x82\x84\x03\x12\x15a\x1D\xFEW__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1E!Wa\x1E!a\x1D\x8CV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1EJW__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1EmWa\x1Ema\x1D\x8CV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1E\x81W__\xFD[\x84[\x81\x81\x10\x15a\x1E\x9BW\x805\x83R` \x92\x83\x01\x92\x01a\x1E\x83V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1E\xB7W__\xFD[a\x1E\xBFa\x1D\xA0V[\x90Pa\x1E\xCB\x83\x83a\x1D\xEEV[\x81Ra\x1E\xDA\x83`@\x84\x01a\x1D\xEEV[` \x82\x01Ra\x1E\xEC\x83`\x80\x84\x01a\x1D\xEEV[`@\x82\x01Ra\x1E\xFE\x83`\xC0\x84\x01a\x1D\xEEV[``\x82\x01Ra\x1F\x11\x83a\x01\0\x84\x01a\x1D\xEEV[`\x80\x82\x01Ra\x1F$\x83a\x01@\x84\x01a\x1D\xEEV[`\xA0\x82\x01Ra\x1F7\x83a\x01\x80\x84\x01a\x1D\xEEV[`\xC0\x82\x01Ra\x1FJ\x83a\x01\xC0\x84\x01a\x1D\xEEV[`\xE0\x82\x01Ra\x1F]\x83a\x02\0\x84\x01a\x1D\xEEV[a\x01\0\x82\x01Ra\x1Fq\x83a\x02@\x84\x01a\x1D\xEEV[a\x01 \x82\x01Ra\x1F\x85\x83a\x02\x80\x84\x01a\x1D\xEEV[a\x01@\x82\x01Ra\x1F\x99\x83a\x02\xC0\x84\x01a\x1D\xEEV[a\x01`\x82\x01Ra\x1F\xAD\x83a\x03\0\x84\x01a\x1D\xEEV[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a EW__\xFD[a\x05\0\x81\x12\x15a SW__\xFD[Pa \\a\x1D\xCAV[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra w\x86`@\x87\x01a\x1D\xEEV[`@\x82\x01Ra \x89\x86`\x80\x87\x01a\x1D\xEEV[``\x82\x01Ra \x9B\x86`\xC0\x87\x01a\x1D\xEEV[`\x80\x82\x01Ra \xAE\x86a\x01\0\x87\x01a\x1D\xEEV[`\xA0\x82\x01Ra \xC1\x86a\x01@\x87\x01a\x1D\xEEV[`\xC0\x82\x01Ra \xD4\x86a\x01\x80\x87\x01a\x1D\xEEV[`\xE0\x82\x01Ra \xE7\x86a\x01\xC0\x87\x01a\x1D\xEEV[a\x01\0\x82\x01Ra \xFB\x86a\x02\0\x87\x01a\x1D\xEEV[a\x01 \x82\x01Ra!\x0F\x86a\x02@\x87\x01a\x1D\xEEV[a\x01@\x82\x01Ra!#\x86a\x02\x80\x87\x01a\x1D\xEEV[a\x01`\x82\x01Ra!7\x86a\x02\xC0\x87\x01a\x1D\xEEV[a\x01\x80\x82\x01Ra!K\x86a\x03\0\x87\x01a\x1D\xEEV[a\x01\xA0\x82\x01Ra!_\x86a\x03@\x87\x01a\x1D\xEEV[a\x01\xC0\x82\x01Ra!s\x86a\x03\x80\x87\x01a\x1D\xEEV[a\x01\xE0\x82\x01Ra!\x87\x86a\x03\xC0\x87\x01a\x1D\xEEV[a\x02\0\x82\x01Ra!\x9B\x86a\x04\0\x87\x01a\x1D\xEEV[a\x02 \x82\x01Ra!\xAF\x86a\x04@\x87\x01a\x1D\xEEV[a\x02@\x82\x01Ra!\xC3\x86a\x04\x80\x87\x01a\x1D\xEEV[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa!\xF1\x85a\x05\0\x86\x01a\x1E;V[\x91Pa\"\x01\x85a\x05\xE0\x86\x01a\x1E\xA6V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a\x1D\x08WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a\"kWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08\x1C\0\n",
2639    );
2640    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2641    /**Custom error with signature `InvalidPlonkArgs()` and selector `0xfd9a2d1b`.
2642    ```solidity
2643    error InvalidPlonkArgs();
2644    ```*/
2645    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2646    #[derive(Clone)]
2647    pub struct InvalidPlonkArgs {}
2648    #[allow(
2649        non_camel_case_types,
2650        non_snake_case,
2651        clippy::pub_underscore_fields,
2652        clippy::style
2653    )]
2654    const _: () = {
2655        use alloy::sol_types as alloy_sol_types;
2656        #[doc(hidden)]
2657        type UnderlyingSolTuple<'a> = ();
2658        #[doc(hidden)]
2659        type UnderlyingRustTuple<'a> = ();
2660        #[cfg(test)]
2661        #[allow(dead_code, unreachable_patterns)]
2662        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2663            match _t {
2664                alloy_sol_types::private::AssertTypeEq::<
2665                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2666                >(_) => {},
2667            }
2668        }
2669        #[automatically_derived]
2670        #[doc(hidden)]
2671        impl ::core::convert::From<InvalidPlonkArgs> for UnderlyingRustTuple<'_> {
2672            fn from(value: InvalidPlonkArgs) -> Self {
2673                ()
2674            }
2675        }
2676        #[automatically_derived]
2677        #[doc(hidden)]
2678        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidPlonkArgs {
2679            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2680                Self {}
2681            }
2682        }
2683        #[automatically_derived]
2684        impl alloy_sol_types::SolError for InvalidPlonkArgs {
2685            type Parameters<'a> = UnderlyingSolTuple<'a>;
2686            type Token<'a> = <Self::Parameters<'a> as alloy_sol_types::SolType>::Token<'a>;
2687            const SIGNATURE: &'static str = "InvalidPlonkArgs()";
2688            const SELECTOR: [u8; 4] = [253u8, 154u8, 45u8, 27u8];
2689            #[inline]
2690            fn new<'a>(
2691                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2692            ) -> Self {
2693                tuple.into()
2694            }
2695            #[inline]
2696            fn tokenize(&self) -> Self::Token<'_> {
2697                ()
2698            }
2699        }
2700    };
2701    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2702    /**Custom error with signature `UnsupportedDegree()` and selector `0xe2ef09e5`.
2703    ```solidity
2704    error UnsupportedDegree();
2705    ```*/
2706    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2707    #[derive(Clone)]
2708    pub struct UnsupportedDegree {}
2709    #[allow(
2710        non_camel_case_types,
2711        non_snake_case,
2712        clippy::pub_underscore_fields,
2713        clippy::style
2714    )]
2715    const _: () = {
2716        use alloy::sol_types as alloy_sol_types;
2717        #[doc(hidden)]
2718        type UnderlyingSolTuple<'a> = ();
2719        #[doc(hidden)]
2720        type UnderlyingRustTuple<'a> = ();
2721        #[cfg(test)]
2722        #[allow(dead_code, unreachable_patterns)]
2723        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2724            match _t {
2725                alloy_sol_types::private::AssertTypeEq::<
2726                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2727                >(_) => {},
2728            }
2729        }
2730        #[automatically_derived]
2731        #[doc(hidden)]
2732        impl ::core::convert::From<UnsupportedDegree> for UnderlyingRustTuple<'_> {
2733            fn from(value: UnsupportedDegree) -> Self {
2734                ()
2735            }
2736        }
2737        #[automatically_derived]
2738        #[doc(hidden)]
2739        impl ::core::convert::From<UnderlyingRustTuple<'_>> for UnsupportedDegree {
2740            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2741                Self {}
2742            }
2743        }
2744        #[automatically_derived]
2745        impl alloy_sol_types::SolError for UnsupportedDegree {
2746            type Parameters<'a> = UnderlyingSolTuple<'a>;
2747            type Token<'a> = <Self::Parameters<'a> as alloy_sol_types::SolType>::Token<'a>;
2748            const SIGNATURE: &'static str = "UnsupportedDegree()";
2749            const SELECTOR: [u8; 4] = [226u8, 239u8, 9u8, 229u8];
2750            #[inline]
2751            fn new<'a>(
2752                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2753            ) -> Self {
2754                tuple.into()
2755            }
2756            #[inline]
2757            fn tokenize(&self) -> Self::Token<'_> {
2758                ()
2759            }
2760        }
2761    };
2762    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2763    /**Custom error with signature `WrongPlonkVK()` and selector `0x41f53b12`.
2764    ```solidity
2765    error WrongPlonkVK();
2766    ```*/
2767    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2768    #[derive(Clone)]
2769    pub struct WrongPlonkVK {}
2770    #[allow(
2771        non_camel_case_types,
2772        non_snake_case,
2773        clippy::pub_underscore_fields,
2774        clippy::style
2775    )]
2776    const _: () = {
2777        use alloy::sol_types as alloy_sol_types;
2778        #[doc(hidden)]
2779        type UnderlyingSolTuple<'a> = ();
2780        #[doc(hidden)]
2781        type UnderlyingRustTuple<'a> = ();
2782        #[cfg(test)]
2783        #[allow(dead_code, unreachable_patterns)]
2784        fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2785            match _t {
2786                alloy_sol_types::private::AssertTypeEq::<
2787                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2788                >(_) => {},
2789            }
2790        }
2791        #[automatically_derived]
2792        #[doc(hidden)]
2793        impl ::core::convert::From<WrongPlonkVK> for UnderlyingRustTuple<'_> {
2794            fn from(value: WrongPlonkVK) -> Self {
2795                ()
2796            }
2797        }
2798        #[automatically_derived]
2799        #[doc(hidden)]
2800        impl ::core::convert::From<UnderlyingRustTuple<'_>> for WrongPlonkVK {
2801            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2802                Self {}
2803            }
2804        }
2805        #[automatically_derived]
2806        impl alloy_sol_types::SolError for WrongPlonkVK {
2807            type Parameters<'a> = UnderlyingSolTuple<'a>;
2808            type Token<'a> = <Self::Parameters<'a> as alloy_sol_types::SolType>::Token<'a>;
2809            const SIGNATURE: &'static str = "WrongPlonkVK()";
2810            const SELECTOR: [u8; 4] = [65u8, 245u8, 59u8, 18u8];
2811            #[inline]
2812            fn new<'a>(
2813                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2814            ) -> Self {
2815                tuple.into()
2816            }
2817            #[inline]
2818            fn tokenize(&self) -> Self::Token<'_> {
2819                ()
2820            }
2821        }
2822    };
2823    #[derive()]
2824    /**Function with signature `verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0x77ae3f07`.
2825    ```solidity
2826    function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
2827    ```*/
2828    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2829    #[derive(Clone)]
2830    pub struct verifyCall {
2831        #[allow(missing_docs)]
2832        pub verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
2833        #[allow(missing_docs)]
2834        pub publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
2835        #[allow(missing_docs)]
2836        pub proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
2837    }
2838    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2839    ///Container type for the return parameters of the [`verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))`](verifyCall) function.
2840    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2841    #[derive(Clone)]
2842    pub struct verifyReturn {
2843        #[allow(missing_docs)]
2844        pub _0: bool,
2845    }
2846    #[allow(
2847        non_camel_case_types,
2848        non_snake_case,
2849        clippy::pub_underscore_fields,
2850        clippy::style
2851    )]
2852    const _: () = {
2853        use alloy::sol_types as alloy_sol_types;
2854        {
2855            #[doc(hidden)]
2856            type UnderlyingSolTuple<'a> = (
2857                IPlonkVerifier::VerifyingKey,
2858                alloy::sol_types::sol_data::FixedArray<
2859                    alloy::sol_types::sol_data::Uint<256>,
2860                    7usize,
2861                >,
2862                IPlonkVerifier::PlonkProof,
2863            );
2864            #[doc(hidden)]
2865            type UnderlyingRustTuple<'a> = (
2866                <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
2867                [alloy::sol_types::private::primitives::aliases::U256; 7usize],
2868                <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
2869            );
2870            #[cfg(test)]
2871            #[allow(dead_code, unreachable_patterns)]
2872            fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2873                match _t {
2874                    alloy_sol_types::private::AssertTypeEq::<
2875                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2876                    >(_) => {},
2877                }
2878            }
2879            #[automatically_derived]
2880            #[doc(hidden)]
2881            impl ::core::convert::From<verifyCall> for UnderlyingRustTuple<'_> {
2882                fn from(value: verifyCall) -> Self {
2883                    (value.verifyingKey, value.publicInput, value.proof)
2884                }
2885            }
2886            #[automatically_derived]
2887            #[doc(hidden)]
2888            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyCall {
2889                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2890                    Self {
2891                        verifyingKey: tuple.0,
2892                        publicInput: tuple.1,
2893                        proof: tuple.2,
2894                    }
2895                }
2896            }
2897        }
2898        {
2899            #[doc(hidden)]
2900            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
2901            #[doc(hidden)]
2902            type UnderlyingRustTuple<'a> = (bool,);
2903            #[cfg(test)]
2904            #[allow(dead_code, unreachable_patterns)]
2905            fn _type_assertion(_t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>) {
2906                match _t {
2907                    alloy_sol_types::private::AssertTypeEq::<
2908                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2909                    >(_) => {},
2910                }
2911            }
2912            #[automatically_derived]
2913            #[doc(hidden)]
2914            impl ::core::convert::From<verifyReturn> for UnderlyingRustTuple<'_> {
2915                fn from(value: verifyReturn) -> Self {
2916                    (value._0,)
2917                }
2918            }
2919            #[automatically_derived]
2920            #[doc(hidden)]
2921            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyReturn {
2922                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2923                    Self { _0: tuple.0 }
2924                }
2925            }
2926        }
2927        #[automatically_derived]
2928        impl alloy_sol_types::SolCall for verifyCall {
2929            type Parameters<'a> = (
2930                IPlonkVerifier::VerifyingKey,
2931                alloy::sol_types::sol_data::FixedArray<
2932                    alloy::sol_types::sol_data::Uint<256>,
2933                    7usize,
2934                >,
2935                IPlonkVerifier::PlonkProof,
2936            );
2937            type Token<'a> = <Self::Parameters<'a> as alloy_sol_types::SolType>::Token<'a>;
2938            type Return = verifyReturn;
2939            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
2940            type ReturnToken<'a> = <Self::ReturnTuple<'a> as alloy_sol_types::SolType>::Token<'a>;
2941            const SIGNATURE: &'static str = "verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))";
2942            const SELECTOR: [u8; 4] = [119u8, 174u8, 63u8, 7u8];
2943            #[inline]
2944            fn new<'a>(
2945                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2946            ) -> Self {
2947                tuple.into()
2948            }
2949            #[inline]
2950            fn tokenize(&self) -> Self::Token<'_> {
2951                (
2952                    <IPlonkVerifier::VerifyingKey as alloy_sol_types::SolType>::tokenize(
2953                        &self.verifyingKey,
2954                    ),
2955                    <alloy::sol_types::sol_data::FixedArray<
2956                        alloy::sol_types::sol_data::Uint<256>,
2957                        7usize,
2958                    > as alloy_sol_types::SolType>::tokenize(&self.publicInput),
2959                    <IPlonkVerifier::PlonkProof as alloy_sol_types::SolType>::tokenize(&self.proof),
2960                )
2961            }
2962            #[inline]
2963            fn abi_decode_returns(
2964                data: &[u8],
2965                validate: bool,
2966            ) -> alloy_sol_types::Result<Self::Return> {
2967                <Self::ReturnTuple<'_> as alloy_sol_types::SolType>::abi_decode_sequence(
2968                    data, validate,
2969                )
2970                .map(Into::into)
2971            }
2972        }
2973    };
2974    ///Container for all the [`PlonkVerifier`](self) function calls.
2975    #[derive()]
2976    pub enum PlonkVerifierCalls {
2977        #[allow(missing_docs)]
2978        verify(verifyCall),
2979    }
2980    #[automatically_derived]
2981    impl PlonkVerifierCalls {
2982        /// All the selectors of this enum.
2983        ///
2984        /// Note that the selectors might not be in the same order as the variants.
2985        /// No guarantees are made about the order of the selectors.
2986        ///
2987        /// Prefer using `SolInterface` methods instead.
2988        pub const SELECTORS: &'static [[u8; 4usize]] = &[[119u8, 174u8, 63u8, 7u8]];
2989    }
2990    #[automatically_derived]
2991    impl alloy_sol_types::SolInterface for PlonkVerifierCalls {
2992        const NAME: &'static str = "PlonkVerifierCalls";
2993        const MIN_DATA_LENGTH: usize = 672usize;
2994        const COUNT: usize = 1usize;
2995        #[inline]
2996        fn selector(&self) -> [u8; 4] {
2997            match self {
2998                Self::verify(_) => <verifyCall as alloy_sol_types::SolCall>::SELECTOR,
2999            }
3000        }
3001        #[inline]
3002        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
3003            Self::SELECTORS.get(i).copied()
3004        }
3005        #[inline]
3006        fn valid_selector(selector: [u8; 4]) -> bool {
3007            Self::SELECTORS.binary_search(&selector).is_ok()
3008        }
3009        #[inline]
3010        #[allow(non_snake_case)]
3011        fn abi_decode_raw(
3012            selector: [u8; 4],
3013            data: &[u8],
3014            validate: bool,
3015        ) -> alloy_sol_types::Result<Self> {
3016            static DECODE_SHIMS: &[fn(
3017                &[u8],
3018                bool,
3019            )
3020                -> alloy_sol_types::Result<PlonkVerifierCalls>] = &[{
3021                fn verify(
3022                    data: &[u8],
3023                    validate: bool,
3024                ) -> alloy_sol_types::Result<PlonkVerifierCalls> {
3025                    <verifyCall as alloy_sol_types::SolCall>::abi_decode_raw(data, validate)
3026                        .map(PlonkVerifierCalls::verify)
3027                }
3028                verify
3029            }];
3030            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
3031                return Err(alloy_sol_types::Error::unknown_selector(
3032                    <Self as alloy_sol_types::SolInterface>::NAME,
3033                    selector,
3034                ));
3035            };
3036            DECODE_SHIMS[idx](data, validate)
3037        }
3038        #[inline]
3039        fn abi_encoded_size(&self) -> usize {
3040            match self {
3041                Self::verify(inner) => {
3042                    <verifyCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
3043                },
3044            }
3045        }
3046        #[inline]
3047        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
3048            match self {
3049                Self::verify(inner) => {
3050                    <verifyCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
3051                },
3052            }
3053        }
3054    }
3055    ///Container for all the [`PlonkVerifier`](self) custom errors.
3056    #[derive(Debug, PartialEq, Eq, Hash)]
3057    pub enum PlonkVerifierErrors {
3058        #[allow(missing_docs)]
3059        InvalidPlonkArgs(InvalidPlonkArgs),
3060        #[allow(missing_docs)]
3061        UnsupportedDegree(UnsupportedDegree),
3062        #[allow(missing_docs)]
3063        WrongPlonkVK(WrongPlonkVK),
3064    }
3065    #[automatically_derived]
3066    impl PlonkVerifierErrors {
3067        /// All the selectors of this enum.
3068        ///
3069        /// Note that the selectors might not be in the same order as the variants.
3070        /// No guarantees are made about the order of the selectors.
3071        ///
3072        /// Prefer using `SolInterface` methods instead.
3073        pub const SELECTORS: &'static [[u8; 4usize]] = &[
3074            [65u8, 245u8, 59u8, 18u8],
3075            [226u8, 239u8, 9u8, 229u8],
3076            [253u8, 154u8, 45u8, 27u8],
3077        ];
3078    }
3079    #[automatically_derived]
3080    impl alloy_sol_types::SolInterface for PlonkVerifierErrors {
3081        const NAME: &'static str = "PlonkVerifierErrors";
3082        const MIN_DATA_LENGTH: usize = 0usize;
3083        const COUNT: usize = 3usize;
3084        #[inline]
3085        fn selector(&self) -> [u8; 4] {
3086            match self {
3087                Self::InvalidPlonkArgs(_) => {
3088                    <InvalidPlonkArgs as alloy_sol_types::SolError>::SELECTOR
3089                },
3090                Self::UnsupportedDegree(_) => {
3091                    <UnsupportedDegree as alloy_sol_types::SolError>::SELECTOR
3092                },
3093                Self::WrongPlonkVK(_) => <WrongPlonkVK as alloy_sol_types::SolError>::SELECTOR,
3094            }
3095        }
3096        #[inline]
3097        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
3098            Self::SELECTORS.get(i).copied()
3099        }
3100        #[inline]
3101        fn valid_selector(selector: [u8; 4]) -> bool {
3102            Self::SELECTORS.binary_search(&selector).is_ok()
3103        }
3104        #[inline]
3105        #[allow(non_snake_case)]
3106        fn abi_decode_raw(
3107            selector: [u8; 4],
3108            data: &[u8],
3109            validate: bool,
3110        ) -> alloy_sol_types::Result<Self> {
3111            static DECODE_SHIMS: &[fn(
3112                &[u8],
3113                bool,
3114            )
3115                -> alloy_sol_types::Result<PlonkVerifierErrors>] = &[
3116                {
3117                    fn WrongPlonkVK(
3118                        data: &[u8],
3119                        validate: bool,
3120                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
3121                        <WrongPlonkVK as alloy_sol_types::SolError>::abi_decode_raw(data, validate)
3122                            .map(PlonkVerifierErrors::WrongPlonkVK)
3123                    }
3124                    WrongPlonkVK
3125                },
3126                {
3127                    fn UnsupportedDegree(
3128                        data: &[u8],
3129                        validate: bool,
3130                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
3131                        <UnsupportedDegree as alloy_sol_types::SolError>::abi_decode_raw(
3132                            data, validate,
3133                        )
3134                        .map(PlonkVerifierErrors::UnsupportedDegree)
3135                    }
3136                    UnsupportedDegree
3137                },
3138                {
3139                    fn InvalidPlonkArgs(
3140                        data: &[u8],
3141                        validate: bool,
3142                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
3143                        <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_decode_raw(
3144                            data, validate,
3145                        )
3146                        .map(PlonkVerifierErrors::InvalidPlonkArgs)
3147                    }
3148                    InvalidPlonkArgs
3149                },
3150            ];
3151            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
3152                return Err(alloy_sol_types::Error::unknown_selector(
3153                    <Self as alloy_sol_types::SolInterface>::NAME,
3154                    selector,
3155                ));
3156            };
3157            DECODE_SHIMS[idx](data, validate)
3158        }
3159        #[inline]
3160        fn abi_encoded_size(&self) -> usize {
3161            match self {
3162                Self::InvalidPlonkArgs(inner) => {
3163                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encoded_size(inner)
3164                },
3165                Self::UnsupportedDegree(inner) => {
3166                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encoded_size(inner)
3167                },
3168                Self::WrongPlonkVK(inner) => {
3169                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encoded_size(inner)
3170                },
3171            }
3172        }
3173        #[inline]
3174        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
3175            match self {
3176                Self::InvalidPlonkArgs(inner) => {
3177                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
3178                },
3179                Self::UnsupportedDegree(inner) => {
3180                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
3181                },
3182                Self::WrongPlonkVK(inner) => {
3183                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
3184                },
3185            }
3186        }
3187    }
3188    use alloy::contract as alloy_contract;
3189    /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
3190
3191    See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
3192    #[inline]
3193    pub const fn new<
3194        T: alloy_contract::private::Transport + ::core::clone::Clone,
3195        P: alloy_contract::private::Provider<T, N>,
3196        N: alloy_contract::private::Network,
3197    >(
3198        address: alloy_sol_types::private::Address,
3199        provider: P,
3200    ) -> PlonkVerifierInstance<T, P, N> {
3201        PlonkVerifierInstance::<T, P, N>::new(address, provider)
3202    }
3203    /**Deploys this contract using the given `provider` and constructor arguments, if any.
3204
3205    Returns a new instance of the contract, if the deployment was successful.
3206
3207    For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
3208    #[inline]
3209    pub fn deploy<
3210        T: alloy_contract::private::Transport + ::core::clone::Clone,
3211        P: alloy_contract::private::Provider<T, N>,
3212        N: alloy_contract::private::Network,
3213    >(
3214        provider: P,
3215    ) -> impl ::core::future::Future<Output = alloy_contract::Result<PlonkVerifierInstance<T, P, N>>>
3216    {
3217        PlonkVerifierInstance::<T, P, N>::deploy(provider)
3218    }
3219    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
3220    and constructor arguments, if any.
3221
3222    This is a simple wrapper around creating a `RawCallBuilder` with the data set to
3223    the bytecode concatenated with the constructor's ABI-encoded arguments.*/
3224    #[inline]
3225    pub fn deploy_builder<
3226        T: alloy_contract::private::Transport + ::core::clone::Clone,
3227        P: alloy_contract::private::Provider<T, N>,
3228        N: alloy_contract::private::Network,
3229    >(
3230        provider: P,
3231    ) -> alloy_contract::RawCallBuilder<T, P, N> {
3232        PlonkVerifierInstance::<T, P, N>::deploy_builder(provider)
3233    }
3234    /**A [`PlonkVerifier`](self) instance.
3235
3236    Contains type-safe methods for interacting with an on-chain instance of the
3237    [`PlonkVerifier`](self) contract located at a given `address`, using a given
3238    provider `P`.
3239
3240    If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
3241    documentation on how to provide it), the `deploy` and `deploy_builder` methods can
3242    be used to deploy a new instance of the contract.
3243
3244    See the [module-level documentation](self) for all the available methods.*/
3245    #[derive(Clone)]
3246    pub struct PlonkVerifierInstance<T, P, N = alloy_contract::private::Ethereum> {
3247        address: alloy_sol_types::private::Address,
3248        provider: P,
3249        _network_transport: ::core::marker::PhantomData<(N, T)>,
3250    }
3251    #[automatically_derived]
3252    impl<T, P, N> ::core::fmt::Debug for PlonkVerifierInstance<T, P, N> {
3253        #[inline]
3254        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
3255            f.debug_tuple("PlonkVerifierInstance")
3256                .field(&self.address)
3257                .finish()
3258        }
3259    }
3260    /// Instantiation and getters/setters.
3261    #[automatically_derived]
3262    impl<
3263            T: alloy_contract::private::Transport + ::core::clone::Clone,
3264            P: alloy_contract::private::Provider<T, N>,
3265            N: alloy_contract::private::Network,
3266        > PlonkVerifierInstance<T, P, N>
3267    {
3268        /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
3269
3270        See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
3271        #[inline]
3272        pub const fn new(address: alloy_sol_types::private::Address, provider: P) -> Self {
3273            Self {
3274                address,
3275                provider,
3276                _network_transport: ::core::marker::PhantomData,
3277            }
3278        }
3279        /**Deploys this contract using the given `provider` and constructor arguments, if any.
3280
3281        Returns a new instance of the contract, if the deployment was successful.
3282
3283        For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
3284        #[inline]
3285        pub async fn deploy(provider: P) -> alloy_contract::Result<PlonkVerifierInstance<T, P, N>> {
3286            let call_builder = Self::deploy_builder(provider);
3287            let contract_address = call_builder.deploy().await?;
3288            Ok(Self::new(contract_address, call_builder.provider))
3289        }
3290        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
3291        and constructor arguments, if any.
3292
3293        This is a simple wrapper around creating a `RawCallBuilder` with the data set to
3294        the bytecode concatenated with the constructor's ABI-encoded arguments.*/
3295        #[inline]
3296        pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder<T, P, N> {
3297            alloy_contract::RawCallBuilder::new_raw_deploy(
3298                provider,
3299                ::core::clone::Clone::clone(&BYTECODE),
3300            )
3301        }
3302        /// Returns a reference to the address.
3303        #[inline]
3304        pub const fn address(&self) -> &alloy_sol_types::private::Address {
3305            &self.address
3306        }
3307        /// Sets the address.
3308        #[inline]
3309        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
3310            self.address = address;
3311        }
3312        /// Sets the address and returns `self`.
3313        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
3314            self.set_address(address);
3315            self
3316        }
3317        /// Returns a reference to the provider.
3318        #[inline]
3319        pub const fn provider(&self) -> &P {
3320            &self.provider
3321        }
3322    }
3323    impl<T, P: ::core::clone::Clone, N> PlonkVerifierInstance<T, &P, N> {
3324        /// Clones the provider and returns a new instance with the cloned provider.
3325        #[inline]
3326        pub fn with_cloned_provider(self) -> PlonkVerifierInstance<T, P, N> {
3327            PlonkVerifierInstance {
3328                address: self.address,
3329                provider: ::core::clone::Clone::clone(&self.provider),
3330                _network_transport: ::core::marker::PhantomData,
3331            }
3332        }
3333    }
3334    /// Function calls.
3335    #[automatically_derived]
3336    impl<
3337            T: alloy_contract::private::Transport + ::core::clone::Clone,
3338            P: alloy_contract::private::Provider<T, N>,
3339            N: alloy_contract::private::Network,
3340        > PlonkVerifierInstance<T, P, N>
3341    {
3342        /// Creates a new call builder using this contract instance's provider and address.
3343        ///
3344        /// Note that the call can be any function call, not just those defined in this
3345        /// contract. Prefer using the other methods for building type-safe contract calls.
3346        pub fn call_builder<C: alloy_sol_types::SolCall>(
3347            &self,
3348            call: &C,
3349        ) -> alloy_contract::SolCallBuilder<T, &P, C, N> {
3350            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
3351        }
3352        ///Creates a new call builder for the [`verify`] function.
3353        pub fn verify(
3354            &self,
3355            verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
3356            publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
3357            proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
3358        ) -> alloy_contract::SolCallBuilder<T, &P, verifyCall, N> {
3359            self.call_builder(&verifyCall {
3360                verifyingKey,
3361                publicInput,
3362                proof,
3363            })
3364        }
3365    }
3366    /// Event filters.
3367    #[automatically_derived]
3368    impl<
3369            T: alloy_contract::private::Transport + ::core::clone::Clone,
3370            P: alloy_contract::private::Provider<T, N>,
3371            N: alloy_contract::private::Network,
3372        > PlonkVerifierInstance<T, P, N>
3373    {
3374        /// Creates a new event filter using this contract instance's provider and address.
3375        ///
3376        /// Note that the type can be any event, not just those defined in this contract.
3377        /// Prefer using the other methods for building type-safe event filters.
3378        pub fn event_filter<E: alloy_sol_types::SolEvent>(
3379            &self,
3380        ) -> alloy_contract::Event<T, &P, E, N> {
3381            alloy_contract::Event::new_sol(&self.provider, &self.address)
3382        }
3383    }
3384}