pod_examples_solidity/
voting.rs

1///Module containing a contract's types and functions.
2/**
3
4```solidity
5library Time {
6    type Timestamp is uint64;
7}
8```*/
9#[allow(
10    non_camel_case_types,
11    non_snake_case,
12    clippy::pub_underscore_fields,
13    clippy::style,
14    clippy::empty_structs_with_brackets
15)]
16pub mod Time {
17    use super::*;
18    use alloy::sol_types as alloy_sol_types;
19    #[derive(serde::Serialize, serde::Deserialize)]
20    #[derive(Default, Debug, PartialEq, Eq, Hash)]
21    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
22    #[derive(Clone)]
23    pub struct Timestamp(u64);
24    const _: () = {
25        use alloy::sol_types as alloy_sol_types;
26        #[automatically_derived]
27        impl alloy_sol_types::private::SolTypeValue<Timestamp> for u64 {
28            #[inline]
29            fn stv_to_tokens(
30                &self,
31            ) -> <alloy::sol_types::sol_data::Uint<
32                64,
33            > as alloy_sol_types::SolType>::Token<'_> {
34                alloy_sol_types::private::SolTypeValue::<
35                    alloy::sol_types::sol_data::Uint<64>,
36                >::stv_to_tokens(self)
37            }
38            #[inline]
39            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
40                <alloy::sol_types::sol_data::Uint<
41                    64,
42                > as alloy_sol_types::SolType>::tokenize(self)
43                    .0
44            }
45            #[inline]
46            fn stv_abi_encode_packed_to(
47                &self,
48                out: &mut alloy_sol_types::private::Vec<u8>,
49            ) {
50                <alloy::sol_types::sol_data::Uint<
51                    64,
52                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
53            }
54            #[inline]
55            fn stv_abi_packed_encoded_size(&self) -> usize {
56                <alloy::sol_types::sol_data::Uint<
57                    64,
58                > as alloy_sol_types::SolType>::abi_encoded_size(self)
59            }
60        }
61        #[automatically_derived]
62        impl Timestamp {
63            /// The Solidity type name.
64            pub const NAME: &'static str = stringify!(@ name);
65            /// Convert from the underlying value type.
66            #[inline]
67            pub const fn from_underlying(value: u64) -> Self {
68                Self(value)
69            }
70            /// Return the underlying value.
71            #[inline]
72            pub const fn into_underlying(self) -> u64 {
73                self.0
74            }
75            /// Return the single encoding of this value, delegating to the
76            /// underlying type.
77            #[inline]
78            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
79                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
80            }
81            /// Return the packed encoding of this value, delegating to the
82            /// underlying type.
83            #[inline]
84            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
85                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
86            }
87        }
88        #[automatically_derived]
89        impl From<u64> for Timestamp {
90            fn from(value: u64) -> Self {
91                Self::from_underlying(value)
92            }
93        }
94        #[automatically_derived]
95        impl From<Timestamp> for u64 {
96            fn from(value: Timestamp) -> Self {
97                value.into_underlying()
98            }
99        }
100        #[automatically_derived]
101        impl alloy_sol_types::SolType for Timestamp {
102            type RustType = u64;
103            type Token<'a> = <alloy::sol_types::sol_data::Uint<
104                64,
105            > as alloy_sol_types::SolType>::Token<'a>;
106            const SOL_NAME: &'static str = Self::NAME;
107            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
108                64,
109            > as alloy_sol_types::SolType>::ENCODED_SIZE;
110            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
111                64,
112            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
113            #[inline]
114            fn valid_token(token: &Self::Token<'_>) -> bool {
115                Self::type_check(token).is_ok()
116            }
117            #[inline]
118            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
119                <alloy::sol_types::sol_data::Uint<
120                    64,
121                > as alloy_sol_types::SolType>::type_check(token)
122            }
123            #[inline]
124            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
125                <alloy::sol_types::sol_data::Uint<
126                    64,
127                > as alloy_sol_types::SolType>::detokenize(token)
128            }
129        }
130        #[automatically_derived]
131        impl alloy_sol_types::EventTopic for Timestamp {
132            #[inline]
133            fn topic_preimage_length(rust: &Self::RustType) -> usize {
134                <alloy::sol_types::sol_data::Uint<
135                    64,
136                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
137            }
138            #[inline]
139            fn encode_topic_preimage(
140                rust: &Self::RustType,
141                out: &mut alloy_sol_types::private::Vec<u8>,
142            ) {
143                <alloy::sol_types::sol_data::Uint<
144                    64,
145                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
146            }
147            #[inline]
148            fn encode_topic(
149                rust: &Self::RustType,
150            ) -> alloy_sol_types::abi::token::WordToken {
151                <alloy::sol_types::sol_data::Uint<
152                    64,
153                > as alloy_sol_types::EventTopic>::encode_topic(rust)
154            }
155        }
156    };
157    use alloy::contract as alloy_contract;
158    /**Creates a new wrapper around an on-chain [`Time`](self) contract instance.
159
160See the [wrapper's documentation](`TimeInstance`) for more details.*/
161    #[inline]
162    pub const fn new<
163        P: alloy_contract::private::Provider<N>,
164        N: alloy_contract::private::Network,
165    >(address: alloy_sol_types::private::Address, provider: P) -> TimeInstance<P, N> {
166        TimeInstance::<P, N>::new(address, provider)
167    }
168    /**A [`Time`](self) instance.
169
170Contains type-safe methods for interacting with an on-chain instance of the
171[`Time`](self) contract located at a given `address`, using a given
172provider `P`.
173
174If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
175documentation on how to provide it), the `deploy` and `deploy_builder` methods can
176be used to deploy a new instance of the contract.
177
178See the [module-level documentation](self) for all the available methods.*/
179    #[derive(Clone)]
180    pub struct TimeInstance<P, N = alloy_contract::private::Ethereum> {
181        address: alloy_sol_types::private::Address,
182        provider: P,
183        _network: ::core::marker::PhantomData<N>,
184    }
185    #[automatically_derived]
186    impl<P, N> ::core::fmt::Debug for TimeInstance<P, N> {
187        #[inline]
188        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
189            f.debug_tuple("TimeInstance").field(&self.address).finish()
190        }
191    }
192    /// Instantiation and getters/setters.
193    #[automatically_derived]
194    impl<
195        P: alloy_contract::private::Provider<N>,
196        N: alloy_contract::private::Network,
197    > TimeInstance<P, N> {
198        /**Creates a new wrapper around an on-chain [`Time`](self) contract instance.
199
200See the [wrapper's documentation](`TimeInstance`) for more details.*/
201        #[inline]
202        pub const fn new(
203            address: alloy_sol_types::private::Address,
204            provider: P,
205        ) -> Self {
206            Self {
207                address,
208                provider,
209                _network: ::core::marker::PhantomData,
210            }
211        }
212        /// Returns a reference to the address.
213        #[inline]
214        pub const fn address(&self) -> &alloy_sol_types::private::Address {
215            &self.address
216        }
217        /// Sets the address.
218        #[inline]
219        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
220            self.address = address;
221        }
222        /// Sets the address and returns `self`.
223        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
224            self.set_address(address);
225            self
226        }
227        /// Returns a reference to the provider.
228        #[inline]
229        pub const fn provider(&self) -> &P {
230            &self.provider
231        }
232    }
233    impl<P: ::core::clone::Clone, N> TimeInstance<&P, N> {
234        /// Clones the provider and returns a new instance with the cloned provider.
235        #[inline]
236        pub fn with_cloned_provider(self) -> TimeInstance<P, N> {
237            TimeInstance {
238                address: self.address,
239                provider: ::core::clone::Clone::clone(&self.provider),
240                _network: ::core::marker::PhantomData,
241            }
242        }
243    }
244    /// Function calls.
245    #[automatically_derived]
246    impl<
247        P: alloy_contract::private::Provider<N>,
248        N: alloy_contract::private::Network,
249    > TimeInstance<P, N> {
250        /// Creates a new call builder using this contract instance's provider and address.
251        ///
252        /// Note that the call can be any function call, not just those defined in this
253        /// contract. Prefer using the other methods for building type-safe contract calls.
254        pub fn call_builder<C: alloy_sol_types::SolCall>(
255            &self,
256            call: &C,
257        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
258            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
259        }
260    }
261    /// Event filters.
262    #[automatically_derived]
263    impl<
264        P: alloy_contract::private::Provider<N>,
265        N: alloy_contract::private::Network,
266    > TimeInstance<P, N> {
267        /// Creates a new event filter using this contract instance's provider and address.
268        ///
269        /// Note that the type can be any event, not just those defined in this contract.
270        /// Prefer using the other methods for building type-safe event filters.
271        pub fn event_filter<E: alloy_sol_types::SolEvent>(
272            &self,
273        ) -> alloy_contract::Event<&P, E, N> {
274            alloy_contract::Event::new_sol(&self.provider, &self.address)
275        }
276    }
277}
278/**
279
280Generated by the following Solidity interface...
281```solidity
282library Time {
283    type Timestamp is uint64;
284}
285
286interface Voting {
287    struct VotingInfo {
288        uint256 threshold;
289        Time.Timestamp deadline;
290        uint256 nonce;
291        address owner;
292    }
293
294    event Voted(bytes32 indexed votingId, address indexed voter, uint256 indexed choice);
295    event Winner(bytes32 indexed votingId, uint256 indexed choice);
296
297    function register(VotingInfo memory v) external;
298    function setWinner(VotingInfo memory v, uint256 choice) external;
299    function vote(VotingInfo memory v, uint256 choice) external;
300    function votingId(VotingInfo memory v) external pure returns (bytes32);
301}
302```
303
304...which was generated by the following JSON ABI:
305```json
306[
307  {
308    "type": "function",
309    "name": "register",
310    "inputs": [
311      {
312        "name": "v",
313        "type": "tuple",
314        "internalType": "struct Voting.VotingInfo",
315        "components": [
316          {
317            "name": "threshold",
318            "type": "uint256",
319            "internalType": "uint256"
320          },
321          {
322            "name": "deadline",
323            "type": "uint64",
324            "internalType": "Time.Timestamp"
325          },
326          {
327            "name": "nonce",
328            "type": "uint256",
329            "internalType": "uint256"
330          },
331          {
332            "name": "owner",
333            "type": "address",
334            "internalType": "address"
335          }
336        ]
337      }
338    ],
339    "outputs": [],
340    "stateMutability": "nonpayable"
341  },
342  {
343    "type": "function",
344    "name": "setWinner",
345    "inputs": [
346      {
347        "name": "v",
348        "type": "tuple",
349        "internalType": "struct Voting.VotingInfo",
350        "components": [
351          {
352            "name": "threshold",
353            "type": "uint256",
354            "internalType": "uint256"
355          },
356          {
357            "name": "deadline",
358            "type": "uint64",
359            "internalType": "Time.Timestamp"
360          },
361          {
362            "name": "nonce",
363            "type": "uint256",
364            "internalType": "uint256"
365          },
366          {
367            "name": "owner",
368            "type": "address",
369            "internalType": "address"
370          }
371        ]
372      },
373      {
374        "name": "choice",
375        "type": "uint256",
376        "internalType": "uint256"
377      }
378    ],
379    "outputs": [],
380    "stateMutability": "nonpayable"
381  },
382  {
383    "type": "function",
384    "name": "vote",
385    "inputs": [
386      {
387        "name": "v",
388        "type": "tuple",
389        "internalType": "struct Voting.VotingInfo",
390        "components": [
391          {
392            "name": "threshold",
393            "type": "uint256",
394            "internalType": "uint256"
395          },
396          {
397            "name": "deadline",
398            "type": "uint64",
399            "internalType": "Time.Timestamp"
400          },
401          {
402            "name": "nonce",
403            "type": "uint256",
404            "internalType": "uint256"
405          },
406          {
407            "name": "owner",
408            "type": "address",
409            "internalType": "address"
410          }
411        ]
412      },
413      {
414        "name": "choice",
415        "type": "uint256",
416        "internalType": "uint256"
417      }
418    ],
419    "outputs": [],
420    "stateMutability": "nonpayable"
421  },
422  {
423    "type": "function",
424    "name": "votingId",
425    "inputs": [
426      {
427        "name": "v",
428        "type": "tuple",
429        "internalType": "struct Voting.VotingInfo",
430        "components": [
431          {
432            "name": "threshold",
433            "type": "uint256",
434            "internalType": "uint256"
435          },
436          {
437            "name": "deadline",
438            "type": "uint64",
439            "internalType": "Time.Timestamp"
440          },
441          {
442            "name": "nonce",
443            "type": "uint256",
444            "internalType": "uint256"
445          },
446          {
447            "name": "owner",
448            "type": "address",
449            "internalType": "address"
450          }
451        ]
452      }
453    ],
454    "outputs": [
455      {
456        "name": "",
457        "type": "bytes32",
458        "internalType": "bytes32"
459      }
460    ],
461    "stateMutability": "pure"
462  },
463  {
464    "type": "event",
465    "name": "Voted",
466    "inputs": [
467      {
468        "name": "votingId",
469        "type": "bytes32",
470        "indexed": true,
471        "internalType": "bytes32"
472      },
473      {
474        "name": "voter",
475        "type": "address",
476        "indexed": true,
477        "internalType": "address"
478      },
479      {
480        "name": "choice",
481        "type": "uint256",
482        "indexed": true,
483        "internalType": "uint256"
484      }
485    ],
486    "anonymous": false
487  },
488  {
489    "type": "event",
490    "name": "Winner",
491    "inputs": [
492      {
493        "name": "votingId",
494        "type": "bytes32",
495        "indexed": true,
496        "internalType": "bytes32"
497      },
498      {
499        "name": "choice",
500        "type": "uint256",
501        "indexed": true,
502        "internalType": "uint256"
503      }
504    ],
505    "anonymous": false
506  }
507]
508```*/
509#[allow(
510    non_camel_case_types,
511    non_snake_case,
512    clippy::pub_underscore_fields,
513    clippy::style,
514    clippy::empty_structs_with_brackets
515)]
516pub mod Voting {
517    use super::*;
518    use alloy::sol_types as alloy_sol_types;
519    /// The creation / init bytecode of the contract.
520    ///
521    /// ```text
522    ///0x6080604052348015600e575f5ffd5b506110518061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806324c6e3c41461004e578063995d5d911461007e578063a7d4c4731461009a578063e8021822146100b6575b5f5ffd5b61006860048036038101906100639190610939565b6100d2565b604051610075919061097c565b60405180910390f35b61009860048036038101906100939190610939565b610101565b005b6100b460048036038101906100af91906109c8565b610160565b005b6100d060048036038101906100cb91906109c8565b6102ce565b005b5f816040516020016100e49190610ba9565b604051602081830303815290604052805190602001209050919050565b8060600160208101906101149190610bc2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461014a575f5ffd5b61015d335f6103a190919063ffffffff16565b50565b6101b18260200160208101906101769190610bed565b6040518060400160405280601a81526020017f43616e6e6f7420766f746520616674657220646561646c696e650000000000008152506103c9565b5f6101bb836100d2565b9050610207336040518060400160405280601d81526020017f43616e6e6f7420766f7465206966206e6f7420726567697374657265640000008152505f6103fa9092919063ffffffff16565b5f61021e823360026104249092919063ffffffff16565b14610227575f5ffd5b6102408133600160026104ea909392919063ffffffff16565b5f8183604051602001610254929190610c27565b60405160208183030381529060405280519060200120905061028381600160036105b09092919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff16837fe4abc5380fa6939d1dc23b5e90b3a8a0e328f0f1a82a5f42bfb795bf9c71750560405160405180910390a450505050565b6103028260200160208101906102e49190610bed565b604051806060016040528060248152602001610ffd602491396105dd565b5f61030c836100d2565b90505f8183604051602001610322929190610c27565b60405160208183030381529060405280519060200120905061036d81855f013560405180606001604052806030815260200161102160309139600361060e909392919063ffffffff16565b82827f269d3a24712436f77df15d63de7d2337a060c9102dee6f46c909fb0fa2d52f0c60405160405180910390a350505050565b6103c5825f018273ffffffffffffffffffffffffffffffffffffffff165f1b610633565b5050565b6103f66103f0836103d8610691565b67ffffffffffffffff166107bf90919063ffffffff16565b826107df565b5050565b61041f835f018373ffffffffffffffffffffffffffffffffffffffff165f1b836108d0565b505050565b5f3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048a90610cce565b60405180910390fd5b835f015f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490509392505050565b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054f90610cce565b60405180910390fd5b80845f015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050505050565b80835f015f8481526020019081526020015f205f8282546105d19190610d19565b92505081905550505050565b61060a610604836105ec610691565b67ffffffffffffffff166108f390919063ffffffff16565b826107df565b5050565b61062d82855f015f8681526020019081526020015f20541015826107df565b50505050565b5f825f015f8381526020019081526020015f20540361068d576001826001015461065d9190610d19565b825f015f8381526020019081526020015f2081905550816001015f81548092919061068790610d4c565b91905055505b5050565b5f5f5f7fba286e4d89dabf4b2878e896423bb123d9d5143e662606fd343b6766d7bcf7215f1c73ffffffffffffffffffffffffffffffffffffffff166040516106d990610dc0565b5f60405180830381855afa9150503d805f8114610711576040519150601f19603f3d011682016040523d82523d5f602084013e610716565b606091505b50915091508161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290610e1e565b60405180910390fd5b602081511461079f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079690610e86565b60405180910390fd5b5f818060200190518101906107b49190610ece565b905080935050505090565b5f8167ffffffffffffffff168367ffffffffffffffff1610905092915050565b5f7f3dcdf63b41c103567d7225976ad9145e866c7a7dccc6c277ea86abbd268fbac95f1c73ffffffffffffffffffffffffffffffffffffffff168360405160200161082a9190610f13565b6040516020818303038152906040526040516108469190610f74565b5f60405180830381855afa9150503d805f811461087e576040519150601f19603f3d011682016040523d82523d5f602084013e610883565b606091505b505090508082906108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190610fdc565b60405180910390fd5b50505050565b6108ee5f845f015f8581526020019081526020015f205411826107df565b505050565b5f8167ffffffffffffffff168367ffffffffffffffff1611905092915050565b5f5ffd5b5f5ffd5b5f608082840312156109305761092f610917565b5b81905092915050565b5f6080828403121561094e5761094d610913565b5b5f61095b8482850161091b565b91505092915050565b5f819050919050565b61097681610964565b82525050565b5f60208201905061098f5f83018461096d565b92915050565b5f819050919050565b6109a781610995565b81146109b1575f5ffd5b50565b5f813590506109c28161099e565b92915050565b5f5f60a083850312156109de576109dd610913565b5b5f6109eb8582860161091b565b92505060806109fc858286016109b4565b9150509250929050565b5f610a1460208401846109b4565b905092915050565b610a2581610995565b82525050565b5f67ffffffffffffffff82169050919050565b610a4781610a2b565b8114610a51575f5ffd5b50565b5f81359050610a6281610a3e565b92915050565b5f610a766020840184610a54565b905092915050565b5f819050919050565b5f610aa1610a9c610a9784610a2b565b610a7e565b610a2b565b9050919050565b610ab181610a87565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ae082610ab7565b9050919050565b610af081610ad6565b8114610afa575f5ffd5b50565b5f81359050610b0b81610ae7565b92915050565b5f610b1f6020840184610afd565b905092915050565b610b3081610ad6565b82525050565b60808201610b465f830183610a06565b610b525f850182610a1c565b50610b606020830183610a68565b610b6d6020850182610aa8565b50610b7b6040830183610a06565b610b886040850182610a1c565b50610b966060830183610b11565b610ba36060850182610b27565b50505050565b5f608082019050610bbc5f830184610b36565b92915050565b5f60208284031215610bd757610bd6610913565b5b5f610be484828501610afd565b91505092915050565b5f60208284031215610c0257610c01610913565b5b5f610c0f84828501610a54565b91505092915050565b610c2181610995565b82525050565b5f604082019050610c3a5f83018561096d565b610c476020830184610c18565b9392505050565b5f82825260208201905092915050565b7f43616e6e6f7420616363657373204f776e6564436f756e746572206f776e65645f8201527f20627920616e6f74686572206164647265737300000000000000000000000000602082015250565b5f610cb8603383610c4e565b9150610cc382610c5e565b604082019050919050565b5f6020820190508181035f830152610ce581610cac565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d2382610995565b9150610d2e83610995565b9250828201905080821115610d4657610d45610cec565b5b92915050565b5f610d5682610995565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d8857610d87610cec565b5b600182019050919050565b5f81905092915050565b50565b5f610dab5f83610d93565b9150610db682610d9d565b5f82019050919050565b5f610dca82610da0565b9150819050919050565b7f507265636f6d70696c652063616c6c206661696c6564000000000000000000005f82015250565b5f610e08601683610c4e565b9150610e1382610dd4565b602082019050919050565b5f6020820190508181035f830152610e3581610dfc565b9050919050565b7f496e76616c6964206f7574707574206c656e67746800000000000000000000005f82015250565b5f610e70601583610c4e565b9150610e7b82610e3c565b602082019050919050565b5f6020820190508181035f830152610e9d81610e64565b9050919050565b610ead81610a2b565b8114610eb7575f5ffd5b50565b5f81519050610ec881610ea4565b92915050565b5f60208284031215610ee357610ee2610913565b5b5f610ef084828501610eba565b91505092915050565b5f8115159050919050565b610f0d81610ef9565b82525050565b5f602082019050610f265f830184610f04565b92915050565b5f81519050919050565b8281835e5f83830152505050565b5f610f4e82610f2c565b610f588185610d93565b9350610f68818560208601610f36565b80840191505092915050565b5f610f7f8284610f44565b915081905092915050565b5f81519050919050565b5f601f19601f8301169050919050565b5f610fae82610f8a565b610fb88185610c4e565b9350610fc8818560208601610f36565b610fd181610f94565b840191505092915050565b5f6020820190508181035f830152610ff48184610fa4565b90509291505056fe43616e6e6f74206465636964652077696e6e6572206265666f726520646561646c696e6543616e6e6f74207365742077696e6e65722077697468206c65737320766f746573207468616e207468726573686f6c64
523    /// ```
524    #[rustfmt::skip]
525    #[allow(clippy::all)]
526    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
527        b"`\x80`@R4\x80\x15`\x0EW__\xFD[Pa\x10Q\x80a\0\x1C_9_\xF3\xFE`\x80`@R4\x80\x15a\0\x0FW__\xFD[P`\x046\x10a\0JW_5`\xE0\x1C\x80c$\xC6\xE3\xC4\x14a\0NW\x80c\x99]]\x91\x14a\0~W\x80c\xA7\xD4\xC4s\x14a\0\x9AW\x80c\xE8\x02\x18\"\x14a\0\xB6W[__\xFD[a\0h`\x04\x806\x03\x81\x01\x90a\0c\x91\x90a\t9V[a\0\xD2V[`@Qa\0u\x91\x90a\t|V[`@Q\x80\x91\x03\x90\xF3[a\0\x98`\x04\x806\x03\x81\x01\x90a\0\x93\x91\x90a\t9V[a\x01\x01V[\0[a\0\xB4`\x04\x806\x03\x81\x01\x90a\0\xAF\x91\x90a\t\xC8V[a\x01`V[\0[a\0\xD0`\x04\x806\x03\x81\x01\x90a\0\xCB\x91\x90a\t\xC8V[a\x02\xCEV[\0[_\x81`@Q` \x01a\0\xE4\x91\x90a\x0B\xA9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[\x80``\x01` \x81\x01\x90a\x01\x14\x91\x90a\x0B\xC2V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x01JW__\xFD[a\x01]3_a\x03\xA1\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[PV[a\x01\xB1\x82` \x01` \x81\x01\x90a\x01v\x91\x90a\x0B\xEDV[`@Q\x80`@\x01`@R\x80`\x1A\x81R` \x01\x7FCannot vote after deadline\0\0\0\0\0\0\x81RPa\x03\xC9V[_a\x01\xBB\x83a\0\xD2V[\x90Pa\x02\x073`@Q\x80`@\x01`@R\x80`\x1D\x81R` \x01\x7FCannot vote if not registered\0\0\0\x81RP_a\x03\xFA\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[_a\x02\x1E\x823`\x02a\x04$\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x14a\x02'W__\xFD[a\x02@\x813`\x01`\x02a\x04\xEA\x90\x93\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[_\x81\x83`@Q` \x01a\x02T\x92\x91\x90a\x0C'V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa\x02\x83\x81`\x01`\x03a\x05\xB0\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x823s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83\x7F\xE4\xAB\xC58\x0F\xA6\x93\x9D\x1D\xC2;^\x90\xB3\xA8\xA0\xE3(\xF0\xF1\xA8*_B\xBF\xB7\x95\xBF\x9Cqu\x05`@Q`@Q\x80\x91\x03\x90\xA4PPPPV[a\x03\x02\x82` \x01` \x81\x01\x90a\x02\xE4\x91\x90a\x0B\xEDV[`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x0F\xFD`$\x919a\x05\xDDV[_a\x03\x0C\x83a\0\xD2V[\x90P_\x81\x83`@Q` \x01a\x03\"\x92\x91\x90a\x0C'V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa\x03m\x81\x85_\x015`@Q\x80``\x01`@R\x80`0\x81R` \x01a\x10!`0\x919`\x03a\x06\x0E\x90\x93\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82\x82\x7F&\x9D:$q$6\xF7}\xF1]c\xDE}#7\xA0`\xC9\x10-\xEEoF\xC9\t\xFB\x0F\xA2\xD5/\x0C`@Q`@Q\x80\x91\x03\x90\xA3PPPPV[a\x03\xC5\x82_\x01\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x1Ba\x063V[PPV[a\x03\xF6a\x03\xF0\x83a\x03\xD8a\x06\x91V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x07\xBF\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82a\x07\xDFV[PPV[a\x04\x1F\x83_\x01\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x1B\x83a\x08\xD0V[PPPV[_2s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x04\x93W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x04\x8A\x90a\x0C\xCEV[`@Q\x80\x91\x03\x90\xFD[\x83_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ T\x90P\x93\x92PPPV[2s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x05XW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x05O\x90a\x0C\xCEV[`@Q\x80\x91\x03\x90\xFD[\x80\x84_\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ \x81\x90UPPPPPV[\x80\x83_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x82\x82Ta\x05\xD1\x91\x90a\r\x19V[\x92PP\x81\x90UPPPPV[a\x06\na\x06\x04\x83a\x05\xECa\x06\x91V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x08\xF3\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82a\x07\xDFV[PPV[a\x06-\x82\x85_\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x10\x15\x82a\x07\xDFV[PPPPV[_\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ T\x03a\x06\x8DW`\x01\x82`\x01\x01Ta\x06]\x91\x90a\r\x19V[\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x81`\x01\x01_\x81T\x80\x92\x91\x90a\x06\x87\x90a\rLV[\x91\x90PUP[PPV[___\x7F\xBA(nM\x89\xDA\xBFK(x\xE8\x96B;\xB1#\xD9\xD5\x14>f&\x06\xFD4;gf\xD7\xBC\xF7!_\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Qa\x06\xD9\x90a\r\xC0V[_`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80_\x81\x14a\x07\x11W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x07\x16V[``\x91P[P\x91P\x91P\x81a\x07[W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x07R\x90a\x0E\x1EV[`@Q\x80\x91\x03\x90\xFD[` \x81Q\x14a\x07\x9FW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x07\x96\x90a\x0E\x86V[`@Q\x80\x91\x03\x90\xFD[_\x81\x80` \x01\x90Q\x81\x01\x90a\x07\xB4\x91\x90a\x0E\xCEV[\x90P\x80\x93PPPP\x90V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x90P\x92\x91PPV[_\x7F=\xCD\xF6;A\xC1\x03V}r%\x97j\xD9\x14^\x86lz}\xCC\xC6\xC2w\xEA\x86\xAB\xBD&\x8F\xBA\xC9_\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83`@Q` \x01a\x08*\x91\x90a\x0F\x13V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Qa\x08F\x91\x90a\x0FtV[_`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80_\x81\x14a\x08~W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x08\x83V[``\x91P[PP\x90P\x80\x82\x90a\x08\xCAW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x08\xC1\x91\x90a\x0F\xDCV[`@Q\x80\x91\x03\x90\xFD[PPPPV[a\x08\xEE_\x84_\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x11\x82a\x07\xDFV[PPPV[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x11\x90P\x92\x91PPV[__\xFD[__\xFD[_`\x80\x82\x84\x03\x12\x15a\t0Wa\t/a\t\x17V[[\x81\x90P\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15a\tNWa\tMa\t\x13V[[_a\t[\x84\x82\x85\x01a\t\x1BV[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[a\tv\x81a\tdV[\x82RPPV[_` \x82\x01\x90Pa\t\x8F_\x83\x01\x84a\tmV[\x92\x91PPV[_\x81\x90P\x91\x90PV[a\t\xA7\x81a\t\x95V[\x81\x14a\t\xB1W__\xFD[PV[_\x815\x90Pa\t\xC2\x81a\t\x9EV[\x92\x91PPV[__`\xA0\x83\x85\x03\x12\x15a\t\xDEWa\t\xDDa\t\x13V[[_a\t\xEB\x85\x82\x86\x01a\t\x1BV[\x92PP`\x80a\t\xFC\x85\x82\x86\x01a\t\xB4V[\x91PP\x92P\x92\x90PV[_a\n\x14` \x84\x01\x84a\t\xB4V[\x90P\x92\x91PPV[a\n%\x81a\t\x95V[\x82RPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a\nG\x81a\n+V[\x81\x14a\nQW__\xFD[PV[_\x815\x90Pa\nb\x81a\n>V[\x92\x91PPV[_a\nv` \x84\x01\x84a\nTV[\x90P\x92\x91PPV[_\x81\x90P\x91\x90PV[_a\n\xA1a\n\x9Ca\n\x97\x84a\n+V[a\n~V[a\n+V[\x90P\x91\x90PV[a\n\xB1\x81a\n\x87V[\x82RPPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\n\xE0\x82a\n\xB7V[\x90P\x91\x90PV[a\n\xF0\x81a\n\xD6V[\x81\x14a\n\xFAW__\xFD[PV[_\x815\x90Pa\x0B\x0B\x81a\n\xE7V[\x92\x91PPV[_a\x0B\x1F` \x84\x01\x84a\n\xFDV[\x90P\x92\x91PPV[a\x0B0\x81a\n\xD6V[\x82RPPV[`\x80\x82\x01a\x0BF_\x83\x01\x83a\n\x06V[a\x0BR_\x85\x01\x82a\n\x1CV[Pa\x0B`` \x83\x01\x83a\nhV[a\x0Bm` \x85\x01\x82a\n\xA8V[Pa\x0B{`@\x83\x01\x83a\n\x06V[a\x0B\x88`@\x85\x01\x82a\n\x1CV[Pa\x0B\x96``\x83\x01\x83a\x0B\x11V[a\x0B\xA3``\x85\x01\x82a\x0B'V[PPPPV[_`\x80\x82\x01\x90Pa\x0B\xBC_\x83\x01\x84a\x0B6V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0B\xD7Wa\x0B\xD6a\t\x13V[[_a\x0B\xE4\x84\x82\x85\x01a\n\xFDV[\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0C\x02Wa\x0C\x01a\t\x13V[[_a\x0C\x0F\x84\x82\x85\x01a\nTV[\x91PP\x92\x91PPV[a\x0C!\x81a\t\x95V[\x82RPPV[_`@\x82\x01\x90Pa\x0C:_\x83\x01\x85a\tmV[a\x0CG` \x83\x01\x84a\x0C\x18V[\x93\x92PPPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[\x7FCannot access OwnedCounter owned_\x82\x01R\x7F by another address\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01RPV[_a\x0C\xB8`3\x83a\x0CNV[\x91Pa\x0C\xC3\x82a\x0C^V[`@\x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0C\xE5\x81a\x0C\xACV[\x90P\x91\x90PV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_a\r#\x82a\t\x95V[\x91Pa\r.\x83a\t\x95V[\x92P\x82\x82\x01\x90P\x80\x82\x11\x15a\rFWa\rEa\x0C\xECV[[\x92\x91PPV[_a\rV\x82a\t\x95V[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a\r\x88Wa\r\x87a\x0C\xECV[[`\x01\x82\x01\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[PV[_a\r\xAB_\x83a\r\x93V[\x91Pa\r\xB6\x82a\r\x9DV[_\x82\x01\x90P\x91\x90PV[_a\r\xCA\x82a\r\xA0V[\x91P\x81\x90P\x91\x90PV[\x7FPrecompile call failed\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_a\x0E\x08`\x16\x83a\x0CNV[\x91Pa\x0E\x13\x82a\r\xD4V[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0E5\x81a\r\xFCV[\x90P\x91\x90PV[\x7FInvalid output length\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_a\x0Ep`\x15\x83a\x0CNV[\x91Pa\x0E{\x82a\x0E<V[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0E\x9D\x81a\x0EdV[\x90P\x91\x90PV[a\x0E\xAD\x81a\n+V[\x81\x14a\x0E\xB7W__\xFD[PV[_\x81Q\x90Pa\x0E\xC8\x81a\x0E\xA4V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0E\xE3Wa\x0E\xE2a\t\x13V[[_a\x0E\xF0\x84\x82\x85\x01a\x0E\xBAV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x0F\r\x81a\x0E\xF9V[\x82RPPV[_` \x82\x01\x90Pa\x0F&_\x83\x01\x84a\x0F\x04V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[\x82\x81\x83^_\x83\x83\x01RPPPV[_a\x0FN\x82a\x0F,V[a\x0FX\x81\x85a\r\x93V[\x93Pa\x0Fh\x81\x85` \x86\x01a\x0F6V[\x80\x84\x01\x91PP\x92\x91PPV[_a\x0F\x7F\x82\x84a\x0FDV[\x91P\x81\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x0F\xAE\x82a\x0F\x8AV[a\x0F\xB8\x81\x85a\x0CNV[\x93Pa\x0F\xC8\x81\x85` \x86\x01a\x0F6V[a\x0F\xD1\x81a\x0F\x94V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0F\xF4\x81\x84a\x0F\xA4V[\x90P\x92\x91PPV\xFECannot decide winner before deadlineCannot set winner with less votes than threshold",
528    );
529    /// The runtime bytecode of the contract, as deployed on the network.
530    ///
531    /// ```text
532    ///0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806324c6e3c41461004e578063995d5d911461007e578063a7d4c4731461009a578063e8021822146100b6575b5f5ffd5b61006860048036038101906100639190610939565b6100d2565b604051610075919061097c565b60405180910390f35b61009860048036038101906100939190610939565b610101565b005b6100b460048036038101906100af91906109c8565b610160565b005b6100d060048036038101906100cb91906109c8565b6102ce565b005b5f816040516020016100e49190610ba9565b604051602081830303815290604052805190602001209050919050565b8060600160208101906101149190610bc2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461014a575f5ffd5b61015d335f6103a190919063ffffffff16565b50565b6101b18260200160208101906101769190610bed565b6040518060400160405280601a81526020017f43616e6e6f7420766f746520616674657220646561646c696e650000000000008152506103c9565b5f6101bb836100d2565b9050610207336040518060400160405280601d81526020017f43616e6e6f7420766f7465206966206e6f7420726567697374657265640000008152505f6103fa9092919063ffffffff16565b5f61021e823360026104249092919063ffffffff16565b14610227575f5ffd5b6102408133600160026104ea909392919063ffffffff16565b5f8183604051602001610254929190610c27565b60405160208183030381529060405280519060200120905061028381600160036105b09092919063ffffffff16565b823373ffffffffffffffffffffffffffffffffffffffff16837fe4abc5380fa6939d1dc23b5e90b3a8a0e328f0f1a82a5f42bfb795bf9c71750560405160405180910390a450505050565b6103028260200160208101906102e49190610bed565b604051806060016040528060248152602001610ffd602491396105dd565b5f61030c836100d2565b90505f8183604051602001610322929190610c27565b60405160208183030381529060405280519060200120905061036d81855f013560405180606001604052806030815260200161102160309139600361060e909392919063ffffffff16565b82827f269d3a24712436f77df15d63de7d2337a060c9102dee6f46c909fb0fa2d52f0c60405160405180910390a350505050565b6103c5825f018273ffffffffffffffffffffffffffffffffffffffff165f1b610633565b5050565b6103f66103f0836103d8610691565b67ffffffffffffffff166107bf90919063ffffffff16565b826107df565b5050565b61041f835f018373ffffffffffffffffffffffffffffffffffffffff165f1b836108d0565b505050565b5f3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048a90610cce565b60405180910390fd5b835f015f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490509392505050565b3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054f90610cce565b60405180910390fd5b80845f015f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555050505050565b80835f015f8481526020019081526020015f205f8282546105d19190610d19565b92505081905550505050565b61060a610604836105ec610691565b67ffffffffffffffff166108f390919063ffffffff16565b826107df565b5050565b61062d82855f015f8681526020019081526020015f20541015826107df565b50505050565b5f825f015f8381526020019081526020015f20540361068d576001826001015461065d9190610d19565b825f015f8381526020019081526020015f2081905550816001015f81548092919061068790610d4c565b91905055505b5050565b5f5f5f7fba286e4d89dabf4b2878e896423bb123d9d5143e662606fd343b6766d7bcf7215f1c73ffffffffffffffffffffffffffffffffffffffff166040516106d990610dc0565b5f60405180830381855afa9150503d805f8114610711576040519150601f19603f3d011682016040523d82523d5f602084013e610716565b606091505b50915091508161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290610e1e565b60405180910390fd5b602081511461079f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079690610e86565b60405180910390fd5b5f818060200190518101906107b49190610ece565b905080935050505090565b5f8167ffffffffffffffff168367ffffffffffffffff1610905092915050565b5f7f3dcdf63b41c103567d7225976ad9145e866c7a7dccc6c277ea86abbd268fbac95f1c73ffffffffffffffffffffffffffffffffffffffff168360405160200161082a9190610f13565b6040516020818303038152906040526040516108469190610f74565b5f60405180830381855afa9150503d805f811461087e576040519150601f19603f3d011682016040523d82523d5f602084013e610883565b606091505b505090508082906108ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c19190610fdc565b60405180910390fd5b50505050565b6108ee5f845f015f8581526020019081526020015f205411826107df565b505050565b5f8167ffffffffffffffff168367ffffffffffffffff1611905092915050565b5f5ffd5b5f5ffd5b5f608082840312156109305761092f610917565b5b81905092915050565b5f6080828403121561094e5761094d610913565b5b5f61095b8482850161091b565b91505092915050565b5f819050919050565b61097681610964565b82525050565b5f60208201905061098f5f83018461096d565b92915050565b5f819050919050565b6109a781610995565b81146109b1575f5ffd5b50565b5f813590506109c28161099e565b92915050565b5f5f60a083850312156109de576109dd610913565b5b5f6109eb8582860161091b565b92505060806109fc858286016109b4565b9150509250929050565b5f610a1460208401846109b4565b905092915050565b610a2581610995565b82525050565b5f67ffffffffffffffff82169050919050565b610a4781610a2b565b8114610a51575f5ffd5b50565b5f81359050610a6281610a3e565b92915050565b5f610a766020840184610a54565b905092915050565b5f819050919050565b5f610aa1610a9c610a9784610a2b565b610a7e565b610a2b565b9050919050565b610ab181610a87565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ae082610ab7565b9050919050565b610af081610ad6565b8114610afa575f5ffd5b50565b5f81359050610b0b81610ae7565b92915050565b5f610b1f6020840184610afd565b905092915050565b610b3081610ad6565b82525050565b60808201610b465f830183610a06565b610b525f850182610a1c565b50610b606020830183610a68565b610b6d6020850182610aa8565b50610b7b6040830183610a06565b610b886040850182610a1c565b50610b966060830183610b11565b610ba36060850182610b27565b50505050565b5f608082019050610bbc5f830184610b36565b92915050565b5f60208284031215610bd757610bd6610913565b5b5f610be484828501610afd565b91505092915050565b5f60208284031215610c0257610c01610913565b5b5f610c0f84828501610a54565b91505092915050565b610c2181610995565b82525050565b5f604082019050610c3a5f83018561096d565b610c476020830184610c18565b9392505050565b5f82825260208201905092915050565b7f43616e6e6f7420616363657373204f776e6564436f756e746572206f776e65645f8201527f20627920616e6f74686572206164647265737300000000000000000000000000602082015250565b5f610cb8603383610c4e565b9150610cc382610c5e565b604082019050919050565b5f6020820190508181035f830152610ce581610cac565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d2382610995565b9150610d2e83610995565b9250828201905080821115610d4657610d45610cec565b5b92915050565b5f610d5682610995565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d8857610d87610cec565b5b600182019050919050565b5f81905092915050565b50565b5f610dab5f83610d93565b9150610db682610d9d565b5f82019050919050565b5f610dca82610da0565b9150819050919050565b7f507265636f6d70696c652063616c6c206661696c6564000000000000000000005f82015250565b5f610e08601683610c4e565b9150610e1382610dd4565b602082019050919050565b5f6020820190508181035f830152610e3581610dfc565b9050919050565b7f496e76616c6964206f7574707574206c656e67746800000000000000000000005f82015250565b5f610e70601583610c4e565b9150610e7b82610e3c565b602082019050919050565b5f6020820190508181035f830152610e9d81610e64565b9050919050565b610ead81610a2b565b8114610eb7575f5ffd5b50565b5f81519050610ec881610ea4565b92915050565b5f60208284031215610ee357610ee2610913565b5b5f610ef084828501610eba565b91505092915050565b5f8115159050919050565b610f0d81610ef9565b82525050565b5f602082019050610f265f830184610f04565b92915050565b5f81519050919050565b8281835e5f83830152505050565b5f610f4e82610f2c565b610f588185610d93565b9350610f68818560208601610f36565b80840191505092915050565b5f610f7f8284610f44565b915081905092915050565b5f81519050919050565b5f601f19601f8301169050919050565b5f610fae82610f8a565b610fb88185610c4e565b9350610fc8818560208601610f36565b610fd181610f94565b840191505092915050565b5f6020820190508181035f830152610ff48184610fa4565b90509291505056fe43616e6e6f74206465636964652077696e6e6572206265666f726520646561646c696e6543616e6e6f74207365742077696e6e65722077697468206c65737320766f746573207468616e207468726573686f6c64
533    /// ```
534    #[rustfmt::skip]
535    #[allow(clippy::all)]
536    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
537        b"`\x80`@R4\x80\x15a\0\x0FW__\xFD[P`\x046\x10a\0JW_5`\xE0\x1C\x80c$\xC6\xE3\xC4\x14a\0NW\x80c\x99]]\x91\x14a\0~W\x80c\xA7\xD4\xC4s\x14a\0\x9AW\x80c\xE8\x02\x18\"\x14a\0\xB6W[__\xFD[a\0h`\x04\x806\x03\x81\x01\x90a\0c\x91\x90a\t9V[a\0\xD2V[`@Qa\0u\x91\x90a\t|V[`@Q\x80\x91\x03\x90\xF3[a\0\x98`\x04\x806\x03\x81\x01\x90a\0\x93\x91\x90a\t9V[a\x01\x01V[\0[a\0\xB4`\x04\x806\x03\x81\x01\x90a\0\xAF\x91\x90a\t\xC8V[a\x01`V[\0[a\0\xD0`\x04\x806\x03\x81\x01\x90a\0\xCB\x91\x90a\t\xC8V[a\x02\xCEV[\0[_\x81`@Q` \x01a\0\xE4\x91\x90a\x0B\xA9V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x91\x90PV[\x80``\x01` \x81\x01\x90a\x01\x14\x91\x90a\x0B\xC2V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x163s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x01JW__\xFD[a\x01]3_a\x03\xA1\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[PV[a\x01\xB1\x82` \x01` \x81\x01\x90a\x01v\x91\x90a\x0B\xEDV[`@Q\x80`@\x01`@R\x80`\x1A\x81R` \x01\x7FCannot vote after deadline\0\0\0\0\0\0\x81RPa\x03\xC9V[_a\x01\xBB\x83a\0\xD2V[\x90Pa\x02\x073`@Q\x80`@\x01`@R\x80`\x1D\x81R` \x01\x7FCannot vote if not registered\0\0\0\x81RP_a\x03\xFA\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[_a\x02\x1E\x823`\x02a\x04$\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x14a\x02'W__\xFD[a\x02@\x813`\x01`\x02a\x04\xEA\x90\x93\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[_\x81\x83`@Q` \x01a\x02T\x92\x91\x90a\x0C'V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa\x02\x83\x81`\x01`\x03a\x05\xB0\x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x823s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83\x7F\xE4\xAB\xC58\x0F\xA6\x93\x9D\x1D\xC2;^\x90\xB3\xA8\xA0\xE3(\xF0\xF1\xA8*_B\xBF\xB7\x95\xBF\x9Cqu\x05`@Q`@Q\x80\x91\x03\x90\xA4PPPPV[a\x03\x02\x82` \x01` \x81\x01\x90a\x02\xE4\x91\x90a\x0B\xEDV[`@Q\x80``\x01`@R\x80`$\x81R` \x01a\x0F\xFD`$\x919a\x05\xDDV[_a\x03\x0C\x83a\0\xD2V[\x90P_\x81\x83`@Q` \x01a\x03\"\x92\x91\x90a\x0C'V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90Pa\x03m\x81\x85_\x015`@Q\x80``\x01`@R\x80`0\x81R` \x01a\x10!`0\x919`\x03a\x06\x0E\x90\x93\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82\x82\x7F&\x9D:$q$6\xF7}\xF1]c\xDE}#7\xA0`\xC9\x10-\xEEoF\xC9\t\xFB\x0F\xA2\xD5/\x0C`@Q`@Q\x80\x91\x03\x90\xA3PPPPV[a\x03\xC5\x82_\x01\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x1Ba\x063V[PPV[a\x03\xF6a\x03\xF0\x83a\x03\xD8a\x06\x91V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x07\xBF\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82a\x07\xDFV[PPV[a\x04\x1F\x83_\x01\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_\x1B\x83a\x08\xD0V[PPPV[_2s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x04\x93W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x04\x8A\x90a\x0C\xCEV[`@Q\x80\x91\x03\x90\xFD[\x83_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x83s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ T\x90P\x93\x92PPPV[2s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x82s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x14a\x05XW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x05O\x90a\x0C\xCEV[`@Q\x80\x91\x03\x90\xFD[\x80\x84_\x01_\x85\x81R` \x01\x90\x81R` \x01_ _\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R` \x01\x90\x81R` \x01_ \x81\x90UPPPPPV[\x80\x83_\x01_\x84\x81R` \x01\x90\x81R` \x01_ _\x82\x82Ta\x05\xD1\x91\x90a\r\x19V[\x92PP\x81\x90UPPPPV[a\x06\na\x06\x04\x83a\x05\xECa\x06\x91V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x08\xF3\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x82a\x07\xDFV[PPV[a\x06-\x82\x85_\x01_\x86\x81R` \x01\x90\x81R` \x01_ T\x10\x15\x82a\x07\xDFV[PPPPV[_\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ T\x03a\x06\x8DW`\x01\x82`\x01\x01Ta\x06]\x91\x90a\r\x19V[\x82_\x01_\x83\x81R` \x01\x90\x81R` \x01_ \x81\x90UP\x81`\x01\x01_\x81T\x80\x92\x91\x90a\x06\x87\x90a\rLV[\x91\x90PUP[PPV[___\x7F\xBA(nM\x89\xDA\xBFK(x\xE8\x96B;\xB1#\xD9\xD5\x14>f&\x06\xFD4;gf\xD7\xBC\xF7!_\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Qa\x06\xD9\x90a\r\xC0V[_`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80_\x81\x14a\x07\x11W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x07\x16V[``\x91P[P\x91P\x91P\x81a\x07[W`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x07R\x90a\x0E\x1EV[`@Q\x80\x91\x03\x90\xFD[` \x81Q\x14a\x07\x9FW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x07\x96\x90a\x0E\x86V[`@Q\x80\x91\x03\x90\xFD[_\x81\x80` \x01\x90Q\x81\x01\x90a\x07\xB4\x91\x90a\x0E\xCEV[\x90P\x80\x93PPPP\x90V[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10\x90P\x92\x91PPV[_\x7F=\xCD\xF6;A\xC1\x03V}r%\x97j\xD9\x14^\x86lz}\xCC\xC6\xC2w\xEA\x86\xAB\xBD&\x8F\xBA\xC9_\x1Cs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83`@Q` \x01a\x08*\x91\x90a\x0F\x13V[`@Q` \x81\x83\x03\x03\x81R\x90`@R`@Qa\x08F\x91\x90a\x0FtV[_`@Q\x80\x83\x03\x81\x85Z\xFA\x91PP=\x80_\x81\x14a\x08~W`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=_` \x84\x01>a\x08\x83V[``\x91P[PP\x90P\x80\x82\x90a\x08\xCAW`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x01a\x08\xC1\x91\x90a\x0F\xDCV[`@Q\x80\x91\x03\x90\xFD[PPPPV[a\x08\xEE_\x84_\x01_\x85\x81R` \x01\x90\x81R` \x01_ T\x11\x82a\x07\xDFV[PPPV[_\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x11\x90P\x92\x91PPV[__\xFD[__\xFD[_`\x80\x82\x84\x03\x12\x15a\t0Wa\t/a\t\x17V[[\x81\x90P\x92\x91PPV[_`\x80\x82\x84\x03\x12\x15a\tNWa\tMa\t\x13V[[_a\t[\x84\x82\x85\x01a\t\x1BV[\x91PP\x92\x91PPV[_\x81\x90P\x91\x90PV[a\tv\x81a\tdV[\x82RPPV[_` \x82\x01\x90Pa\t\x8F_\x83\x01\x84a\tmV[\x92\x91PPV[_\x81\x90P\x91\x90PV[a\t\xA7\x81a\t\x95V[\x81\x14a\t\xB1W__\xFD[PV[_\x815\x90Pa\t\xC2\x81a\t\x9EV[\x92\x91PPV[__`\xA0\x83\x85\x03\x12\x15a\t\xDEWa\t\xDDa\t\x13V[[_a\t\xEB\x85\x82\x86\x01a\t\x1BV[\x92PP`\x80a\t\xFC\x85\x82\x86\x01a\t\xB4V[\x91PP\x92P\x92\x90PV[_a\n\x14` \x84\x01\x84a\t\xB4V[\x90P\x92\x91PPV[a\n%\x81a\t\x95V[\x82RPPV[_g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[a\nG\x81a\n+V[\x81\x14a\nQW__\xFD[PV[_\x815\x90Pa\nb\x81a\n>V[\x92\x91PPV[_a\nv` \x84\x01\x84a\nTV[\x90P\x92\x91PPV[_\x81\x90P\x91\x90PV[_a\n\xA1a\n\x9Ca\n\x97\x84a\n+V[a\n~V[a\n+V[\x90P\x91\x90PV[a\n\xB1\x81a\n\x87V[\x82RPPV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x90P\x91\x90PV[_a\n\xE0\x82a\n\xB7V[\x90P\x91\x90PV[a\n\xF0\x81a\n\xD6V[\x81\x14a\n\xFAW__\xFD[PV[_\x815\x90Pa\x0B\x0B\x81a\n\xE7V[\x92\x91PPV[_a\x0B\x1F` \x84\x01\x84a\n\xFDV[\x90P\x92\x91PPV[a\x0B0\x81a\n\xD6V[\x82RPPV[`\x80\x82\x01a\x0BF_\x83\x01\x83a\n\x06V[a\x0BR_\x85\x01\x82a\n\x1CV[Pa\x0B`` \x83\x01\x83a\nhV[a\x0Bm` \x85\x01\x82a\n\xA8V[Pa\x0B{`@\x83\x01\x83a\n\x06V[a\x0B\x88`@\x85\x01\x82a\n\x1CV[Pa\x0B\x96``\x83\x01\x83a\x0B\x11V[a\x0B\xA3``\x85\x01\x82a\x0B'V[PPPPV[_`\x80\x82\x01\x90Pa\x0B\xBC_\x83\x01\x84a\x0B6V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0B\xD7Wa\x0B\xD6a\t\x13V[[_a\x0B\xE4\x84\x82\x85\x01a\n\xFDV[\x91PP\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0C\x02Wa\x0C\x01a\t\x13V[[_a\x0C\x0F\x84\x82\x85\x01a\nTV[\x91PP\x92\x91PPV[a\x0C!\x81a\t\x95V[\x82RPPV[_`@\x82\x01\x90Pa\x0C:_\x83\x01\x85a\tmV[a\x0CG` \x83\x01\x84a\x0C\x18V[\x93\x92PPPV[_\x82\x82R` \x82\x01\x90P\x92\x91PPV[\x7FCannot access OwnedCounter owned_\x82\x01R\x7F by another address\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01RPV[_a\x0C\xB8`3\x83a\x0CNV[\x91Pa\x0C\xC3\x82a\x0C^V[`@\x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0C\xE5\x81a\x0C\xACV[\x90P\x91\x90PV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_a\r#\x82a\t\x95V[\x91Pa\r.\x83a\t\x95V[\x92P\x82\x82\x01\x90P\x80\x82\x11\x15a\rFWa\rEa\x0C\xECV[[\x92\x91PPV[_a\rV\x82a\t\x95V[\x91P\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x03a\r\x88Wa\r\x87a\x0C\xECV[[`\x01\x82\x01\x90P\x91\x90PV[_\x81\x90P\x92\x91PPV[PV[_a\r\xAB_\x83a\r\x93V[\x91Pa\r\xB6\x82a\r\x9DV[_\x82\x01\x90P\x91\x90PV[_a\r\xCA\x82a\r\xA0V[\x91P\x81\x90P\x91\x90PV[\x7FPrecompile call failed\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_a\x0E\x08`\x16\x83a\x0CNV[\x91Pa\x0E\x13\x82a\r\xD4V[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0E5\x81a\r\xFCV[\x90P\x91\x90PV[\x7FInvalid output length\0\0\0\0\0\0\0\0\0\0\0_\x82\x01RPV[_a\x0Ep`\x15\x83a\x0CNV[\x91Pa\x0E{\x82a\x0E<V[` \x82\x01\x90P\x91\x90PV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0E\x9D\x81a\x0EdV[\x90P\x91\x90PV[a\x0E\xAD\x81a\n+V[\x81\x14a\x0E\xB7W__\xFD[PV[_\x81Q\x90Pa\x0E\xC8\x81a\x0E\xA4V[\x92\x91PPV[_` \x82\x84\x03\x12\x15a\x0E\xE3Wa\x0E\xE2a\t\x13V[[_a\x0E\xF0\x84\x82\x85\x01a\x0E\xBAV[\x91PP\x92\x91PPV[_\x81\x15\x15\x90P\x91\x90PV[a\x0F\r\x81a\x0E\xF9V[\x82RPPV[_` \x82\x01\x90Pa\x0F&_\x83\x01\x84a\x0F\x04V[\x92\x91PPV[_\x81Q\x90P\x91\x90PV[\x82\x81\x83^_\x83\x83\x01RPPPV[_a\x0FN\x82a\x0F,V[a\x0FX\x81\x85a\r\x93V[\x93Pa\x0Fh\x81\x85` \x86\x01a\x0F6V[\x80\x84\x01\x91PP\x92\x91PPV[_a\x0F\x7F\x82\x84a\x0FDV[\x91P\x81\x90P\x92\x91PPV[_\x81Q\x90P\x91\x90PV[_`\x1F\x19`\x1F\x83\x01\x16\x90P\x91\x90PV[_a\x0F\xAE\x82a\x0F\x8AV[a\x0F\xB8\x81\x85a\x0CNV[\x93Pa\x0F\xC8\x81\x85` \x86\x01a\x0F6V[a\x0F\xD1\x81a\x0F\x94V[\x84\x01\x91PP\x92\x91PPV[_` \x82\x01\x90P\x81\x81\x03_\x83\x01Ra\x0F\xF4\x81\x84a\x0F\xA4V[\x90P\x92\x91PPV\xFECannot decide winner before deadlineCannot set winner with less votes than threshold",
538    );
539    #[derive(serde::Serialize, serde::Deserialize)]
540    #[derive(Default, Debug, PartialEq, Eq, Hash)]
541    /**```solidity
542struct VotingInfo { uint256 threshold; Time.Timestamp deadline; uint256 nonce; address owner; }
543```*/
544    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
545    #[derive(Clone)]
546    pub struct VotingInfo {
547        #[allow(missing_docs)]
548        pub threshold: alloy::sol_types::private::primitives::aliases::U256,
549        #[allow(missing_docs)]
550        pub deadline: <Time::Timestamp as alloy::sol_types::SolType>::RustType,
551        #[allow(missing_docs)]
552        pub nonce: alloy::sol_types::private::primitives::aliases::U256,
553        #[allow(missing_docs)]
554        pub owner: alloy::sol_types::private::Address,
555    }
556    #[allow(
557        non_camel_case_types,
558        non_snake_case,
559        clippy::pub_underscore_fields,
560        clippy::style
561    )]
562    const _: () = {
563        use alloy::sol_types as alloy_sol_types;
564        #[doc(hidden)]
565        type UnderlyingSolTuple<'a> = (
566            alloy::sol_types::sol_data::Uint<256>,
567            Time::Timestamp,
568            alloy::sol_types::sol_data::Uint<256>,
569            alloy::sol_types::sol_data::Address,
570        );
571        #[doc(hidden)]
572        type UnderlyingRustTuple<'a> = (
573            alloy::sol_types::private::primitives::aliases::U256,
574            <Time::Timestamp as alloy::sol_types::SolType>::RustType,
575            alloy::sol_types::private::primitives::aliases::U256,
576            alloy::sol_types::private::Address,
577        );
578        #[cfg(test)]
579        #[allow(dead_code, unreachable_patterns)]
580        fn _type_assertion(
581            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
582        ) {
583            match _t {
584                alloy_sol_types::private::AssertTypeEq::<
585                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
586                >(_) => {}
587            }
588        }
589        #[automatically_derived]
590        #[doc(hidden)]
591        impl ::core::convert::From<VotingInfo> for UnderlyingRustTuple<'_> {
592            fn from(value: VotingInfo) -> Self {
593                (value.threshold, value.deadline, value.nonce, value.owner)
594            }
595        }
596        #[automatically_derived]
597        #[doc(hidden)]
598        impl ::core::convert::From<UnderlyingRustTuple<'_>> for VotingInfo {
599            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
600                Self {
601                    threshold: tuple.0,
602                    deadline: tuple.1,
603                    nonce: tuple.2,
604                    owner: tuple.3,
605                }
606            }
607        }
608        #[automatically_derived]
609        impl alloy_sol_types::SolValue for VotingInfo {
610            type SolType = Self;
611        }
612        #[automatically_derived]
613        impl alloy_sol_types::private::SolTypeValue<Self> for VotingInfo {
614            #[inline]
615            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
616                (
617                    <alloy::sol_types::sol_data::Uint<
618                        256,
619                    > as alloy_sol_types::SolType>::tokenize(&self.threshold),
620                    <Time::Timestamp as alloy_sol_types::SolType>::tokenize(
621                        &self.deadline,
622                    ),
623                    <alloy::sol_types::sol_data::Uint<
624                        256,
625                    > as alloy_sol_types::SolType>::tokenize(&self.nonce),
626                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
627                        &self.owner,
628                    ),
629                )
630            }
631            #[inline]
632            fn stv_abi_encoded_size(&self) -> usize {
633                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
634                    return size;
635                }
636                let tuple = <UnderlyingRustTuple<
637                    '_,
638                > as ::core::convert::From<Self>>::from(self.clone());
639                <UnderlyingSolTuple<
640                    '_,
641                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
642            }
643            #[inline]
644            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
645                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
646            }
647            #[inline]
648            fn stv_abi_encode_packed_to(
649                &self,
650                out: &mut alloy_sol_types::private::Vec<u8>,
651            ) {
652                let tuple = <UnderlyingRustTuple<
653                    '_,
654                > as ::core::convert::From<Self>>::from(self.clone());
655                <UnderlyingSolTuple<
656                    '_,
657                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
658            }
659            #[inline]
660            fn stv_abi_packed_encoded_size(&self) -> usize {
661                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
662                    return size;
663                }
664                let tuple = <UnderlyingRustTuple<
665                    '_,
666                > as ::core::convert::From<Self>>::from(self.clone());
667                <UnderlyingSolTuple<
668                    '_,
669                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
670            }
671        }
672        #[automatically_derived]
673        impl alloy_sol_types::SolType for VotingInfo {
674            type RustType = Self;
675            type Token<'a> = <UnderlyingSolTuple<
676                'a,
677            > as alloy_sol_types::SolType>::Token<'a>;
678            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
679            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
680                '_,
681            > as alloy_sol_types::SolType>::ENCODED_SIZE;
682            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
683                '_,
684            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
685            #[inline]
686            fn valid_token(token: &Self::Token<'_>) -> bool {
687                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
688            }
689            #[inline]
690            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
691                let tuple = <UnderlyingSolTuple<
692                    '_,
693                > as alloy_sol_types::SolType>::detokenize(token);
694                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
695            }
696        }
697        #[automatically_derived]
698        impl alloy_sol_types::SolStruct for VotingInfo {
699            const NAME: &'static str = "VotingInfo";
700            #[inline]
701            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
702                alloy_sol_types::private::Cow::Borrowed(
703                    "VotingInfo(uint256 threshold,uint64 deadline,uint256 nonce,address owner)",
704                )
705            }
706            #[inline]
707            fn eip712_components() -> alloy_sol_types::private::Vec<
708                alloy_sol_types::private::Cow<'static, str>,
709            > {
710                alloy_sol_types::private::Vec::new()
711            }
712            #[inline]
713            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
714                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
715            }
716            #[inline]
717            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
718                [
719                    <alloy::sol_types::sol_data::Uint<
720                        256,
721                    > as alloy_sol_types::SolType>::eip712_data_word(&self.threshold)
722                        .0,
723                    <Time::Timestamp as alloy_sol_types::SolType>::eip712_data_word(
724                            &self.deadline,
725                        )
726                        .0,
727                    <alloy::sol_types::sol_data::Uint<
728                        256,
729                    > as alloy_sol_types::SolType>::eip712_data_word(&self.nonce)
730                        .0,
731                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::eip712_data_word(
732                            &self.owner,
733                        )
734                        .0,
735                ]
736                    .concat()
737            }
738        }
739        #[automatically_derived]
740        impl alloy_sol_types::EventTopic for VotingInfo {
741            #[inline]
742            fn topic_preimage_length(rust: &Self::RustType) -> usize {
743                0usize
744                    + <alloy::sol_types::sol_data::Uint<
745                        256,
746                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
747                        &rust.threshold,
748                    )
749                    + <Time::Timestamp as alloy_sol_types::EventTopic>::topic_preimage_length(
750                        &rust.deadline,
751                    )
752                    + <alloy::sol_types::sol_data::Uint<
753                        256,
754                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.nonce)
755                    + <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::topic_preimage_length(
756                        &rust.owner,
757                    )
758            }
759            #[inline]
760            fn encode_topic_preimage(
761                rust: &Self::RustType,
762                out: &mut alloy_sol_types::private::Vec<u8>,
763            ) {
764                out.reserve(
765                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
766                );
767                <alloy::sol_types::sol_data::Uint<
768                    256,
769                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
770                    &rust.threshold,
771                    out,
772                );
773                <Time::Timestamp as alloy_sol_types::EventTopic>::encode_topic_preimage(
774                    &rust.deadline,
775                    out,
776                );
777                <alloy::sol_types::sol_data::Uint<
778                    256,
779                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
780                    &rust.nonce,
781                    out,
782                );
783                <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic_preimage(
784                    &rust.owner,
785                    out,
786                );
787            }
788            #[inline]
789            fn encode_topic(
790                rust: &Self::RustType,
791            ) -> alloy_sol_types::abi::token::WordToken {
792                let mut out = alloy_sol_types::private::Vec::new();
793                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
794                    rust,
795                    &mut out,
796                );
797                alloy_sol_types::abi::token::WordToken(
798                    alloy_sol_types::private::keccak256(out),
799                )
800            }
801        }
802    };
803    #[derive(serde::Serialize, serde::Deserialize)]
804    #[derive(Default, Debug, PartialEq, Eq, Hash)]
805    /**Event with signature `Voted(bytes32,address,uint256)` and selector `0xe4abc5380fa6939d1dc23b5e90b3a8a0e328f0f1a82a5f42bfb795bf9c717505`.
806```solidity
807event Voted(bytes32 indexed votingId, address indexed voter, uint256 indexed choice);
808```*/
809    #[allow(
810        non_camel_case_types,
811        non_snake_case,
812        clippy::pub_underscore_fields,
813        clippy::style
814    )]
815    #[derive(Clone)]
816    pub struct Voted {
817        #[allow(missing_docs)]
818        pub votingId: alloy::sol_types::private::FixedBytes<32>,
819        #[allow(missing_docs)]
820        pub voter: alloy::sol_types::private::Address,
821        #[allow(missing_docs)]
822        pub choice: alloy::sol_types::private::primitives::aliases::U256,
823    }
824    #[allow(
825        non_camel_case_types,
826        non_snake_case,
827        clippy::pub_underscore_fields,
828        clippy::style
829    )]
830    const _: () = {
831        use alloy::sol_types as alloy_sol_types;
832        #[automatically_derived]
833        impl alloy_sol_types::SolEvent for Voted {
834            type DataTuple<'a> = ();
835            type DataToken<'a> = <Self::DataTuple<
836                'a,
837            > as alloy_sol_types::SolType>::Token<'a>;
838            type TopicList = (
839                alloy_sol_types::sol_data::FixedBytes<32>,
840                alloy::sol_types::sol_data::FixedBytes<32>,
841                alloy::sol_types::sol_data::Address,
842                alloy::sol_types::sol_data::Uint<256>,
843            );
844            const SIGNATURE: &'static str = "Voted(bytes32,address,uint256)";
845            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
846                228u8, 171u8, 197u8, 56u8, 15u8, 166u8, 147u8, 157u8, 29u8, 194u8, 59u8,
847                94u8, 144u8, 179u8, 168u8, 160u8, 227u8, 40u8, 240u8, 241u8, 168u8, 42u8,
848                95u8, 66u8, 191u8, 183u8, 149u8, 191u8, 156u8, 113u8, 117u8, 5u8,
849            ]);
850            const ANONYMOUS: bool = false;
851            #[allow(unused_variables)]
852            #[inline]
853            fn new(
854                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
855                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
856            ) -> Self {
857                Self {
858                    votingId: topics.1,
859                    voter: topics.2,
860                    choice: topics.3,
861                }
862            }
863            #[inline]
864            fn check_signature(
865                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
866            ) -> alloy_sol_types::Result<()> {
867                if topics.0 != Self::SIGNATURE_HASH {
868                    return Err(
869                        alloy_sol_types::Error::invalid_event_signature_hash(
870                            Self::SIGNATURE,
871                            topics.0,
872                            Self::SIGNATURE_HASH,
873                        ),
874                    );
875                }
876                Ok(())
877            }
878            #[inline]
879            fn tokenize_body(&self) -> Self::DataToken<'_> {
880                ()
881            }
882            #[inline]
883            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
884                (
885                    Self::SIGNATURE_HASH.into(),
886                    self.votingId.clone(),
887                    self.voter.clone(),
888                    self.choice.clone(),
889                )
890            }
891            #[inline]
892            fn encode_topics_raw(
893                &self,
894                out: &mut [alloy_sol_types::abi::token::WordToken],
895            ) -> alloy_sol_types::Result<()> {
896                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
897                    return Err(alloy_sol_types::Error::Overrun);
898                }
899                out[0usize] = alloy_sol_types::abi::token::WordToken(
900                    Self::SIGNATURE_HASH,
901                );
902                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
903                    32,
904                > as alloy_sol_types::EventTopic>::encode_topic(&self.votingId);
905                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
906                    &self.voter,
907                );
908                out[3usize] = <alloy::sol_types::sol_data::Uint<
909                    256,
910                > as alloy_sol_types::EventTopic>::encode_topic(&self.choice);
911                Ok(())
912            }
913        }
914        #[automatically_derived]
915        impl alloy_sol_types::private::IntoLogData for Voted {
916            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
917                From::from(self)
918            }
919            fn into_log_data(self) -> alloy_sol_types::private::LogData {
920                From::from(&self)
921            }
922        }
923        #[automatically_derived]
924        impl From<&Voted> for alloy_sol_types::private::LogData {
925            #[inline]
926            fn from(this: &Voted) -> alloy_sol_types::private::LogData {
927                alloy_sol_types::SolEvent::encode_log_data(this)
928            }
929        }
930    };
931    #[derive(serde::Serialize, serde::Deserialize)]
932    #[derive(Default, Debug, PartialEq, Eq, Hash)]
933    /**Event with signature `Winner(bytes32,uint256)` and selector `0x269d3a24712436f77df15d63de7d2337a060c9102dee6f46c909fb0fa2d52f0c`.
934```solidity
935event Winner(bytes32 indexed votingId, uint256 indexed choice);
936```*/
937    #[allow(
938        non_camel_case_types,
939        non_snake_case,
940        clippy::pub_underscore_fields,
941        clippy::style
942    )]
943    #[derive(Clone)]
944    pub struct Winner {
945        #[allow(missing_docs)]
946        pub votingId: alloy::sol_types::private::FixedBytes<32>,
947        #[allow(missing_docs)]
948        pub choice: alloy::sol_types::private::primitives::aliases::U256,
949    }
950    #[allow(
951        non_camel_case_types,
952        non_snake_case,
953        clippy::pub_underscore_fields,
954        clippy::style
955    )]
956    const _: () = {
957        use alloy::sol_types as alloy_sol_types;
958        #[automatically_derived]
959        impl alloy_sol_types::SolEvent for Winner {
960            type DataTuple<'a> = ();
961            type DataToken<'a> = <Self::DataTuple<
962                'a,
963            > as alloy_sol_types::SolType>::Token<'a>;
964            type TopicList = (
965                alloy_sol_types::sol_data::FixedBytes<32>,
966                alloy::sol_types::sol_data::FixedBytes<32>,
967                alloy::sol_types::sol_data::Uint<256>,
968            );
969            const SIGNATURE: &'static str = "Winner(bytes32,uint256)";
970            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
971                38u8, 157u8, 58u8, 36u8, 113u8, 36u8, 54u8, 247u8, 125u8, 241u8, 93u8,
972                99u8, 222u8, 125u8, 35u8, 55u8, 160u8, 96u8, 201u8, 16u8, 45u8, 238u8,
973                111u8, 70u8, 201u8, 9u8, 251u8, 15u8, 162u8, 213u8, 47u8, 12u8,
974            ]);
975            const ANONYMOUS: bool = false;
976            #[allow(unused_variables)]
977            #[inline]
978            fn new(
979                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
980                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
981            ) -> Self {
982                Self {
983                    votingId: topics.1,
984                    choice: topics.2,
985                }
986            }
987            #[inline]
988            fn check_signature(
989                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
990            ) -> alloy_sol_types::Result<()> {
991                if topics.0 != Self::SIGNATURE_HASH {
992                    return Err(
993                        alloy_sol_types::Error::invalid_event_signature_hash(
994                            Self::SIGNATURE,
995                            topics.0,
996                            Self::SIGNATURE_HASH,
997                        ),
998                    );
999                }
1000                Ok(())
1001            }
1002            #[inline]
1003            fn tokenize_body(&self) -> Self::DataToken<'_> {
1004                ()
1005            }
1006            #[inline]
1007            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1008                (Self::SIGNATURE_HASH.into(), self.votingId.clone(), self.choice.clone())
1009            }
1010            #[inline]
1011            fn encode_topics_raw(
1012                &self,
1013                out: &mut [alloy_sol_types::abi::token::WordToken],
1014            ) -> alloy_sol_types::Result<()> {
1015                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1016                    return Err(alloy_sol_types::Error::Overrun);
1017                }
1018                out[0usize] = alloy_sol_types::abi::token::WordToken(
1019                    Self::SIGNATURE_HASH,
1020                );
1021                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
1022                    32,
1023                > as alloy_sol_types::EventTopic>::encode_topic(&self.votingId);
1024                out[2usize] = <alloy::sol_types::sol_data::Uint<
1025                    256,
1026                > as alloy_sol_types::EventTopic>::encode_topic(&self.choice);
1027                Ok(())
1028            }
1029        }
1030        #[automatically_derived]
1031        impl alloy_sol_types::private::IntoLogData for Winner {
1032            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1033                From::from(self)
1034            }
1035            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1036                From::from(&self)
1037            }
1038        }
1039        #[automatically_derived]
1040        impl From<&Winner> for alloy_sol_types::private::LogData {
1041            #[inline]
1042            fn from(this: &Winner) -> alloy_sol_types::private::LogData {
1043                alloy_sol_types::SolEvent::encode_log_data(this)
1044            }
1045        }
1046    };
1047    #[derive(serde::Serialize, serde::Deserialize)]
1048    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1049    /**Function with signature `register((uint256,uint64,uint256,address))` and selector `0x995d5d91`.
1050```solidity
1051function register(VotingInfo memory v) external;
1052```*/
1053    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1054    #[derive(Clone)]
1055    pub struct registerCall {
1056        #[allow(missing_docs)]
1057        pub v: <VotingInfo as alloy::sol_types::SolType>::RustType,
1058    }
1059    ///Container type for the return parameters of the [`register((uint256,uint64,uint256,address))`](registerCall) function.
1060    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1061    #[derive(Clone)]
1062    pub struct registerReturn {}
1063    #[allow(
1064        non_camel_case_types,
1065        non_snake_case,
1066        clippy::pub_underscore_fields,
1067        clippy::style
1068    )]
1069    const _: () = {
1070        use alloy::sol_types as alloy_sol_types;
1071        {
1072            #[doc(hidden)]
1073            type UnderlyingSolTuple<'a> = (VotingInfo,);
1074            #[doc(hidden)]
1075            type UnderlyingRustTuple<'a> = (
1076                <VotingInfo as alloy::sol_types::SolType>::RustType,
1077            );
1078            #[cfg(test)]
1079            #[allow(dead_code, unreachable_patterns)]
1080            fn _type_assertion(
1081                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1082            ) {
1083                match _t {
1084                    alloy_sol_types::private::AssertTypeEq::<
1085                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1086                    >(_) => {}
1087                }
1088            }
1089            #[automatically_derived]
1090            #[doc(hidden)]
1091            impl ::core::convert::From<registerCall> for UnderlyingRustTuple<'_> {
1092                fn from(value: registerCall) -> Self {
1093                    (value.v,)
1094                }
1095            }
1096            #[automatically_derived]
1097            #[doc(hidden)]
1098            impl ::core::convert::From<UnderlyingRustTuple<'_>> for registerCall {
1099                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1100                    Self { v: tuple.0 }
1101                }
1102            }
1103        }
1104        {
1105            #[doc(hidden)]
1106            type UnderlyingSolTuple<'a> = ();
1107            #[doc(hidden)]
1108            type UnderlyingRustTuple<'a> = ();
1109            #[cfg(test)]
1110            #[allow(dead_code, unreachable_patterns)]
1111            fn _type_assertion(
1112                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1113            ) {
1114                match _t {
1115                    alloy_sol_types::private::AssertTypeEq::<
1116                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1117                    >(_) => {}
1118                }
1119            }
1120            #[automatically_derived]
1121            #[doc(hidden)]
1122            impl ::core::convert::From<registerReturn> for UnderlyingRustTuple<'_> {
1123                fn from(value: registerReturn) -> Self {
1124                    ()
1125                }
1126            }
1127            #[automatically_derived]
1128            #[doc(hidden)]
1129            impl ::core::convert::From<UnderlyingRustTuple<'_>> for registerReturn {
1130                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1131                    Self {}
1132                }
1133            }
1134        }
1135        impl registerReturn {
1136            fn _tokenize(
1137                &self,
1138            ) -> <registerCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
1139                ()
1140            }
1141        }
1142        #[automatically_derived]
1143        impl alloy_sol_types::SolCall for registerCall {
1144            type Parameters<'a> = (VotingInfo,);
1145            type Token<'a> = <Self::Parameters<
1146                'a,
1147            > as alloy_sol_types::SolType>::Token<'a>;
1148            type Return = registerReturn;
1149            type ReturnTuple<'a> = ();
1150            type ReturnToken<'a> = <Self::ReturnTuple<
1151                'a,
1152            > as alloy_sol_types::SolType>::Token<'a>;
1153            const SIGNATURE: &'static str = "register((uint256,uint64,uint256,address))";
1154            const SELECTOR: [u8; 4] = [153u8, 93u8, 93u8, 145u8];
1155            #[inline]
1156            fn new<'a>(
1157                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1158            ) -> Self {
1159                tuple.into()
1160            }
1161            #[inline]
1162            fn tokenize(&self) -> Self::Token<'_> {
1163                (<VotingInfo as alloy_sol_types::SolType>::tokenize(&self.v),)
1164            }
1165            #[inline]
1166            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1167                registerReturn::_tokenize(ret)
1168            }
1169            #[inline]
1170            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1171                <Self::ReturnTuple<
1172                    '_,
1173                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1174                    .map(Into::into)
1175            }
1176            #[inline]
1177            fn abi_decode_returns_validate(
1178                data: &[u8],
1179            ) -> alloy_sol_types::Result<Self::Return> {
1180                <Self::ReturnTuple<
1181                    '_,
1182                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1183                    .map(Into::into)
1184            }
1185        }
1186    };
1187    #[derive(serde::Serialize, serde::Deserialize)]
1188    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1189    /**Function with signature `setWinner((uint256,uint64,uint256,address),uint256)` and selector `0xe8021822`.
1190```solidity
1191function setWinner(VotingInfo memory v, uint256 choice) external;
1192```*/
1193    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1194    #[derive(Clone)]
1195    pub struct setWinnerCall {
1196        #[allow(missing_docs)]
1197        pub v: <VotingInfo as alloy::sol_types::SolType>::RustType,
1198        #[allow(missing_docs)]
1199        pub choice: alloy::sol_types::private::primitives::aliases::U256,
1200    }
1201    ///Container type for the return parameters of the [`setWinner((uint256,uint64,uint256,address),uint256)`](setWinnerCall) function.
1202    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1203    #[derive(Clone)]
1204    pub struct setWinnerReturn {}
1205    #[allow(
1206        non_camel_case_types,
1207        non_snake_case,
1208        clippy::pub_underscore_fields,
1209        clippy::style
1210    )]
1211    const _: () = {
1212        use alloy::sol_types as alloy_sol_types;
1213        {
1214            #[doc(hidden)]
1215            type UnderlyingSolTuple<'a> = (
1216                VotingInfo,
1217                alloy::sol_types::sol_data::Uint<256>,
1218            );
1219            #[doc(hidden)]
1220            type UnderlyingRustTuple<'a> = (
1221                <VotingInfo as alloy::sol_types::SolType>::RustType,
1222                alloy::sol_types::private::primitives::aliases::U256,
1223            );
1224            #[cfg(test)]
1225            #[allow(dead_code, unreachable_patterns)]
1226            fn _type_assertion(
1227                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1228            ) {
1229                match _t {
1230                    alloy_sol_types::private::AssertTypeEq::<
1231                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1232                    >(_) => {}
1233                }
1234            }
1235            #[automatically_derived]
1236            #[doc(hidden)]
1237            impl ::core::convert::From<setWinnerCall> for UnderlyingRustTuple<'_> {
1238                fn from(value: setWinnerCall) -> Self {
1239                    (value.v, value.choice)
1240                }
1241            }
1242            #[automatically_derived]
1243            #[doc(hidden)]
1244            impl ::core::convert::From<UnderlyingRustTuple<'_>> for setWinnerCall {
1245                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1246                    Self {
1247                        v: tuple.0,
1248                        choice: tuple.1,
1249                    }
1250                }
1251            }
1252        }
1253        {
1254            #[doc(hidden)]
1255            type UnderlyingSolTuple<'a> = ();
1256            #[doc(hidden)]
1257            type UnderlyingRustTuple<'a> = ();
1258            #[cfg(test)]
1259            #[allow(dead_code, unreachable_patterns)]
1260            fn _type_assertion(
1261                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1262            ) {
1263                match _t {
1264                    alloy_sol_types::private::AssertTypeEq::<
1265                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1266                    >(_) => {}
1267                }
1268            }
1269            #[automatically_derived]
1270            #[doc(hidden)]
1271            impl ::core::convert::From<setWinnerReturn> for UnderlyingRustTuple<'_> {
1272                fn from(value: setWinnerReturn) -> Self {
1273                    ()
1274                }
1275            }
1276            #[automatically_derived]
1277            #[doc(hidden)]
1278            impl ::core::convert::From<UnderlyingRustTuple<'_>> for setWinnerReturn {
1279                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1280                    Self {}
1281                }
1282            }
1283        }
1284        impl setWinnerReturn {
1285            fn _tokenize(
1286                &self,
1287            ) -> <setWinnerCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
1288                ()
1289            }
1290        }
1291        #[automatically_derived]
1292        impl alloy_sol_types::SolCall for setWinnerCall {
1293            type Parameters<'a> = (VotingInfo, alloy::sol_types::sol_data::Uint<256>);
1294            type Token<'a> = <Self::Parameters<
1295                'a,
1296            > as alloy_sol_types::SolType>::Token<'a>;
1297            type Return = setWinnerReturn;
1298            type ReturnTuple<'a> = ();
1299            type ReturnToken<'a> = <Self::ReturnTuple<
1300                'a,
1301            > as alloy_sol_types::SolType>::Token<'a>;
1302            const SIGNATURE: &'static str = "setWinner((uint256,uint64,uint256,address),uint256)";
1303            const SELECTOR: [u8; 4] = [232u8, 2u8, 24u8, 34u8];
1304            #[inline]
1305            fn new<'a>(
1306                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1307            ) -> Self {
1308                tuple.into()
1309            }
1310            #[inline]
1311            fn tokenize(&self) -> Self::Token<'_> {
1312                (
1313                    <VotingInfo as alloy_sol_types::SolType>::tokenize(&self.v),
1314                    <alloy::sol_types::sol_data::Uint<
1315                        256,
1316                    > as alloy_sol_types::SolType>::tokenize(&self.choice),
1317                )
1318            }
1319            #[inline]
1320            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1321                setWinnerReturn::_tokenize(ret)
1322            }
1323            #[inline]
1324            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1325                <Self::ReturnTuple<
1326                    '_,
1327                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1328                    .map(Into::into)
1329            }
1330            #[inline]
1331            fn abi_decode_returns_validate(
1332                data: &[u8],
1333            ) -> alloy_sol_types::Result<Self::Return> {
1334                <Self::ReturnTuple<
1335                    '_,
1336                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1337                    .map(Into::into)
1338            }
1339        }
1340    };
1341    #[derive(serde::Serialize, serde::Deserialize)]
1342    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1343    /**Function with signature `vote((uint256,uint64,uint256,address),uint256)` and selector `0xa7d4c473`.
1344```solidity
1345function vote(VotingInfo memory v, uint256 choice) external;
1346```*/
1347    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1348    #[derive(Clone)]
1349    pub struct voteCall {
1350        #[allow(missing_docs)]
1351        pub v: <VotingInfo as alloy::sol_types::SolType>::RustType,
1352        #[allow(missing_docs)]
1353        pub choice: alloy::sol_types::private::primitives::aliases::U256,
1354    }
1355    ///Container type for the return parameters of the [`vote((uint256,uint64,uint256,address),uint256)`](voteCall) function.
1356    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1357    #[derive(Clone)]
1358    pub struct voteReturn {}
1359    #[allow(
1360        non_camel_case_types,
1361        non_snake_case,
1362        clippy::pub_underscore_fields,
1363        clippy::style
1364    )]
1365    const _: () = {
1366        use alloy::sol_types as alloy_sol_types;
1367        {
1368            #[doc(hidden)]
1369            type UnderlyingSolTuple<'a> = (
1370                VotingInfo,
1371                alloy::sol_types::sol_data::Uint<256>,
1372            );
1373            #[doc(hidden)]
1374            type UnderlyingRustTuple<'a> = (
1375                <VotingInfo as alloy::sol_types::SolType>::RustType,
1376                alloy::sol_types::private::primitives::aliases::U256,
1377            );
1378            #[cfg(test)]
1379            #[allow(dead_code, unreachable_patterns)]
1380            fn _type_assertion(
1381                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1382            ) {
1383                match _t {
1384                    alloy_sol_types::private::AssertTypeEq::<
1385                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1386                    >(_) => {}
1387                }
1388            }
1389            #[automatically_derived]
1390            #[doc(hidden)]
1391            impl ::core::convert::From<voteCall> for UnderlyingRustTuple<'_> {
1392                fn from(value: voteCall) -> Self {
1393                    (value.v, value.choice)
1394                }
1395            }
1396            #[automatically_derived]
1397            #[doc(hidden)]
1398            impl ::core::convert::From<UnderlyingRustTuple<'_>> for voteCall {
1399                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1400                    Self {
1401                        v: tuple.0,
1402                        choice: tuple.1,
1403                    }
1404                }
1405            }
1406        }
1407        {
1408            #[doc(hidden)]
1409            type UnderlyingSolTuple<'a> = ();
1410            #[doc(hidden)]
1411            type UnderlyingRustTuple<'a> = ();
1412            #[cfg(test)]
1413            #[allow(dead_code, unreachable_patterns)]
1414            fn _type_assertion(
1415                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1416            ) {
1417                match _t {
1418                    alloy_sol_types::private::AssertTypeEq::<
1419                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1420                    >(_) => {}
1421                }
1422            }
1423            #[automatically_derived]
1424            #[doc(hidden)]
1425            impl ::core::convert::From<voteReturn> for UnderlyingRustTuple<'_> {
1426                fn from(value: voteReturn) -> Self {
1427                    ()
1428                }
1429            }
1430            #[automatically_derived]
1431            #[doc(hidden)]
1432            impl ::core::convert::From<UnderlyingRustTuple<'_>> for voteReturn {
1433                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1434                    Self {}
1435                }
1436            }
1437        }
1438        impl voteReturn {
1439            fn _tokenize(
1440                &self,
1441            ) -> <voteCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
1442                ()
1443            }
1444        }
1445        #[automatically_derived]
1446        impl alloy_sol_types::SolCall for voteCall {
1447            type Parameters<'a> = (VotingInfo, alloy::sol_types::sol_data::Uint<256>);
1448            type Token<'a> = <Self::Parameters<
1449                'a,
1450            > as alloy_sol_types::SolType>::Token<'a>;
1451            type Return = voteReturn;
1452            type ReturnTuple<'a> = ();
1453            type ReturnToken<'a> = <Self::ReturnTuple<
1454                'a,
1455            > as alloy_sol_types::SolType>::Token<'a>;
1456            const SIGNATURE: &'static str = "vote((uint256,uint64,uint256,address),uint256)";
1457            const SELECTOR: [u8; 4] = [167u8, 212u8, 196u8, 115u8];
1458            #[inline]
1459            fn new<'a>(
1460                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1461            ) -> Self {
1462                tuple.into()
1463            }
1464            #[inline]
1465            fn tokenize(&self) -> Self::Token<'_> {
1466                (
1467                    <VotingInfo as alloy_sol_types::SolType>::tokenize(&self.v),
1468                    <alloy::sol_types::sol_data::Uint<
1469                        256,
1470                    > as alloy_sol_types::SolType>::tokenize(&self.choice),
1471                )
1472            }
1473            #[inline]
1474            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1475                voteReturn::_tokenize(ret)
1476            }
1477            #[inline]
1478            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1479                <Self::ReturnTuple<
1480                    '_,
1481                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1482                    .map(Into::into)
1483            }
1484            #[inline]
1485            fn abi_decode_returns_validate(
1486                data: &[u8],
1487            ) -> alloy_sol_types::Result<Self::Return> {
1488                <Self::ReturnTuple<
1489                    '_,
1490                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1491                    .map(Into::into)
1492            }
1493        }
1494    };
1495    #[derive(serde::Serialize, serde::Deserialize)]
1496    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1497    /**Function with signature `votingId((uint256,uint64,uint256,address))` and selector `0x24c6e3c4`.
1498```solidity
1499function votingId(VotingInfo memory v) external pure returns (bytes32);
1500```*/
1501    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1502    #[derive(Clone)]
1503    pub struct votingIdCall {
1504        #[allow(missing_docs)]
1505        pub v: <VotingInfo as alloy::sol_types::SolType>::RustType,
1506    }
1507    #[derive(serde::Serialize, serde::Deserialize)]
1508    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1509    ///Container type for the return parameters of the [`votingId((uint256,uint64,uint256,address))`](votingIdCall) function.
1510    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1511    #[derive(Clone)]
1512    pub struct votingIdReturn {
1513        #[allow(missing_docs)]
1514        pub _0: alloy::sol_types::private::FixedBytes<32>,
1515    }
1516    #[allow(
1517        non_camel_case_types,
1518        non_snake_case,
1519        clippy::pub_underscore_fields,
1520        clippy::style
1521    )]
1522    const _: () = {
1523        use alloy::sol_types as alloy_sol_types;
1524        {
1525            #[doc(hidden)]
1526            type UnderlyingSolTuple<'a> = (VotingInfo,);
1527            #[doc(hidden)]
1528            type UnderlyingRustTuple<'a> = (
1529                <VotingInfo as alloy::sol_types::SolType>::RustType,
1530            );
1531            #[cfg(test)]
1532            #[allow(dead_code, unreachable_patterns)]
1533            fn _type_assertion(
1534                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1535            ) {
1536                match _t {
1537                    alloy_sol_types::private::AssertTypeEq::<
1538                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1539                    >(_) => {}
1540                }
1541            }
1542            #[automatically_derived]
1543            #[doc(hidden)]
1544            impl ::core::convert::From<votingIdCall> for UnderlyingRustTuple<'_> {
1545                fn from(value: votingIdCall) -> Self {
1546                    (value.v,)
1547                }
1548            }
1549            #[automatically_derived]
1550            #[doc(hidden)]
1551            impl ::core::convert::From<UnderlyingRustTuple<'_>> for votingIdCall {
1552                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1553                    Self { v: tuple.0 }
1554                }
1555            }
1556        }
1557        {
1558            #[doc(hidden)]
1559            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
1560            #[doc(hidden)]
1561            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
1562            #[cfg(test)]
1563            #[allow(dead_code, unreachable_patterns)]
1564            fn _type_assertion(
1565                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1566            ) {
1567                match _t {
1568                    alloy_sol_types::private::AssertTypeEq::<
1569                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1570                    >(_) => {}
1571                }
1572            }
1573            #[automatically_derived]
1574            #[doc(hidden)]
1575            impl ::core::convert::From<votingIdReturn> for UnderlyingRustTuple<'_> {
1576                fn from(value: votingIdReturn) -> Self {
1577                    (value._0,)
1578                }
1579            }
1580            #[automatically_derived]
1581            #[doc(hidden)]
1582            impl ::core::convert::From<UnderlyingRustTuple<'_>> for votingIdReturn {
1583                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1584                    Self { _0: tuple.0 }
1585                }
1586            }
1587        }
1588        #[automatically_derived]
1589        impl alloy_sol_types::SolCall for votingIdCall {
1590            type Parameters<'a> = (VotingInfo,);
1591            type Token<'a> = <Self::Parameters<
1592                'a,
1593            > as alloy_sol_types::SolType>::Token<'a>;
1594            type Return = alloy::sol_types::private::FixedBytes<32>;
1595            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
1596            type ReturnToken<'a> = <Self::ReturnTuple<
1597                'a,
1598            > as alloy_sol_types::SolType>::Token<'a>;
1599            const SIGNATURE: &'static str = "votingId((uint256,uint64,uint256,address))";
1600            const SELECTOR: [u8; 4] = [36u8, 198u8, 227u8, 196u8];
1601            #[inline]
1602            fn new<'a>(
1603                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1604            ) -> Self {
1605                tuple.into()
1606            }
1607            #[inline]
1608            fn tokenize(&self) -> Self::Token<'_> {
1609                (<VotingInfo as alloy_sol_types::SolType>::tokenize(&self.v),)
1610            }
1611            #[inline]
1612            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1613                (
1614                    <alloy::sol_types::sol_data::FixedBytes<
1615                        32,
1616                    > as alloy_sol_types::SolType>::tokenize(ret),
1617                )
1618            }
1619            #[inline]
1620            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1621                <Self::ReturnTuple<
1622                    '_,
1623                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1624                    .map(|r| {
1625                        let r: votingIdReturn = r.into();
1626                        r._0
1627                    })
1628            }
1629            #[inline]
1630            fn abi_decode_returns_validate(
1631                data: &[u8],
1632            ) -> alloy_sol_types::Result<Self::Return> {
1633                <Self::ReturnTuple<
1634                    '_,
1635                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1636                    .map(|r| {
1637                        let r: votingIdReturn = r.into();
1638                        r._0
1639                    })
1640            }
1641        }
1642    };
1643    ///Container for all the [`Voting`](self) function calls.
1644    #[derive(serde::Serialize, serde::Deserialize)]
1645    #[derive()]
1646    pub enum VotingCalls {
1647        #[allow(missing_docs)]
1648        register(registerCall),
1649        #[allow(missing_docs)]
1650        setWinner(setWinnerCall),
1651        #[allow(missing_docs)]
1652        vote(voteCall),
1653        #[allow(missing_docs)]
1654        votingId(votingIdCall),
1655    }
1656    #[automatically_derived]
1657    impl VotingCalls {
1658        /// All the selectors of this enum.
1659        ///
1660        /// Note that the selectors might not be in the same order as the variants.
1661        /// No guarantees are made about the order of the selectors.
1662        ///
1663        /// Prefer using `SolInterface` methods instead.
1664        pub const SELECTORS: &'static [[u8; 4usize]] = &[
1665            [36u8, 198u8, 227u8, 196u8],
1666            [153u8, 93u8, 93u8, 145u8],
1667            [167u8, 212u8, 196u8, 115u8],
1668            [232u8, 2u8, 24u8, 34u8],
1669        ];
1670    }
1671    #[automatically_derived]
1672    impl alloy_sol_types::SolInterface for VotingCalls {
1673        const NAME: &'static str = "VotingCalls";
1674        const MIN_DATA_LENGTH: usize = 128usize;
1675        const COUNT: usize = 4usize;
1676        #[inline]
1677        fn selector(&self) -> [u8; 4] {
1678            match self {
1679                Self::register(_) => <registerCall as alloy_sol_types::SolCall>::SELECTOR,
1680                Self::setWinner(_) => {
1681                    <setWinnerCall as alloy_sol_types::SolCall>::SELECTOR
1682                }
1683                Self::vote(_) => <voteCall as alloy_sol_types::SolCall>::SELECTOR,
1684                Self::votingId(_) => <votingIdCall as alloy_sol_types::SolCall>::SELECTOR,
1685            }
1686        }
1687        #[inline]
1688        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
1689            Self::SELECTORS.get(i).copied()
1690        }
1691        #[inline]
1692        fn valid_selector(selector: [u8; 4]) -> bool {
1693            Self::SELECTORS.binary_search(&selector).is_ok()
1694        }
1695        #[inline]
1696        #[allow(non_snake_case)]
1697        fn abi_decode_raw(
1698            selector: [u8; 4],
1699            data: &[u8],
1700        ) -> alloy_sol_types::Result<Self> {
1701            static DECODE_SHIMS: &[fn(&[u8]) -> alloy_sol_types::Result<VotingCalls>] = &[
1702                {
1703                    fn votingId(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1704                        <votingIdCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
1705                            .map(VotingCalls::votingId)
1706                    }
1707                    votingId
1708                },
1709                {
1710                    fn register(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1711                        <registerCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
1712                            .map(VotingCalls::register)
1713                    }
1714                    register
1715                },
1716                {
1717                    fn vote(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1718                        <voteCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
1719                            .map(VotingCalls::vote)
1720                    }
1721                    vote
1722                },
1723                {
1724                    fn setWinner(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1725                        <setWinnerCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
1726                            .map(VotingCalls::setWinner)
1727                    }
1728                    setWinner
1729                },
1730            ];
1731            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
1732                return Err(
1733                    alloy_sol_types::Error::unknown_selector(
1734                        <Self as alloy_sol_types::SolInterface>::NAME,
1735                        selector,
1736                    ),
1737                );
1738            };
1739            DECODE_SHIMS[idx](data)
1740        }
1741        #[inline]
1742        #[allow(non_snake_case)]
1743        fn abi_decode_raw_validate(
1744            selector: [u8; 4],
1745            data: &[u8],
1746        ) -> alloy_sol_types::Result<Self> {
1747            static DECODE_VALIDATE_SHIMS: &[fn(
1748                &[u8],
1749            ) -> alloy_sol_types::Result<VotingCalls>] = &[
1750                {
1751                    fn votingId(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1752                        <votingIdCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1753                                data,
1754                            )
1755                            .map(VotingCalls::votingId)
1756                    }
1757                    votingId
1758                },
1759                {
1760                    fn register(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1761                        <registerCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1762                                data,
1763                            )
1764                            .map(VotingCalls::register)
1765                    }
1766                    register
1767                },
1768                {
1769                    fn vote(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1770                        <voteCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1771                                data,
1772                            )
1773                            .map(VotingCalls::vote)
1774                    }
1775                    vote
1776                },
1777                {
1778                    fn setWinner(data: &[u8]) -> alloy_sol_types::Result<VotingCalls> {
1779                        <setWinnerCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
1780                                data,
1781                            )
1782                            .map(VotingCalls::setWinner)
1783                    }
1784                    setWinner
1785                },
1786            ];
1787            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
1788                return Err(
1789                    alloy_sol_types::Error::unknown_selector(
1790                        <Self as alloy_sol_types::SolInterface>::NAME,
1791                        selector,
1792                    ),
1793                );
1794            };
1795            DECODE_VALIDATE_SHIMS[idx](data)
1796        }
1797        #[inline]
1798        fn abi_encoded_size(&self) -> usize {
1799            match self {
1800                Self::register(inner) => {
1801                    <registerCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
1802                }
1803                Self::setWinner(inner) => {
1804                    <setWinnerCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
1805                }
1806                Self::vote(inner) => {
1807                    <voteCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
1808                }
1809                Self::votingId(inner) => {
1810                    <votingIdCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
1811                }
1812            }
1813        }
1814        #[inline]
1815        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
1816            match self {
1817                Self::register(inner) => {
1818                    <registerCall as alloy_sol_types::SolCall>::abi_encode_raw(
1819                        inner,
1820                        out,
1821                    )
1822                }
1823                Self::setWinner(inner) => {
1824                    <setWinnerCall as alloy_sol_types::SolCall>::abi_encode_raw(
1825                        inner,
1826                        out,
1827                    )
1828                }
1829                Self::vote(inner) => {
1830                    <voteCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
1831                }
1832                Self::votingId(inner) => {
1833                    <votingIdCall as alloy_sol_types::SolCall>::abi_encode_raw(
1834                        inner,
1835                        out,
1836                    )
1837                }
1838            }
1839        }
1840    }
1841    ///Container for all the [`Voting`](self) events.
1842    #[derive(serde::Serialize, serde::Deserialize)]
1843    #[derive(Debug, PartialEq, Eq, Hash)]
1844    pub enum VotingEvents {
1845        #[allow(missing_docs)]
1846        Voted(Voted),
1847        #[allow(missing_docs)]
1848        Winner(Winner),
1849    }
1850    #[automatically_derived]
1851    impl VotingEvents {
1852        /// All the selectors of this enum.
1853        ///
1854        /// Note that the selectors might not be in the same order as the variants.
1855        /// No guarantees are made about the order of the selectors.
1856        ///
1857        /// Prefer using `SolInterface` methods instead.
1858        pub const SELECTORS: &'static [[u8; 32usize]] = &[
1859            [
1860                38u8, 157u8, 58u8, 36u8, 113u8, 36u8, 54u8, 247u8, 125u8, 241u8, 93u8,
1861                99u8, 222u8, 125u8, 35u8, 55u8, 160u8, 96u8, 201u8, 16u8, 45u8, 238u8,
1862                111u8, 70u8, 201u8, 9u8, 251u8, 15u8, 162u8, 213u8, 47u8, 12u8,
1863            ],
1864            [
1865                228u8, 171u8, 197u8, 56u8, 15u8, 166u8, 147u8, 157u8, 29u8, 194u8, 59u8,
1866                94u8, 144u8, 179u8, 168u8, 160u8, 227u8, 40u8, 240u8, 241u8, 168u8, 42u8,
1867                95u8, 66u8, 191u8, 183u8, 149u8, 191u8, 156u8, 113u8, 117u8, 5u8,
1868            ],
1869        ];
1870    }
1871    #[automatically_derived]
1872    impl alloy_sol_types::SolEventInterface for VotingEvents {
1873        const NAME: &'static str = "VotingEvents";
1874        const COUNT: usize = 2usize;
1875        fn decode_raw_log(
1876            topics: &[alloy_sol_types::Word],
1877            data: &[u8],
1878        ) -> alloy_sol_types::Result<Self> {
1879            match topics.first().copied() {
1880                Some(<Voted as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
1881                    <Voted as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
1882                        .map(Self::Voted)
1883                }
1884                Some(<Winner as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
1885                    <Winner as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
1886                        .map(Self::Winner)
1887                }
1888                _ => {
1889                    alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog {
1890                        name: <Self as alloy_sol_types::SolEventInterface>::NAME,
1891                        log: alloy_sol_types::private::Box::new(
1892                            alloy_sol_types::private::LogData::new_unchecked(
1893                                topics.to_vec(),
1894                                data.to_vec().into(),
1895                            ),
1896                        ),
1897                    })
1898                }
1899            }
1900        }
1901    }
1902    #[automatically_derived]
1903    impl alloy_sol_types::private::IntoLogData for VotingEvents {
1904        fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1905            match self {
1906                Self::Voted(inner) => {
1907                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
1908                }
1909                Self::Winner(inner) => {
1910                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
1911                }
1912            }
1913        }
1914        fn into_log_data(self) -> alloy_sol_types::private::LogData {
1915            match self {
1916                Self::Voted(inner) => {
1917                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
1918                }
1919                Self::Winner(inner) => {
1920                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
1921                }
1922            }
1923        }
1924    }
1925    use alloy::contract as alloy_contract;
1926    /**Creates a new wrapper around an on-chain [`Voting`](self) contract instance.
1927
1928See the [wrapper's documentation](`VotingInstance`) for more details.*/
1929    #[inline]
1930    pub const fn new<
1931        P: alloy_contract::private::Provider<N>,
1932        N: alloy_contract::private::Network,
1933    >(address: alloy_sol_types::private::Address, provider: P) -> VotingInstance<P, N> {
1934        VotingInstance::<P, N>::new(address, provider)
1935    }
1936    /**Deploys this contract using the given `provider` and constructor arguments, if any.
1937
1938Returns a new instance of the contract, if the deployment was successful.
1939
1940For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
1941    #[inline]
1942    pub fn deploy<
1943        P: alloy_contract::private::Provider<N>,
1944        N: alloy_contract::private::Network,
1945    >(
1946        provider: P,
1947    ) -> impl ::core::future::Future<
1948        Output = alloy_contract::Result<VotingInstance<P, N>>,
1949    > {
1950        VotingInstance::<P, N>::deploy(provider)
1951    }
1952    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
1953and constructor arguments, if any.
1954
1955This is a simple wrapper around creating a `RawCallBuilder` with the data set to
1956the bytecode concatenated with the constructor's ABI-encoded arguments.*/
1957    #[inline]
1958    pub fn deploy_builder<
1959        P: alloy_contract::private::Provider<N>,
1960        N: alloy_contract::private::Network,
1961    >(provider: P) -> alloy_contract::RawCallBuilder<P, N> {
1962        VotingInstance::<P, N>::deploy_builder(provider)
1963    }
1964    /**A [`Voting`](self) instance.
1965
1966Contains type-safe methods for interacting with an on-chain instance of the
1967[`Voting`](self) contract located at a given `address`, using a given
1968provider `P`.
1969
1970If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
1971documentation on how to provide it), the `deploy` and `deploy_builder` methods can
1972be used to deploy a new instance of the contract.
1973
1974See the [module-level documentation](self) for all the available methods.*/
1975    #[derive(Clone)]
1976    pub struct VotingInstance<P, N = alloy_contract::private::Ethereum> {
1977        address: alloy_sol_types::private::Address,
1978        provider: P,
1979        _network: ::core::marker::PhantomData<N>,
1980    }
1981    #[automatically_derived]
1982    impl<P, N> ::core::fmt::Debug for VotingInstance<P, N> {
1983        #[inline]
1984        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
1985            f.debug_tuple("VotingInstance").field(&self.address).finish()
1986        }
1987    }
1988    /// Instantiation and getters/setters.
1989    #[automatically_derived]
1990    impl<
1991        P: alloy_contract::private::Provider<N>,
1992        N: alloy_contract::private::Network,
1993    > VotingInstance<P, N> {
1994        /**Creates a new wrapper around an on-chain [`Voting`](self) contract instance.
1995
1996See the [wrapper's documentation](`VotingInstance`) for more details.*/
1997        #[inline]
1998        pub const fn new(
1999            address: alloy_sol_types::private::Address,
2000            provider: P,
2001        ) -> Self {
2002            Self {
2003                address,
2004                provider,
2005                _network: ::core::marker::PhantomData,
2006            }
2007        }
2008        /**Deploys this contract using the given `provider` and constructor arguments, if any.
2009
2010Returns a new instance of the contract, if the deployment was successful.
2011
2012For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
2013        #[inline]
2014        pub async fn deploy(
2015            provider: P,
2016        ) -> alloy_contract::Result<VotingInstance<P, N>> {
2017            let call_builder = Self::deploy_builder(provider);
2018            let contract_address = call_builder.deploy().await?;
2019            Ok(Self::new(contract_address, call_builder.provider))
2020        }
2021        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
2022and constructor arguments, if any.
2023
2024This is a simple wrapper around creating a `RawCallBuilder` with the data set to
2025the bytecode concatenated with the constructor's ABI-encoded arguments.*/
2026        #[inline]
2027        pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder<P, N> {
2028            alloy_contract::RawCallBuilder::new_raw_deploy(
2029                provider,
2030                ::core::clone::Clone::clone(&BYTECODE),
2031            )
2032        }
2033        /// Returns a reference to the address.
2034        #[inline]
2035        pub const fn address(&self) -> &alloy_sol_types::private::Address {
2036            &self.address
2037        }
2038        /// Sets the address.
2039        #[inline]
2040        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
2041            self.address = address;
2042        }
2043        /// Sets the address and returns `self`.
2044        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
2045            self.set_address(address);
2046            self
2047        }
2048        /// Returns a reference to the provider.
2049        #[inline]
2050        pub const fn provider(&self) -> &P {
2051            &self.provider
2052        }
2053    }
2054    impl<P: ::core::clone::Clone, N> VotingInstance<&P, N> {
2055        /// Clones the provider and returns a new instance with the cloned provider.
2056        #[inline]
2057        pub fn with_cloned_provider(self) -> VotingInstance<P, N> {
2058            VotingInstance {
2059                address: self.address,
2060                provider: ::core::clone::Clone::clone(&self.provider),
2061                _network: ::core::marker::PhantomData,
2062            }
2063        }
2064    }
2065    /// Function calls.
2066    #[automatically_derived]
2067    impl<
2068        P: alloy_contract::private::Provider<N>,
2069        N: alloy_contract::private::Network,
2070    > VotingInstance<P, N> {
2071        /// Creates a new call builder using this contract instance's provider and address.
2072        ///
2073        /// Note that the call can be any function call, not just those defined in this
2074        /// contract. Prefer using the other methods for building type-safe contract calls.
2075        pub fn call_builder<C: alloy_sol_types::SolCall>(
2076            &self,
2077            call: &C,
2078        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
2079            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
2080        }
2081        ///Creates a new call builder for the [`register`] function.
2082        pub fn register(
2083            &self,
2084            v: <VotingInfo as alloy::sol_types::SolType>::RustType,
2085        ) -> alloy_contract::SolCallBuilder<&P, registerCall, N> {
2086            self.call_builder(&registerCall { v })
2087        }
2088        ///Creates a new call builder for the [`setWinner`] function.
2089        pub fn setWinner(
2090            &self,
2091            v: <VotingInfo as alloy::sol_types::SolType>::RustType,
2092            choice: alloy::sol_types::private::primitives::aliases::U256,
2093        ) -> alloy_contract::SolCallBuilder<&P, setWinnerCall, N> {
2094            self.call_builder(&setWinnerCall { v, choice })
2095        }
2096        ///Creates a new call builder for the [`vote`] function.
2097        pub fn vote(
2098            &self,
2099            v: <VotingInfo as alloy::sol_types::SolType>::RustType,
2100            choice: alloy::sol_types::private::primitives::aliases::U256,
2101        ) -> alloy_contract::SolCallBuilder<&P, voteCall, N> {
2102            self.call_builder(&voteCall { v, choice })
2103        }
2104        ///Creates a new call builder for the [`votingId`] function.
2105        pub fn votingId(
2106            &self,
2107            v: <VotingInfo as alloy::sol_types::SolType>::RustType,
2108        ) -> alloy_contract::SolCallBuilder<&P, votingIdCall, N> {
2109            self.call_builder(&votingIdCall { v })
2110        }
2111    }
2112    /// Event filters.
2113    #[automatically_derived]
2114    impl<
2115        P: alloy_contract::private::Provider<N>,
2116        N: alloy_contract::private::Network,
2117    > VotingInstance<P, N> {
2118        /// Creates a new event filter using this contract instance's provider and address.
2119        ///
2120        /// Note that the type can be any event, not just those defined in this contract.
2121        /// Prefer using the other methods for building type-safe event filters.
2122        pub fn event_filter<E: alloy_sol_types::SolEvent>(
2123            &self,
2124        ) -> alloy_contract::Event<&P, E, N> {
2125            alloy_contract::Event::new_sol(&self.provider, &self.address)
2126        }
2127        ///Creates a new event filter for the [`Voted`] event.
2128        pub fn Voted_filter(&self) -> alloy_contract::Event<&P, Voted, N> {
2129            self.event_filter::<Voted>()
2130        }
2131        ///Creates a new event filter for the [`Winner`] event.
2132        pub fn Winner_filter(&self) -> alloy_contract::Event<&P, Winner, N> {
2133            self.event_filter::<Winner>()
2134        }
2135    }
2136}