hopr_bindings/codegen/
hoprstakingproxyfornetworkregistry.rs

1/**
2
3Generated by the following Solidity interface...
4```solidity
5interface HoprStakingProxyForNetworkRegistry {
6    error MaxRegistrationsMismatch();
7    error NftRanksMismatch();
8    error SameStakingThreshold();
9
10    event NftTypeAndRankAdded(uint256 indexed nftType, string nftRank);
11    event NftTypeAndRankRemoved(uint256 indexed nftType, string nftRank);
12    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
13    event SpecialNftTypeAndRankAdded(uint256 indexed nftType, string nftRank, uint256 indexed maxRegistration);
14    event SpecialNftTypeAndRankRemoved(uint256 indexed nftType, string nftRank);
15    event StakeContractUpdated(address indexed stakeContract);
16    event ThresholdUpdated(uint256 indexed threshold);
17
18    constructor(address _stakeContract, address _newOwner, uint256 _minStake);
19
20    function canOperateFor(address, address) external pure returns (bool eligiblity);
21    function eligibleNftTypeAndRank(uint256) external view returns (uint256 nftType, string memory nftRank);
22    function maxAllowedRegistrations(address account) external view returns (uint256);
23    function maxRegistrationsPerSpecialNft(uint256) external view returns (uint256);
24    function owner() external view returns (address);
25    function ownerAddNftTypeAndRank(uint256 nftType, string memory nftRank) external;
26    function ownerBatchAddNftTypeAndRank(uint256[] memory nftTypes, string[] memory nftRanks) external;
27    function ownerBatchAddSpecialNftTypeAndRank(uint256[] memory nftTypes, string[] memory nftRanks, uint256[] memory maxRegistrations) external;
28    function ownerBatchRemoveNftTypeAndRank(uint256[] memory nftTypes, string[] memory nftRanks) external;
29    function ownerBatchRemoveSpecialNftTypeAndRank(uint256[] memory nftTypes, string[] memory nftRanks) external;
30    function ownerRemoveNftTypeAndRank(uint256 nftType, string memory nftRank) external;
31    function ownerUpdateThreshold(uint256 newThreshold) external;
32    function renounceOwnership() external;
33    function specialNftTypeAndRank(uint256) external view returns (uint256 nftType, string memory nftRank);
34    function stakeContract() external view returns (address);
35    function stakeThreshold() external view returns (uint256);
36    function transferOwnership(address newOwner) external;
37    function updateStakeContract(address _stakeContract) external;
38}
39```
40
41...which was generated by the following JSON ABI:
42```json
43[
44  {
45    "type": "constructor",
46    "inputs": [
47      {
48        "name": "_stakeContract",
49        "type": "address",
50        "internalType": "address"
51      },
52      {
53        "name": "_newOwner",
54        "type": "address",
55        "internalType": "address"
56      },
57      {
58        "name": "_minStake",
59        "type": "uint256",
60        "internalType": "uint256"
61      }
62    ],
63    "stateMutability": "nonpayable"
64  },
65  {
66    "type": "function",
67    "name": "canOperateFor",
68    "inputs": [
69      {
70        "name": "",
71        "type": "address",
72        "internalType": "address"
73      },
74      {
75        "name": "",
76        "type": "address",
77        "internalType": "address"
78      }
79    ],
80    "outputs": [
81      {
82        "name": "eligiblity",
83        "type": "bool",
84        "internalType": "bool"
85      }
86    ],
87    "stateMutability": "pure"
88  },
89  {
90    "type": "function",
91    "name": "eligibleNftTypeAndRank",
92    "inputs": [
93      {
94        "name": "",
95        "type": "uint256",
96        "internalType": "uint256"
97      }
98    ],
99    "outputs": [
100      {
101        "name": "nftType",
102        "type": "uint256",
103        "internalType": "uint256"
104      },
105      {
106        "name": "nftRank",
107        "type": "string",
108        "internalType": "string"
109      }
110    ],
111    "stateMutability": "view"
112  },
113  {
114    "type": "function",
115    "name": "maxAllowedRegistrations",
116    "inputs": [
117      {
118        "name": "account",
119        "type": "address",
120        "internalType": "address"
121      }
122    ],
123    "outputs": [
124      {
125        "name": "",
126        "type": "uint256",
127        "internalType": "uint256"
128      }
129    ],
130    "stateMutability": "view"
131  },
132  {
133    "type": "function",
134    "name": "maxRegistrationsPerSpecialNft",
135    "inputs": [
136      {
137        "name": "",
138        "type": "uint256",
139        "internalType": "uint256"
140      }
141    ],
142    "outputs": [
143      {
144        "name": "",
145        "type": "uint256",
146        "internalType": "uint256"
147      }
148    ],
149    "stateMutability": "view"
150  },
151  {
152    "type": "function",
153    "name": "owner",
154    "inputs": [],
155    "outputs": [
156      {
157        "name": "",
158        "type": "address",
159        "internalType": "address"
160      }
161    ],
162    "stateMutability": "view"
163  },
164  {
165    "type": "function",
166    "name": "ownerAddNftTypeAndRank",
167    "inputs": [
168      {
169        "name": "nftType",
170        "type": "uint256",
171        "internalType": "uint256"
172      },
173      {
174        "name": "nftRank",
175        "type": "string",
176        "internalType": "string"
177      }
178    ],
179    "outputs": [],
180    "stateMutability": "nonpayable"
181  },
182  {
183    "type": "function",
184    "name": "ownerBatchAddNftTypeAndRank",
185    "inputs": [
186      {
187        "name": "nftTypes",
188        "type": "uint256[]",
189        "internalType": "uint256[]"
190      },
191      {
192        "name": "nftRanks",
193        "type": "string[]",
194        "internalType": "string[]"
195      }
196    ],
197    "outputs": [],
198    "stateMutability": "nonpayable"
199  },
200  {
201    "type": "function",
202    "name": "ownerBatchAddSpecialNftTypeAndRank",
203    "inputs": [
204      {
205        "name": "nftTypes",
206        "type": "uint256[]",
207        "internalType": "uint256[]"
208      },
209      {
210        "name": "nftRanks",
211        "type": "string[]",
212        "internalType": "string[]"
213      },
214      {
215        "name": "maxRegistrations",
216        "type": "uint256[]",
217        "internalType": "uint256[]"
218      }
219    ],
220    "outputs": [],
221    "stateMutability": "nonpayable"
222  },
223  {
224    "type": "function",
225    "name": "ownerBatchRemoveNftTypeAndRank",
226    "inputs": [
227      {
228        "name": "nftTypes",
229        "type": "uint256[]",
230        "internalType": "uint256[]"
231      },
232      {
233        "name": "nftRanks",
234        "type": "string[]",
235        "internalType": "string[]"
236      }
237    ],
238    "outputs": [],
239    "stateMutability": "nonpayable"
240  },
241  {
242    "type": "function",
243    "name": "ownerBatchRemoveSpecialNftTypeAndRank",
244    "inputs": [
245      {
246        "name": "nftTypes",
247        "type": "uint256[]",
248        "internalType": "uint256[]"
249      },
250      {
251        "name": "nftRanks",
252        "type": "string[]",
253        "internalType": "string[]"
254      }
255    ],
256    "outputs": [],
257    "stateMutability": "nonpayable"
258  },
259  {
260    "type": "function",
261    "name": "ownerRemoveNftTypeAndRank",
262    "inputs": [
263      {
264        "name": "nftType",
265        "type": "uint256",
266        "internalType": "uint256"
267      },
268      {
269        "name": "nftRank",
270        "type": "string",
271        "internalType": "string"
272      }
273    ],
274    "outputs": [],
275    "stateMutability": "nonpayable"
276  },
277  {
278    "type": "function",
279    "name": "ownerUpdateThreshold",
280    "inputs": [
281      {
282        "name": "newThreshold",
283        "type": "uint256",
284        "internalType": "uint256"
285      }
286    ],
287    "outputs": [],
288    "stateMutability": "nonpayable"
289  },
290  {
291    "type": "function",
292    "name": "renounceOwnership",
293    "inputs": [],
294    "outputs": [],
295    "stateMutability": "nonpayable"
296  },
297  {
298    "type": "function",
299    "name": "specialNftTypeAndRank",
300    "inputs": [
301      {
302        "name": "",
303        "type": "uint256",
304        "internalType": "uint256"
305      }
306    ],
307    "outputs": [
308      {
309        "name": "nftType",
310        "type": "uint256",
311        "internalType": "uint256"
312      },
313      {
314        "name": "nftRank",
315        "type": "string",
316        "internalType": "string"
317      }
318    ],
319    "stateMutability": "view"
320  },
321  {
322    "type": "function",
323    "name": "stakeContract",
324    "inputs": [],
325    "outputs": [
326      {
327        "name": "",
328        "type": "address",
329        "internalType": "contract IHoprStake"
330      }
331    ],
332    "stateMutability": "view"
333  },
334  {
335    "type": "function",
336    "name": "stakeThreshold",
337    "inputs": [],
338    "outputs": [
339      {
340        "name": "",
341        "type": "uint256",
342        "internalType": "uint256"
343      }
344    ],
345    "stateMutability": "view"
346  },
347  {
348    "type": "function",
349    "name": "transferOwnership",
350    "inputs": [
351      {
352        "name": "newOwner",
353        "type": "address",
354        "internalType": "address"
355      }
356    ],
357    "outputs": [],
358    "stateMutability": "nonpayable"
359  },
360  {
361    "type": "function",
362    "name": "updateStakeContract",
363    "inputs": [
364      {
365        "name": "_stakeContract",
366        "type": "address",
367        "internalType": "address"
368      }
369    ],
370    "outputs": [],
371    "stateMutability": "nonpayable"
372  },
373  {
374    "type": "event",
375    "name": "NftTypeAndRankAdded",
376    "inputs": [
377      {
378        "name": "nftType",
379        "type": "uint256",
380        "indexed": true,
381        "internalType": "uint256"
382      },
383      {
384        "name": "nftRank",
385        "type": "string",
386        "indexed": false,
387        "internalType": "string"
388      }
389    ],
390    "anonymous": false
391  },
392  {
393    "type": "event",
394    "name": "NftTypeAndRankRemoved",
395    "inputs": [
396      {
397        "name": "nftType",
398        "type": "uint256",
399        "indexed": true,
400        "internalType": "uint256"
401      },
402      {
403        "name": "nftRank",
404        "type": "string",
405        "indexed": false,
406        "internalType": "string"
407      }
408    ],
409    "anonymous": false
410  },
411  {
412    "type": "event",
413    "name": "OwnershipTransferred",
414    "inputs": [
415      {
416        "name": "previousOwner",
417        "type": "address",
418        "indexed": true,
419        "internalType": "address"
420      },
421      {
422        "name": "newOwner",
423        "type": "address",
424        "indexed": true,
425        "internalType": "address"
426      }
427    ],
428    "anonymous": false
429  },
430  {
431    "type": "event",
432    "name": "SpecialNftTypeAndRankAdded",
433    "inputs": [
434      {
435        "name": "nftType",
436        "type": "uint256",
437        "indexed": true,
438        "internalType": "uint256"
439      },
440      {
441        "name": "nftRank",
442        "type": "string",
443        "indexed": false,
444        "internalType": "string"
445      },
446      {
447        "name": "maxRegistration",
448        "type": "uint256",
449        "indexed": true,
450        "internalType": "uint256"
451      }
452    ],
453    "anonymous": false
454  },
455  {
456    "type": "event",
457    "name": "SpecialNftTypeAndRankRemoved",
458    "inputs": [
459      {
460        "name": "nftType",
461        "type": "uint256",
462        "indexed": true,
463        "internalType": "uint256"
464      },
465      {
466        "name": "nftRank",
467        "type": "string",
468        "indexed": false,
469        "internalType": "string"
470      }
471    ],
472    "anonymous": false
473  },
474  {
475    "type": "event",
476    "name": "StakeContractUpdated",
477    "inputs": [
478      {
479        "name": "stakeContract",
480        "type": "address",
481        "indexed": true,
482        "internalType": "address"
483      }
484    ],
485    "anonymous": false
486  },
487  {
488    "type": "event",
489    "name": "ThresholdUpdated",
490    "inputs": [
491      {
492        "name": "threshold",
493        "type": "uint256",
494        "indexed": true,
495        "internalType": "uint256"
496      }
497    ],
498    "anonymous": false
499  },
500  {
501    "type": "error",
502    "name": "MaxRegistrationsMismatch",
503    "inputs": []
504  },
505  {
506    "type": "error",
507    "name": "NftRanksMismatch",
508    "inputs": []
509  },
510  {
511    "type": "error",
512    "name": "SameStakingThreshold",
513    "inputs": []
514  }
515]
516```*/
517#[allow(
518    non_camel_case_types,
519    non_snake_case,
520    clippy::pub_underscore_fields,
521    clippy::style,
522    clippy::empty_structs_with_brackets
523)]
524pub mod HoprStakingProxyForNetworkRegistry {
525    use super::*;
526    use alloy::sol_types as alloy_sol_types;
527    /// The creation / init bytecode of the contract.
528    ///
529    /// ```text
530    ///0x60806040523480156200001157600080fd5b5060405162001c7038038062001c70833981016040819052620000349162000145565b6200003f336200008e565b6200004a83620000de565b62000055826200008e565b600281905560405181907fadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe17190600090a250505062000186565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f573bbfa679af6fdcdbd9cf191c5ef3e526599ac2bf75e9177d47adb8530b9c6990600090a250565b80516001600160a01b03811681146200014057600080fd5b919050565b6000806000606084860312156200015b57600080fd5b620001668462000128565b9250620001766020850162000128565b9150604084015190509250925092565b611ada80620001966000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063b05e8ba9116100a2578063de626c0e11610071578063de626c0e14610250578063ee50c7c414610263578063f11f77f914610276578063f2fde38b1461027f578063fb66ac571461029257600080fd5b8063b05e8ba9146101e6578063b3544e82146101f9578063ba1cef231461021a578063d85ad0441461022d57600080fd5b80636a3b64b6116100e95780636a3b64b614610194578063715018a6146101a7578063830c6cc2146101af5780638da5cb5b146101c25780639b97076f146101d357600080fd5b80631a1862271461011b5780632c3ec80b1461014b578063506472cc1461016c578063654251eb14610181575b600080fd5b60015461012e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015e6101593660046113b0565b6102a5565b60405161014292919061140f565b61017f61017a36600461147c565b61035d565b005b61017f61018f3660046114fe565b610423565b61017f6101a23660046115b9565b610439565b61017f61053c565b61017f6101bd36600461166f565b610550565b6000546001600160a01b031661012e565b61017f6101e13660046114fe565b610564565b61017f6101f436600461147c565b610576565b61020c61020736600461166f565b610635565b604051908152602001610142565b61020c6102283660046113b0565b6109ea565b61024061023b36600461168a565b610a0b565b6040519015158152602001610142565b61015e61025e3660046113b0565b610a14565b61017f6102713660046113b0565b610a24565b61020c60025481565b61017f61028d36600461166f565b610a81565b61017f6102a036600461147c565b610afc565b600581815481106102b557600080fd5b600091825260209091206002909102018054600182018054919350906102da906116bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610306906116bd565b80156103535780601f1061032857610100808354040283529160200191610353565b820191906000526020600020905b81548152906001019060200180831161033657829003601f168201915b5050505050905082565b610365610bbb565b82811461038557604051634885f59b60e01b815260040160405180910390fd5b60005b8381101561041c5761040a8585838181106103a5576103a56116f7565b905060200201358484848181106103be576103be6116f7565b90506020028101906103d0919061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c1592505050565b806104148161176a565b915050610388565b5050505050565b61042b610bbb565b6104358282610d71565b5050565b610441610bbb565b84831461046157604051634885f59b60e01b815260040160405180910390fd5b8481146104815760405163197910e960e01b815260040160405180910390fd5b60005b85811015610533576105218787838181106104a1576104a16116f7565b905060200201358686848181106104ba576104ba6116f7565b90506020028101906104cc919061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150869050818110610515576105156116f7565b90506020020135610eef565b8061052b8161176a565b915050610484565b50505050505050565b610544610bbb565b61054e60006110d3565b565b610558610bbb565b61056181611123565b50565b61056c610bbb565b6104358282610c15565b61057e610bbb565b82811461059e57604051634885f59b60e01b815260040160405180910390fd5b60005b8381101561041c576106238585838181106105be576105be6116f7565b905060200201358484848181106105d7576105d76116f7565b90506020028101906105e9919061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061116d92505050565b8061062d8161176a565b9150506105a1565b60008060005b6005548110156107d75760006005828154811061065a5761065a6116f7565b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461068d906116bd565b80601f01602080910402602001604051908101604052809291908181526020018280546106b9906116bd565b80156107065780601f106106db57610100808354040283529160200191610706565b820191906000526020600020905b8154815290600101906020018083116106e957829003601f168201915b505050919092525050600154825160208401516040516396a9cd7d60e01b81529495506001600160a01b03909216936396a9cd7d935061074b92908a90600401611783565b602060405180830381865afa158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c91906117b4565b156107c4576107c1600483815481106107a7576107a76116f7565b90600052602060002001548461134a90919063ffffffff16565b92505b50806107cf8161176a565b91505061063b565b5060015460405163f978fff160e01b81526001600160a01b038581166004830152600092169063f978fff190602401602060405180830381865afa158015610823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084791906117d6565b905060025481101561085a575092915050565b60005b6003548110156109e15760006003828154811061087c5761087c6116f7565b9060005260206000209060020201604051806040016040529081600082015481526020016001820180546108af906116bd565b80601f01602080910402602001604051908101604052809291908181526020018280546108db906116bd565b80156109285780601f106108fd57610100808354040283529160200191610928565b820191906000526020600020905b81548152906001019060200180831161090b57829003601f168201915b505050919092525050600154825160208401516040516396a9cd7d60e01b81529495506001600160a01b03909216936396a9cd7d935061096d92908b90600401611783565b602060405180830381865afa15801561098a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ae91906117b4565b156109ce576109cb600254846109c491906117ef565b859061134a565b93505b50806109d98161176a565b91505061085d565b50909392505050565b600481815481106109fa57600080fd5b600091825260209091200154905081565b60015b92915050565b600381815481106102b557600080fd5b610a2c610bbb565b8060025403610a4e576040516320e47b1360e01b815260040160405180910390fd5b600281905560405181907fadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe17190600090a250565b610a89610bbb565b6001600160a01b038116610af35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610561816110d3565b610b04610bbb565b828114610b2457604051634885f59b60e01b815260040160405180910390fd5b60005b8381101561041c57610ba9858583818110610b4457610b446116f7565b90506020020135848484818110610b5d57610b5d6116f7565b9050602002810190610b6f919061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d7192505050565b80610bb38161176a565b915050610b27565b6000546001600160a01b0316331461054e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b60005b600354811015610caf578260038281548110610c3657610c366116f7565b906000526020600020906002020160000154148015610c935750818051906020012060038281548110610c6b57610c6b6116f7565b9060005260206000209060020201600101604051610c899190611811565b6040518091039020145b15610c9d57505050565b80610ca78161176a565b915050610c18565b50604080518082019091528281526020810182815260038054600181018255600091909152825160029091027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8101918255915190917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c0190610d3290826118d5565b505050817f2360ee3e77485441cfa07e30e8dc5b031fac38455647c89a763434f58733fcc182604051610d659190611995565b60405180910390a25050565b60005b600354811015610eea578260038281548110610d9257610d926116f7565b906000526020600020906002020160000154148015610def5750818051906020012060038281548110610dc757610dc76116f7565b9060005260206000209060020201600101604051610de59190611811565b6040518091039020145b15610ed85760038054610e04906001906119a8565b81548110610e1457610e146116f7565b906000526020600020906002020160038281548110610e3557610e356116f7565b600091825260209091208254600290920201908155600180820190610e5c908401826119bb565b509050506003805480610e7157610e71611a8e565b60008281526020812060026000199093019283020181815590610e976001830182611362565b50509055827fb1323e42d97b2b3d45f9d4641bf4b6b3f9d0d01e90832ae7b7413109b7a5d34783604051610ecb9190611995565b60405180910390a2505050565b80610ee28161176a565b915050610d74565b505050565b60005b600554811015610fe5578360058281548110610f1057610f106116f7565b906000526020600020906002020160000154148015610f6d5750828051906020012060058281548110610f4557610f456116f7565b9060005260206000209060020201600101604051610f639190611811565b6040518091039020145b15610fd3578160048281548110610f8657610f866116f7565b906000526020600020018190555081847fe43bf5f5f8a1211930e5726ba0abceacb1748f97b2966db30a818ba10961cbcc85604051610fc59190611995565b60405180910390a350505050565b80610fdd8161176a565b915050610ef2565b604080518082019091528481526020810184815260058054600181018255600091909152825160029091027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db08101918255915190917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1019061106790826118d5565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0183905550604051829085907fe43bf5f5f8a1211930e5726ba0abceacb1748f97b2966db30a818ba10961cbcc90610fc5908790611995565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f573bbfa679af6fdcdbd9cf191c5ef3e526599ac2bf75e9177d47adb8530b9c6990600090a250565b60005b600554811015610eea57826005828154811061118e5761118e6116f7565b9060005260206000209060020201600001541480156111eb57508180519060200120600582815481106111c3576111c36116f7565b90600052602060002090600202016001016040516111e19190611811565b6040518091039020145b156113385760058054611200906001906119a8565b81548110611210576112106116f7565b906000526020600020906002020160058281548110611231576112316116f7565b600091825260209091208254600290920201908155600180820190611258908401826119bb565b50905050600580548061126d5761126d611a8e565b600082815260208120600260001990930192830201818155906112936001830182611362565b50509055600480546112a7906001906119a8565b815481106112b7576112b76116f7565b9060005260206000200154600482815481106112d5576112d56116f7565b60009182526020909120015560048054806112f2576112f2611a8e565b60019003818190600052602060002001600090559055827fdb75199103504bd1d3653de758d4295bf00d4587e1d53dfc114464cc47ed97b783604051610ecb9190611995565b806113428161176a565b915050611170565b6000818311611359578161135b565b825b9392505050565b50805461136e906116bd565b6000825580601f1061137e575050565b601f01602090049060005260206000209081019061056191905b808211156113ac5760008155600101611398565b5090565b6000602082840312156113c257600080fd5b5035919050565b6000815180845260005b818110156113ef576020818501810151868301820152016113d3565b506000602082860101526020601f19601f83011685010191505092915050565b82815260406020820152600061142860408301846113c9565b949350505050565b60008083601f84011261144257600080fd5b50813567ffffffffffffffff81111561145a57600080fd5b6020830191508360208260051b850101111561147557600080fd5b9250929050565b6000806000806040858703121561149257600080fd5b843567ffffffffffffffff808211156114aa57600080fd5b6114b688838901611430565b909650945060208701359150808211156114cf57600080fd5b506114dc87828801611430565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561151157600080fd5b82359150602083013567ffffffffffffffff8082111561153057600080fd5b818501915085601f83011261154457600080fd5b813581811115611556576115566114e8565b604051601f8201601f19908116603f0116810190838211818310171561157e5761157e6114e8565b8160405282815288602084870101111561159757600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080600080606087890312156115d257600080fd5b863567ffffffffffffffff808211156115ea57600080fd5b6115f68a838b01611430565b9098509650602089013591508082111561160f57600080fd5b61161b8a838b01611430565b9096509450604089013591508082111561163457600080fd5b5061164189828a01611430565b979a9699509497509295939492505050565b80356001600160a01b038116811461166a57600080fd5b919050565b60006020828403121561168157600080fd5b61135b82611653565b6000806040838503121561169d57600080fd5b6116a683611653565b91506116b460208401611653565b90509250929050565b600181811c908216806116d157607f821691505b6020821081036116f157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261172457600080fd5b83018035915067ffffffffffffffff82111561173f57600080fd5b60200191503681900382131561147557600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161177c5761177c611754565b5060010190565b83815260606020820152600061179c60608301856113c9565b905060018060a01b0383166040830152949350505050565b6000602082840312156117c657600080fd5b8151801515811461135b57600080fd5b6000602082840312156117e857600080fd5b5051919050565b60008261180c57634e487b7160e01b600052601260045260246000fd5b500490565b600080835461181f816116bd565b60018281168015611837576001811461184c5761187b565b60ff198416875282151583028701945061187b565b8760005260208060002060005b858110156118725781548a820152908401908201611859565b50505082870194505b50929695505050505050565b601f821115610eea57600081815260208120601f850160051c810160208610156118ae5750805b601f850160051c820191505b818110156118cd578281556001016118ba565b505050505050565b815167ffffffffffffffff8111156118ef576118ef6114e8565b611903816118fd84546116bd565b84611887565b602080601f83116001811461193857600084156119205750858301515b600019600386901b1c1916600185901b1785556118cd565b600085815260208120601f198616915b8281101561196757888601518255948401946001909101908401611948565b50858210156119855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061135b60208301846113c9565b81810381811115610a0e57610a0e611754565b8181036119c6575050565b6119d082546116bd565b67ffffffffffffffff8111156119e8576119e86114e8565b6119f6816118fd84546116bd565b6000601f821160018114611a2a5760008315611a125750848201545b600019600385901b1c1916600184901b17845561041c565b600085815260209020601f19841690600086815260209020845b83811015611a645782860154825560019586019590910190602001611a44565b50858310156119855793015460001960f8600387901b161c19169092555050600190811b01905550565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202b8420a6f9b1bb5758291c6d4313be19a0645628667bf2ca30df8c2420c4460764736f6c63430008130033
531    /// ```
532    #[rustfmt::skip]
533    #[allow(clippy::all)]
534    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
535        b"`\x80`@R4\x80\x15b\0\0\x11W`\0\x80\xFD[P`@Qb\0\x1Cp8\x03\x80b\0\x1Cp\x839\x81\x01`@\x81\x90Rb\0\x004\x91b\0\x01EV[b\0\0?3b\0\0\x8EV[b\0\0J\x83b\0\0\xDEV[b\0\0U\x82b\0\0\x8EV[`\x02\x81\x90U`@Q\x81\x90\x7F\xAD\xFA\x8E\xCB!\xB6\x96.\xBC\xD0\xAD\xBD\x9A\xB9\x85\xB7\xB4\xC5\xB5\xEB;\r\xEA\xD6\x83\x17\x15e\xC7\xBF\xE1q\x90`\0\x90\xA2PPPb\0\x01\x86V[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x81\x17\x90\x91U`@Q\x7FW;\xBF\xA6y\xAFo\xDC\xDB\xD9\xCF\x19\x1C^\xF3\xE5&Y\x9A\xC2\xBFu\xE9\x17}G\xAD\xB8S\x0B\x9Ci\x90`\0\x90\xA2PV[\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\x01@W`\0\x80\xFD[\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15b\0\x01[W`\0\x80\xFD[b\0\x01f\x84b\0\x01(V[\x92Pb\0\x01v` \x85\x01b\0\x01(V[\x91P`@\x84\x01Q\x90P\x92P\x92P\x92V[a\x1A\xDA\x80b\0\x01\x96`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\x16W`\x005`\xE0\x1C\x80c\xB0^\x8B\xA9\x11a\0\xA2W\x80c\xDEbl\x0E\x11a\0qW\x80c\xDEbl\x0E\x14a\x02PW\x80c\xEEP\xC7\xC4\x14a\x02cW\x80c\xF1\x1Fw\xF9\x14a\x02vW\x80c\xF2\xFD\xE3\x8B\x14a\x02\x7FW\x80c\xFBf\xACW\x14a\x02\x92W`\0\x80\xFD[\x80c\xB0^\x8B\xA9\x14a\x01\xE6W\x80c\xB3TN\x82\x14a\x01\xF9W\x80c\xBA\x1C\xEF#\x14a\x02\x1AW\x80c\xD8Z\xD0D\x14a\x02-W`\0\x80\xFD[\x80cj;d\xB6\x11a\0\xE9W\x80cj;d\xB6\x14a\x01\x94W\x80cqP\x18\xA6\x14a\x01\xA7W\x80c\x83\x0Cl\xC2\x14a\x01\xAFW\x80c\x8D\xA5\xCB[\x14a\x01\xC2W\x80c\x9B\x97\x07o\x14a\x01\xD3W`\0\x80\xFD[\x80c\x1A\x18b'\x14a\x01\x1BW\x80c,>\xC8\x0B\x14a\x01KW\x80cPdr\xCC\x14a\x01lW\x80ceBQ\xEB\x14a\x01\x81W[`\0\x80\xFD[`\x01Ta\x01.\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01^a\x01Y6`\x04a\x13\xB0V[a\x02\xA5V[`@Qa\x01B\x92\x91\x90a\x14\x0FV[a\x01\x7Fa\x01z6`\x04a\x14|V[a\x03]V[\0[a\x01\x7Fa\x01\x8F6`\x04a\x14\xFEV[a\x04#V[a\x01\x7Fa\x01\xA26`\x04a\x15\xB9V[a\x049V[a\x01\x7Fa\x05<V[a\x01\x7Fa\x01\xBD6`\x04a\x16oV[a\x05PV[`\0T`\x01`\x01`\xA0\x1B\x03\x16a\x01.V[a\x01\x7Fa\x01\xE16`\x04a\x14\xFEV[a\x05dV[a\x01\x7Fa\x01\xF46`\x04a\x14|V[a\x05vV[a\x02\x0Ca\x02\x076`\x04a\x16oV[a\x065V[`@Q\x90\x81R` \x01a\x01BV[a\x02\x0Ca\x02(6`\x04a\x13\xB0V[a\t\xEAV[a\x02@a\x02;6`\x04a\x16\x8AV[a\n\x0BV[`@Q\x90\x15\x15\x81R` \x01a\x01BV[a\x01^a\x02^6`\x04a\x13\xB0V[a\n\x14V[a\x01\x7Fa\x02q6`\x04a\x13\xB0V[a\n$V[a\x02\x0C`\x02T\x81V[a\x01\x7Fa\x02\x8D6`\x04a\x16oV[a\n\x81V[a\x01\x7Fa\x02\xA06`\x04a\x14|V[a\n\xFCV[`\x05\x81\x81T\x81\x10a\x02\xB5W`\0\x80\xFD[`\0\x91\x82R` \x90\x91 `\x02\x90\x91\x02\x01\x80T`\x01\x82\x01\x80T\x91\x93P\x90a\x02\xDA\x90a\x16\xBDV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x03\x06\x90a\x16\xBDV[\x80\x15a\x03SW\x80`\x1F\x10a\x03(Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x03SV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x036W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x82V[a\x03ea\x0B\xBBV[\x82\x81\x14a\x03\x85W`@QcH\x85\xF5\x9B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0[\x83\x81\x10\x15a\x04\x1CWa\x04\n\x85\x85\x83\x81\x81\x10a\x03\xA5Wa\x03\xA5a\x16\xF7V[\x90P` \x02\x015\x84\x84\x84\x81\x81\x10a\x03\xBEWa\x03\xBEa\x16\xF7V[\x90P` \x02\x81\x01\x90a\x03\xD0\x91\x90a\x17\rV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa\x0C\x15\x92PPPV[\x80a\x04\x14\x81a\x17jV[\x91PPa\x03\x88V[PPPPPV[a\x04+a\x0B\xBBV[a\x045\x82\x82a\rqV[PPV[a\x04Aa\x0B\xBBV[\x84\x83\x14a\x04aW`@QcH\x85\xF5\x9B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84\x81\x14a\x04\x81W`@Qc\x19y\x10\xE9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0[\x85\x81\x10\x15a\x053Wa\x05!\x87\x87\x83\x81\x81\x10a\x04\xA1Wa\x04\xA1a\x16\xF7V[\x90P` \x02\x015\x86\x86\x84\x81\x81\x10a\x04\xBAWa\x04\xBAa\x16\xF7V[\x90P` \x02\x81\x01\x90a\x04\xCC\x91\x90a\x17\rV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x88\x92P\x87\x91P\x86\x90P\x81\x81\x10a\x05\x15Wa\x05\x15a\x16\xF7V[\x90P` \x02\x015a\x0E\xEFV[\x80a\x05+\x81a\x17jV[\x91PPa\x04\x84V[PPPPPPPV[a\x05Da\x0B\xBBV[a\x05N`\0a\x10\xD3V[V[a\x05Xa\x0B\xBBV[a\x05a\x81a\x11#V[PV[a\x05la\x0B\xBBV[a\x045\x82\x82a\x0C\x15V[a\x05~a\x0B\xBBV[\x82\x81\x14a\x05\x9EW`@QcH\x85\xF5\x9B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0[\x83\x81\x10\x15a\x04\x1CWa\x06#\x85\x85\x83\x81\x81\x10a\x05\xBEWa\x05\xBEa\x16\xF7V[\x90P` \x02\x015\x84\x84\x84\x81\x81\x10a\x05\xD7Wa\x05\xD7a\x16\xF7V[\x90P` \x02\x81\x01\x90a\x05\xE9\x91\x90a\x17\rV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa\x11m\x92PPPV[\x80a\x06-\x81a\x17jV[\x91PPa\x05\xA1V[`\0\x80`\0[`\x05T\x81\x10\x15a\x07\xD7W`\0`\x05\x82\x81T\x81\x10a\x06ZWa\x06Za\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`@Q\x80`@\x01`@R\x90\x81`\0\x82\x01T\x81R` \x01`\x01\x82\x01\x80Ta\x06\x8D\x90a\x16\xBDV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x06\xB9\x90a\x16\xBDV[\x80\x15a\x07\x06W\x80`\x1F\x10a\x06\xDBWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x07\x06V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x06\xE9W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPP\x91\x90\x92RPP`\x01T\x82Q` \x84\x01Q`@Qc\x96\xA9\xCD}`\xE0\x1B\x81R\x94\x95P`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x93c\x96\xA9\xCD}\x93Pa\x07K\x92\x90\x8A\x90`\x04\x01a\x17\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07hW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\x8C\x91\x90a\x17\xB4V[\x15a\x07\xC4Wa\x07\xC1`\x04\x83\x81T\x81\x10a\x07\xA7Wa\x07\xA7a\x16\xF7V[\x90`\0R` `\0 \x01T\x84a\x13J\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x92P[P\x80a\x07\xCF\x81a\x17jV[\x91PPa\x06;V[P`\x01T`@Qc\xF9x\xFF\xF1`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x81\x16`\x04\x83\x01R`\0\x92\x16\x90c\xF9x\xFF\xF1\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08#W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08G\x91\x90a\x17\xD6V[\x90P`\x02T\x81\x10\x15a\x08ZWP\x92\x91PPV[`\0[`\x03T\x81\x10\x15a\t\xE1W`\0`\x03\x82\x81T\x81\x10a\x08|Wa\x08|a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`@Q\x80`@\x01`@R\x90\x81`\0\x82\x01T\x81R` \x01`\x01\x82\x01\x80Ta\x08\xAF\x90a\x16\xBDV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xDB\x90a\x16\xBDV[\x80\x15a\t(W\x80`\x1F\x10a\x08\xFDWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t(V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x0BW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPP\x91\x90\x92RPP`\x01T\x82Q` \x84\x01Q`@Qc\x96\xA9\xCD}`\xE0\x1B\x81R\x94\x95P`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x93c\x96\xA9\xCD}\x93Pa\tm\x92\x90\x8B\x90`\x04\x01a\x17\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\t\x8AW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\xAE\x91\x90a\x17\xB4V[\x15a\t\xCEWa\t\xCB`\x02T\x84a\t\xC4\x91\x90a\x17\xEFV[\x85\x90a\x13JV[\x93P[P\x80a\t\xD9\x81a\x17jV[\x91PPa\x08]V[P\x90\x93\x92PPPV[`\x04\x81\x81T\x81\x10a\t\xFAW`\0\x80\xFD[`\0\x91\x82R` \x90\x91 \x01T\x90P\x81V[`\x01[\x92\x91PPV[`\x03\x81\x81T\x81\x10a\x02\xB5W`\0\x80\xFD[a\n,a\x0B\xBBV[\x80`\x02T\x03a\nNW`@Qc \xE4{\x13`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02\x81\x90U`@Q\x81\x90\x7F\xAD\xFA\x8E\xCB!\xB6\x96.\xBC\xD0\xAD\xBD\x9A\xB9\x85\xB7\xB4\xC5\xB5\xEB;\r\xEA\xD6\x83\x17\x15e\xC7\xBF\xE1q\x90`\0\x90\xA2PV[a\n\x89a\x0B\xBBV[`\x01`\x01`\xA0\x1B\x03\x81\x16a\n\xF3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x05a\x81a\x10\xD3V[a\x0B\x04a\x0B\xBBV[\x82\x81\x14a\x0B$W`@QcH\x85\xF5\x9B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0[\x83\x81\x10\x15a\x04\x1CWa\x0B\xA9\x85\x85\x83\x81\x81\x10a\x0BDWa\x0BDa\x16\xF7V[\x90P` \x02\x015\x84\x84\x84\x81\x81\x10a\x0B]Wa\x0B]a\x16\xF7V[\x90P` \x02\x81\x01\x90a\x0Bo\x91\x90a\x17\rV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa\rq\x92PPPV[\x80a\x0B\xB3\x81a\x17jV[\x91PPa\x0B'V[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x05NW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\n\xEAV[`\0[`\x03T\x81\x10\x15a\x0C\xAFW\x82`\x03\x82\x81T\x81\x10a\x0C6Wa\x0C6a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\0\x01T\x14\x80\x15a\x0C\x93WP\x81\x80Q\x90` \x01 `\x03\x82\x81T\x81\x10a\x0CkWa\x0Cka\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x01\x01`@Qa\x0C\x89\x91\x90a\x18\x11V[`@Q\x80\x91\x03\x90 \x14[\x15a\x0C\x9DWPPPV[\x80a\x0C\xA7\x81a\x17jV[\x91PPa\x0C\x18V[P`@\x80Q\x80\x82\x01\x90\x91R\x82\x81R` \x81\x01\x82\x81R`\x03\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x82Q`\x02\x90\x91\x02\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[\x81\x01\x91\x82U\x91Q\x90\x91\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8\\\x01\x90a\r2\x90\x82a\x18\xD5V[PPP\x81\x7F#`\xEE>wHTA\xCF\xA0~0\xE8\xDC[\x03\x1F\xAC8EVG\xC8\x9Av44\xF5\x873\xFC\xC1\x82`@Qa\re\x91\x90a\x19\x95V[`@Q\x80\x91\x03\x90\xA2PPV[`\0[`\x03T\x81\x10\x15a\x0E\xEAW\x82`\x03\x82\x81T\x81\x10a\r\x92Wa\r\x92a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\0\x01T\x14\x80\x15a\r\xEFWP\x81\x80Q\x90` \x01 `\x03\x82\x81T\x81\x10a\r\xC7Wa\r\xC7a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x01\x01`@Qa\r\xE5\x91\x90a\x18\x11V[`@Q\x80\x91\x03\x90 \x14[\x15a\x0E\xD8W`\x03\x80Ta\x0E\x04\x90`\x01\x90a\x19\xA8V[\x81T\x81\x10a\x0E\x14Wa\x0E\x14a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x03\x82\x81T\x81\x10a\x0E5Wa\x0E5a\x16\xF7V[`\0\x91\x82R` \x90\x91 \x82T`\x02\x90\x92\x02\x01\x90\x81U`\x01\x80\x82\x01\x90a\x0E\\\x90\x84\x01\x82a\x19\xBBV[P\x90PP`\x03\x80T\x80a\x0EqWa\x0Eqa\x1A\x8EV[`\0\x82\x81R` \x81 `\x02`\0\x19\x90\x93\x01\x92\x83\x02\x01\x81\x81U\x90a\x0E\x97`\x01\x83\x01\x82a\x13bV[PP\x90U\x82\x7F\xB12>B\xD9{+=E\xF9\xD4d\x1B\xF4\xB6\xB3\xF9\xD0\xD0\x1E\x90\x83*\xE7\xB7A1\t\xB7\xA5\xD3G\x83`@Qa\x0E\xCB\x91\x90a\x19\x95V[`@Q\x80\x91\x03\x90\xA2PPPV[\x80a\x0E\xE2\x81a\x17jV[\x91PPa\rtV[PPPV[`\0[`\x05T\x81\x10\x15a\x0F\xE5W\x83`\x05\x82\x81T\x81\x10a\x0F\x10Wa\x0F\x10a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\0\x01T\x14\x80\x15a\x0FmWP\x82\x80Q\x90` \x01 `\x05\x82\x81T\x81\x10a\x0FEWa\x0FEa\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x01\x01`@Qa\x0Fc\x91\x90a\x18\x11V[`@Q\x80\x91\x03\x90 \x14[\x15a\x0F\xD3W\x81`\x04\x82\x81T\x81\x10a\x0F\x86Wa\x0F\x86a\x16\xF7V[\x90`\0R` `\0 \x01\x81\x90UP\x81\x84\x7F\xE4;\xF5\xF5\xF8\xA1!\x190\xE5rk\xA0\xAB\xCE\xAC\xB1t\x8F\x97\xB2\x96m\xB3\n\x81\x8B\xA1\ta\xCB\xCC\x85`@Qa\x0F\xC5\x91\x90a\x19\x95V[`@Q\x80\x91\x03\x90\xA3PPPPV[\x80a\x0F\xDD\x81a\x17jV[\x91PPa\x0E\xF2V[`@\x80Q\x80\x82\x01\x90\x91R\x84\x81R` \x81\x01\x84\x81R`\x05\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x82Q`\x02\x90\x91\x02\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x81\x01\x91\x82U\x91Q\x90\x91\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB1\x01\x90a\x10g\x90\x82a\x18\xD5V[PP`\x04\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B\x01\x83\x90UP`@Q\x82\x90\x85\x90\x7F\xE4;\xF5\xF5\xF8\xA1!\x190\xE5rk\xA0\xAB\xCE\xAC\xB1t\x8F\x97\xB2\x96m\xB3\n\x81\x8B\xA1\ta\xCB\xCC\x90a\x0F\xC5\x90\x87\x90a\x19\x95V[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x81\x17\x90\x91U`@Q\x7FW;\xBF\xA6y\xAFo\xDC\xDB\xD9\xCF\x19\x1C^\xF3\xE5&Y\x9A\xC2\xBFu\xE9\x17}G\xAD\xB8S\x0B\x9Ci\x90`\0\x90\xA2PV[`\0[`\x05T\x81\x10\x15a\x0E\xEAW\x82`\x05\x82\x81T\x81\x10a\x11\x8EWa\x11\x8Ea\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\0\x01T\x14\x80\x15a\x11\xEBWP\x81\x80Q\x90` \x01 `\x05\x82\x81T\x81\x10a\x11\xC3Wa\x11\xC3a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x01\x01`@Qa\x11\xE1\x91\x90a\x18\x11V[`@Q\x80\x91\x03\x90 \x14[\x15a\x138W`\x05\x80Ta\x12\0\x90`\x01\x90a\x19\xA8V[\x81T\x81\x10a\x12\x10Wa\x12\x10a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x05\x82\x81T\x81\x10a\x121Wa\x121a\x16\xF7V[`\0\x91\x82R` \x90\x91 \x82T`\x02\x90\x92\x02\x01\x90\x81U`\x01\x80\x82\x01\x90a\x12X\x90\x84\x01\x82a\x19\xBBV[P\x90PP`\x05\x80T\x80a\x12mWa\x12ma\x1A\x8EV[`\0\x82\x81R` \x81 `\x02`\0\x19\x90\x93\x01\x92\x83\x02\x01\x81\x81U\x90a\x12\x93`\x01\x83\x01\x82a\x13bV[PP\x90U`\x04\x80Ta\x12\xA7\x90`\x01\x90a\x19\xA8V[\x81T\x81\x10a\x12\xB7Wa\x12\xB7a\x16\xF7V[\x90`\0R` `\0 \x01T`\x04\x82\x81T\x81\x10a\x12\xD5Wa\x12\xD5a\x16\xF7V[`\0\x91\x82R` \x90\x91 \x01U`\x04\x80T\x80a\x12\xF2Wa\x12\xF2a\x1A\x8EV[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90U\x82\x7F\xDBu\x19\x91\x03PK\xD1\xD3e=\xE7X\xD4)[\xF0\rE\x87\xE1\xD5=\xFC\x11Dd\xCCG\xED\x97\xB7\x83`@Qa\x0E\xCB\x91\x90a\x19\x95V[\x80a\x13B\x81a\x17jV[\x91PPa\x11pV[`\0\x81\x83\x11a\x13YW\x81a\x13[V[\x82[\x93\x92PPPV[P\x80Ta\x13n\x90a\x16\xBDV[`\0\x82U\x80`\x1F\x10a\x13~WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x05a\x91\x90[\x80\x82\x11\x15a\x13\xACW`\0\x81U`\x01\x01a\x13\x98V[P\x90V[`\0` \x82\x84\x03\x12\x15a\x13\xC2W`\0\x80\xFD[P5\x91\x90PV[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\x13\xEFW` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\x13\xD3V[P`\0` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x14(`@\x83\x01\x84a\x13\xC9V[\x94\x93PPPPV[`\0\x80\x83`\x1F\x84\x01\x12a\x14BW`\0\x80\xFD[P\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x14ZW`\0\x80\xFD[` \x83\x01\x91P\x83` \x82`\x05\x1B\x85\x01\x01\x11\x15a\x14uW`\0\x80\xFD[\x92P\x92\x90PV[`\0\x80`\0\x80`@\x85\x87\x03\x12\x15a\x14\x92W`\0\x80\xFD[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x14\xAAW`\0\x80\xFD[a\x14\xB6\x88\x83\x89\x01a\x140V[\x90\x96P\x94P` \x87\x015\x91P\x80\x82\x11\x15a\x14\xCFW`\0\x80\xFD[Pa\x14\xDC\x87\x82\x88\x01a\x140V[\x95\x98\x94\x97P\x95PPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x15\x11W`\0\x80\xFD[\x825\x91P` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x150W`\0\x80\xFD[\x81\x85\x01\x91P\x85`\x1F\x83\x01\x12a\x15DW`\0\x80\xFD[\x815\x81\x81\x11\x15a\x15VWa\x15Va\x14\xE8V[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x15~Wa\x15~a\x14\xE8V[\x81`@R\x82\x81R\x88` \x84\x87\x01\x01\x11\x15a\x15\x97W`\0\x80\xFD[\x82` \x86\x01` \x83\x017`\0` \x84\x83\x01\x01R\x80\x95PPPPPP\x92P\x92\x90PV[`\0\x80`\0\x80`\0\x80``\x87\x89\x03\x12\x15a\x15\xD2W`\0\x80\xFD[\x865g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x15\xEAW`\0\x80\xFD[a\x15\xF6\x8A\x83\x8B\x01a\x140V[\x90\x98P\x96P` \x89\x015\x91P\x80\x82\x11\x15a\x16\x0FW`\0\x80\xFD[a\x16\x1B\x8A\x83\x8B\x01a\x140V[\x90\x96P\x94P`@\x89\x015\x91P\x80\x82\x11\x15a\x164W`\0\x80\xFD[Pa\x16A\x89\x82\x8A\x01a\x140V[\x97\x9A\x96\x99P\x94\x97P\x92\x95\x93\x94\x92PPPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x16jW`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x16\x81W`\0\x80\xFD[a\x13[\x82a\x16SV[`\0\x80`@\x83\x85\x03\x12\x15a\x16\x9DW`\0\x80\xFD[a\x16\xA6\x83a\x16SV[\x91Pa\x16\xB4` \x84\x01a\x16SV[\x90P\x92P\x92\x90PV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x16\xD1W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x16\xF1WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x80\x835`\x1E\x19\x846\x03\x01\x81\x12a\x17$W`\0\x80\xFD[\x83\x01\x805\x91Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x17?W`\0\x80\xFD[` \x01\x91P6\x81\x90\x03\x82\x13\x15a\x14uW`\0\x80\xFD[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a\x17|Wa\x17|a\x17TV[P`\x01\x01\x90V[\x83\x81R``` \x82\x01R`\0a\x17\x9C``\x83\x01\x85a\x13\xC9V[\x90P`\x01\x80`\xA0\x1B\x03\x83\x16`@\x83\x01R\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x17\xC6W`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a\x13[W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\x17\xE8W`\0\x80\xFD[PQ\x91\x90PV[`\0\x82a\x18\x0CWcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x04\x90V[`\0\x80\x83Ta\x18\x1F\x81a\x16\xBDV[`\x01\x82\x81\x16\x80\x15a\x187W`\x01\x81\x14a\x18LWa\x18{V[`\xFF\x19\x84\x16\x87R\x82\x15\x15\x83\x02\x87\x01\x94Pa\x18{V[\x87`\0R` \x80`\0 `\0[\x85\x81\x10\x15a\x18rW\x81T\x8A\x82\x01R\x90\x84\x01\x90\x82\x01a\x18YV[PPP\x82\x87\x01\x94P[P\x92\x96\x95PPPPPPV[`\x1F\x82\x11\x15a\x0E\xEAW`\0\x81\x81R` \x81 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x18\xAEWP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x18\xCDW\x82\x81U`\x01\x01a\x18\xBAV[PPPPPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x18\xEFWa\x18\xEFa\x14\xE8V[a\x19\x03\x81a\x18\xFD\x84Ta\x16\xBDV[\x84a\x18\x87V[` \x80`\x1F\x83\x11`\x01\x81\x14a\x198W`\0\x84\x15a\x19 WP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x18\xCDV[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\x19gW\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\x19HV[P\x85\x82\x10\x15a\x19\x85W\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[` \x81R`\0a\x13[` \x83\x01\x84a\x13\xC9V[\x81\x81\x03\x81\x81\x11\x15a\n\x0EWa\n\x0Ea\x17TV[\x81\x81\x03a\x19\xC6WPPV[a\x19\xD0\x82Ta\x16\xBDV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x19\xE8Wa\x19\xE8a\x14\xE8V[a\x19\xF6\x81a\x18\xFD\x84Ta\x16\xBDV[`\0`\x1F\x82\x11`\x01\x81\x14a\x1A*W`\0\x83\x15a\x1A\x12WP\x84\x82\x01T[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x04\x1CV[`\0\x85\x81R` \x90 `\x1F\x19\x84\x16\x90`\0\x86\x81R` \x90 \x84[\x83\x81\x10\x15a\x1AdW\x82\x86\x01T\x82U`\x01\x95\x86\x01\x95\x90\x91\x01\x90` \x01a\x1ADV[P\x85\x83\x10\x15a\x19\x85W\x93\x01T`\0\x19`\xF8`\x03\x87\x90\x1B\x16\x1C\x19\x16\x90\x92UPP`\x01\x90\x81\x1B\x01\x90UPV[cNH{q`\xE0\x1B`\0R`1`\x04R`$`\0\xFD\xFE\xA2dipfsX\"\x12 +\x84 \xA6\xF9\xB1\xBBWX)\x1CmC\x13\xBE\x19\xA0dV(f{\xF2\xCA0\xDF\x8C$ \xC4F\x07dsolcC\0\x08\x13\x003",
536    );
537    /// The runtime bytecode of the contract, as deployed on the network.
538    ///
539    /// ```text
540    ///0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063b05e8ba9116100a2578063de626c0e11610071578063de626c0e14610250578063ee50c7c414610263578063f11f77f914610276578063f2fde38b1461027f578063fb66ac571461029257600080fd5b8063b05e8ba9146101e6578063b3544e82146101f9578063ba1cef231461021a578063d85ad0441461022d57600080fd5b80636a3b64b6116100e95780636a3b64b614610194578063715018a6146101a7578063830c6cc2146101af5780638da5cb5b146101c25780639b97076f146101d357600080fd5b80631a1862271461011b5780632c3ec80b1461014b578063506472cc1461016c578063654251eb14610181575b600080fd5b60015461012e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015e6101593660046113b0565b6102a5565b60405161014292919061140f565b61017f61017a36600461147c565b61035d565b005b61017f61018f3660046114fe565b610423565b61017f6101a23660046115b9565b610439565b61017f61053c565b61017f6101bd36600461166f565b610550565b6000546001600160a01b031661012e565b61017f6101e13660046114fe565b610564565b61017f6101f436600461147c565b610576565b61020c61020736600461166f565b610635565b604051908152602001610142565b61020c6102283660046113b0565b6109ea565b61024061023b36600461168a565b610a0b565b6040519015158152602001610142565b61015e61025e3660046113b0565b610a14565b61017f6102713660046113b0565b610a24565b61020c60025481565b61017f61028d36600461166f565b610a81565b61017f6102a036600461147c565b610afc565b600581815481106102b557600080fd5b600091825260209091206002909102018054600182018054919350906102da906116bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610306906116bd565b80156103535780601f1061032857610100808354040283529160200191610353565b820191906000526020600020905b81548152906001019060200180831161033657829003601f168201915b5050505050905082565b610365610bbb565b82811461038557604051634885f59b60e01b815260040160405180910390fd5b60005b8381101561041c5761040a8585838181106103a5576103a56116f7565b905060200201358484848181106103be576103be6116f7565b90506020028101906103d0919061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c1592505050565b806104148161176a565b915050610388565b5050505050565b61042b610bbb565b6104358282610d71565b5050565b610441610bbb565b84831461046157604051634885f59b60e01b815260040160405180910390fd5b8481146104815760405163197910e960e01b815260040160405180910390fd5b60005b85811015610533576105218787838181106104a1576104a16116f7565b905060200201358686848181106104ba576104ba6116f7565b90506020028101906104cc919061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250879150869050818110610515576105156116f7565b90506020020135610eef565b8061052b8161176a565b915050610484565b50505050505050565b610544610bbb565b61054e60006110d3565b565b610558610bbb565b61056181611123565b50565b61056c610bbb565b6104358282610c15565b61057e610bbb565b82811461059e57604051634885f59b60e01b815260040160405180910390fd5b60005b8381101561041c576106238585838181106105be576105be6116f7565b905060200201358484848181106105d7576105d76116f7565b90506020028101906105e9919061170d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061116d92505050565b8061062d8161176a565b9150506105a1565b60008060005b6005548110156107d75760006005828154811061065a5761065a6116f7565b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461068d906116bd565b80601f01602080910402602001604051908101604052809291908181526020018280546106b9906116bd565b80156107065780601f106106db57610100808354040283529160200191610706565b820191906000526020600020905b8154815290600101906020018083116106e957829003601f168201915b505050919092525050600154825160208401516040516396a9cd7d60e01b81529495506001600160a01b03909216936396a9cd7d935061074b92908a90600401611783565b602060405180830381865afa158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c91906117b4565b156107c4576107c1600483815481106107a7576107a76116f7565b90600052602060002001548461134a90919063ffffffff16565b92505b50806107cf8161176a565b91505061063b565b5060015460405163f978fff160e01b81526001600160a01b038581166004830152600092169063f978fff190602401602060405180830381865afa158015610823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084791906117d6565b905060025481101561085a575092915050565b60005b6003548110156109e15760006003828154811061087c5761087c6116f7565b9060005260206000209060020201604051806040016040529081600082015481526020016001820180546108af906116bd565b80601f01602080910402602001604051908101604052809291908181526020018280546108db906116bd565b80156109285780601f106108fd57610100808354040283529160200191610928565b820191906000526020600020905b81548152906001019060200180831161090b57829003601f168201915b505050919092525050600154825160208401516040516396a9cd7d60e01b81529495506001600160a01b03909216936396a9cd7d935061096d92908b90600401611783565b602060405180830381865afa15801561098a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ae91906117b4565b156109ce576109cb600254846109c491906117ef565b859061134a565b93505b50806109d98161176a565b91505061085d565b50909392505050565b600481815481106109fa57600080fd5b600091825260209091200154905081565b60015b92915050565b600381815481106102b557600080fd5b610a2c610bbb565b8060025403610a4e576040516320e47b1360e01b815260040160405180910390fd5b600281905560405181907fadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe17190600090a250565b610a89610bbb565b6001600160a01b038116610af35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610561816110d3565b610b04610bbb565b828114610b2457604051634885f59b60e01b815260040160405180910390fd5b60005b8381101561041c57610ba9858583818110610b4457610b446116f7565b90506020020135848484818110610b5d57610b5d6116f7565b9050602002810190610b6f919061170d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d7192505050565b80610bb38161176a565b915050610b27565b6000546001600160a01b0316331461054e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aea565b60005b600354811015610caf578260038281548110610c3657610c366116f7565b906000526020600020906002020160000154148015610c935750818051906020012060038281548110610c6b57610c6b6116f7565b9060005260206000209060020201600101604051610c899190611811565b6040518091039020145b15610c9d57505050565b80610ca78161176a565b915050610c18565b50604080518082019091528281526020810182815260038054600181018255600091909152825160029091027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8101918255915190917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c0190610d3290826118d5565b505050817f2360ee3e77485441cfa07e30e8dc5b031fac38455647c89a763434f58733fcc182604051610d659190611995565b60405180910390a25050565b60005b600354811015610eea578260038281548110610d9257610d926116f7565b906000526020600020906002020160000154148015610def5750818051906020012060038281548110610dc757610dc76116f7565b9060005260206000209060020201600101604051610de59190611811565b6040518091039020145b15610ed85760038054610e04906001906119a8565b81548110610e1457610e146116f7565b906000526020600020906002020160038281548110610e3557610e356116f7565b600091825260209091208254600290920201908155600180820190610e5c908401826119bb565b509050506003805480610e7157610e71611a8e565b60008281526020812060026000199093019283020181815590610e976001830182611362565b50509055827fb1323e42d97b2b3d45f9d4641bf4b6b3f9d0d01e90832ae7b7413109b7a5d34783604051610ecb9190611995565b60405180910390a2505050565b80610ee28161176a565b915050610d74565b505050565b60005b600554811015610fe5578360058281548110610f1057610f106116f7565b906000526020600020906002020160000154148015610f6d5750828051906020012060058281548110610f4557610f456116f7565b9060005260206000209060020201600101604051610f639190611811565b6040518091039020145b15610fd3578160048281548110610f8657610f866116f7565b906000526020600020018190555081847fe43bf5f5f8a1211930e5726ba0abceacb1748f97b2966db30a818ba10961cbcc85604051610fc59190611995565b60405180910390a350505050565b80610fdd8161176a565b915050610ef2565b604080518082019091528481526020810184815260058054600181018255600091909152825160029091027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db08101918255915190917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1019061106790826118d5565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0183905550604051829085907fe43bf5f5f8a1211930e5726ba0abceacb1748f97b2966db30a818ba10961cbcc90610fc5908790611995565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f573bbfa679af6fdcdbd9cf191c5ef3e526599ac2bf75e9177d47adb8530b9c6990600090a250565b60005b600554811015610eea57826005828154811061118e5761118e6116f7565b9060005260206000209060020201600001541480156111eb57508180519060200120600582815481106111c3576111c36116f7565b90600052602060002090600202016001016040516111e19190611811565b6040518091039020145b156113385760058054611200906001906119a8565b81548110611210576112106116f7565b906000526020600020906002020160058281548110611231576112316116f7565b600091825260209091208254600290920201908155600180820190611258908401826119bb565b50905050600580548061126d5761126d611a8e565b600082815260208120600260001990930192830201818155906112936001830182611362565b50509055600480546112a7906001906119a8565b815481106112b7576112b76116f7565b9060005260206000200154600482815481106112d5576112d56116f7565b60009182526020909120015560048054806112f2576112f2611a8e565b60019003818190600052602060002001600090559055827fdb75199103504bd1d3653de758d4295bf00d4587e1d53dfc114464cc47ed97b783604051610ecb9190611995565b806113428161176a565b915050611170565b6000818311611359578161135b565b825b9392505050565b50805461136e906116bd565b6000825580601f1061137e575050565b601f01602090049060005260206000209081019061056191905b808211156113ac5760008155600101611398565b5090565b6000602082840312156113c257600080fd5b5035919050565b6000815180845260005b818110156113ef576020818501810151868301820152016113d3565b506000602082860101526020601f19601f83011685010191505092915050565b82815260406020820152600061142860408301846113c9565b949350505050565b60008083601f84011261144257600080fd5b50813567ffffffffffffffff81111561145a57600080fd5b6020830191508360208260051b850101111561147557600080fd5b9250929050565b6000806000806040858703121561149257600080fd5b843567ffffffffffffffff808211156114aa57600080fd5b6114b688838901611430565b909650945060208701359150808211156114cf57600080fd5b506114dc87828801611430565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561151157600080fd5b82359150602083013567ffffffffffffffff8082111561153057600080fd5b818501915085601f83011261154457600080fd5b813581811115611556576115566114e8565b604051601f8201601f19908116603f0116810190838211818310171561157e5761157e6114e8565b8160405282815288602084870101111561159757600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080600080600080606087890312156115d257600080fd5b863567ffffffffffffffff808211156115ea57600080fd5b6115f68a838b01611430565b9098509650602089013591508082111561160f57600080fd5b61161b8a838b01611430565b9096509450604089013591508082111561163457600080fd5b5061164189828a01611430565b979a9699509497509295939492505050565b80356001600160a01b038116811461166a57600080fd5b919050565b60006020828403121561168157600080fd5b61135b82611653565b6000806040838503121561169d57600080fd5b6116a683611653565b91506116b460208401611653565b90509250929050565b600181811c908216806116d157607f821691505b6020821081036116f157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261172457600080fd5b83018035915067ffffffffffffffff82111561173f57600080fd5b60200191503681900382131561147557600080fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161177c5761177c611754565b5060010190565b83815260606020820152600061179c60608301856113c9565b905060018060a01b0383166040830152949350505050565b6000602082840312156117c657600080fd5b8151801515811461135b57600080fd5b6000602082840312156117e857600080fd5b5051919050565b60008261180c57634e487b7160e01b600052601260045260246000fd5b500490565b600080835461181f816116bd565b60018281168015611837576001811461184c5761187b565b60ff198416875282151583028701945061187b565b8760005260208060002060005b858110156118725781548a820152908401908201611859565b50505082870194505b50929695505050505050565b601f821115610eea57600081815260208120601f850160051c810160208610156118ae5750805b601f850160051c820191505b818110156118cd578281556001016118ba565b505050505050565b815167ffffffffffffffff8111156118ef576118ef6114e8565b611903816118fd84546116bd565b84611887565b602080601f83116001811461193857600084156119205750858301515b600019600386901b1c1916600185901b1785556118cd565b600085815260208120601f198616915b8281101561196757888601518255948401946001909101908401611948565b50858210156119855787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600061135b60208301846113c9565b81810381811115610a0e57610a0e611754565b8181036119c6575050565b6119d082546116bd565b67ffffffffffffffff8111156119e8576119e86114e8565b6119f6816118fd84546116bd565b6000601f821160018114611a2a5760008315611a125750848201545b600019600385901b1c1916600184901b17845561041c565b600085815260209020601f19841690600086815260209020845b83811015611a645782860154825560019586019590910190602001611a44565b50858310156119855793015460001960f8600387901b161c19169092555050600190811b01905550565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202b8420a6f9b1bb5758291c6d4313be19a0645628667bf2ca30df8c2420c4460764736f6c63430008130033
541    /// ```
542    #[rustfmt::skip]
543    #[allow(clippy::all)]
544    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
545        b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\x16W`\x005`\xE0\x1C\x80c\xB0^\x8B\xA9\x11a\0\xA2W\x80c\xDEbl\x0E\x11a\0qW\x80c\xDEbl\x0E\x14a\x02PW\x80c\xEEP\xC7\xC4\x14a\x02cW\x80c\xF1\x1Fw\xF9\x14a\x02vW\x80c\xF2\xFD\xE3\x8B\x14a\x02\x7FW\x80c\xFBf\xACW\x14a\x02\x92W`\0\x80\xFD[\x80c\xB0^\x8B\xA9\x14a\x01\xE6W\x80c\xB3TN\x82\x14a\x01\xF9W\x80c\xBA\x1C\xEF#\x14a\x02\x1AW\x80c\xD8Z\xD0D\x14a\x02-W`\0\x80\xFD[\x80cj;d\xB6\x11a\0\xE9W\x80cj;d\xB6\x14a\x01\x94W\x80cqP\x18\xA6\x14a\x01\xA7W\x80c\x83\x0Cl\xC2\x14a\x01\xAFW\x80c\x8D\xA5\xCB[\x14a\x01\xC2W\x80c\x9B\x97\x07o\x14a\x01\xD3W`\0\x80\xFD[\x80c\x1A\x18b'\x14a\x01\x1BW\x80c,>\xC8\x0B\x14a\x01KW\x80cPdr\xCC\x14a\x01lW\x80ceBQ\xEB\x14a\x01\x81W[`\0\x80\xFD[`\x01Ta\x01.\x90`\x01`\x01`\xA0\x1B\x03\x16\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x01^a\x01Y6`\x04a\x13\xB0V[a\x02\xA5V[`@Qa\x01B\x92\x91\x90a\x14\x0FV[a\x01\x7Fa\x01z6`\x04a\x14|V[a\x03]V[\0[a\x01\x7Fa\x01\x8F6`\x04a\x14\xFEV[a\x04#V[a\x01\x7Fa\x01\xA26`\x04a\x15\xB9V[a\x049V[a\x01\x7Fa\x05<V[a\x01\x7Fa\x01\xBD6`\x04a\x16oV[a\x05PV[`\0T`\x01`\x01`\xA0\x1B\x03\x16a\x01.V[a\x01\x7Fa\x01\xE16`\x04a\x14\xFEV[a\x05dV[a\x01\x7Fa\x01\xF46`\x04a\x14|V[a\x05vV[a\x02\x0Ca\x02\x076`\x04a\x16oV[a\x065V[`@Q\x90\x81R` \x01a\x01BV[a\x02\x0Ca\x02(6`\x04a\x13\xB0V[a\t\xEAV[a\x02@a\x02;6`\x04a\x16\x8AV[a\n\x0BV[`@Q\x90\x15\x15\x81R` \x01a\x01BV[a\x01^a\x02^6`\x04a\x13\xB0V[a\n\x14V[a\x01\x7Fa\x02q6`\x04a\x13\xB0V[a\n$V[a\x02\x0C`\x02T\x81V[a\x01\x7Fa\x02\x8D6`\x04a\x16oV[a\n\x81V[a\x01\x7Fa\x02\xA06`\x04a\x14|V[a\n\xFCV[`\x05\x81\x81T\x81\x10a\x02\xB5W`\0\x80\xFD[`\0\x91\x82R` \x90\x91 `\x02\x90\x91\x02\x01\x80T`\x01\x82\x01\x80T\x91\x93P\x90a\x02\xDA\x90a\x16\xBDV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x03\x06\x90a\x16\xBDV[\x80\x15a\x03SW\x80`\x1F\x10a\x03(Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x03SV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x036W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x82V[a\x03ea\x0B\xBBV[\x82\x81\x14a\x03\x85W`@QcH\x85\xF5\x9B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0[\x83\x81\x10\x15a\x04\x1CWa\x04\n\x85\x85\x83\x81\x81\x10a\x03\xA5Wa\x03\xA5a\x16\xF7V[\x90P` \x02\x015\x84\x84\x84\x81\x81\x10a\x03\xBEWa\x03\xBEa\x16\xF7V[\x90P` \x02\x81\x01\x90a\x03\xD0\x91\x90a\x17\rV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa\x0C\x15\x92PPPV[\x80a\x04\x14\x81a\x17jV[\x91PPa\x03\x88V[PPPPPV[a\x04+a\x0B\xBBV[a\x045\x82\x82a\rqV[PPV[a\x04Aa\x0B\xBBV[\x84\x83\x14a\x04aW`@QcH\x85\xF5\x9B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x84\x81\x14a\x04\x81W`@Qc\x19y\x10\xE9`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0[\x85\x81\x10\x15a\x053Wa\x05!\x87\x87\x83\x81\x81\x10a\x04\xA1Wa\x04\xA1a\x16\xF7V[\x90P` \x02\x015\x86\x86\x84\x81\x81\x10a\x04\xBAWa\x04\xBAa\x16\xF7V[\x90P` \x02\x81\x01\x90a\x04\xCC\x91\x90a\x17\rV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RP\x88\x92P\x87\x91P\x86\x90P\x81\x81\x10a\x05\x15Wa\x05\x15a\x16\xF7V[\x90P` \x02\x015a\x0E\xEFV[\x80a\x05+\x81a\x17jV[\x91PPa\x04\x84V[PPPPPPPV[a\x05Da\x0B\xBBV[a\x05N`\0a\x10\xD3V[V[a\x05Xa\x0B\xBBV[a\x05a\x81a\x11#V[PV[a\x05la\x0B\xBBV[a\x045\x82\x82a\x0C\x15V[a\x05~a\x0B\xBBV[\x82\x81\x14a\x05\x9EW`@QcH\x85\xF5\x9B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0[\x83\x81\x10\x15a\x04\x1CWa\x06#\x85\x85\x83\x81\x81\x10a\x05\xBEWa\x05\xBEa\x16\xF7V[\x90P` \x02\x015\x84\x84\x84\x81\x81\x10a\x05\xD7Wa\x05\xD7a\x16\xF7V[\x90P` \x02\x81\x01\x90a\x05\xE9\x91\x90a\x17\rV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa\x11m\x92PPPV[\x80a\x06-\x81a\x17jV[\x91PPa\x05\xA1V[`\0\x80`\0[`\x05T\x81\x10\x15a\x07\xD7W`\0`\x05\x82\x81T\x81\x10a\x06ZWa\x06Za\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`@Q\x80`@\x01`@R\x90\x81`\0\x82\x01T\x81R` \x01`\x01\x82\x01\x80Ta\x06\x8D\x90a\x16\xBDV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x06\xB9\x90a\x16\xBDV[\x80\x15a\x07\x06W\x80`\x1F\x10a\x06\xDBWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x07\x06V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x06\xE9W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPP\x91\x90\x92RPP`\x01T\x82Q` \x84\x01Q`@Qc\x96\xA9\xCD}`\xE0\x1B\x81R\x94\x95P`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x93c\x96\xA9\xCD}\x93Pa\x07K\x92\x90\x8A\x90`\x04\x01a\x17\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x07hW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x07\x8C\x91\x90a\x17\xB4V[\x15a\x07\xC4Wa\x07\xC1`\x04\x83\x81T\x81\x10a\x07\xA7Wa\x07\xA7a\x16\xF7V[\x90`\0R` `\0 \x01T\x84a\x13J\x90\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x92P[P\x80a\x07\xCF\x81a\x17jV[\x91PPa\x06;V[P`\x01T`@Qc\xF9x\xFF\xF1`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x81\x16`\x04\x83\x01R`\0\x92\x16\x90c\xF9x\xFF\xF1\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08#W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08G\x91\x90a\x17\xD6V[\x90P`\x02T\x81\x10\x15a\x08ZWP\x92\x91PPV[`\0[`\x03T\x81\x10\x15a\t\xE1W`\0`\x03\x82\x81T\x81\x10a\x08|Wa\x08|a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`@Q\x80`@\x01`@R\x90\x81`\0\x82\x01T\x81R` \x01`\x01\x82\x01\x80Ta\x08\xAF\x90a\x16\xBDV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x08\xDB\x90a\x16\xBDV[\x80\x15a\t(W\x80`\x1F\x10a\x08\xFDWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\t(V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\t\x0BW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPP\x91\x90\x92RPP`\x01T\x82Q` \x84\x01Q`@Qc\x96\xA9\xCD}`\xE0\x1B\x81R\x94\x95P`\x01`\x01`\xA0\x1B\x03\x90\x92\x16\x93c\x96\xA9\xCD}\x93Pa\tm\x92\x90\x8B\x90`\x04\x01a\x17\x83V[` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\t\x8AW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\xAE\x91\x90a\x17\xB4V[\x15a\t\xCEWa\t\xCB`\x02T\x84a\t\xC4\x91\x90a\x17\xEFV[\x85\x90a\x13JV[\x93P[P\x80a\t\xD9\x81a\x17jV[\x91PPa\x08]V[P\x90\x93\x92PPPV[`\x04\x81\x81T\x81\x10a\t\xFAW`\0\x80\xFD[`\0\x91\x82R` \x90\x91 \x01T\x90P\x81V[`\x01[\x92\x91PPV[`\x03\x81\x81T\x81\x10a\x02\xB5W`\0\x80\xFD[a\n,a\x0B\xBBV[\x80`\x02T\x03a\nNW`@Qc \xE4{\x13`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x02\x81\x90U`@Q\x81\x90\x7F\xAD\xFA\x8E\xCB!\xB6\x96.\xBC\xD0\xAD\xBD\x9A\xB9\x85\xB7\xB4\xC5\xB5\xEB;\r\xEA\xD6\x83\x17\x15e\xC7\xBF\xE1q\x90`\0\x90\xA2PV[a\n\x89a\x0B\xBBV[`\x01`\x01`\xA0\x1B\x03\x81\x16a\n\xF3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FOwnable: new owner is the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[a\x05a\x81a\x10\xD3V[a\x0B\x04a\x0B\xBBV[\x82\x81\x14a\x0B$W`@QcH\x85\xF5\x9B`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0[\x83\x81\x10\x15a\x04\x1CWa\x0B\xA9\x85\x85\x83\x81\x81\x10a\x0BDWa\x0BDa\x16\xF7V[\x90P` \x02\x015\x84\x84\x84\x81\x81\x10a\x0B]Wa\x0B]a\x16\xF7V[\x90P` \x02\x81\x01\x90a\x0Bo\x91\x90a\x17\rV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa\rq\x92PPPV[\x80a\x0B\xB3\x81a\x17jV[\x91PPa\x0B'V[`\0T`\x01`\x01`\xA0\x1B\x03\x163\x14a\x05NW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FOwnable: caller is not the owner`D\x82\x01R`d\x01a\n\xEAV[`\0[`\x03T\x81\x10\x15a\x0C\xAFW\x82`\x03\x82\x81T\x81\x10a\x0C6Wa\x0C6a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\0\x01T\x14\x80\x15a\x0C\x93WP\x81\x80Q\x90` \x01 `\x03\x82\x81T\x81\x10a\x0CkWa\x0Cka\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x01\x01`@Qa\x0C\x89\x91\x90a\x18\x11V[`@Q\x80\x91\x03\x90 \x14[\x15a\x0C\x9DWPPPV[\x80a\x0C\xA7\x81a\x17jV[\x91PPa\x0C\x18V[P`@\x80Q\x80\x82\x01\x90\x91R\x82\x81R` \x81\x01\x82\x81R`\x03\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x82Q`\x02\x90\x91\x02\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8[\x81\x01\x91\x82U\x91Q\x90\x91\x7F\xC2WZ\x0E\x9EY<\0\xF9Y\xF8\xC9/\x12\xDB(i\xC39Z;\x05\x02\xD0^%\x16Doq\xF8\\\x01\x90a\r2\x90\x82a\x18\xD5V[PPP\x81\x7F#`\xEE>wHTA\xCF\xA0~0\xE8\xDC[\x03\x1F\xAC8EVG\xC8\x9Av44\xF5\x873\xFC\xC1\x82`@Qa\re\x91\x90a\x19\x95V[`@Q\x80\x91\x03\x90\xA2PPV[`\0[`\x03T\x81\x10\x15a\x0E\xEAW\x82`\x03\x82\x81T\x81\x10a\r\x92Wa\r\x92a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\0\x01T\x14\x80\x15a\r\xEFWP\x81\x80Q\x90` \x01 `\x03\x82\x81T\x81\x10a\r\xC7Wa\r\xC7a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x01\x01`@Qa\r\xE5\x91\x90a\x18\x11V[`@Q\x80\x91\x03\x90 \x14[\x15a\x0E\xD8W`\x03\x80Ta\x0E\x04\x90`\x01\x90a\x19\xA8V[\x81T\x81\x10a\x0E\x14Wa\x0E\x14a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x03\x82\x81T\x81\x10a\x0E5Wa\x0E5a\x16\xF7V[`\0\x91\x82R` \x90\x91 \x82T`\x02\x90\x92\x02\x01\x90\x81U`\x01\x80\x82\x01\x90a\x0E\\\x90\x84\x01\x82a\x19\xBBV[P\x90PP`\x03\x80T\x80a\x0EqWa\x0Eqa\x1A\x8EV[`\0\x82\x81R` \x81 `\x02`\0\x19\x90\x93\x01\x92\x83\x02\x01\x81\x81U\x90a\x0E\x97`\x01\x83\x01\x82a\x13bV[PP\x90U\x82\x7F\xB12>B\xD9{+=E\xF9\xD4d\x1B\xF4\xB6\xB3\xF9\xD0\xD0\x1E\x90\x83*\xE7\xB7A1\t\xB7\xA5\xD3G\x83`@Qa\x0E\xCB\x91\x90a\x19\x95V[`@Q\x80\x91\x03\x90\xA2PPPV[\x80a\x0E\xE2\x81a\x17jV[\x91PPa\rtV[PPPV[`\0[`\x05T\x81\x10\x15a\x0F\xE5W\x83`\x05\x82\x81T\x81\x10a\x0F\x10Wa\x0F\x10a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\0\x01T\x14\x80\x15a\x0FmWP\x82\x80Q\x90` \x01 `\x05\x82\x81T\x81\x10a\x0FEWa\x0FEa\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x01\x01`@Qa\x0Fc\x91\x90a\x18\x11V[`@Q\x80\x91\x03\x90 \x14[\x15a\x0F\xD3W\x81`\x04\x82\x81T\x81\x10a\x0F\x86Wa\x0F\x86a\x16\xF7V[\x90`\0R` `\0 \x01\x81\x90UP\x81\x84\x7F\xE4;\xF5\xF5\xF8\xA1!\x190\xE5rk\xA0\xAB\xCE\xAC\xB1t\x8F\x97\xB2\x96m\xB3\n\x81\x8B\xA1\ta\xCB\xCC\x85`@Qa\x0F\xC5\x91\x90a\x19\x95V[`@Q\x80\x91\x03\x90\xA3PPPPV[\x80a\x0F\xDD\x81a\x17jV[\x91PPa\x0E\xF2V[`@\x80Q\x80\x82\x01\x90\x91R\x84\x81R` \x81\x01\x84\x81R`\x05\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x82Q`\x02\x90\x91\x02\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x81\x01\x91\x82U\x91Q\x90\x91\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB1\x01\x90a\x10g\x90\x82a\x18\xD5V[PP`\x04\x80T`\x01\x81\x01\x82U`\0\x91\x90\x91R\x7F\x8A5\xAC\xFB\xC1_\xF8\x1A9\xAE}4O\xD7\t\xF2\x8E\x86\0\xB4\xAA\x8Ce\xC6\xB6K\xFE\x7F\xE3k\xD1\x9B\x01\x83\x90UP`@Q\x82\x90\x85\x90\x7F\xE4;\xF5\xF5\xF8\xA1!\x190\xE5rk\xA0\xAB\xCE\xAC\xB1t\x8F\x97\xB2\x96m\xB3\n\x81\x8B\xA1\ta\xCB\xCC\x90a\x0F\xC5\x90\x87\x90a\x19\x95V[`\0\x80T`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\x01`\x01`\xA0\x1B\x03\x19\x83\x16\x81\x17\x84U`@Q\x91\x90\x92\x16\x92\x83\x91\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x91\x90\xA3PPV[`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x81\x17\x90\x91U`@Q\x7FW;\xBF\xA6y\xAFo\xDC\xDB\xD9\xCF\x19\x1C^\xF3\xE5&Y\x9A\xC2\xBFu\xE9\x17}G\xAD\xB8S\x0B\x9Ci\x90`\0\x90\xA2PV[`\0[`\x05T\x81\x10\x15a\x0E\xEAW\x82`\x05\x82\x81T\x81\x10a\x11\x8EWa\x11\x8Ea\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\0\x01T\x14\x80\x15a\x11\xEBWP\x81\x80Q\x90` \x01 `\x05\x82\x81T\x81\x10a\x11\xC3Wa\x11\xC3a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x01\x01`@Qa\x11\xE1\x91\x90a\x18\x11V[`@Q\x80\x91\x03\x90 \x14[\x15a\x138W`\x05\x80Ta\x12\0\x90`\x01\x90a\x19\xA8V[\x81T\x81\x10a\x12\x10Wa\x12\x10a\x16\xF7V[\x90`\0R` `\0 \x90`\x02\x02\x01`\x05\x82\x81T\x81\x10a\x121Wa\x121a\x16\xF7V[`\0\x91\x82R` \x90\x91 \x82T`\x02\x90\x92\x02\x01\x90\x81U`\x01\x80\x82\x01\x90a\x12X\x90\x84\x01\x82a\x19\xBBV[P\x90PP`\x05\x80T\x80a\x12mWa\x12ma\x1A\x8EV[`\0\x82\x81R` \x81 `\x02`\0\x19\x90\x93\x01\x92\x83\x02\x01\x81\x81U\x90a\x12\x93`\x01\x83\x01\x82a\x13bV[PP\x90U`\x04\x80Ta\x12\xA7\x90`\x01\x90a\x19\xA8V[\x81T\x81\x10a\x12\xB7Wa\x12\xB7a\x16\xF7V[\x90`\0R` `\0 \x01T`\x04\x82\x81T\x81\x10a\x12\xD5Wa\x12\xD5a\x16\xF7V[`\0\x91\x82R` \x90\x91 \x01U`\x04\x80T\x80a\x12\xF2Wa\x12\xF2a\x1A\x8EV[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90U\x82\x7F\xDBu\x19\x91\x03PK\xD1\xD3e=\xE7X\xD4)[\xF0\rE\x87\xE1\xD5=\xFC\x11Dd\xCCG\xED\x97\xB7\x83`@Qa\x0E\xCB\x91\x90a\x19\x95V[\x80a\x13B\x81a\x17jV[\x91PPa\x11pV[`\0\x81\x83\x11a\x13YW\x81a\x13[V[\x82[\x93\x92PPPV[P\x80Ta\x13n\x90a\x16\xBDV[`\0\x82U\x80`\x1F\x10a\x13~WPPV[`\x1F\x01` \x90\x04\x90`\0R` `\0 \x90\x81\x01\x90a\x05a\x91\x90[\x80\x82\x11\x15a\x13\xACW`\0\x81U`\x01\x01a\x13\x98V[P\x90V[`\0` \x82\x84\x03\x12\x15a\x13\xC2W`\0\x80\xFD[P5\x91\x90PV[`\0\x81Q\x80\x84R`\0[\x81\x81\x10\x15a\x13\xEFW` \x81\x85\x01\x81\x01Q\x86\x83\x01\x82\x01R\x01a\x13\xD3V[P`\0` \x82\x86\x01\x01R` `\x1F\x19`\x1F\x83\x01\x16\x85\x01\x01\x91PP\x92\x91PPV[\x82\x81R`@` \x82\x01R`\0a\x14(`@\x83\x01\x84a\x13\xC9V[\x94\x93PPPPV[`\0\x80\x83`\x1F\x84\x01\x12a\x14BW`\0\x80\xFD[P\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x14ZW`\0\x80\xFD[` \x83\x01\x91P\x83` \x82`\x05\x1B\x85\x01\x01\x11\x15a\x14uW`\0\x80\xFD[\x92P\x92\x90PV[`\0\x80`\0\x80`@\x85\x87\x03\x12\x15a\x14\x92W`\0\x80\xFD[\x845g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x14\xAAW`\0\x80\xFD[a\x14\xB6\x88\x83\x89\x01a\x140V[\x90\x96P\x94P` \x87\x015\x91P\x80\x82\x11\x15a\x14\xCFW`\0\x80\xFD[Pa\x14\xDC\x87\x82\x88\x01a\x140V[\x95\x98\x94\x97P\x95PPPPV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`@\x83\x85\x03\x12\x15a\x15\x11W`\0\x80\xFD[\x825\x91P` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x150W`\0\x80\xFD[\x81\x85\x01\x91P\x85`\x1F\x83\x01\x12a\x15DW`\0\x80\xFD[\x815\x81\x81\x11\x15a\x15VWa\x15Va\x14\xE8V[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15a\x15~Wa\x15~a\x14\xE8V[\x81`@R\x82\x81R\x88` \x84\x87\x01\x01\x11\x15a\x15\x97W`\0\x80\xFD[\x82` \x86\x01` \x83\x017`\0` \x84\x83\x01\x01R\x80\x95PPPPPP\x92P\x92\x90PV[`\0\x80`\0\x80`\0\x80``\x87\x89\x03\x12\x15a\x15\xD2W`\0\x80\xFD[\x865g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\x15\xEAW`\0\x80\xFD[a\x15\xF6\x8A\x83\x8B\x01a\x140V[\x90\x98P\x96P` \x89\x015\x91P\x80\x82\x11\x15a\x16\x0FW`\0\x80\xFD[a\x16\x1B\x8A\x83\x8B\x01a\x140V[\x90\x96P\x94P`@\x89\x015\x91P\x80\x82\x11\x15a\x164W`\0\x80\xFD[Pa\x16A\x89\x82\x8A\x01a\x140V[\x97\x9A\x96\x99P\x94\x97P\x92\x95\x93\x94\x92PPPV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x16jW`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a\x16\x81W`\0\x80\xFD[a\x13[\x82a\x16SV[`\0\x80`@\x83\x85\x03\x12\x15a\x16\x9DW`\0\x80\xFD[a\x16\xA6\x83a\x16SV[\x91Pa\x16\xB4` \x84\x01a\x16SV[\x90P\x92P\x92\x90PV[`\x01\x81\x81\x1C\x90\x82\x16\x80a\x16\xD1W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a\x16\xF1WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x80\x835`\x1E\x19\x846\x03\x01\x81\x12a\x17$W`\0\x80\xFD[\x83\x01\x805\x91Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a\x17?W`\0\x80\xFD[` \x01\x91P6\x81\x90\x03\x82\x13\x15a\x14uW`\0\x80\xFD[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a\x17|Wa\x17|a\x17TV[P`\x01\x01\x90V[\x83\x81R``` \x82\x01R`\0a\x17\x9C``\x83\x01\x85a\x13\xC9V[\x90P`\x01\x80`\xA0\x1B\x03\x83\x16`@\x83\x01R\x94\x93PPPPV[`\0` \x82\x84\x03\x12\x15a\x17\xC6W`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a\x13[W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a\x17\xE8W`\0\x80\xFD[PQ\x91\x90PV[`\0\x82a\x18\x0CWcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x04\x90V[`\0\x80\x83Ta\x18\x1F\x81a\x16\xBDV[`\x01\x82\x81\x16\x80\x15a\x187W`\x01\x81\x14a\x18LWa\x18{V[`\xFF\x19\x84\x16\x87R\x82\x15\x15\x83\x02\x87\x01\x94Pa\x18{V[\x87`\0R` \x80`\0 `\0[\x85\x81\x10\x15a\x18rW\x81T\x8A\x82\x01R\x90\x84\x01\x90\x82\x01a\x18YV[PPP\x82\x87\x01\x94P[P\x92\x96\x95PPPPPPV[`\x1F\x82\x11\x15a\x0E\xEAW`\0\x81\x81R` \x81 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a\x18\xAEWP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x18\xCDW\x82\x81U`\x01\x01a\x18\xBAV[PPPPPPV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x18\xEFWa\x18\xEFa\x14\xE8V[a\x19\x03\x81a\x18\xFD\x84Ta\x16\xBDV[\x84a\x18\x87V[` \x80`\x1F\x83\x11`\x01\x81\x14a\x198W`\0\x84\x15a\x19 WP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x18\xCDV[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a\x19gW\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a\x19HV[P\x85\x82\x10\x15a\x19\x85W\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[` \x81R`\0a\x13[` \x83\x01\x84a\x13\xC9V[\x81\x81\x03\x81\x81\x11\x15a\n\x0EWa\n\x0Ea\x17TV[\x81\x81\x03a\x19\xC6WPPV[a\x19\xD0\x82Ta\x16\xBDV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x19\xE8Wa\x19\xE8a\x14\xE8V[a\x19\xF6\x81a\x18\xFD\x84Ta\x16\xBDV[`\0`\x1F\x82\x11`\x01\x81\x14a\x1A*W`\0\x83\x15a\x1A\x12WP\x84\x82\x01T[`\0\x19`\x03\x85\x90\x1B\x1C\x19\x16`\x01\x84\x90\x1B\x17\x84Ua\x04\x1CV[`\0\x85\x81R` \x90 `\x1F\x19\x84\x16\x90`\0\x86\x81R` \x90 \x84[\x83\x81\x10\x15a\x1AdW\x82\x86\x01T\x82U`\x01\x95\x86\x01\x95\x90\x91\x01\x90` \x01a\x1ADV[P\x85\x83\x10\x15a\x19\x85W\x93\x01T`\0\x19`\xF8`\x03\x87\x90\x1B\x16\x1C\x19\x16\x90\x92UPP`\x01\x90\x81\x1B\x01\x90UPV[cNH{q`\xE0\x1B`\0R`1`\x04R`$`\0\xFD\xFE\xA2dipfsX\"\x12 +\x84 \xA6\xF9\xB1\xBBWX)\x1CmC\x13\xBE\x19\xA0dV(f{\xF2\xCA0\xDF\x8C$ \xC4F\x07dsolcC\0\x08\x13\x003",
546    );
547    #[derive(serde::Serialize, serde::Deserialize)]
548    #[derive(Default, Debug, PartialEq, Eq, Hash)]
549    /**Custom error with signature `MaxRegistrationsMismatch()` and selector `0x197910e9`.
550```solidity
551error MaxRegistrationsMismatch();
552```*/
553    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
554    #[derive(Clone)]
555    pub struct MaxRegistrationsMismatch;
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        #[doc(hidden)]
567        type UnderlyingRustTuple<'a> = ();
568        #[cfg(test)]
569        #[allow(dead_code, unreachable_patterns)]
570        fn _type_assertion(
571            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
572        ) {
573            match _t {
574                alloy_sol_types::private::AssertTypeEq::<
575                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
576                >(_) => {}
577            }
578        }
579        #[automatically_derived]
580        #[doc(hidden)]
581        impl ::core::convert::From<MaxRegistrationsMismatch>
582        for UnderlyingRustTuple<'_> {
583            fn from(value: MaxRegistrationsMismatch) -> Self {
584                ()
585            }
586        }
587        #[automatically_derived]
588        #[doc(hidden)]
589        impl ::core::convert::From<UnderlyingRustTuple<'_>>
590        for MaxRegistrationsMismatch {
591            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
592                Self
593            }
594        }
595        #[automatically_derived]
596        impl alloy_sol_types::SolError for MaxRegistrationsMismatch {
597            type Parameters<'a> = UnderlyingSolTuple<'a>;
598            type Token<'a> = <Self::Parameters<
599                'a,
600            > as alloy_sol_types::SolType>::Token<'a>;
601            const SIGNATURE: &'static str = "MaxRegistrationsMismatch()";
602            const SELECTOR: [u8; 4] = [25u8, 121u8, 16u8, 233u8];
603            #[inline]
604            fn new<'a>(
605                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
606            ) -> Self {
607                tuple.into()
608            }
609            #[inline]
610            fn tokenize(&self) -> Self::Token<'_> {
611                ()
612            }
613            #[inline]
614            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
615                <Self::Parameters<
616                    '_,
617                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
618                    .map(Self::new)
619            }
620        }
621    };
622    #[derive(serde::Serialize, serde::Deserialize)]
623    #[derive(Default, Debug, PartialEq, Eq, Hash)]
624    /**Custom error with signature `NftRanksMismatch()` and selector `0x4885f59b`.
625```solidity
626error NftRanksMismatch();
627```*/
628    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
629    #[derive(Clone)]
630    pub struct NftRanksMismatch;
631    #[allow(
632        non_camel_case_types,
633        non_snake_case,
634        clippy::pub_underscore_fields,
635        clippy::style
636    )]
637    const _: () = {
638        use alloy::sol_types as alloy_sol_types;
639        #[doc(hidden)]
640        type UnderlyingSolTuple<'a> = ();
641        #[doc(hidden)]
642        type UnderlyingRustTuple<'a> = ();
643        #[cfg(test)]
644        #[allow(dead_code, unreachable_patterns)]
645        fn _type_assertion(
646            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
647        ) {
648            match _t {
649                alloy_sol_types::private::AssertTypeEq::<
650                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
651                >(_) => {}
652            }
653        }
654        #[automatically_derived]
655        #[doc(hidden)]
656        impl ::core::convert::From<NftRanksMismatch> for UnderlyingRustTuple<'_> {
657            fn from(value: NftRanksMismatch) -> Self {
658                ()
659            }
660        }
661        #[automatically_derived]
662        #[doc(hidden)]
663        impl ::core::convert::From<UnderlyingRustTuple<'_>> for NftRanksMismatch {
664            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
665                Self
666            }
667        }
668        #[automatically_derived]
669        impl alloy_sol_types::SolError for NftRanksMismatch {
670            type Parameters<'a> = UnderlyingSolTuple<'a>;
671            type Token<'a> = <Self::Parameters<
672                'a,
673            > as alloy_sol_types::SolType>::Token<'a>;
674            const SIGNATURE: &'static str = "NftRanksMismatch()";
675            const SELECTOR: [u8; 4] = [72u8, 133u8, 245u8, 155u8];
676            #[inline]
677            fn new<'a>(
678                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
679            ) -> Self {
680                tuple.into()
681            }
682            #[inline]
683            fn tokenize(&self) -> Self::Token<'_> {
684                ()
685            }
686            #[inline]
687            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
688                <Self::Parameters<
689                    '_,
690                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
691                    .map(Self::new)
692            }
693        }
694    };
695    #[derive(serde::Serialize, serde::Deserialize)]
696    #[derive(Default, Debug, PartialEq, Eq, Hash)]
697    /**Custom error with signature `SameStakingThreshold()` and selector `0x20e47b13`.
698```solidity
699error SameStakingThreshold();
700```*/
701    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
702    #[derive(Clone)]
703    pub struct SameStakingThreshold;
704    #[allow(
705        non_camel_case_types,
706        non_snake_case,
707        clippy::pub_underscore_fields,
708        clippy::style
709    )]
710    const _: () = {
711        use alloy::sol_types as alloy_sol_types;
712        #[doc(hidden)]
713        type UnderlyingSolTuple<'a> = ();
714        #[doc(hidden)]
715        type UnderlyingRustTuple<'a> = ();
716        #[cfg(test)]
717        #[allow(dead_code, unreachable_patterns)]
718        fn _type_assertion(
719            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
720        ) {
721            match _t {
722                alloy_sol_types::private::AssertTypeEq::<
723                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
724                >(_) => {}
725            }
726        }
727        #[automatically_derived]
728        #[doc(hidden)]
729        impl ::core::convert::From<SameStakingThreshold> for UnderlyingRustTuple<'_> {
730            fn from(value: SameStakingThreshold) -> Self {
731                ()
732            }
733        }
734        #[automatically_derived]
735        #[doc(hidden)]
736        impl ::core::convert::From<UnderlyingRustTuple<'_>> for SameStakingThreshold {
737            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
738                Self
739            }
740        }
741        #[automatically_derived]
742        impl alloy_sol_types::SolError for SameStakingThreshold {
743            type Parameters<'a> = UnderlyingSolTuple<'a>;
744            type Token<'a> = <Self::Parameters<
745                'a,
746            > as alloy_sol_types::SolType>::Token<'a>;
747            const SIGNATURE: &'static str = "SameStakingThreshold()";
748            const SELECTOR: [u8; 4] = [32u8, 228u8, 123u8, 19u8];
749            #[inline]
750            fn new<'a>(
751                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
752            ) -> Self {
753                tuple.into()
754            }
755            #[inline]
756            fn tokenize(&self) -> Self::Token<'_> {
757                ()
758            }
759            #[inline]
760            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
761                <Self::Parameters<
762                    '_,
763                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
764                    .map(Self::new)
765            }
766        }
767    };
768    #[derive(serde::Serialize, serde::Deserialize)]
769    #[derive(Default, Debug, PartialEq, Eq, Hash)]
770    /**Event with signature `NftTypeAndRankAdded(uint256,string)` and selector `0x2360ee3e77485441cfa07e30e8dc5b031fac38455647c89a763434f58733fcc1`.
771```solidity
772event NftTypeAndRankAdded(uint256 indexed nftType, string nftRank);
773```*/
774    #[allow(
775        non_camel_case_types,
776        non_snake_case,
777        clippy::pub_underscore_fields,
778        clippy::style
779    )]
780    #[derive(Clone)]
781    pub struct NftTypeAndRankAdded {
782        #[allow(missing_docs)]
783        pub nftType: alloy::sol_types::private::primitives::aliases::U256,
784        #[allow(missing_docs)]
785        pub nftRank: alloy::sol_types::private::String,
786    }
787    #[allow(
788        non_camel_case_types,
789        non_snake_case,
790        clippy::pub_underscore_fields,
791        clippy::style
792    )]
793    const _: () = {
794        use alloy::sol_types as alloy_sol_types;
795        #[automatically_derived]
796        impl alloy_sol_types::SolEvent for NftTypeAndRankAdded {
797            type DataTuple<'a> = (alloy::sol_types::sol_data::String,);
798            type DataToken<'a> = <Self::DataTuple<
799                'a,
800            > as alloy_sol_types::SolType>::Token<'a>;
801            type TopicList = (
802                alloy_sol_types::sol_data::FixedBytes<32>,
803                alloy::sol_types::sol_data::Uint<256>,
804            );
805            const SIGNATURE: &'static str = "NftTypeAndRankAdded(uint256,string)";
806            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
807                35u8, 96u8, 238u8, 62u8, 119u8, 72u8, 84u8, 65u8, 207u8, 160u8, 126u8,
808                48u8, 232u8, 220u8, 91u8, 3u8, 31u8, 172u8, 56u8, 69u8, 86u8, 71u8,
809                200u8, 154u8, 118u8, 52u8, 52u8, 245u8, 135u8, 51u8, 252u8, 193u8,
810            ]);
811            const ANONYMOUS: bool = false;
812            #[allow(unused_variables)]
813            #[inline]
814            fn new(
815                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
816                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
817            ) -> Self {
818                Self {
819                    nftType: topics.1,
820                    nftRank: data.0,
821                }
822            }
823            #[inline]
824            fn check_signature(
825                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
826            ) -> alloy_sol_types::Result<()> {
827                if topics.0 != Self::SIGNATURE_HASH {
828                    return Err(
829                        alloy_sol_types::Error::invalid_event_signature_hash(
830                            Self::SIGNATURE,
831                            topics.0,
832                            Self::SIGNATURE_HASH,
833                        ),
834                    );
835                }
836                Ok(())
837            }
838            #[inline]
839            fn tokenize_body(&self) -> Self::DataToken<'_> {
840                (
841                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
842                        &self.nftRank,
843                    ),
844                )
845            }
846            #[inline]
847            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
848                (Self::SIGNATURE_HASH.into(), self.nftType.clone())
849            }
850            #[inline]
851            fn encode_topics_raw(
852                &self,
853                out: &mut [alloy_sol_types::abi::token::WordToken],
854            ) -> alloy_sol_types::Result<()> {
855                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
856                    return Err(alloy_sol_types::Error::Overrun);
857                }
858                out[0usize] = alloy_sol_types::abi::token::WordToken(
859                    Self::SIGNATURE_HASH,
860                );
861                out[1usize] = <alloy::sol_types::sol_data::Uint<
862                    256,
863                > as alloy_sol_types::EventTopic>::encode_topic(&self.nftType);
864                Ok(())
865            }
866        }
867        #[automatically_derived]
868        impl alloy_sol_types::private::IntoLogData for NftTypeAndRankAdded {
869            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
870                From::from(self)
871            }
872            fn into_log_data(self) -> alloy_sol_types::private::LogData {
873                From::from(&self)
874            }
875        }
876        #[automatically_derived]
877        impl From<&NftTypeAndRankAdded> for alloy_sol_types::private::LogData {
878            #[inline]
879            fn from(this: &NftTypeAndRankAdded) -> alloy_sol_types::private::LogData {
880                alloy_sol_types::SolEvent::encode_log_data(this)
881            }
882        }
883    };
884    #[derive(serde::Serialize, serde::Deserialize)]
885    #[derive(Default, Debug, PartialEq, Eq, Hash)]
886    /**Event with signature `NftTypeAndRankRemoved(uint256,string)` and selector `0xb1323e42d97b2b3d45f9d4641bf4b6b3f9d0d01e90832ae7b7413109b7a5d347`.
887```solidity
888event NftTypeAndRankRemoved(uint256 indexed nftType, string nftRank);
889```*/
890    #[allow(
891        non_camel_case_types,
892        non_snake_case,
893        clippy::pub_underscore_fields,
894        clippy::style
895    )]
896    #[derive(Clone)]
897    pub struct NftTypeAndRankRemoved {
898        #[allow(missing_docs)]
899        pub nftType: alloy::sol_types::private::primitives::aliases::U256,
900        #[allow(missing_docs)]
901        pub nftRank: alloy::sol_types::private::String,
902    }
903    #[allow(
904        non_camel_case_types,
905        non_snake_case,
906        clippy::pub_underscore_fields,
907        clippy::style
908    )]
909    const _: () = {
910        use alloy::sol_types as alloy_sol_types;
911        #[automatically_derived]
912        impl alloy_sol_types::SolEvent for NftTypeAndRankRemoved {
913            type DataTuple<'a> = (alloy::sol_types::sol_data::String,);
914            type DataToken<'a> = <Self::DataTuple<
915                'a,
916            > as alloy_sol_types::SolType>::Token<'a>;
917            type TopicList = (
918                alloy_sol_types::sol_data::FixedBytes<32>,
919                alloy::sol_types::sol_data::Uint<256>,
920            );
921            const SIGNATURE: &'static str = "NftTypeAndRankRemoved(uint256,string)";
922            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
923                177u8, 50u8, 62u8, 66u8, 217u8, 123u8, 43u8, 61u8, 69u8, 249u8, 212u8,
924                100u8, 27u8, 244u8, 182u8, 179u8, 249u8, 208u8, 208u8, 30u8, 144u8,
925                131u8, 42u8, 231u8, 183u8, 65u8, 49u8, 9u8, 183u8, 165u8, 211u8, 71u8,
926            ]);
927            const ANONYMOUS: bool = false;
928            #[allow(unused_variables)]
929            #[inline]
930            fn new(
931                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
932                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
933            ) -> Self {
934                Self {
935                    nftType: topics.1,
936                    nftRank: data.0,
937                }
938            }
939            #[inline]
940            fn check_signature(
941                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
942            ) -> alloy_sol_types::Result<()> {
943                if topics.0 != Self::SIGNATURE_HASH {
944                    return Err(
945                        alloy_sol_types::Error::invalid_event_signature_hash(
946                            Self::SIGNATURE,
947                            topics.0,
948                            Self::SIGNATURE_HASH,
949                        ),
950                    );
951                }
952                Ok(())
953            }
954            #[inline]
955            fn tokenize_body(&self) -> Self::DataToken<'_> {
956                (
957                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
958                        &self.nftRank,
959                    ),
960                )
961            }
962            #[inline]
963            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
964                (Self::SIGNATURE_HASH.into(), self.nftType.clone())
965            }
966            #[inline]
967            fn encode_topics_raw(
968                &self,
969                out: &mut [alloy_sol_types::abi::token::WordToken],
970            ) -> alloy_sol_types::Result<()> {
971                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
972                    return Err(alloy_sol_types::Error::Overrun);
973                }
974                out[0usize] = alloy_sol_types::abi::token::WordToken(
975                    Self::SIGNATURE_HASH,
976                );
977                out[1usize] = <alloy::sol_types::sol_data::Uint<
978                    256,
979                > as alloy_sol_types::EventTopic>::encode_topic(&self.nftType);
980                Ok(())
981            }
982        }
983        #[automatically_derived]
984        impl alloy_sol_types::private::IntoLogData for NftTypeAndRankRemoved {
985            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
986                From::from(self)
987            }
988            fn into_log_data(self) -> alloy_sol_types::private::LogData {
989                From::from(&self)
990            }
991        }
992        #[automatically_derived]
993        impl From<&NftTypeAndRankRemoved> for alloy_sol_types::private::LogData {
994            #[inline]
995            fn from(this: &NftTypeAndRankRemoved) -> alloy_sol_types::private::LogData {
996                alloy_sol_types::SolEvent::encode_log_data(this)
997            }
998        }
999    };
1000    #[derive(serde::Serialize, serde::Deserialize)]
1001    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1002    /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`.
1003```solidity
1004event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
1005```*/
1006    #[allow(
1007        non_camel_case_types,
1008        non_snake_case,
1009        clippy::pub_underscore_fields,
1010        clippy::style
1011    )]
1012    #[derive(Clone)]
1013    pub struct OwnershipTransferred {
1014        #[allow(missing_docs)]
1015        pub previousOwner: alloy::sol_types::private::Address,
1016        #[allow(missing_docs)]
1017        pub newOwner: alloy::sol_types::private::Address,
1018    }
1019    #[allow(
1020        non_camel_case_types,
1021        non_snake_case,
1022        clippy::pub_underscore_fields,
1023        clippy::style
1024    )]
1025    const _: () = {
1026        use alloy::sol_types as alloy_sol_types;
1027        #[automatically_derived]
1028        impl alloy_sol_types::SolEvent for OwnershipTransferred {
1029            type DataTuple<'a> = ();
1030            type DataToken<'a> = <Self::DataTuple<
1031                'a,
1032            > as alloy_sol_types::SolType>::Token<'a>;
1033            type TopicList = (
1034                alloy_sol_types::sol_data::FixedBytes<32>,
1035                alloy::sol_types::sol_data::Address,
1036                alloy::sol_types::sol_data::Address,
1037            );
1038            const SIGNATURE: &'static str = "OwnershipTransferred(address,address)";
1039            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1040                139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8,
1041                31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8,
1042                218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8,
1043            ]);
1044            const ANONYMOUS: bool = false;
1045            #[allow(unused_variables)]
1046            #[inline]
1047            fn new(
1048                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1049                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1050            ) -> Self {
1051                Self {
1052                    previousOwner: topics.1,
1053                    newOwner: topics.2,
1054                }
1055            }
1056            #[inline]
1057            fn check_signature(
1058                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1059            ) -> alloy_sol_types::Result<()> {
1060                if topics.0 != Self::SIGNATURE_HASH {
1061                    return Err(
1062                        alloy_sol_types::Error::invalid_event_signature_hash(
1063                            Self::SIGNATURE,
1064                            topics.0,
1065                            Self::SIGNATURE_HASH,
1066                        ),
1067                    );
1068                }
1069                Ok(())
1070            }
1071            #[inline]
1072            fn tokenize_body(&self) -> Self::DataToken<'_> {
1073                ()
1074            }
1075            #[inline]
1076            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1077                (
1078                    Self::SIGNATURE_HASH.into(),
1079                    self.previousOwner.clone(),
1080                    self.newOwner.clone(),
1081                )
1082            }
1083            #[inline]
1084            fn encode_topics_raw(
1085                &self,
1086                out: &mut [alloy_sol_types::abi::token::WordToken],
1087            ) -> alloy_sol_types::Result<()> {
1088                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1089                    return Err(alloy_sol_types::Error::Overrun);
1090                }
1091                out[0usize] = alloy_sol_types::abi::token::WordToken(
1092                    Self::SIGNATURE_HASH,
1093                );
1094                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1095                    &self.previousOwner,
1096                );
1097                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1098                    &self.newOwner,
1099                );
1100                Ok(())
1101            }
1102        }
1103        #[automatically_derived]
1104        impl alloy_sol_types::private::IntoLogData for OwnershipTransferred {
1105            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1106                From::from(self)
1107            }
1108            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1109                From::from(&self)
1110            }
1111        }
1112        #[automatically_derived]
1113        impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData {
1114            #[inline]
1115            fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData {
1116                alloy_sol_types::SolEvent::encode_log_data(this)
1117            }
1118        }
1119    };
1120    #[derive(serde::Serialize, serde::Deserialize)]
1121    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1122    /**Event with signature `SpecialNftTypeAndRankAdded(uint256,string,uint256)` and selector `0xe43bf5f5f8a1211930e5726ba0abceacb1748f97b2966db30a818ba10961cbcc`.
1123```solidity
1124event SpecialNftTypeAndRankAdded(uint256 indexed nftType, string nftRank, uint256 indexed maxRegistration);
1125```*/
1126    #[allow(
1127        non_camel_case_types,
1128        non_snake_case,
1129        clippy::pub_underscore_fields,
1130        clippy::style
1131    )]
1132    #[derive(Clone)]
1133    pub struct SpecialNftTypeAndRankAdded {
1134        #[allow(missing_docs)]
1135        pub nftType: alloy::sol_types::private::primitives::aliases::U256,
1136        #[allow(missing_docs)]
1137        pub nftRank: alloy::sol_types::private::String,
1138        #[allow(missing_docs)]
1139        pub maxRegistration: alloy::sol_types::private::primitives::aliases::U256,
1140    }
1141    #[allow(
1142        non_camel_case_types,
1143        non_snake_case,
1144        clippy::pub_underscore_fields,
1145        clippy::style
1146    )]
1147    const _: () = {
1148        use alloy::sol_types as alloy_sol_types;
1149        #[automatically_derived]
1150        impl alloy_sol_types::SolEvent for SpecialNftTypeAndRankAdded {
1151            type DataTuple<'a> = (alloy::sol_types::sol_data::String,);
1152            type DataToken<'a> = <Self::DataTuple<
1153                'a,
1154            > as alloy_sol_types::SolType>::Token<'a>;
1155            type TopicList = (
1156                alloy_sol_types::sol_data::FixedBytes<32>,
1157                alloy::sol_types::sol_data::Uint<256>,
1158                alloy::sol_types::sol_data::Uint<256>,
1159            );
1160            const SIGNATURE: &'static str = "SpecialNftTypeAndRankAdded(uint256,string,uint256)";
1161            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1162                228u8, 59u8, 245u8, 245u8, 248u8, 161u8, 33u8, 25u8, 48u8, 229u8, 114u8,
1163                107u8, 160u8, 171u8, 206u8, 172u8, 177u8, 116u8, 143u8, 151u8, 178u8,
1164                150u8, 109u8, 179u8, 10u8, 129u8, 139u8, 161u8, 9u8, 97u8, 203u8, 204u8,
1165            ]);
1166            const ANONYMOUS: bool = false;
1167            #[allow(unused_variables)]
1168            #[inline]
1169            fn new(
1170                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1171                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1172            ) -> Self {
1173                Self {
1174                    nftType: topics.1,
1175                    nftRank: data.0,
1176                    maxRegistration: topics.2,
1177                }
1178            }
1179            #[inline]
1180            fn check_signature(
1181                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1182            ) -> alloy_sol_types::Result<()> {
1183                if topics.0 != Self::SIGNATURE_HASH {
1184                    return Err(
1185                        alloy_sol_types::Error::invalid_event_signature_hash(
1186                            Self::SIGNATURE,
1187                            topics.0,
1188                            Self::SIGNATURE_HASH,
1189                        ),
1190                    );
1191                }
1192                Ok(())
1193            }
1194            #[inline]
1195            fn tokenize_body(&self) -> Self::DataToken<'_> {
1196                (
1197                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
1198                        &self.nftRank,
1199                    ),
1200                )
1201            }
1202            #[inline]
1203            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1204                (
1205                    Self::SIGNATURE_HASH.into(),
1206                    self.nftType.clone(),
1207                    self.maxRegistration.clone(),
1208                )
1209            }
1210            #[inline]
1211            fn encode_topics_raw(
1212                &self,
1213                out: &mut [alloy_sol_types::abi::token::WordToken],
1214            ) -> alloy_sol_types::Result<()> {
1215                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1216                    return Err(alloy_sol_types::Error::Overrun);
1217                }
1218                out[0usize] = alloy_sol_types::abi::token::WordToken(
1219                    Self::SIGNATURE_HASH,
1220                );
1221                out[1usize] = <alloy::sol_types::sol_data::Uint<
1222                    256,
1223                > as alloy_sol_types::EventTopic>::encode_topic(&self.nftType);
1224                out[2usize] = <alloy::sol_types::sol_data::Uint<
1225                    256,
1226                > as alloy_sol_types::EventTopic>::encode_topic(&self.maxRegistration);
1227                Ok(())
1228            }
1229        }
1230        #[automatically_derived]
1231        impl alloy_sol_types::private::IntoLogData for SpecialNftTypeAndRankAdded {
1232            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1233                From::from(self)
1234            }
1235            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1236                From::from(&self)
1237            }
1238        }
1239        #[automatically_derived]
1240        impl From<&SpecialNftTypeAndRankAdded> for alloy_sol_types::private::LogData {
1241            #[inline]
1242            fn from(
1243                this: &SpecialNftTypeAndRankAdded,
1244            ) -> alloy_sol_types::private::LogData {
1245                alloy_sol_types::SolEvent::encode_log_data(this)
1246            }
1247        }
1248    };
1249    #[derive(serde::Serialize, serde::Deserialize)]
1250    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1251    /**Event with signature `SpecialNftTypeAndRankRemoved(uint256,string)` and selector `0xdb75199103504bd1d3653de758d4295bf00d4587e1d53dfc114464cc47ed97b7`.
1252```solidity
1253event SpecialNftTypeAndRankRemoved(uint256 indexed nftType, string nftRank);
1254```*/
1255    #[allow(
1256        non_camel_case_types,
1257        non_snake_case,
1258        clippy::pub_underscore_fields,
1259        clippy::style
1260    )]
1261    #[derive(Clone)]
1262    pub struct SpecialNftTypeAndRankRemoved {
1263        #[allow(missing_docs)]
1264        pub nftType: alloy::sol_types::private::primitives::aliases::U256,
1265        #[allow(missing_docs)]
1266        pub nftRank: alloy::sol_types::private::String,
1267    }
1268    #[allow(
1269        non_camel_case_types,
1270        non_snake_case,
1271        clippy::pub_underscore_fields,
1272        clippy::style
1273    )]
1274    const _: () = {
1275        use alloy::sol_types as alloy_sol_types;
1276        #[automatically_derived]
1277        impl alloy_sol_types::SolEvent for SpecialNftTypeAndRankRemoved {
1278            type DataTuple<'a> = (alloy::sol_types::sol_data::String,);
1279            type DataToken<'a> = <Self::DataTuple<
1280                'a,
1281            > as alloy_sol_types::SolType>::Token<'a>;
1282            type TopicList = (
1283                alloy_sol_types::sol_data::FixedBytes<32>,
1284                alloy::sol_types::sol_data::Uint<256>,
1285            );
1286            const SIGNATURE: &'static str = "SpecialNftTypeAndRankRemoved(uint256,string)";
1287            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1288                219u8, 117u8, 25u8, 145u8, 3u8, 80u8, 75u8, 209u8, 211u8, 101u8, 61u8,
1289                231u8, 88u8, 212u8, 41u8, 91u8, 240u8, 13u8, 69u8, 135u8, 225u8, 213u8,
1290                61u8, 252u8, 17u8, 68u8, 100u8, 204u8, 71u8, 237u8, 151u8, 183u8,
1291            ]);
1292            const ANONYMOUS: bool = false;
1293            #[allow(unused_variables)]
1294            #[inline]
1295            fn new(
1296                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1297                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1298            ) -> Self {
1299                Self {
1300                    nftType: topics.1,
1301                    nftRank: data.0,
1302                }
1303            }
1304            #[inline]
1305            fn check_signature(
1306                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1307            ) -> alloy_sol_types::Result<()> {
1308                if topics.0 != Self::SIGNATURE_HASH {
1309                    return Err(
1310                        alloy_sol_types::Error::invalid_event_signature_hash(
1311                            Self::SIGNATURE,
1312                            topics.0,
1313                            Self::SIGNATURE_HASH,
1314                        ),
1315                    );
1316                }
1317                Ok(())
1318            }
1319            #[inline]
1320            fn tokenize_body(&self) -> Self::DataToken<'_> {
1321                (
1322                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
1323                        &self.nftRank,
1324                    ),
1325                )
1326            }
1327            #[inline]
1328            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1329                (Self::SIGNATURE_HASH.into(), self.nftType.clone())
1330            }
1331            #[inline]
1332            fn encode_topics_raw(
1333                &self,
1334                out: &mut [alloy_sol_types::abi::token::WordToken],
1335            ) -> alloy_sol_types::Result<()> {
1336                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1337                    return Err(alloy_sol_types::Error::Overrun);
1338                }
1339                out[0usize] = alloy_sol_types::abi::token::WordToken(
1340                    Self::SIGNATURE_HASH,
1341                );
1342                out[1usize] = <alloy::sol_types::sol_data::Uint<
1343                    256,
1344                > as alloy_sol_types::EventTopic>::encode_topic(&self.nftType);
1345                Ok(())
1346            }
1347        }
1348        #[automatically_derived]
1349        impl alloy_sol_types::private::IntoLogData for SpecialNftTypeAndRankRemoved {
1350            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1351                From::from(self)
1352            }
1353            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1354                From::from(&self)
1355            }
1356        }
1357        #[automatically_derived]
1358        impl From<&SpecialNftTypeAndRankRemoved> for alloy_sol_types::private::LogData {
1359            #[inline]
1360            fn from(
1361                this: &SpecialNftTypeAndRankRemoved,
1362            ) -> alloy_sol_types::private::LogData {
1363                alloy_sol_types::SolEvent::encode_log_data(this)
1364            }
1365        }
1366    };
1367    #[derive(serde::Serialize, serde::Deserialize)]
1368    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1369    /**Event with signature `StakeContractUpdated(address)` and selector `0x573bbfa679af6fdcdbd9cf191c5ef3e526599ac2bf75e9177d47adb8530b9c69`.
1370```solidity
1371event StakeContractUpdated(address indexed stakeContract);
1372```*/
1373    #[allow(
1374        non_camel_case_types,
1375        non_snake_case,
1376        clippy::pub_underscore_fields,
1377        clippy::style
1378    )]
1379    #[derive(Clone)]
1380    pub struct StakeContractUpdated {
1381        #[allow(missing_docs)]
1382        pub stakeContract: alloy::sol_types::private::Address,
1383    }
1384    #[allow(
1385        non_camel_case_types,
1386        non_snake_case,
1387        clippy::pub_underscore_fields,
1388        clippy::style
1389    )]
1390    const _: () = {
1391        use alloy::sol_types as alloy_sol_types;
1392        #[automatically_derived]
1393        impl alloy_sol_types::SolEvent for StakeContractUpdated {
1394            type DataTuple<'a> = ();
1395            type DataToken<'a> = <Self::DataTuple<
1396                'a,
1397            > as alloy_sol_types::SolType>::Token<'a>;
1398            type TopicList = (
1399                alloy_sol_types::sol_data::FixedBytes<32>,
1400                alloy::sol_types::sol_data::Address,
1401            );
1402            const SIGNATURE: &'static str = "StakeContractUpdated(address)";
1403            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1404                87u8, 59u8, 191u8, 166u8, 121u8, 175u8, 111u8, 220u8, 219u8, 217u8,
1405                207u8, 25u8, 28u8, 94u8, 243u8, 229u8, 38u8, 89u8, 154u8, 194u8, 191u8,
1406                117u8, 233u8, 23u8, 125u8, 71u8, 173u8, 184u8, 83u8, 11u8, 156u8, 105u8,
1407            ]);
1408            const ANONYMOUS: bool = false;
1409            #[allow(unused_variables)]
1410            #[inline]
1411            fn new(
1412                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1413                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1414            ) -> Self {
1415                Self { stakeContract: topics.1 }
1416            }
1417            #[inline]
1418            fn check_signature(
1419                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1420            ) -> alloy_sol_types::Result<()> {
1421                if topics.0 != Self::SIGNATURE_HASH {
1422                    return Err(
1423                        alloy_sol_types::Error::invalid_event_signature_hash(
1424                            Self::SIGNATURE,
1425                            topics.0,
1426                            Self::SIGNATURE_HASH,
1427                        ),
1428                    );
1429                }
1430                Ok(())
1431            }
1432            #[inline]
1433            fn tokenize_body(&self) -> Self::DataToken<'_> {
1434                ()
1435            }
1436            #[inline]
1437            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1438                (Self::SIGNATURE_HASH.into(), self.stakeContract.clone())
1439            }
1440            #[inline]
1441            fn encode_topics_raw(
1442                &self,
1443                out: &mut [alloy_sol_types::abi::token::WordToken],
1444            ) -> alloy_sol_types::Result<()> {
1445                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1446                    return Err(alloy_sol_types::Error::Overrun);
1447                }
1448                out[0usize] = alloy_sol_types::abi::token::WordToken(
1449                    Self::SIGNATURE_HASH,
1450                );
1451                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1452                    &self.stakeContract,
1453                );
1454                Ok(())
1455            }
1456        }
1457        #[automatically_derived]
1458        impl alloy_sol_types::private::IntoLogData for StakeContractUpdated {
1459            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1460                From::from(self)
1461            }
1462            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1463                From::from(&self)
1464            }
1465        }
1466        #[automatically_derived]
1467        impl From<&StakeContractUpdated> for alloy_sol_types::private::LogData {
1468            #[inline]
1469            fn from(this: &StakeContractUpdated) -> alloy_sol_types::private::LogData {
1470                alloy_sol_types::SolEvent::encode_log_data(this)
1471            }
1472        }
1473    };
1474    #[derive(serde::Serialize, serde::Deserialize)]
1475    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1476    /**Event with signature `ThresholdUpdated(uint256)` and selector `0xadfa8ecb21b6962ebcd0adbd9ab985b7b4c5b5eb3b0dead683171565c7bfe171`.
1477```solidity
1478event ThresholdUpdated(uint256 indexed threshold);
1479```*/
1480    #[allow(
1481        non_camel_case_types,
1482        non_snake_case,
1483        clippy::pub_underscore_fields,
1484        clippy::style
1485    )]
1486    #[derive(Clone)]
1487    pub struct ThresholdUpdated {
1488        #[allow(missing_docs)]
1489        pub threshold: alloy::sol_types::private::primitives::aliases::U256,
1490    }
1491    #[allow(
1492        non_camel_case_types,
1493        non_snake_case,
1494        clippy::pub_underscore_fields,
1495        clippy::style
1496    )]
1497    const _: () = {
1498        use alloy::sol_types as alloy_sol_types;
1499        #[automatically_derived]
1500        impl alloy_sol_types::SolEvent for ThresholdUpdated {
1501            type DataTuple<'a> = ();
1502            type DataToken<'a> = <Self::DataTuple<
1503                'a,
1504            > as alloy_sol_types::SolType>::Token<'a>;
1505            type TopicList = (
1506                alloy_sol_types::sol_data::FixedBytes<32>,
1507                alloy::sol_types::sol_data::Uint<256>,
1508            );
1509            const SIGNATURE: &'static str = "ThresholdUpdated(uint256)";
1510            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1511                173u8, 250u8, 142u8, 203u8, 33u8, 182u8, 150u8, 46u8, 188u8, 208u8,
1512                173u8, 189u8, 154u8, 185u8, 133u8, 183u8, 180u8, 197u8, 181u8, 235u8,
1513                59u8, 13u8, 234u8, 214u8, 131u8, 23u8, 21u8, 101u8, 199u8, 191u8, 225u8,
1514                113u8,
1515            ]);
1516            const ANONYMOUS: bool = false;
1517            #[allow(unused_variables)]
1518            #[inline]
1519            fn new(
1520                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1521                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1522            ) -> Self {
1523                Self { threshold: topics.1 }
1524            }
1525            #[inline]
1526            fn check_signature(
1527                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1528            ) -> alloy_sol_types::Result<()> {
1529                if topics.0 != Self::SIGNATURE_HASH {
1530                    return Err(
1531                        alloy_sol_types::Error::invalid_event_signature_hash(
1532                            Self::SIGNATURE,
1533                            topics.0,
1534                            Self::SIGNATURE_HASH,
1535                        ),
1536                    );
1537                }
1538                Ok(())
1539            }
1540            #[inline]
1541            fn tokenize_body(&self) -> Self::DataToken<'_> {
1542                ()
1543            }
1544            #[inline]
1545            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1546                (Self::SIGNATURE_HASH.into(), self.threshold.clone())
1547            }
1548            #[inline]
1549            fn encode_topics_raw(
1550                &self,
1551                out: &mut [alloy_sol_types::abi::token::WordToken],
1552            ) -> alloy_sol_types::Result<()> {
1553                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1554                    return Err(alloy_sol_types::Error::Overrun);
1555                }
1556                out[0usize] = alloy_sol_types::abi::token::WordToken(
1557                    Self::SIGNATURE_HASH,
1558                );
1559                out[1usize] = <alloy::sol_types::sol_data::Uint<
1560                    256,
1561                > as alloy_sol_types::EventTopic>::encode_topic(&self.threshold);
1562                Ok(())
1563            }
1564        }
1565        #[automatically_derived]
1566        impl alloy_sol_types::private::IntoLogData for ThresholdUpdated {
1567            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1568                From::from(self)
1569            }
1570            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1571                From::from(&self)
1572            }
1573        }
1574        #[automatically_derived]
1575        impl From<&ThresholdUpdated> for alloy_sol_types::private::LogData {
1576            #[inline]
1577            fn from(this: &ThresholdUpdated) -> alloy_sol_types::private::LogData {
1578                alloy_sol_types::SolEvent::encode_log_data(this)
1579            }
1580        }
1581    };
1582    /**Constructor`.
1583```solidity
1584constructor(address _stakeContract, address _newOwner, uint256 _minStake);
1585```*/
1586    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1587    #[derive(Clone)]
1588    pub struct constructorCall {
1589        #[allow(missing_docs)]
1590        pub _stakeContract: alloy::sol_types::private::Address,
1591        #[allow(missing_docs)]
1592        pub _newOwner: alloy::sol_types::private::Address,
1593        #[allow(missing_docs)]
1594        pub _minStake: alloy::sol_types::private::primitives::aliases::U256,
1595    }
1596    const _: () = {
1597        use alloy::sol_types as alloy_sol_types;
1598        {
1599            #[doc(hidden)]
1600            type UnderlyingSolTuple<'a> = (
1601                alloy::sol_types::sol_data::Address,
1602                alloy::sol_types::sol_data::Address,
1603                alloy::sol_types::sol_data::Uint<256>,
1604            );
1605            #[doc(hidden)]
1606            type UnderlyingRustTuple<'a> = (
1607                alloy::sol_types::private::Address,
1608                alloy::sol_types::private::Address,
1609                alloy::sol_types::private::primitives::aliases::U256,
1610            );
1611            #[cfg(test)]
1612            #[allow(dead_code, unreachable_patterns)]
1613            fn _type_assertion(
1614                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1615            ) {
1616                match _t {
1617                    alloy_sol_types::private::AssertTypeEq::<
1618                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1619                    >(_) => {}
1620                }
1621            }
1622            #[automatically_derived]
1623            #[doc(hidden)]
1624            impl ::core::convert::From<constructorCall> for UnderlyingRustTuple<'_> {
1625                fn from(value: constructorCall) -> Self {
1626                    (value._stakeContract, value._newOwner, value._minStake)
1627                }
1628            }
1629            #[automatically_derived]
1630            #[doc(hidden)]
1631            impl ::core::convert::From<UnderlyingRustTuple<'_>> for constructorCall {
1632                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1633                    Self {
1634                        _stakeContract: tuple.0,
1635                        _newOwner: tuple.1,
1636                        _minStake: tuple.2,
1637                    }
1638                }
1639            }
1640        }
1641        #[automatically_derived]
1642        impl alloy_sol_types::SolConstructor for constructorCall {
1643            type Parameters<'a> = (
1644                alloy::sol_types::sol_data::Address,
1645                alloy::sol_types::sol_data::Address,
1646                alloy::sol_types::sol_data::Uint<256>,
1647            );
1648            type Token<'a> = <Self::Parameters<
1649                'a,
1650            > as alloy_sol_types::SolType>::Token<'a>;
1651            #[inline]
1652            fn new<'a>(
1653                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1654            ) -> Self {
1655                tuple.into()
1656            }
1657            #[inline]
1658            fn tokenize(&self) -> Self::Token<'_> {
1659                (
1660                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
1661                        &self._stakeContract,
1662                    ),
1663                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
1664                        &self._newOwner,
1665                    ),
1666                    <alloy::sol_types::sol_data::Uint<
1667                        256,
1668                    > as alloy_sol_types::SolType>::tokenize(&self._minStake),
1669                )
1670            }
1671        }
1672    };
1673    #[derive(serde::Serialize, serde::Deserialize)]
1674    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1675    /**Function with signature `canOperateFor(address,address)` and selector `0xd85ad044`.
1676```solidity
1677function canOperateFor(address, address) external pure returns (bool eligiblity);
1678```*/
1679    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1680    #[derive(Clone)]
1681    pub struct canOperateForCall {
1682        #[allow(missing_docs)]
1683        pub _0: alloy::sol_types::private::Address,
1684        #[allow(missing_docs)]
1685        pub _1: alloy::sol_types::private::Address,
1686    }
1687    #[derive(serde::Serialize, serde::Deserialize)]
1688    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1689    ///Container type for the return parameters of the [`canOperateFor(address,address)`](canOperateForCall) function.
1690    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1691    #[derive(Clone)]
1692    pub struct canOperateForReturn {
1693        #[allow(missing_docs)]
1694        pub eligiblity: bool,
1695    }
1696    #[allow(
1697        non_camel_case_types,
1698        non_snake_case,
1699        clippy::pub_underscore_fields,
1700        clippy::style
1701    )]
1702    const _: () = {
1703        use alloy::sol_types as alloy_sol_types;
1704        {
1705            #[doc(hidden)]
1706            type UnderlyingSolTuple<'a> = (
1707                alloy::sol_types::sol_data::Address,
1708                alloy::sol_types::sol_data::Address,
1709            );
1710            #[doc(hidden)]
1711            type UnderlyingRustTuple<'a> = (
1712                alloy::sol_types::private::Address,
1713                alloy::sol_types::private::Address,
1714            );
1715            #[cfg(test)]
1716            #[allow(dead_code, unreachable_patterns)]
1717            fn _type_assertion(
1718                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1719            ) {
1720                match _t {
1721                    alloy_sol_types::private::AssertTypeEq::<
1722                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1723                    >(_) => {}
1724                }
1725            }
1726            #[automatically_derived]
1727            #[doc(hidden)]
1728            impl ::core::convert::From<canOperateForCall> for UnderlyingRustTuple<'_> {
1729                fn from(value: canOperateForCall) -> Self {
1730                    (value._0, value._1)
1731                }
1732            }
1733            #[automatically_derived]
1734            #[doc(hidden)]
1735            impl ::core::convert::From<UnderlyingRustTuple<'_>> for canOperateForCall {
1736                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1737                    Self { _0: tuple.0, _1: tuple.1 }
1738                }
1739            }
1740        }
1741        {
1742            #[doc(hidden)]
1743            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
1744            #[doc(hidden)]
1745            type UnderlyingRustTuple<'a> = (bool,);
1746            #[cfg(test)]
1747            #[allow(dead_code, unreachable_patterns)]
1748            fn _type_assertion(
1749                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1750            ) {
1751                match _t {
1752                    alloy_sol_types::private::AssertTypeEq::<
1753                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1754                    >(_) => {}
1755                }
1756            }
1757            #[automatically_derived]
1758            #[doc(hidden)]
1759            impl ::core::convert::From<canOperateForReturn> for UnderlyingRustTuple<'_> {
1760                fn from(value: canOperateForReturn) -> Self {
1761                    (value.eligiblity,)
1762                }
1763            }
1764            #[automatically_derived]
1765            #[doc(hidden)]
1766            impl ::core::convert::From<UnderlyingRustTuple<'_>> for canOperateForReturn {
1767                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1768                    Self { eligiblity: tuple.0 }
1769                }
1770            }
1771        }
1772        #[automatically_derived]
1773        impl alloy_sol_types::SolCall for canOperateForCall {
1774            type Parameters<'a> = (
1775                alloy::sol_types::sol_data::Address,
1776                alloy::sol_types::sol_data::Address,
1777            );
1778            type Token<'a> = <Self::Parameters<
1779                'a,
1780            > as alloy_sol_types::SolType>::Token<'a>;
1781            type Return = bool;
1782            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
1783            type ReturnToken<'a> = <Self::ReturnTuple<
1784                'a,
1785            > as alloy_sol_types::SolType>::Token<'a>;
1786            const SIGNATURE: &'static str = "canOperateFor(address,address)";
1787            const SELECTOR: [u8; 4] = [216u8, 90u8, 208u8, 68u8];
1788            #[inline]
1789            fn new<'a>(
1790                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1791            ) -> Self {
1792                tuple.into()
1793            }
1794            #[inline]
1795            fn tokenize(&self) -> Self::Token<'_> {
1796                (
1797                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
1798                        &self._0,
1799                    ),
1800                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
1801                        &self._1,
1802                    ),
1803                )
1804            }
1805            #[inline]
1806            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1807                (
1808                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
1809                        ret,
1810                    ),
1811                )
1812            }
1813            #[inline]
1814            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1815                <Self::ReturnTuple<
1816                    '_,
1817                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1818                    .map(|r| {
1819                        let r: canOperateForReturn = r.into();
1820                        r.eligiblity
1821                    })
1822            }
1823            #[inline]
1824            fn abi_decode_returns_validate(
1825                data: &[u8],
1826            ) -> alloy_sol_types::Result<Self::Return> {
1827                <Self::ReturnTuple<
1828                    '_,
1829                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
1830                    .map(|r| {
1831                        let r: canOperateForReturn = r.into();
1832                        r.eligiblity
1833                    })
1834            }
1835        }
1836    };
1837    #[derive(serde::Serialize, serde::Deserialize)]
1838    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1839    /**Function with signature `eligibleNftTypeAndRank(uint256)` and selector `0xde626c0e`.
1840```solidity
1841function eligibleNftTypeAndRank(uint256) external view returns (uint256 nftType, string memory nftRank);
1842```*/
1843    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1844    #[derive(Clone)]
1845    pub struct eligibleNftTypeAndRankCall(
1846        pub alloy::sol_types::private::primitives::aliases::U256,
1847    );
1848    #[derive(serde::Serialize, serde::Deserialize)]
1849    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1850    ///Container type for the return parameters of the [`eligibleNftTypeAndRank(uint256)`](eligibleNftTypeAndRankCall) function.
1851    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1852    #[derive(Clone)]
1853    pub struct eligibleNftTypeAndRankReturn {
1854        #[allow(missing_docs)]
1855        pub nftType: alloy::sol_types::private::primitives::aliases::U256,
1856        #[allow(missing_docs)]
1857        pub nftRank: alloy::sol_types::private::String,
1858    }
1859    #[allow(
1860        non_camel_case_types,
1861        non_snake_case,
1862        clippy::pub_underscore_fields,
1863        clippy::style
1864    )]
1865    const _: () = {
1866        use alloy::sol_types as alloy_sol_types;
1867        {
1868            #[doc(hidden)]
1869            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
1870            #[doc(hidden)]
1871            type UnderlyingRustTuple<'a> = (
1872                alloy::sol_types::private::primitives::aliases::U256,
1873            );
1874            #[cfg(test)]
1875            #[allow(dead_code, unreachable_patterns)]
1876            fn _type_assertion(
1877                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1878            ) {
1879                match _t {
1880                    alloy_sol_types::private::AssertTypeEq::<
1881                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1882                    >(_) => {}
1883                }
1884            }
1885            #[automatically_derived]
1886            #[doc(hidden)]
1887            impl ::core::convert::From<eligibleNftTypeAndRankCall>
1888            for UnderlyingRustTuple<'_> {
1889                fn from(value: eligibleNftTypeAndRankCall) -> Self {
1890                    (value.0,)
1891                }
1892            }
1893            #[automatically_derived]
1894            #[doc(hidden)]
1895            impl ::core::convert::From<UnderlyingRustTuple<'_>>
1896            for eligibleNftTypeAndRankCall {
1897                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1898                    Self(tuple.0)
1899                }
1900            }
1901        }
1902        {
1903            #[doc(hidden)]
1904            type UnderlyingSolTuple<'a> = (
1905                alloy::sol_types::sol_data::Uint<256>,
1906                alloy::sol_types::sol_data::String,
1907            );
1908            #[doc(hidden)]
1909            type UnderlyingRustTuple<'a> = (
1910                alloy::sol_types::private::primitives::aliases::U256,
1911                alloy::sol_types::private::String,
1912            );
1913            #[cfg(test)]
1914            #[allow(dead_code, unreachable_patterns)]
1915            fn _type_assertion(
1916                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1917            ) {
1918                match _t {
1919                    alloy_sol_types::private::AssertTypeEq::<
1920                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1921                    >(_) => {}
1922                }
1923            }
1924            #[automatically_derived]
1925            #[doc(hidden)]
1926            impl ::core::convert::From<eligibleNftTypeAndRankReturn>
1927            for UnderlyingRustTuple<'_> {
1928                fn from(value: eligibleNftTypeAndRankReturn) -> Self {
1929                    (value.nftType, value.nftRank)
1930                }
1931            }
1932            #[automatically_derived]
1933            #[doc(hidden)]
1934            impl ::core::convert::From<UnderlyingRustTuple<'_>>
1935            for eligibleNftTypeAndRankReturn {
1936                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1937                    Self {
1938                        nftType: tuple.0,
1939                        nftRank: tuple.1,
1940                    }
1941                }
1942            }
1943        }
1944        impl eligibleNftTypeAndRankReturn {
1945            fn _tokenize(
1946                &self,
1947            ) -> <eligibleNftTypeAndRankCall as alloy_sol_types::SolCall>::ReturnToken<
1948                '_,
1949            > {
1950                (
1951                    <alloy::sol_types::sol_data::Uint<
1952                        256,
1953                    > as alloy_sol_types::SolType>::tokenize(&self.nftType),
1954                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
1955                        &self.nftRank,
1956                    ),
1957                )
1958            }
1959        }
1960        #[automatically_derived]
1961        impl alloy_sol_types::SolCall for eligibleNftTypeAndRankCall {
1962            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
1963            type Token<'a> = <Self::Parameters<
1964                'a,
1965            > as alloy_sol_types::SolType>::Token<'a>;
1966            type Return = eligibleNftTypeAndRankReturn;
1967            type ReturnTuple<'a> = (
1968                alloy::sol_types::sol_data::Uint<256>,
1969                alloy::sol_types::sol_data::String,
1970            );
1971            type ReturnToken<'a> = <Self::ReturnTuple<
1972                'a,
1973            > as alloy_sol_types::SolType>::Token<'a>;
1974            const SIGNATURE: &'static str = "eligibleNftTypeAndRank(uint256)";
1975            const SELECTOR: [u8; 4] = [222u8, 98u8, 108u8, 14u8];
1976            #[inline]
1977            fn new<'a>(
1978                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1979            ) -> Self {
1980                tuple.into()
1981            }
1982            #[inline]
1983            fn tokenize(&self) -> Self::Token<'_> {
1984                (
1985                    <alloy::sol_types::sol_data::Uint<
1986                        256,
1987                    > as alloy_sol_types::SolType>::tokenize(&self.0),
1988                )
1989            }
1990            #[inline]
1991            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
1992                eligibleNftTypeAndRankReturn::_tokenize(ret)
1993            }
1994            #[inline]
1995            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
1996                <Self::ReturnTuple<
1997                    '_,
1998                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
1999                    .map(Into::into)
2000            }
2001            #[inline]
2002            fn abi_decode_returns_validate(
2003                data: &[u8],
2004            ) -> alloy_sol_types::Result<Self::Return> {
2005                <Self::ReturnTuple<
2006                    '_,
2007                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2008                    .map(Into::into)
2009            }
2010        }
2011    };
2012    #[derive(serde::Serialize, serde::Deserialize)]
2013    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2014    /**Function with signature `maxAllowedRegistrations(address)` and selector `0xb3544e82`.
2015```solidity
2016function maxAllowedRegistrations(address account) external view returns (uint256);
2017```*/
2018    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2019    #[derive(Clone)]
2020    pub struct maxAllowedRegistrationsCall {
2021        #[allow(missing_docs)]
2022        pub account: alloy::sol_types::private::Address,
2023    }
2024    #[derive(serde::Serialize, serde::Deserialize)]
2025    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2026    ///Container type for the return parameters of the [`maxAllowedRegistrations(address)`](maxAllowedRegistrationsCall) function.
2027    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2028    #[derive(Clone)]
2029    pub struct maxAllowedRegistrationsReturn {
2030        #[allow(missing_docs)]
2031        pub _0: alloy::sol_types::private::primitives::aliases::U256,
2032    }
2033    #[allow(
2034        non_camel_case_types,
2035        non_snake_case,
2036        clippy::pub_underscore_fields,
2037        clippy::style
2038    )]
2039    const _: () = {
2040        use alloy::sol_types as alloy_sol_types;
2041        {
2042            #[doc(hidden)]
2043            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
2044            #[doc(hidden)]
2045            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
2046            #[cfg(test)]
2047            #[allow(dead_code, unreachable_patterns)]
2048            fn _type_assertion(
2049                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2050            ) {
2051                match _t {
2052                    alloy_sol_types::private::AssertTypeEq::<
2053                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2054                    >(_) => {}
2055                }
2056            }
2057            #[automatically_derived]
2058            #[doc(hidden)]
2059            impl ::core::convert::From<maxAllowedRegistrationsCall>
2060            for UnderlyingRustTuple<'_> {
2061                fn from(value: maxAllowedRegistrationsCall) -> Self {
2062                    (value.account,)
2063                }
2064            }
2065            #[automatically_derived]
2066            #[doc(hidden)]
2067            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2068            for maxAllowedRegistrationsCall {
2069                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2070                    Self { account: tuple.0 }
2071                }
2072            }
2073        }
2074        {
2075            #[doc(hidden)]
2076            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2077            #[doc(hidden)]
2078            type UnderlyingRustTuple<'a> = (
2079                alloy::sol_types::private::primitives::aliases::U256,
2080            );
2081            #[cfg(test)]
2082            #[allow(dead_code, unreachable_patterns)]
2083            fn _type_assertion(
2084                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2085            ) {
2086                match _t {
2087                    alloy_sol_types::private::AssertTypeEq::<
2088                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2089                    >(_) => {}
2090                }
2091            }
2092            #[automatically_derived]
2093            #[doc(hidden)]
2094            impl ::core::convert::From<maxAllowedRegistrationsReturn>
2095            for UnderlyingRustTuple<'_> {
2096                fn from(value: maxAllowedRegistrationsReturn) -> Self {
2097                    (value._0,)
2098                }
2099            }
2100            #[automatically_derived]
2101            #[doc(hidden)]
2102            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2103            for maxAllowedRegistrationsReturn {
2104                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2105                    Self { _0: tuple.0 }
2106                }
2107            }
2108        }
2109        #[automatically_derived]
2110        impl alloy_sol_types::SolCall for maxAllowedRegistrationsCall {
2111            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
2112            type Token<'a> = <Self::Parameters<
2113                'a,
2114            > as alloy_sol_types::SolType>::Token<'a>;
2115            type Return = alloy::sol_types::private::primitives::aliases::U256;
2116            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2117            type ReturnToken<'a> = <Self::ReturnTuple<
2118                'a,
2119            > as alloy_sol_types::SolType>::Token<'a>;
2120            const SIGNATURE: &'static str = "maxAllowedRegistrations(address)";
2121            const SELECTOR: [u8; 4] = [179u8, 84u8, 78u8, 130u8];
2122            #[inline]
2123            fn new<'a>(
2124                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2125            ) -> Self {
2126                tuple.into()
2127            }
2128            #[inline]
2129            fn tokenize(&self) -> Self::Token<'_> {
2130                (
2131                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
2132                        &self.account,
2133                    ),
2134                )
2135            }
2136            #[inline]
2137            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2138                (
2139                    <alloy::sol_types::sol_data::Uint<
2140                        256,
2141                    > as alloy_sol_types::SolType>::tokenize(ret),
2142                )
2143            }
2144            #[inline]
2145            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2146                <Self::ReturnTuple<
2147                    '_,
2148                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2149                    .map(|r| {
2150                        let r: maxAllowedRegistrationsReturn = r.into();
2151                        r._0
2152                    })
2153            }
2154            #[inline]
2155            fn abi_decode_returns_validate(
2156                data: &[u8],
2157            ) -> alloy_sol_types::Result<Self::Return> {
2158                <Self::ReturnTuple<
2159                    '_,
2160                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2161                    .map(|r| {
2162                        let r: maxAllowedRegistrationsReturn = r.into();
2163                        r._0
2164                    })
2165            }
2166        }
2167    };
2168    #[derive(serde::Serialize, serde::Deserialize)]
2169    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2170    /**Function with signature `maxRegistrationsPerSpecialNft(uint256)` and selector `0xba1cef23`.
2171```solidity
2172function maxRegistrationsPerSpecialNft(uint256) external view returns (uint256);
2173```*/
2174    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2175    #[derive(Clone)]
2176    pub struct maxRegistrationsPerSpecialNftCall(
2177        pub alloy::sol_types::private::primitives::aliases::U256,
2178    );
2179    #[derive(serde::Serialize, serde::Deserialize)]
2180    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2181    ///Container type for the return parameters of the [`maxRegistrationsPerSpecialNft(uint256)`](maxRegistrationsPerSpecialNftCall) function.
2182    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2183    #[derive(Clone)]
2184    pub struct maxRegistrationsPerSpecialNftReturn {
2185        #[allow(missing_docs)]
2186        pub _0: alloy::sol_types::private::primitives::aliases::U256,
2187    }
2188    #[allow(
2189        non_camel_case_types,
2190        non_snake_case,
2191        clippy::pub_underscore_fields,
2192        clippy::style
2193    )]
2194    const _: () = {
2195        use alloy::sol_types as alloy_sol_types;
2196        {
2197            #[doc(hidden)]
2198            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2199            #[doc(hidden)]
2200            type UnderlyingRustTuple<'a> = (
2201                alloy::sol_types::private::primitives::aliases::U256,
2202            );
2203            #[cfg(test)]
2204            #[allow(dead_code, unreachable_patterns)]
2205            fn _type_assertion(
2206                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2207            ) {
2208                match _t {
2209                    alloy_sol_types::private::AssertTypeEq::<
2210                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2211                    >(_) => {}
2212                }
2213            }
2214            #[automatically_derived]
2215            #[doc(hidden)]
2216            impl ::core::convert::From<maxRegistrationsPerSpecialNftCall>
2217            for UnderlyingRustTuple<'_> {
2218                fn from(value: maxRegistrationsPerSpecialNftCall) -> Self {
2219                    (value.0,)
2220                }
2221            }
2222            #[automatically_derived]
2223            #[doc(hidden)]
2224            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2225            for maxRegistrationsPerSpecialNftCall {
2226                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2227                    Self(tuple.0)
2228                }
2229            }
2230        }
2231        {
2232            #[doc(hidden)]
2233            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2234            #[doc(hidden)]
2235            type UnderlyingRustTuple<'a> = (
2236                alloy::sol_types::private::primitives::aliases::U256,
2237            );
2238            #[cfg(test)]
2239            #[allow(dead_code, unreachable_patterns)]
2240            fn _type_assertion(
2241                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2242            ) {
2243                match _t {
2244                    alloy_sol_types::private::AssertTypeEq::<
2245                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2246                    >(_) => {}
2247                }
2248            }
2249            #[automatically_derived]
2250            #[doc(hidden)]
2251            impl ::core::convert::From<maxRegistrationsPerSpecialNftReturn>
2252            for UnderlyingRustTuple<'_> {
2253                fn from(value: maxRegistrationsPerSpecialNftReturn) -> Self {
2254                    (value._0,)
2255                }
2256            }
2257            #[automatically_derived]
2258            #[doc(hidden)]
2259            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2260            for maxRegistrationsPerSpecialNftReturn {
2261                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2262                    Self { _0: tuple.0 }
2263                }
2264            }
2265        }
2266        #[automatically_derived]
2267        impl alloy_sol_types::SolCall for maxRegistrationsPerSpecialNftCall {
2268            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2269            type Token<'a> = <Self::Parameters<
2270                'a,
2271            > as alloy_sol_types::SolType>::Token<'a>;
2272            type Return = alloy::sol_types::private::primitives::aliases::U256;
2273            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2274            type ReturnToken<'a> = <Self::ReturnTuple<
2275                'a,
2276            > as alloy_sol_types::SolType>::Token<'a>;
2277            const SIGNATURE: &'static str = "maxRegistrationsPerSpecialNft(uint256)";
2278            const SELECTOR: [u8; 4] = [186u8, 28u8, 239u8, 35u8];
2279            #[inline]
2280            fn new<'a>(
2281                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2282            ) -> Self {
2283                tuple.into()
2284            }
2285            #[inline]
2286            fn tokenize(&self) -> Self::Token<'_> {
2287                (
2288                    <alloy::sol_types::sol_data::Uint<
2289                        256,
2290                    > as alloy_sol_types::SolType>::tokenize(&self.0),
2291                )
2292            }
2293            #[inline]
2294            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2295                (
2296                    <alloy::sol_types::sol_data::Uint<
2297                        256,
2298                    > as alloy_sol_types::SolType>::tokenize(ret),
2299                )
2300            }
2301            #[inline]
2302            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2303                <Self::ReturnTuple<
2304                    '_,
2305                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2306                    .map(|r| {
2307                        let r: maxRegistrationsPerSpecialNftReturn = r.into();
2308                        r._0
2309                    })
2310            }
2311            #[inline]
2312            fn abi_decode_returns_validate(
2313                data: &[u8],
2314            ) -> alloy_sol_types::Result<Self::Return> {
2315                <Self::ReturnTuple<
2316                    '_,
2317                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2318                    .map(|r| {
2319                        let r: maxRegistrationsPerSpecialNftReturn = r.into();
2320                        r._0
2321                    })
2322            }
2323        }
2324    };
2325    #[derive(serde::Serialize, serde::Deserialize)]
2326    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2327    /**Function with signature `owner()` and selector `0x8da5cb5b`.
2328```solidity
2329function owner() external view returns (address);
2330```*/
2331    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2332    #[derive(Clone)]
2333    pub struct ownerCall;
2334    #[derive(serde::Serialize, serde::Deserialize)]
2335    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2336    ///Container type for the return parameters of the [`owner()`](ownerCall) function.
2337    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2338    #[derive(Clone)]
2339    pub struct ownerReturn {
2340        #[allow(missing_docs)]
2341        pub _0: alloy::sol_types::private::Address,
2342    }
2343    #[allow(
2344        non_camel_case_types,
2345        non_snake_case,
2346        clippy::pub_underscore_fields,
2347        clippy::style
2348    )]
2349    const _: () = {
2350        use alloy::sol_types as alloy_sol_types;
2351        {
2352            #[doc(hidden)]
2353            type UnderlyingSolTuple<'a> = ();
2354            #[doc(hidden)]
2355            type UnderlyingRustTuple<'a> = ();
2356            #[cfg(test)]
2357            #[allow(dead_code, unreachable_patterns)]
2358            fn _type_assertion(
2359                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2360            ) {
2361                match _t {
2362                    alloy_sol_types::private::AssertTypeEq::<
2363                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2364                    >(_) => {}
2365                }
2366            }
2367            #[automatically_derived]
2368            #[doc(hidden)]
2369            impl ::core::convert::From<ownerCall> for UnderlyingRustTuple<'_> {
2370                fn from(value: ownerCall) -> Self {
2371                    ()
2372                }
2373            }
2374            #[automatically_derived]
2375            #[doc(hidden)]
2376            impl ::core::convert::From<UnderlyingRustTuple<'_>> for ownerCall {
2377                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2378                    Self
2379                }
2380            }
2381        }
2382        {
2383            #[doc(hidden)]
2384            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
2385            #[doc(hidden)]
2386            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
2387            #[cfg(test)]
2388            #[allow(dead_code, unreachable_patterns)]
2389            fn _type_assertion(
2390                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2391            ) {
2392                match _t {
2393                    alloy_sol_types::private::AssertTypeEq::<
2394                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2395                    >(_) => {}
2396                }
2397            }
2398            #[automatically_derived]
2399            #[doc(hidden)]
2400            impl ::core::convert::From<ownerReturn> for UnderlyingRustTuple<'_> {
2401                fn from(value: ownerReturn) -> Self {
2402                    (value._0,)
2403                }
2404            }
2405            #[automatically_derived]
2406            #[doc(hidden)]
2407            impl ::core::convert::From<UnderlyingRustTuple<'_>> for ownerReturn {
2408                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2409                    Self { _0: tuple.0 }
2410                }
2411            }
2412        }
2413        #[automatically_derived]
2414        impl alloy_sol_types::SolCall for ownerCall {
2415            type Parameters<'a> = ();
2416            type Token<'a> = <Self::Parameters<
2417                'a,
2418            > as alloy_sol_types::SolType>::Token<'a>;
2419            type Return = alloy::sol_types::private::Address;
2420            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
2421            type ReturnToken<'a> = <Self::ReturnTuple<
2422                'a,
2423            > as alloy_sol_types::SolType>::Token<'a>;
2424            const SIGNATURE: &'static str = "owner()";
2425            const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8];
2426            #[inline]
2427            fn new<'a>(
2428                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2429            ) -> Self {
2430                tuple.into()
2431            }
2432            #[inline]
2433            fn tokenize(&self) -> Self::Token<'_> {
2434                ()
2435            }
2436            #[inline]
2437            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2438                (
2439                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
2440                        ret,
2441                    ),
2442                )
2443            }
2444            #[inline]
2445            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2446                <Self::ReturnTuple<
2447                    '_,
2448                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2449                    .map(|r| {
2450                        let r: ownerReturn = r.into();
2451                        r._0
2452                    })
2453            }
2454            #[inline]
2455            fn abi_decode_returns_validate(
2456                data: &[u8],
2457            ) -> alloy_sol_types::Result<Self::Return> {
2458                <Self::ReturnTuple<
2459                    '_,
2460                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2461                    .map(|r| {
2462                        let r: ownerReturn = r.into();
2463                        r._0
2464                    })
2465            }
2466        }
2467    };
2468    #[derive(serde::Serialize, serde::Deserialize)]
2469    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2470    /**Function with signature `ownerAddNftTypeAndRank(uint256,string)` and selector `0x9b97076f`.
2471```solidity
2472function ownerAddNftTypeAndRank(uint256 nftType, string memory nftRank) external;
2473```*/
2474    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2475    #[derive(Clone)]
2476    pub struct ownerAddNftTypeAndRankCall {
2477        #[allow(missing_docs)]
2478        pub nftType: alloy::sol_types::private::primitives::aliases::U256,
2479        #[allow(missing_docs)]
2480        pub nftRank: alloy::sol_types::private::String,
2481    }
2482    ///Container type for the return parameters of the [`ownerAddNftTypeAndRank(uint256,string)`](ownerAddNftTypeAndRankCall) function.
2483    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2484    #[derive(Clone)]
2485    pub struct ownerAddNftTypeAndRankReturn {}
2486    #[allow(
2487        non_camel_case_types,
2488        non_snake_case,
2489        clippy::pub_underscore_fields,
2490        clippy::style
2491    )]
2492    const _: () = {
2493        use alloy::sol_types as alloy_sol_types;
2494        {
2495            #[doc(hidden)]
2496            type UnderlyingSolTuple<'a> = (
2497                alloy::sol_types::sol_data::Uint<256>,
2498                alloy::sol_types::sol_data::String,
2499            );
2500            #[doc(hidden)]
2501            type UnderlyingRustTuple<'a> = (
2502                alloy::sol_types::private::primitives::aliases::U256,
2503                alloy::sol_types::private::String,
2504            );
2505            #[cfg(test)]
2506            #[allow(dead_code, unreachable_patterns)]
2507            fn _type_assertion(
2508                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2509            ) {
2510                match _t {
2511                    alloy_sol_types::private::AssertTypeEq::<
2512                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2513                    >(_) => {}
2514                }
2515            }
2516            #[automatically_derived]
2517            #[doc(hidden)]
2518            impl ::core::convert::From<ownerAddNftTypeAndRankCall>
2519            for UnderlyingRustTuple<'_> {
2520                fn from(value: ownerAddNftTypeAndRankCall) -> Self {
2521                    (value.nftType, value.nftRank)
2522                }
2523            }
2524            #[automatically_derived]
2525            #[doc(hidden)]
2526            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2527            for ownerAddNftTypeAndRankCall {
2528                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2529                    Self {
2530                        nftType: tuple.0,
2531                        nftRank: tuple.1,
2532                    }
2533                }
2534            }
2535        }
2536        {
2537            #[doc(hidden)]
2538            type UnderlyingSolTuple<'a> = ();
2539            #[doc(hidden)]
2540            type UnderlyingRustTuple<'a> = ();
2541            #[cfg(test)]
2542            #[allow(dead_code, unreachable_patterns)]
2543            fn _type_assertion(
2544                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2545            ) {
2546                match _t {
2547                    alloy_sol_types::private::AssertTypeEq::<
2548                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2549                    >(_) => {}
2550                }
2551            }
2552            #[automatically_derived]
2553            #[doc(hidden)]
2554            impl ::core::convert::From<ownerAddNftTypeAndRankReturn>
2555            for UnderlyingRustTuple<'_> {
2556                fn from(value: ownerAddNftTypeAndRankReturn) -> Self {
2557                    ()
2558                }
2559            }
2560            #[automatically_derived]
2561            #[doc(hidden)]
2562            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2563            for ownerAddNftTypeAndRankReturn {
2564                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2565                    Self {}
2566                }
2567            }
2568        }
2569        impl ownerAddNftTypeAndRankReturn {
2570            fn _tokenize(
2571                &self,
2572            ) -> <ownerAddNftTypeAndRankCall as alloy_sol_types::SolCall>::ReturnToken<
2573                '_,
2574            > {
2575                ()
2576            }
2577        }
2578        #[automatically_derived]
2579        impl alloy_sol_types::SolCall for ownerAddNftTypeAndRankCall {
2580            type Parameters<'a> = (
2581                alloy::sol_types::sol_data::Uint<256>,
2582                alloy::sol_types::sol_data::String,
2583            );
2584            type Token<'a> = <Self::Parameters<
2585                'a,
2586            > as alloy_sol_types::SolType>::Token<'a>;
2587            type Return = ownerAddNftTypeAndRankReturn;
2588            type ReturnTuple<'a> = ();
2589            type ReturnToken<'a> = <Self::ReturnTuple<
2590                'a,
2591            > as alloy_sol_types::SolType>::Token<'a>;
2592            const SIGNATURE: &'static str = "ownerAddNftTypeAndRank(uint256,string)";
2593            const SELECTOR: [u8; 4] = [155u8, 151u8, 7u8, 111u8];
2594            #[inline]
2595            fn new<'a>(
2596                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2597            ) -> Self {
2598                tuple.into()
2599            }
2600            #[inline]
2601            fn tokenize(&self) -> Self::Token<'_> {
2602                (
2603                    <alloy::sol_types::sol_data::Uint<
2604                        256,
2605                    > as alloy_sol_types::SolType>::tokenize(&self.nftType),
2606                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
2607                        &self.nftRank,
2608                    ),
2609                )
2610            }
2611            #[inline]
2612            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2613                ownerAddNftTypeAndRankReturn::_tokenize(ret)
2614            }
2615            #[inline]
2616            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2617                <Self::ReturnTuple<
2618                    '_,
2619                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2620                    .map(Into::into)
2621            }
2622            #[inline]
2623            fn abi_decode_returns_validate(
2624                data: &[u8],
2625            ) -> alloy_sol_types::Result<Self::Return> {
2626                <Self::ReturnTuple<
2627                    '_,
2628                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2629                    .map(Into::into)
2630            }
2631        }
2632    };
2633    #[derive(serde::Serialize, serde::Deserialize)]
2634    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2635    /**Function with signature `ownerBatchAddNftTypeAndRank(uint256[],string[])` and selector `0x506472cc`.
2636```solidity
2637function ownerBatchAddNftTypeAndRank(uint256[] memory nftTypes, string[] memory nftRanks) external;
2638```*/
2639    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2640    #[derive(Clone)]
2641    pub struct ownerBatchAddNftTypeAndRankCall {
2642        #[allow(missing_docs)]
2643        pub nftTypes: alloy::sol_types::private::Vec<
2644            alloy::sol_types::private::primitives::aliases::U256,
2645        >,
2646        #[allow(missing_docs)]
2647        pub nftRanks: alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
2648    }
2649    ///Container type for the return parameters of the [`ownerBatchAddNftTypeAndRank(uint256[],string[])`](ownerBatchAddNftTypeAndRankCall) function.
2650    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2651    #[derive(Clone)]
2652    pub struct ownerBatchAddNftTypeAndRankReturn {}
2653    #[allow(
2654        non_camel_case_types,
2655        non_snake_case,
2656        clippy::pub_underscore_fields,
2657        clippy::style
2658    )]
2659    const _: () = {
2660        use alloy::sol_types as alloy_sol_types;
2661        {
2662            #[doc(hidden)]
2663            type UnderlyingSolTuple<'a> = (
2664                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
2665                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::String>,
2666            );
2667            #[doc(hidden)]
2668            type UnderlyingRustTuple<'a> = (
2669                alloy::sol_types::private::Vec<
2670                    alloy::sol_types::private::primitives::aliases::U256,
2671                >,
2672                alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
2673            );
2674            #[cfg(test)]
2675            #[allow(dead_code, unreachable_patterns)]
2676            fn _type_assertion(
2677                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2678            ) {
2679                match _t {
2680                    alloy_sol_types::private::AssertTypeEq::<
2681                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2682                    >(_) => {}
2683                }
2684            }
2685            #[automatically_derived]
2686            #[doc(hidden)]
2687            impl ::core::convert::From<ownerBatchAddNftTypeAndRankCall>
2688            for UnderlyingRustTuple<'_> {
2689                fn from(value: ownerBatchAddNftTypeAndRankCall) -> Self {
2690                    (value.nftTypes, value.nftRanks)
2691                }
2692            }
2693            #[automatically_derived]
2694            #[doc(hidden)]
2695            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2696            for ownerBatchAddNftTypeAndRankCall {
2697                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2698                    Self {
2699                        nftTypes: tuple.0,
2700                        nftRanks: tuple.1,
2701                    }
2702                }
2703            }
2704        }
2705        {
2706            #[doc(hidden)]
2707            type UnderlyingSolTuple<'a> = ();
2708            #[doc(hidden)]
2709            type UnderlyingRustTuple<'a> = ();
2710            #[cfg(test)]
2711            #[allow(dead_code, unreachable_patterns)]
2712            fn _type_assertion(
2713                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2714            ) {
2715                match _t {
2716                    alloy_sol_types::private::AssertTypeEq::<
2717                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2718                    >(_) => {}
2719                }
2720            }
2721            #[automatically_derived]
2722            #[doc(hidden)]
2723            impl ::core::convert::From<ownerBatchAddNftTypeAndRankReturn>
2724            for UnderlyingRustTuple<'_> {
2725                fn from(value: ownerBatchAddNftTypeAndRankReturn) -> Self {
2726                    ()
2727                }
2728            }
2729            #[automatically_derived]
2730            #[doc(hidden)]
2731            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2732            for ownerBatchAddNftTypeAndRankReturn {
2733                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2734                    Self {}
2735                }
2736            }
2737        }
2738        impl ownerBatchAddNftTypeAndRankReturn {
2739            fn _tokenize(
2740                &self,
2741            ) -> <ownerBatchAddNftTypeAndRankCall as alloy_sol_types::SolCall>::ReturnToken<
2742                '_,
2743            > {
2744                ()
2745            }
2746        }
2747        #[automatically_derived]
2748        impl alloy_sol_types::SolCall for ownerBatchAddNftTypeAndRankCall {
2749            type Parameters<'a> = (
2750                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
2751                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::String>,
2752            );
2753            type Token<'a> = <Self::Parameters<
2754                'a,
2755            > as alloy_sol_types::SolType>::Token<'a>;
2756            type Return = ownerBatchAddNftTypeAndRankReturn;
2757            type ReturnTuple<'a> = ();
2758            type ReturnToken<'a> = <Self::ReturnTuple<
2759                'a,
2760            > as alloy_sol_types::SolType>::Token<'a>;
2761            const SIGNATURE: &'static str = "ownerBatchAddNftTypeAndRank(uint256[],string[])";
2762            const SELECTOR: [u8; 4] = [80u8, 100u8, 114u8, 204u8];
2763            #[inline]
2764            fn new<'a>(
2765                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2766            ) -> Self {
2767                tuple.into()
2768            }
2769            #[inline]
2770            fn tokenize(&self) -> Self::Token<'_> {
2771                (
2772                    <alloy::sol_types::sol_data::Array<
2773                        alloy::sol_types::sol_data::Uint<256>,
2774                    > as alloy_sol_types::SolType>::tokenize(&self.nftTypes),
2775                    <alloy::sol_types::sol_data::Array<
2776                        alloy::sol_types::sol_data::String,
2777                    > as alloy_sol_types::SolType>::tokenize(&self.nftRanks),
2778                )
2779            }
2780            #[inline]
2781            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2782                ownerBatchAddNftTypeAndRankReturn::_tokenize(ret)
2783            }
2784            #[inline]
2785            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2786                <Self::ReturnTuple<
2787                    '_,
2788                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2789                    .map(Into::into)
2790            }
2791            #[inline]
2792            fn abi_decode_returns_validate(
2793                data: &[u8],
2794            ) -> alloy_sol_types::Result<Self::Return> {
2795                <Self::ReturnTuple<
2796                    '_,
2797                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2798                    .map(Into::into)
2799            }
2800        }
2801    };
2802    #[derive(serde::Serialize, serde::Deserialize)]
2803    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2804    /**Function with signature `ownerBatchAddSpecialNftTypeAndRank(uint256[],string[],uint256[])` and selector `0x6a3b64b6`.
2805```solidity
2806function ownerBatchAddSpecialNftTypeAndRank(uint256[] memory nftTypes, string[] memory nftRanks, uint256[] memory maxRegistrations) external;
2807```*/
2808    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2809    #[derive(Clone)]
2810    pub struct ownerBatchAddSpecialNftTypeAndRankCall {
2811        #[allow(missing_docs)]
2812        pub nftTypes: alloy::sol_types::private::Vec<
2813            alloy::sol_types::private::primitives::aliases::U256,
2814        >,
2815        #[allow(missing_docs)]
2816        pub nftRanks: alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
2817        #[allow(missing_docs)]
2818        pub maxRegistrations: alloy::sol_types::private::Vec<
2819            alloy::sol_types::private::primitives::aliases::U256,
2820        >,
2821    }
2822    ///Container type for the return parameters of the [`ownerBatchAddSpecialNftTypeAndRank(uint256[],string[],uint256[])`](ownerBatchAddSpecialNftTypeAndRankCall) function.
2823    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2824    #[derive(Clone)]
2825    pub struct ownerBatchAddSpecialNftTypeAndRankReturn {}
2826    #[allow(
2827        non_camel_case_types,
2828        non_snake_case,
2829        clippy::pub_underscore_fields,
2830        clippy::style
2831    )]
2832    const _: () = {
2833        use alloy::sol_types as alloy_sol_types;
2834        {
2835            #[doc(hidden)]
2836            type UnderlyingSolTuple<'a> = (
2837                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
2838                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::String>,
2839                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
2840            );
2841            #[doc(hidden)]
2842            type UnderlyingRustTuple<'a> = (
2843                alloy::sol_types::private::Vec<
2844                    alloy::sol_types::private::primitives::aliases::U256,
2845                >,
2846                alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
2847                alloy::sol_types::private::Vec<
2848                    alloy::sol_types::private::primitives::aliases::U256,
2849                >,
2850            );
2851            #[cfg(test)]
2852            #[allow(dead_code, unreachable_patterns)]
2853            fn _type_assertion(
2854                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2855            ) {
2856                match _t {
2857                    alloy_sol_types::private::AssertTypeEq::<
2858                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2859                    >(_) => {}
2860                }
2861            }
2862            #[automatically_derived]
2863            #[doc(hidden)]
2864            impl ::core::convert::From<ownerBatchAddSpecialNftTypeAndRankCall>
2865            for UnderlyingRustTuple<'_> {
2866                fn from(value: ownerBatchAddSpecialNftTypeAndRankCall) -> Self {
2867                    (value.nftTypes, value.nftRanks, value.maxRegistrations)
2868                }
2869            }
2870            #[automatically_derived]
2871            #[doc(hidden)]
2872            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2873            for ownerBatchAddSpecialNftTypeAndRankCall {
2874                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2875                    Self {
2876                        nftTypes: tuple.0,
2877                        nftRanks: tuple.1,
2878                        maxRegistrations: tuple.2,
2879                    }
2880                }
2881            }
2882        }
2883        {
2884            #[doc(hidden)]
2885            type UnderlyingSolTuple<'a> = ();
2886            #[doc(hidden)]
2887            type UnderlyingRustTuple<'a> = ();
2888            #[cfg(test)]
2889            #[allow(dead_code, unreachable_patterns)]
2890            fn _type_assertion(
2891                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2892            ) {
2893                match _t {
2894                    alloy_sol_types::private::AssertTypeEq::<
2895                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2896                    >(_) => {}
2897                }
2898            }
2899            #[automatically_derived]
2900            #[doc(hidden)]
2901            impl ::core::convert::From<ownerBatchAddSpecialNftTypeAndRankReturn>
2902            for UnderlyingRustTuple<'_> {
2903                fn from(value: ownerBatchAddSpecialNftTypeAndRankReturn) -> Self {
2904                    ()
2905                }
2906            }
2907            #[automatically_derived]
2908            #[doc(hidden)]
2909            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2910            for ownerBatchAddSpecialNftTypeAndRankReturn {
2911                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2912                    Self {}
2913                }
2914            }
2915        }
2916        impl ownerBatchAddSpecialNftTypeAndRankReturn {
2917            fn _tokenize(
2918                &self,
2919            ) -> <ownerBatchAddSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::ReturnToken<
2920                '_,
2921            > {
2922                ()
2923            }
2924        }
2925        #[automatically_derived]
2926        impl alloy_sol_types::SolCall for ownerBatchAddSpecialNftTypeAndRankCall {
2927            type Parameters<'a> = (
2928                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
2929                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::String>,
2930                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
2931            );
2932            type Token<'a> = <Self::Parameters<
2933                'a,
2934            > as alloy_sol_types::SolType>::Token<'a>;
2935            type Return = ownerBatchAddSpecialNftTypeAndRankReturn;
2936            type ReturnTuple<'a> = ();
2937            type ReturnToken<'a> = <Self::ReturnTuple<
2938                'a,
2939            > as alloy_sol_types::SolType>::Token<'a>;
2940            const SIGNATURE: &'static str = "ownerBatchAddSpecialNftTypeAndRank(uint256[],string[],uint256[])";
2941            const SELECTOR: [u8; 4] = [106u8, 59u8, 100u8, 182u8];
2942            #[inline]
2943            fn new<'a>(
2944                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2945            ) -> Self {
2946                tuple.into()
2947            }
2948            #[inline]
2949            fn tokenize(&self) -> Self::Token<'_> {
2950                (
2951                    <alloy::sol_types::sol_data::Array<
2952                        alloy::sol_types::sol_data::Uint<256>,
2953                    > as alloy_sol_types::SolType>::tokenize(&self.nftTypes),
2954                    <alloy::sol_types::sol_data::Array<
2955                        alloy::sol_types::sol_data::String,
2956                    > as alloy_sol_types::SolType>::tokenize(&self.nftRanks),
2957                    <alloy::sol_types::sol_data::Array<
2958                        alloy::sol_types::sol_data::Uint<256>,
2959                    > as alloy_sol_types::SolType>::tokenize(&self.maxRegistrations),
2960                )
2961            }
2962            #[inline]
2963            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2964                ownerBatchAddSpecialNftTypeAndRankReturn::_tokenize(ret)
2965            }
2966            #[inline]
2967            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2968                <Self::ReturnTuple<
2969                    '_,
2970                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2971                    .map(Into::into)
2972            }
2973            #[inline]
2974            fn abi_decode_returns_validate(
2975                data: &[u8],
2976            ) -> alloy_sol_types::Result<Self::Return> {
2977                <Self::ReturnTuple<
2978                    '_,
2979                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2980                    .map(Into::into)
2981            }
2982        }
2983    };
2984    #[derive(serde::Serialize, serde::Deserialize)]
2985    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2986    /**Function with signature `ownerBatchRemoveNftTypeAndRank(uint256[],string[])` and selector `0xfb66ac57`.
2987```solidity
2988function ownerBatchRemoveNftTypeAndRank(uint256[] memory nftTypes, string[] memory nftRanks) external;
2989```*/
2990    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2991    #[derive(Clone)]
2992    pub struct ownerBatchRemoveNftTypeAndRankCall {
2993        #[allow(missing_docs)]
2994        pub nftTypes: alloy::sol_types::private::Vec<
2995            alloy::sol_types::private::primitives::aliases::U256,
2996        >,
2997        #[allow(missing_docs)]
2998        pub nftRanks: alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
2999    }
3000    ///Container type for the return parameters of the [`ownerBatchRemoveNftTypeAndRank(uint256[],string[])`](ownerBatchRemoveNftTypeAndRankCall) function.
3001    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3002    #[derive(Clone)]
3003    pub struct ownerBatchRemoveNftTypeAndRankReturn {}
3004    #[allow(
3005        non_camel_case_types,
3006        non_snake_case,
3007        clippy::pub_underscore_fields,
3008        clippy::style
3009    )]
3010    const _: () = {
3011        use alloy::sol_types as alloy_sol_types;
3012        {
3013            #[doc(hidden)]
3014            type UnderlyingSolTuple<'a> = (
3015                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
3016                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::String>,
3017            );
3018            #[doc(hidden)]
3019            type UnderlyingRustTuple<'a> = (
3020                alloy::sol_types::private::Vec<
3021                    alloy::sol_types::private::primitives::aliases::U256,
3022                >,
3023                alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
3024            );
3025            #[cfg(test)]
3026            #[allow(dead_code, unreachable_patterns)]
3027            fn _type_assertion(
3028                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3029            ) {
3030                match _t {
3031                    alloy_sol_types::private::AssertTypeEq::<
3032                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3033                    >(_) => {}
3034                }
3035            }
3036            #[automatically_derived]
3037            #[doc(hidden)]
3038            impl ::core::convert::From<ownerBatchRemoveNftTypeAndRankCall>
3039            for UnderlyingRustTuple<'_> {
3040                fn from(value: ownerBatchRemoveNftTypeAndRankCall) -> Self {
3041                    (value.nftTypes, value.nftRanks)
3042                }
3043            }
3044            #[automatically_derived]
3045            #[doc(hidden)]
3046            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3047            for ownerBatchRemoveNftTypeAndRankCall {
3048                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3049                    Self {
3050                        nftTypes: tuple.0,
3051                        nftRanks: tuple.1,
3052                    }
3053                }
3054            }
3055        }
3056        {
3057            #[doc(hidden)]
3058            type UnderlyingSolTuple<'a> = ();
3059            #[doc(hidden)]
3060            type UnderlyingRustTuple<'a> = ();
3061            #[cfg(test)]
3062            #[allow(dead_code, unreachable_patterns)]
3063            fn _type_assertion(
3064                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3065            ) {
3066                match _t {
3067                    alloy_sol_types::private::AssertTypeEq::<
3068                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3069                    >(_) => {}
3070                }
3071            }
3072            #[automatically_derived]
3073            #[doc(hidden)]
3074            impl ::core::convert::From<ownerBatchRemoveNftTypeAndRankReturn>
3075            for UnderlyingRustTuple<'_> {
3076                fn from(value: ownerBatchRemoveNftTypeAndRankReturn) -> Self {
3077                    ()
3078                }
3079            }
3080            #[automatically_derived]
3081            #[doc(hidden)]
3082            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3083            for ownerBatchRemoveNftTypeAndRankReturn {
3084                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3085                    Self {}
3086                }
3087            }
3088        }
3089        impl ownerBatchRemoveNftTypeAndRankReturn {
3090            fn _tokenize(
3091                &self,
3092            ) -> <ownerBatchRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::ReturnToken<
3093                '_,
3094            > {
3095                ()
3096            }
3097        }
3098        #[automatically_derived]
3099        impl alloy_sol_types::SolCall for ownerBatchRemoveNftTypeAndRankCall {
3100            type Parameters<'a> = (
3101                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
3102                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::String>,
3103            );
3104            type Token<'a> = <Self::Parameters<
3105                'a,
3106            > as alloy_sol_types::SolType>::Token<'a>;
3107            type Return = ownerBatchRemoveNftTypeAndRankReturn;
3108            type ReturnTuple<'a> = ();
3109            type ReturnToken<'a> = <Self::ReturnTuple<
3110                'a,
3111            > as alloy_sol_types::SolType>::Token<'a>;
3112            const SIGNATURE: &'static str = "ownerBatchRemoveNftTypeAndRank(uint256[],string[])";
3113            const SELECTOR: [u8; 4] = [251u8, 102u8, 172u8, 87u8];
3114            #[inline]
3115            fn new<'a>(
3116                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3117            ) -> Self {
3118                tuple.into()
3119            }
3120            #[inline]
3121            fn tokenize(&self) -> Self::Token<'_> {
3122                (
3123                    <alloy::sol_types::sol_data::Array<
3124                        alloy::sol_types::sol_data::Uint<256>,
3125                    > as alloy_sol_types::SolType>::tokenize(&self.nftTypes),
3126                    <alloy::sol_types::sol_data::Array<
3127                        alloy::sol_types::sol_data::String,
3128                    > as alloy_sol_types::SolType>::tokenize(&self.nftRanks),
3129                )
3130            }
3131            #[inline]
3132            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3133                ownerBatchRemoveNftTypeAndRankReturn::_tokenize(ret)
3134            }
3135            #[inline]
3136            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3137                <Self::ReturnTuple<
3138                    '_,
3139                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3140                    .map(Into::into)
3141            }
3142            #[inline]
3143            fn abi_decode_returns_validate(
3144                data: &[u8],
3145            ) -> alloy_sol_types::Result<Self::Return> {
3146                <Self::ReturnTuple<
3147                    '_,
3148                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3149                    .map(Into::into)
3150            }
3151        }
3152    };
3153    #[derive(serde::Serialize, serde::Deserialize)]
3154    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3155    /**Function with signature `ownerBatchRemoveSpecialNftTypeAndRank(uint256[],string[])` and selector `0xb05e8ba9`.
3156```solidity
3157function ownerBatchRemoveSpecialNftTypeAndRank(uint256[] memory nftTypes, string[] memory nftRanks) external;
3158```*/
3159    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3160    #[derive(Clone)]
3161    pub struct ownerBatchRemoveSpecialNftTypeAndRankCall {
3162        #[allow(missing_docs)]
3163        pub nftTypes: alloy::sol_types::private::Vec<
3164            alloy::sol_types::private::primitives::aliases::U256,
3165        >,
3166        #[allow(missing_docs)]
3167        pub nftRanks: alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
3168    }
3169    ///Container type for the return parameters of the [`ownerBatchRemoveSpecialNftTypeAndRank(uint256[],string[])`](ownerBatchRemoveSpecialNftTypeAndRankCall) function.
3170    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3171    #[derive(Clone)]
3172    pub struct ownerBatchRemoveSpecialNftTypeAndRankReturn {}
3173    #[allow(
3174        non_camel_case_types,
3175        non_snake_case,
3176        clippy::pub_underscore_fields,
3177        clippy::style
3178    )]
3179    const _: () = {
3180        use alloy::sol_types as alloy_sol_types;
3181        {
3182            #[doc(hidden)]
3183            type UnderlyingSolTuple<'a> = (
3184                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
3185                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::String>,
3186            );
3187            #[doc(hidden)]
3188            type UnderlyingRustTuple<'a> = (
3189                alloy::sol_types::private::Vec<
3190                    alloy::sol_types::private::primitives::aliases::U256,
3191                >,
3192                alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
3193            );
3194            #[cfg(test)]
3195            #[allow(dead_code, unreachable_patterns)]
3196            fn _type_assertion(
3197                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3198            ) {
3199                match _t {
3200                    alloy_sol_types::private::AssertTypeEq::<
3201                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3202                    >(_) => {}
3203                }
3204            }
3205            #[automatically_derived]
3206            #[doc(hidden)]
3207            impl ::core::convert::From<ownerBatchRemoveSpecialNftTypeAndRankCall>
3208            for UnderlyingRustTuple<'_> {
3209                fn from(value: ownerBatchRemoveSpecialNftTypeAndRankCall) -> Self {
3210                    (value.nftTypes, value.nftRanks)
3211                }
3212            }
3213            #[automatically_derived]
3214            #[doc(hidden)]
3215            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3216            for ownerBatchRemoveSpecialNftTypeAndRankCall {
3217                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3218                    Self {
3219                        nftTypes: tuple.0,
3220                        nftRanks: tuple.1,
3221                    }
3222                }
3223            }
3224        }
3225        {
3226            #[doc(hidden)]
3227            type UnderlyingSolTuple<'a> = ();
3228            #[doc(hidden)]
3229            type UnderlyingRustTuple<'a> = ();
3230            #[cfg(test)]
3231            #[allow(dead_code, unreachable_patterns)]
3232            fn _type_assertion(
3233                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3234            ) {
3235                match _t {
3236                    alloy_sol_types::private::AssertTypeEq::<
3237                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3238                    >(_) => {}
3239                }
3240            }
3241            #[automatically_derived]
3242            #[doc(hidden)]
3243            impl ::core::convert::From<ownerBatchRemoveSpecialNftTypeAndRankReturn>
3244            for UnderlyingRustTuple<'_> {
3245                fn from(value: ownerBatchRemoveSpecialNftTypeAndRankReturn) -> Self {
3246                    ()
3247                }
3248            }
3249            #[automatically_derived]
3250            #[doc(hidden)]
3251            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3252            for ownerBatchRemoveSpecialNftTypeAndRankReturn {
3253                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3254                    Self {}
3255                }
3256            }
3257        }
3258        impl ownerBatchRemoveSpecialNftTypeAndRankReturn {
3259            fn _tokenize(
3260                &self,
3261            ) -> <ownerBatchRemoveSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::ReturnToken<
3262                '_,
3263            > {
3264                ()
3265            }
3266        }
3267        #[automatically_derived]
3268        impl alloy_sol_types::SolCall for ownerBatchRemoveSpecialNftTypeAndRankCall {
3269            type Parameters<'a> = (
3270                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Uint<256>>,
3271                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::String>,
3272            );
3273            type Token<'a> = <Self::Parameters<
3274                'a,
3275            > as alloy_sol_types::SolType>::Token<'a>;
3276            type Return = ownerBatchRemoveSpecialNftTypeAndRankReturn;
3277            type ReturnTuple<'a> = ();
3278            type ReturnToken<'a> = <Self::ReturnTuple<
3279                'a,
3280            > as alloy_sol_types::SolType>::Token<'a>;
3281            const SIGNATURE: &'static str = "ownerBatchRemoveSpecialNftTypeAndRank(uint256[],string[])";
3282            const SELECTOR: [u8; 4] = [176u8, 94u8, 139u8, 169u8];
3283            #[inline]
3284            fn new<'a>(
3285                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3286            ) -> Self {
3287                tuple.into()
3288            }
3289            #[inline]
3290            fn tokenize(&self) -> Self::Token<'_> {
3291                (
3292                    <alloy::sol_types::sol_data::Array<
3293                        alloy::sol_types::sol_data::Uint<256>,
3294                    > as alloy_sol_types::SolType>::tokenize(&self.nftTypes),
3295                    <alloy::sol_types::sol_data::Array<
3296                        alloy::sol_types::sol_data::String,
3297                    > as alloy_sol_types::SolType>::tokenize(&self.nftRanks),
3298                )
3299            }
3300            #[inline]
3301            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3302                ownerBatchRemoveSpecialNftTypeAndRankReturn::_tokenize(ret)
3303            }
3304            #[inline]
3305            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3306                <Self::ReturnTuple<
3307                    '_,
3308                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3309                    .map(Into::into)
3310            }
3311            #[inline]
3312            fn abi_decode_returns_validate(
3313                data: &[u8],
3314            ) -> alloy_sol_types::Result<Self::Return> {
3315                <Self::ReturnTuple<
3316                    '_,
3317                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3318                    .map(Into::into)
3319            }
3320        }
3321    };
3322    #[derive(serde::Serialize, serde::Deserialize)]
3323    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3324    /**Function with signature `ownerRemoveNftTypeAndRank(uint256,string)` and selector `0x654251eb`.
3325```solidity
3326function ownerRemoveNftTypeAndRank(uint256 nftType, string memory nftRank) external;
3327```*/
3328    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3329    #[derive(Clone)]
3330    pub struct ownerRemoveNftTypeAndRankCall {
3331        #[allow(missing_docs)]
3332        pub nftType: alloy::sol_types::private::primitives::aliases::U256,
3333        #[allow(missing_docs)]
3334        pub nftRank: alloy::sol_types::private::String,
3335    }
3336    ///Container type for the return parameters of the [`ownerRemoveNftTypeAndRank(uint256,string)`](ownerRemoveNftTypeAndRankCall) function.
3337    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3338    #[derive(Clone)]
3339    pub struct ownerRemoveNftTypeAndRankReturn {}
3340    #[allow(
3341        non_camel_case_types,
3342        non_snake_case,
3343        clippy::pub_underscore_fields,
3344        clippy::style
3345    )]
3346    const _: () = {
3347        use alloy::sol_types as alloy_sol_types;
3348        {
3349            #[doc(hidden)]
3350            type UnderlyingSolTuple<'a> = (
3351                alloy::sol_types::sol_data::Uint<256>,
3352                alloy::sol_types::sol_data::String,
3353            );
3354            #[doc(hidden)]
3355            type UnderlyingRustTuple<'a> = (
3356                alloy::sol_types::private::primitives::aliases::U256,
3357                alloy::sol_types::private::String,
3358            );
3359            #[cfg(test)]
3360            #[allow(dead_code, unreachable_patterns)]
3361            fn _type_assertion(
3362                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3363            ) {
3364                match _t {
3365                    alloy_sol_types::private::AssertTypeEq::<
3366                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3367                    >(_) => {}
3368                }
3369            }
3370            #[automatically_derived]
3371            #[doc(hidden)]
3372            impl ::core::convert::From<ownerRemoveNftTypeAndRankCall>
3373            for UnderlyingRustTuple<'_> {
3374                fn from(value: ownerRemoveNftTypeAndRankCall) -> Self {
3375                    (value.nftType, value.nftRank)
3376                }
3377            }
3378            #[automatically_derived]
3379            #[doc(hidden)]
3380            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3381            for ownerRemoveNftTypeAndRankCall {
3382                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3383                    Self {
3384                        nftType: tuple.0,
3385                        nftRank: tuple.1,
3386                    }
3387                }
3388            }
3389        }
3390        {
3391            #[doc(hidden)]
3392            type UnderlyingSolTuple<'a> = ();
3393            #[doc(hidden)]
3394            type UnderlyingRustTuple<'a> = ();
3395            #[cfg(test)]
3396            #[allow(dead_code, unreachable_patterns)]
3397            fn _type_assertion(
3398                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3399            ) {
3400                match _t {
3401                    alloy_sol_types::private::AssertTypeEq::<
3402                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3403                    >(_) => {}
3404                }
3405            }
3406            #[automatically_derived]
3407            #[doc(hidden)]
3408            impl ::core::convert::From<ownerRemoveNftTypeAndRankReturn>
3409            for UnderlyingRustTuple<'_> {
3410                fn from(value: ownerRemoveNftTypeAndRankReturn) -> Self {
3411                    ()
3412                }
3413            }
3414            #[automatically_derived]
3415            #[doc(hidden)]
3416            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3417            for ownerRemoveNftTypeAndRankReturn {
3418                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3419                    Self {}
3420                }
3421            }
3422        }
3423        impl ownerRemoveNftTypeAndRankReturn {
3424            fn _tokenize(
3425                &self,
3426            ) -> <ownerRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::ReturnToken<
3427                '_,
3428            > {
3429                ()
3430            }
3431        }
3432        #[automatically_derived]
3433        impl alloy_sol_types::SolCall for ownerRemoveNftTypeAndRankCall {
3434            type Parameters<'a> = (
3435                alloy::sol_types::sol_data::Uint<256>,
3436                alloy::sol_types::sol_data::String,
3437            );
3438            type Token<'a> = <Self::Parameters<
3439                'a,
3440            > as alloy_sol_types::SolType>::Token<'a>;
3441            type Return = ownerRemoveNftTypeAndRankReturn;
3442            type ReturnTuple<'a> = ();
3443            type ReturnToken<'a> = <Self::ReturnTuple<
3444                'a,
3445            > as alloy_sol_types::SolType>::Token<'a>;
3446            const SIGNATURE: &'static str = "ownerRemoveNftTypeAndRank(uint256,string)";
3447            const SELECTOR: [u8; 4] = [101u8, 66u8, 81u8, 235u8];
3448            #[inline]
3449            fn new<'a>(
3450                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3451            ) -> Self {
3452                tuple.into()
3453            }
3454            #[inline]
3455            fn tokenize(&self) -> Self::Token<'_> {
3456                (
3457                    <alloy::sol_types::sol_data::Uint<
3458                        256,
3459                    > as alloy_sol_types::SolType>::tokenize(&self.nftType),
3460                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
3461                        &self.nftRank,
3462                    ),
3463                )
3464            }
3465            #[inline]
3466            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3467                ownerRemoveNftTypeAndRankReturn::_tokenize(ret)
3468            }
3469            #[inline]
3470            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3471                <Self::ReturnTuple<
3472                    '_,
3473                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3474                    .map(Into::into)
3475            }
3476            #[inline]
3477            fn abi_decode_returns_validate(
3478                data: &[u8],
3479            ) -> alloy_sol_types::Result<Self::Return> {
3480                <Self::ReturnTuple<
3481                    '_,
3482                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3483                    .map(Into::into)
3484            }
3485        }
3486    };
3487    #[derive(serde::Serialize, serde::Deserialize)]
3488    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3489    /**Function with signature `ownerUpdateThreshold(uint256)` and selector `0xee50c7c4`.
3490```solidity
3491function ownerUpdateThreshold(uint256 newThreshold) external;
3492```*/
3493    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3494    #[derive(Clone)]
3495    pub struct ownerUpdateThresholdCall {
3496        #[allow(missing_docs)]
3497        pub newThreshold: alloy::sol_types::private::primitives::aliases::U256,
3498    }
3499    ///Container type for the return parameters of the [`ownerUpdateThreshold(uint256)`](ownerUpdateThresholdCall) function.
3500    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3501    #[derive(Clone)]
3502    pub struct ownerUpdateThresholdReturn {}
3503    #[allow(
3504        non_camel_case_types,
3505        non_snake_case,
3506        clippy::pub_underscore_fields,
3507        clippy::style
3508    )]
3509    const _: () = {
3510        use alloy::sol_types as alloy_sol_types;
3511        {
3512            #[doc(hidden)]
3513            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3514            #[doc(hidden)]
3515            type UnderlyingRustTuple<'a> = (
3516                alloy::sol_types::private::primitives::aliases::U256,
3517            );
3518            #[cfg(test)]
3519            #[allow(dead_code, unreachable_patterns)]
3520            fn _type_assertion(
3521                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3522            ) {
3523                match _t {
3524                    alloy_sol_types::private::AssertTypeEq::<
3525                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3526                    >(_) => {}
3527                }
3528            }
3529            #[automatically_derived]
3530            #[doc(hidden)]
3531            impl ::core::convert::From<ownerUpdateThresholdCall>
3532            for UnderlyingRustTuple<'_> {
3533                fn from(value: ownerUpdateThresholdCall) -> Self {
3534                    (value.newThreshold,)
3535                }
3536            }
3537            #[automatically_derived]
3538            #[doc(hidden)]
3539            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3540            for ownerUpdateThresholdCall {
3541                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3542                    Self { newThreshold: tuple.0 }
3543                }
3544            }
3545        }
3546        {
3547            #[doc(hidden)]
3548            type UnderlyingSolTuple<'a> = ();
3549            #[doc(hidden)]
3550            type UnderlyingRustTuple<'a> = ();
3551            #[cfg(test)]
3552            #[allow(dead_code, unreachable_patterns)]
3553            fn _type_assertion(
3554                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3555            ) {
3556                match _t {
3557                    alloy_sol_types::private::AssertTypeEq::<
3558                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3559                    >(_) => {}
3560                }
3561            }
3562            #[automatically_derived]
3563            #[doc(hidden)]
3564            impl ::core::convert::From<ownerUpdateThresholdReturn>
3565            for UnderlyingRustTuple<'_> {
3566                fn from(value: ownerUpdateThresholdReturn) -> Self {
3567                    ()
3568                }
3569            }
3570            #[automatically_derived]
3571            #[doc(hidden)]
3572            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3573            for ownerUpdateThresholdReturn {
3574                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3575                    Self {}
3576                }
3577            }
3578        }
3579        impl ownerUpdateThresholdReturn {
3580            fn _tokenize(
3581                &self,
3582            ) -> <ownerUpdateThresholdCall as alloy_sol_types::SolCall>::ReturnToken<
3583                '_,
3584            > {
3585                ()
3586            }
3587        }
3588        #[automatically_derived]
3589        impl alloy_sol_types::SolCall for ownerUpdateThresholdCall {
3590            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3591            type Token<'a> = <Self::Parameters<
3592                'a,
3593            > as alloy_sol_types::SolType>::Token<'a>;
3594            type Return = ownerUpdateThresholdReturn;
3595            type ReturnTuple<'a> = ();
3596            type ReturnToken<'a> = <Self::ReturnTuple<
3597                'a,
3598            > as alloy_sol_types::SolType>::Token<'a>;
3599            const SIGNATURE: &'static str = "ownerUpdateThreshold(uint256)";
3600            const SELECTOR: [u8; 4] = [238u8, 80u8, 199u8, 196u8];
3601            #[inline]
3602            fn new<'a>(
3603                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3604            ) -> Self {
3605                tuple.into()
3606            }
3607            #[inline]
3608            fn tokenize(&self) -> Self::Token<'_> {
3609                (
3610                    <alloy::sol_types::sol_data::Uint<
3611                        256,
3612                    > as alloy_sol_types::SolType>::tokenize(&self.newThreshold),
3613                )
3614            }
3615            #[inline]
3616            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3617                ownerUpdateThresholdReturn::_tokenize(ret)
3618            }
3619            #[inline]
3620            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3621                <Self::ReturnTuple<
3622                    '_,
3623                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3624                    .map(Into::into)
3625            }
3626            #[inline]
3627            fn abi_decode_returns_validate(
3628                data: &[u8],
3629            ) -> alloy_sol_types::Result<Self::Return> {
3630                <Self::ReturnTuple<
3631                    '_,
3632                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3633                    .map(Into::into)
3634            }
3635        }
3636    };
3637    #[derive(serde::Serialize, serde::Deserialize)]
3638    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3639    /**Function with signature `renounceOwnership()` and selector `0x715018a6`.
3640```solidity
3641function renounceOwnership() external;
3642```*/
3643    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3644    #[derive(Clone)]
3645    pub struct renounceOwnershipCall;
3646    ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function.
3647    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3648    #[derive(Clone)]
3649    pub struct renounceOwnershipReturn {}
3650    #[allow(
3651        non_camel_case_types,
3652        non_snake_case,
3653        clippy::pub_underscore_fields,
3654        clippy::style
3655    )]
3656    const _: () = {
3657        use alloy::sol_types as alloy_sol_types;
3658        {
3659            #[doc(hidden)]
3660            type UnderlyingSolTuple<'a> = ();
3661            #[doc(hidden)]
3662            type UnderlyingRustTuple<'a> = ();
3663            #[cfg(test)]
3664            #[allow(dead_code, unreachable_patterns)]
3665            fn _type_assertion(
3666                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3667            ) {
3668                match _t {
3669                    alloy_sol_types::private::AssertTypeEq::<
3670                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3671                    >(_) => {}
3672                }
3673            }
3674            #[automatically_derived]
3675            #[doc(hidden)]
3676            impl ::core::convert::From<renounceOwnershipCall>
3677            for UnderlyingRustTuple<'_> {
3678                fn from(value: renounceOwnershipCall) -> Self {
3679                    ()
3680                }
3681            }
3682            #[automatically_derived]
3683            #[doc(hidden)]
3684            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3685            for renounceOwnershipCall {
3686                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3687                    Self
3688                }
3689            }
3690        }
3691        {
3692            #[doc(hidden)]
3693            type UnderlyingSolTuple<'a> = ();
3694            #[doc(hidden)]
3695            type UnderlyingRustTuple<'a> = ();
3696            #[cfg(test)]
3697            #[allow(dead_code, unreachable_patterns)]
3698            fn _type_assertion(
3699                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3700            ) {
3701                match _t {
3702                    alloy_sol_types::private::AssertTypeEq::<
3703                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3704                    >(_) => {}
3705                }
3706            }
3707            #[automatically_derived]
3708            #[doc(hidden)]
3709            impl ::core::convert::From<renounceOwnershipReturn>
3710            for UnderlyingRustTuple<'_> {
3711                fn from(value: renounceOwnershipReturn) -> Self {
3712                    ()
3713                }
3714            }
3715            #[automatically_derived]
3716            #[doc(hidden)]
3717            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3718            for renounceOwnershipReturn {
3719                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3720                    Self {}
3721                }
3722            }
3723        }
3724        impl renounceOwnershipReturn {
3725            fn _tokenize(
3726                &self,
3727            ) -> <renounceOwnershipCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
3728                ()
3729            }
3730        }
3731        #[automatically_derived]
3732        impl alloy_sol_types::SolCall for renounceOwnershipCall {
3733            type Parameters<'a> = ();
3734            type Token<'a> = <Self::Parameters<
3735                'a,
3736            > as alloy_sol_types::SolType>::Token<'a>;
3737            type Return = renounceOwnershipReturn;
3738            type ReturnTuple<'a> = ();
3739            type ReturnToken<'a> = <Self::ReturnTuple<
3740                'a,
3741            > as alloy_sol_types::SolType>::Token<'a>;
3742            const SIGNATURE: &'static str = "renounceOwnership()";
3743            const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8];
3744            #[inline]
3745            fn new<'a>(
3746                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3747            ) -> Self {
3748                tuple.into()
3749            }
3750            #[inline]
3751            fn tokenize(&self) -> Self::Token<'_> {
3752                ()
3753            }
3754            #[inline]
3755            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3756                renounceOwnershipReturn::_tokenize(ret)
3757            }
3758            #[inline]
3759            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3760                <Self::ReturnTuple<
3761                    '_,
3762                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3763                    .map(Into::into)
3764            }
3765            #[inline]
3766            fn abi_decode_returns_validate(
3767                data: &[u8],
3768            ) -> alloy_sol_types::Result<Self::Return> {
3769                <Self::ReturnTuple<
3770                    '_,
3771                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3772                    .map(Into::into)
3773            }
3774        }
3775    };
3776    #[derive(serde::Serialize, serde::Deserialize)]
3777    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3778    /**Function with signature `specialNftTypeAndRank(uint256)` and selector `0x2c3ec80b`.
3779```solidity
3780function specialNftTypeAndRank(uint256) external view returns (uint256 nftType, string memory nftRank);
3781```*/
3782    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3783    #[derive(Clone)]
3784    pub struct specialNftTypeAndRankCall(
3785        pub alloy::sol_types::private::primitives::aliases::U256,
3786    );
3787    #[derive(serde::Serialize, serde::Deserialize)]
3788    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3789    ///Container type for the return parameters of the [`specialNftTypeAndRank(uint256)`](specialNftTypeAndRankCall) function.
3790    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3791    #[derive(Clone)]
3792    pub struct specialNftTypeAndRankReturn {
3793        #[allow(missing_docs)]
3794        pub nftType: alloy::sol_types::private::primitives::aliases::U256,
3795        #[allow(missing_docs)]
3796        pub nftRank: alloy::sol_types::private::String,
3797    }
3798    #[allow(
3799        non_camel_case_types,
3800        non_snake_case,
3801        clippy::pub_underscore_fields,
3802        clippy::style
3803    )]
3804    const _: () = {
3805        use alloy::sol_types as alloy_sol_types;
3806        {
3807            #[doc(hidden)]
3808            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3809            #[doc(hidden)]
3810            type UnderlyingRustTuple<'a> = (
3811                alloy::sol_types::private::primitives::aliases::U256,
3812            );
3813            #[cfg(test)]
3814            #[allow(dead_code, unreachable_patterns)]
3815            fn _type_assertion(
3816                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3817            ) {
3818                match _t {
3819                    alloy_sol_types::private::AssertTypeEq::<
3820                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3821                    >(_) => {}
3822                }
3823            }
3824            #[automatically_derived]
3825            #[doc(hidden)]
3826            impl ::core::convert::From<specialNftTypeAndRankCall>
3827            for UnderlyingRustTuple<'_> {
3828                fn from(value: specialNftTypeAndRankCall) -> Self {
3829                    (value.0,)
3830                }
3831            }
3832            #[automatically_derived]
3833            #[doc(hidden)]
3834            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3835            for specialNftTypeAndRankCall {
3836                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3837                    Self(tuple.0)
3838                }
3839            }
3840        }
3841        {
3842            #[doc(hidden)]
3843            type UnderlyingSolTuple<'a> = (
3844                alloy::sol_types::sol_data::Uint<256>,
3845                alloy::sol_types::sol_data::String,
3846            );
3847            #[doc(hidden)]
3848            type UnderlyingRustTuple<'a> = (
3849                alloy::sol_types::private::primitives::aliases::U256,
3850                alloy::sol_types::private::String,
3851            );
3852            #[cfg(test)]
3853            #[allow(dead_code, unreachable_patterns)]
3854            fn _type_assertion(
3855                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3856            ) {
3857                match _t {
3858                    alloy_sol_types::private::AssertTypeEq::<
3859                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3860                    >(_) => {}
3861                }
3862            }
3863            #[automatically_derived]
3864            #[doc(hidden)]
3865            impl ::core::convert::From<specialNftTypeAndRankReturn>
3866            for UnderlyingRustTuple<'_> {
3867                fn from(value: specialNftTypeAndRankReturn) -> Self {
3868                    (value.nftType, value.nftRank)
3869                }
3870            }
3871            #[automatically_derived]
3872            #[doc(hidden)]
3873            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3874            for specialNftTypeAndRankReturn {
3875                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3876                    Self {
3877                        nftType: tuple.0,
3878                        nftRank: tuple.1,
3879                    }
3880                }
3881            }
3882        }
3883        impl specialNftTypeAndRankReturn {
3884            fn _tokenize(
3885                &self,
3886            ) -> <specialNftTypeAndRankCall as alloy_sol_types::SolCall>::ReturnToken<
3887                '_,
3888            > {
3889                (
3890                    <alloy::sol_types::sol_data::Uint<
3891                        256,
3892                    > as alloy_sol_types::SolType>::tokenize(&self.nftType),
3893                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
3894                        &self.nftRank,
3895                    ),
3896                )
3897            }
3898        }
3899        #[automatically_derived]
3900        impl alloy_sol_types::SolCall for specialNftTypeAndRankCall {
3901            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3902            type Token<'a> = <Self::Parameters<
3903                'a,
3904            > as alloy_sol_types::SolType>::Token<'a>;
3905            type Return = specialNftTypeAndRankReturn;
3906            type ReturnTuple<'a> = (
3907                alloy::sol_types::sol_data::Uint<256>,
3908                alloy::sol_types::sol_data::String,
3909            );
3910            type ReturnToken<'a> = <Self::ReturnTuple<
3911                'a,
3912            > as alloy_sol_types::SolType>::Token<'a>;
3913            const SIGNATURE: &'static str = "specialNftTypeAndRank(uint256)";
3914            const SELECTOR: [u8; 4] = [44u8, 62u8, 200u8, 11u8];
3915            #[inline]
3916            fn new<'a>(
3917                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3918            ) -> Self {
3919                tuple.into()
3920            }
3921            #[inline]
3922            fn tokenize(&self) -> Self::Token<'_> {
3923                (
3924                    <alloy::sol_types::sol_data::Uint<
3925                        256,
3926                    > as alloy_sol_types::SolType>::tokenize(&self.0),
3927                )
3928            }
3929            #[inline]
3930            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3931                specialNftTypeAndRankReturn::_tokenize(ret)
3932            }
3933            #[inline]
3934            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3935                <Self::ReturnTuple<
3936                    '_,
3937                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3938                    .map(Into::into)
3939            }
3940            #[inline]
3941            fn abi_decode_returns_validate(
3942                data: &[u8],
3943            ) -> alloy_sol_types::Result<Self::Return> {
3944                <Self::ReturnTuple<
3945                    '_,
3946                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3947                    .map(Into::into)
3948            }
3949        }
3950    };
3951    #[derive(serde::Serialize, serde::Deserialize)]
3952    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3953    /**Function with signature `stakeContract()` and selector `0x1a186227`.
3954```solidity
3955function stakeContract() external view returns (address);
3956```*/
3957    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3958    #[derive(Clone)]
3959    pub struct stakeContractCall;
3960    #[derive(serde::Serialize, serde::Deserialize)]
3961    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3962    ///Container type for the return parameters of the [`stakeContract()`](stakeContractCall) function.
3963    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3964    #[derive(Clone)]
3965    pub struct stakeContractReturn {
3966        #[allow(missing_docs)]
3967        pub _0: alloy::sol_types::private::Address,
3968    }
3969    #[allow(
3970        non_camel_case_types,
3971        non_snake_case,
3972        clippy::pub_underscore_fields,
3973        clippy::style
3974    )]
3975    const _: () = {
3976        use alloy::sol_types as alloy_sol_types;
3977        {
3978            #[doc(hidden)]
3979            type UnderlyingSolTuple<'a> = ();
3980            #[doc(hidden)]
3981            type UnderlyingRustTuple<'a> = ();
3982            #[cfg(test)]
3983            #[allow(dead_code, unreachable_patterns)]
3984            fn _type_assertion(
3985                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3986            ) {
3987                match _t {
3988                    alloy_sol_types::private::AssertTypeEq::<
3989                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3990                    >(_) => {}
3991                }
3992            }
3993            #[automatically_derived]
3994            #[doc(hidden)]
3995            impl ::core::convert::From<stakeContractCall> for UnderlyingRustTuple<'_> {
3996                fn from(value: stakeContractCall) -> Self {
3997                    ()
3998                }
3999            }
4000            #[automatically_derived]
4001            #[doc(hidden)]
4002            impl ::core::convert::From<UnderlyingRustTuple<'_>> for stakeContractCall {
4003                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4004                    Self
4005                }
4006            }
4007        }
4008        {
4009            #[doc(hidden)]
4010            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
4011            #[doc(hidden)]
4012            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
4013            #[cfg(test)]
4014            #[allow(dead_code, unreachable_patterns)]
4015            fn _type_assertion(
4016                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4017            ) {
4018                match _t {
4019                    alloy_sol_types::private::AssertTypeEq::<
4020                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4021                    >(_) => {}
4022                }
4023            }
4024            #[automatically_derived]
4025            #[doc(hidden)]
4026            impl ::core::convert::From<stakeContractReturn> for UnderlyingRustTuple<'_> {
4027                fn from(value: stakeContractReturn) -> Self {
4028                    (value._0,)
4029                }
4030            }
4031            #[automatically_derived]
4032            #[doc(hidden)]
4033            impl ::core::convert::From<UnderlyingRustTuple<'_>> for stakeContractReturn {
4034                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4035                    Self { _0: tuple.0 }
4036                }
4037            }
4038        }
4039        #[automatically_derived]
4040        impl alloy_sol_types::SolCall for stakeContractCall {
4041            type Parameters<'a> = ();
4042            type Token<'a> = <Self::Parameters<
4043                'a,
4044            > as alloy_sol_types::SolType>::Token<'a>;
4045            type Return = alloy::sol_types::private::Address;
4046            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
4047            type ReturnToken<'a> = <Self::ReturnTuple<
4048                'a,
4049            > as alloy_sol_types::SolType>::Token<'a>;
4050            const SIGNATURE: &'static str = "stakeContract()";
4051            const SELECTOR: [u8; 4] = [26u8, 24u8, 98u8, 39u8];
4052            #[inline]
4053            fn new<'a>(
4054                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4055            ) -> Self {
4056                tuple.into()
4057            }
4058            #[inline]
4059            fn tokenize(&self) -> Self::Token<'_> {
4060                ()
4061            }
4062            #[inline]
4063            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4064                (
4065                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4066                        ret,
4067                    ),
4068                )
4069            }
4070            #[inline]
4071            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4072                <Self::ReturnTuple<
4073                    '_,
4074                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4075                    .map(|r| {
4076                        let r: stakeContractReturn = r.into();
4077                        r._0
4078                    })
4079            }
4080            #[inline]
4081            fn abi_decode_returns_validate(
4082                data: &[u8],
4083            ) -> alloy_sol_types::Result<Self::Return> {
4084                <Self::ReturnTuple<
4085                    '_,
4086                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4087                    .map(|r| {
4088                        let r: stakeContractReturn = r.into();
4089                        r._0
4090                    })
4091            }
4092        }
4093    };
4094    #[derive(serde::Serialize, serde::Deserialize)]
4095    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4096    /**Function with signature `stakeThreshold()` and selector `0xf11f77f9`.
4097```solidity
4098function stakeThreshold() external view returns (uint256);
4099```*/
4100    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4101    #[derive(Clone)]
4102    pub struct stakeThresholdCall;
4103    #[derive(serde::Serialize, serde::Deserialize)]
4104    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4105    ///Container type for the return parameters of the [`stakeThreshold()`](stakeThresholdCall) function.
4106    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4107    #[derive(Clone)]
4108    pub struct stakeThresholdReturn {
4109        #[allow(missing_docs)]
4110        pub _0: alloy::sol_types::private::primitives::aliases::U256,
4111    }
4112    #[allow(
4113        non_camel_case_types,
4114        non_snake_case,
4115        clippy::pub_underscore_fields,
4116        clippy::style
4117    )]
4118    const _: () = {
4119        use alloy::sol_types as alloy_sol_types;
4120        {
4121            #[doc(hidden)]
4122            type UnderlyingSolTuple<'a> = ();
4123            #[doc(hidden)]
4124            type UnderlyingRustTuple<'a> = ();
4125            #[cfg(test)]
4126            #[allow(dead_code, unreachable_patterns)]
4127            fn _type_assertion(
4128                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4129            ) {
4130                match _t {
4131                    alloy_sol_types::private::AssertTypeEq::<
4132                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4133                    >(_) => {}
4134                }
4135            }
4136            #[automatically_derived]
4137            #[doc(hidden)]
4138            impl ::core::convert::From<stakeThresholdCall> for UnderlyingRustTuple<'_> {
4139                fn from(value: stakeThresholdCall) -> Self {
4140                    ()
4141                }
4142            }
4143            #[automatically_derived]
4144            #[doc(hidden)]
4145            impl ::core::convert::From<UnderlyingRustTuple<'_>> for stakeThresholdCall {
4146                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4147                    Self
4148                }
4149            }
4150        }
4151        {
4152            #[doc(hidden)]
4153            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
4154            #[doc(hidden)]
4155            type UnderlyingRustTuple<'a> = (
4156                alloy::sol_types::private::primitives::aliases::U256,
4157            );
4158            #[cfg(test)]
4159            #[allow(dead_code, unreachable_patterns)]
4160            fn _type_assertion(
4161                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4162            ) {
4163                match _t {
4164                    alloy_sol_types::private::AssertTypeEq::<
4165                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4166                    >(_) => {}
4167                }
4168            }
4169            #[automatically_derived]
4170            #[doc(hidden)]
4171            impl ::core::convert::From<stakeThresholdReturn>
4172            for UnderlyingRustTuple<'_> {
4173                fn from(value: stakeThresholdReturn) -> Self {
4174                    (value._0,)
4175                }
4176            }
4177            #[automatically_derived]
4178            #[doc(hidden)]
4179            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4180            for stakeThresholdReturn {
4181                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4182                    Self { _0: tuple.0 }
4183                }
4184            }
4185        }
4186        #[automatically_derived]
4187        impl alloy_sol_types::SolCall for stakeThresholdCall {
4188            type Parameters<'a> = ();
4189            type Token<'a> = <Self::Parameters<
4190                'a,
4191            > as alloy_sol_types::SolType>::Token<'a>;
4192            type Return = alloy::sol_types::private::primitives::aliases::U256;
4193            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
4194            type ReturnToken<'a> = <Self::ReturnTuple<
4195                'a,
4196            > as alloy_sol_types::SolType>::Token<'a>;
4197            const SIGNATURE: &'static str = "stakeThreshold()";
4198            const SELECTOR: [u8; 4] = [241u8, 31u8, 119u8, 249u8];
4199            #[inline]
4200            fn new<'a>(
4201                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4202            ) -> Self {
4203                tuple.into()
4204            }
4205            #[inline]
4206            fn tokenize(&self) -> Self::Token<'_> {
4207                ()
4208            }
4209            #[inline]
4210            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4211                (
4212                    <alloy::sol_types::sol_data::Uint<
4213                        256,
4214                    > as alloy_sol_types::SolType>::tokenize(ret),
4215                )
4216            }
4217            #[inline]
4218            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4219                <Self::ReturnTuple<
4220                    '_,
4221                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4222                    .map(|r| {
4223                        let r: stakeThresholdReturn = r.into();
4224                        r._0
4225                    })
4226            }
4227            #[inline]
4228            fn abi_decode_returns_validate(
4229                data: &[u8],
4230            ) -> alloy_sol_types::Result<Self::Return> {
4231                <Self::ReturnTuple<
4232                    '_,
4233                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4234                    .map(|r| {
4235                        let r: stakeThresholdReturn = r.into();
4236                        r._0
4237                    })
4238            }
4239        }
4240    };
4241    #[derive(serde::Serialize, serde::Deserialize)]
4242    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4243    /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`.
4244```solidity
4245function transferOwnership(address newOwner) external;
4246```*/
4247    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4248    #[derive(Clone)]
4249    pub struct transferOwnershipCall {
4250        #[allow(missing_docs)]
4251        pub newOwner: alloy::sol_types::private::Address,
4252    }
4253    ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function.
4254    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4255    #[derive(Clone)]
4256    pub struct transferOwnershipReturn {}
4257    #[allow(
4258        non_camel_case_types,
4259        non_snake_case,
4260        clippy::pub_underscore_fields,
4261        clippy::style
4262    )]
4263    const _: () = {
4264        use alloy::sol_types as alloy_sol_types;
4265        {
4266            #[doc(hidden)]
4267            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
4268            #[doc(hidden)]
4269            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
4270            #[cfg(test)]
4271            #[allow(dead_code, unreachable_patterns)]
4272            fn _type_assertion(
4273                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4274            ) {
4275                match _t {
4276                    alloy_sol_types::private::AssertTypeEq::<
4277                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4278                    >(_) => {}
4279                }
4280            }
4281            #[automatically_derived]
4282            #[doc(hidden)]
4283            impl ::core::convert::From<transferOwnershipCall>
4284            for UnderlyingRustTuple<'_> {
4285                fn from(value: transferOwnershipCall) -> Self {
4286                    (value.newOwner,)
4287                }
4288            }
4289            #[automatically_derived]
4290            #[doc(hidden)]
4291            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4292            for transferOwnershipCall {
4293                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4294                    Self { newOwner: tuple.0 }
4295                }
4296            }
4297        }
4298        {
4299            #[doc(hidden)]
4300            type UnderlyingSolTuple<'a> = ();
4301            #[doc(hidden)]
4302            type UnderlyingRustTuple<'a> = ();
4303            #[cfg(test)]
4304            #[allow(dead_code, unreachable_patterns)]
4305            fn _type_assertion(
4306                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4307            ) {
4308                match _t {
4309                    alloy_sol_types::private::AssertTypeEq::<
4310                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4311                    >(_) => {}
4312                }
4313            }
4314            #[automatically_derived]
4315            #[doc(hidden)]
4316            impl ::core::convert::From<transferOwnershipReturn>
4317            for UnderlyingRustTuple<'_> {
4318                fn from(value: transferOwnershipReturn) -> Self {
4319                    ()
4320                }
4321            }
4322            #[automatically_derived]
4323            #[doc(hidden)]
4324            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4325            for transferOwnershipReturn {
4326                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4327                    Self {}
4328                }
4329            }
4330        }
4331        impl transferOwnershipReturn {
4332            fn _tokenize(
4333                &self,
4334            ) -> <transferOwnershipCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
4335                ()
4336            }
4337        }
4338        #[automatically_derived]
4339        impl alloy_sol_types::SolCall for transferOwnershipCall {
4340            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
4341            type Token<'a> = <Self::Parameters<
4342                'a,
4343            > as alloy_sol_types::SolType>::Token<'a>;
4344            type Return = transferOwnershipReturn;
4345            type ReturnTuple<'a> = ();
4346            type ReturnToken<'a> = <Self::ReturnTuple<
4347                'a,
4348            > as alloy_sol_types::SolType>::Token<'a>;
4349            const SIGNATURE: &'static str = "transferOwnership(address)";
4350            const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8];
4351            #[inline]
4352            fn new<'a>(
4353                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4354            ) -> Self {
4355                tuple.into()
4356            }
4357            #[inline]
4358            fn tokenize(&self) -> Self::Token<'_> {
4359                (
4360                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4361                        &self.newOwner,
4362                    ),
4363                )
4364            }
4365            #[inline]
4366            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4367                transferOwnershipReturn::_tokenize(ret)
4368            }
4369            #[inline]
4370            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4371                <Self::ReturnTuple<
4372                    '_,
4373                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4374                    .map(Into::into)
4375            }
4376            #[inline]
4377            fn abi_decode_returns_validate(
4378                data: &[u8],
4379            ) -> alloy_sol_types::Result<Self::Return> {
4380                <Self::ReturnTuple<
4381                    '_,
4382                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4383                    .map(Into::into)
4384            }
4385        }
4386    };
4387    #[derive(serde::Serialize, serde::Deserialize)]
4388    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4389    /**Function with signature `updateStakeContract(address)` and selector `0x830c6cc2`.
4390```solidity
4391function updateStakeContract(address _stakeContract) external;
4392```*/
4393    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4394    #[derive(Clone)]
4395    pub struct updateStakeContractCall {
4396        #[allow(missing_docs)]
4397        pub _stakeContract: alloy::sol_types::private::Address,
4398    }
4399    ///Container type for the return parameters of the [`updateStakeContract(address)`](updateStakeContractCall) function.
4400    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4401    #[derive(Clone)]
4402    pub struct updateStakeContractReturn {}
4403    #[allow(
4404        non_camel_case_types,
4405        non_snake_case,
4406        clippy::pub_underscore_fields,
4407        clippy::style
4408    )]
4409    const _: () = {
4410        use alloy::sol_types as alloy_sol_types;
4411        {
4412            #[doc(hidden)]
4413            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
4414            #[doc(hidden)]
4415            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
4416            #[cfg(test)]
4417            #[allow(dead_code, unreachable_patterns)]
4418            fn _type_assertion(
4419                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4420            ) {
4421                match _t {
4422                    alloy_sol_types::private::AssertTypeEq::<
4423                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4424                    >(_) => {}
4425                }
4426            }
4427            #[automatically_derived]
4428            #[doc(hidden)]
4429            impl ::core::convert::From<updateStakeContractCall>
4430            for UnderlyingRustTuple<'_> {
4431                fn from(value: updateStakeContractCall) -> Self {
4432                    (value._stakeContract,)
4433                }
4434            }
4435            #[automatically_derived]
4436            #[doc(hidden)]
4437            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4438            for updateStakeContractCall {
4439                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4440                    Self { _stakeContract: tuple.0 }
4441                }
4442            }
4443        }
4444        {
4445            #[doc(hidden)]
4446            type UnderlyingSolTuple<'a> = ();
4447            #[doc(hidden)]
4448            type UnderlyingRustTuple<'a> = ();
4449            #[cfg(test)]
4450            #[allow(dead_code, unreachable_patterns)]
4451            fn _type_assertion(
4452                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4453            ) {
4454                match _t {
4455                    alloy_sol_types::private::AssertTypeEq::<
4456                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4457                    >(_) => {}
4458                }
4459            }
4460            #[automatically_derived]
4461            #[doc(hidden)]
4462            impl ::core::convert::From<updateStakeContractReturn>
4463            for UnderlyingRustTuple<'_> {
4464                fn from(value: updateStakeContractReturn) -> Self {
4465                    ()
4466                }
4467            }
4468            #[automatically_derived]
4469            #[doc(hidden)]
4470            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4471            for updateStakeContractReturn {
4472                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4473                    Self {}
4474                }
4475            }
4476        }
4477        impl updateStakeContractReturn {
4478            fn _tokenize(
4479                &self,
4480            ) -> <updateStakeContractCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
4481                ()
4482            }
4483        }
4484        #[automatically_derived]
4485        impl alloy_sol_types::SolCall for updateStakeContractCall {
4486            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
4487            type Token<'a> = <Self::Parameters<
4488                'a,
4489            > as alloy_sol_types::SolType>::Token<'a>;
4490            type Return = updateStakeContractReturn;
4491            type ReturnTuple<'a> = ();
4492            type ReturnToken<'a> = <Self::ReturnTuple<
4493                'a,
4494            > as alloy_sol_types::SolType>::Token<'a>;
4495            const SIGNATURE: &'static str = "updateStakeContract(address)";
4496            const SELECTOR: [u8; 4] = [131u8, 12u8, 108u8, 194u8];
4497            #[inline]
4498            fn new<'a>(
4499                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4500            ) -> Self {
4501                tuple.into()
4502            }
4503            #[inline]
4504            fn tokenize(&self) -> Self::Token<'_> {
4505                (
4506                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4507                        &self._stakeContract,
4508                    ),
4509                )
4510            }
4511            #[inline]
4512            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4513                updateStakeContractReturn::_tokenize(ret)
4514            }
4515            #[inline]
4516            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4517                <Self::ReturnTuple<
4518                    '_,
4519                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4520                    .map(Into::into)
4521            }
4522            #[inline]
4523            fn abi_decode_returns_validate(
4524                data: &[u8],
4525            ) -> alloy_sol_types::Result<Self::Return> {
4526                <Self::ReturnTuple<
4527                    '_,
4528                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4529                    .map(Into::into)
4530            }
4531        }
4532    };
4533    ///Container for all the [`HoprStakingProxyForNetworkRegistry`](self) function calls.
4534    #[derive(serde::Serialize, serde::Deserialize)]
4535    #[derive()]
4536    pub enum HoprStakingProxyForNetworkRegistryCalls {
4537        #[allow(missing_docs)]
4538        canOperateFor(canOperateForCall),
4539        #[allow(missing_docs)]
4540        eligibleNftTypeAndRank(eligibleNftTypeAndRankCall),
4541        #[allow(missing_docs)]
4542        maxAllowedRegistrations(maxAllowedRegistrationsCall),
4543        #[allow(missing_docs)]
4544        maxRegistrationsPerSpecialNft(maxRegistrationsPerSpecialNftCall),
4545        #[allow(missing_docs)]
4546        owner(ownerCall),
4547        #[allow(missing_docs)]
4548        ownerAddNftTypeAndRank(ownerAddNftTypeAndRankCall),
4549        #[allow(missing_docs)]
4550        ownerBatchAddNftTypeAndRank(ownerBatchAddNftTypeAndRankCall),
4551        #[allow(missing_docs)]
4552        ownerBatchAddSpecialNftTypeAndRank(ownerBatchAddSpecialNftTypeAndRankCall),
4553        #[allow(missing_docs)]
4554        ownerBatchRemoveNftTypeAndRank(ownerBatchRemoveNftTypeAndRankCall),
4555        #[allow(missing_docs)]
4556        ownerBatchRemoveSpecialNftTypeAndRank(ownerBatchRemoveSpecialNftTypeAndRankCall),
4557        #[allow(missing_docs)]
4558        ownerRemoveNftTypeAndRank(ownerRemoveNftTypeAndRankCall),
4559        #[allow(missing_docs)]
4560        ownerUpdateThreshold(ownerUpdateThresholdCall),
4561        #[allow(missing_docs)]
4562        renounceOwnership(renounceOwnershipCall),
4563        #[allow(missing_docs)]
4564        specialNftTypeAndRank(specialNftTypeAndRankCall),
4565        #[allow(missing_docs)]
4566        stakeContract(stakeContractCall),
4567        #[allow(missing_docs)]
4568        stakeThreshold(stakeThresholdCall),
4569        #[allow(missing_docs)]
4570        transferOwnership(transferOwnershipCall),
4571        #[allow(missing_docs)]
4572        updateStakeContract(updateStakeContractCall),
4573    }
4574    #[automatically_derived]
4575    impl HoprStakingProxyForNetworkRegistryCalls {
4576        /// All the selectors of this enum.
4577        ///
4578        /// Note that the selectors might not be in the same order as the variants.
4579        /// No guarantees are made about the order of the selectors.
4580        ///
4581        /// Prefer using `SolInterface` methods instead.
4582        pub const SELECTORS: &'static [[u8; 4usize]] = &[
4583            [26u8, 24u8, 98u8, 39u8],
4584            [44u8, 62u8, 200u8, 11u8],
4585            [80u8, 100u8, 114u8, 204u8],
4586            [101u8, 66u8, 81u8, 235u8],
4587            [106u8, 59u8, 100u8, 182u8],
4588            [113u8, 80u8, 24u8, 166u8],
4589            [131u8, 12u8, 108u8, 194u8],
4590            [141u8, 165u8, 203u8, 91u8],
4591            [155u8, 151u8, 7u8, 111u8],
4592            [176u8, 94u8, 139u8, 169u8],
4593            [179u8, 84u8, 78u8, 130u8],
4594            [186u8, 28u8, 239u8, 35u8],
4595            [216u8, 90u8, 208u8, 68u8],
4596            [222u8, 98u8, 108u8, 14u8],
4597            [238u8, 80u8, 199u8, 196u8],
4598            [241u8, 31u8, 119u8, 249u8],
4599            [242u8, 253u8, 227u8, 139u8],
4600            [251u8, 102u8, 172u8, 87u8],
4601        ];
4602    }
4603    #[automatically_derived]
4604    impl alloy_sol_types::SolInterface for HoprStakingProxyForNetworkRegistryCalls {
4605        const NAME: &'static str = "HoprStakingProxyForNetworkRegistryCalls";
4606        const MIN_DATA_LENGTH: usize = 0usize;
4607        const COUNT: usize = 18usize;
4608        #[inline]
4609        fn selector(&self) -> [u8; 4] {
4610            match self {
4611                Self::canOperateFor(_) => {
4612                    <canOperateForCall as alloy_sol_types::SolCall>::SELECTOR
4613                }
4614                Self::eligibleNftTypeAndRank(_) => {
4615                    <eligibleNftTypeAndRankCall as alloy_sol_types::SolCall>::SELECTOR
4616                }
4617                Self::maxAllowedRegistrations(_) => {
4618                    <maxAllowedRegistrationsCall as alloy_sol_types::SolCall>::SELECTOR
4619                }
4620                Self::maxRegistrationsPerSpecialNft(_) => {
4621                    <maxRegistrationsPerSpecialNftCall as alloy_sol_types::SolCall>::SELECTOR
4622                }
4623                Self::owner(_) => <ownerCall as alloy_sol_types::SolCall>::SELECTOR,
4624                Self::ownerAddNftTypeAndRank(_) => {
4625                    <ownerAddNftTypeAndRankCall as alloy_sol_types::SolCall>::SELECTOR
4626                }
4627                Self::ownerBatchAddNftTypeAndRank(_) => {
4628                    <ownerBatchAddNftTypeAndRankCall as alloy_sol_types::SolCall>::SELECTOR
4629                }
4630                Self::ownerBatchAddSpecialNftTypeAndRank(_) => {
4631                    <ownerBatchAddSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::SELECTOR
4632                }
4633                Self::ownerBatchRemoveNftTypeAndRank(_) => {
4634                    <ownerBatchRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::SELECTOR
4635                }
4636                Self::ownerBatchRemoveSpecialNftTypeAndRank(_) => {
4637                    <ownerBatchRemoveSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::SELECTOR
4638                }
4639                Self::ownerRemoveNftTypeAndRank(_) => {
4640                    <ownerRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::SELECTOR
4641                }
4642                Self::ownerUpdateThreshold(_) => {
4643                    <ownerUpdateThresholdCall as alloy_sol_types::SolCall>::SELECTOR
4644                }
4645                Self::renounceOwnership(_) => {
4646                    <renounceOwnershipCall as alloy_sol_types::SolCall>::SELECTOR
4647                }
4648                Self::specialNftTypeAndRank(_) => {
4649                    <specialNftTypeAndRankCall as alloy_sol_types::SolCall>::SELECTOR
4650                }
4651                Self::stakeContract(_) => {
4652                    <stakeContractCall as alloy_sol_types::SolCall>::SELECTOR
4653                }
4654                Self::stakeThreshold(_) => {
4655                    <stakeThresholdCall as alloy_sol_types::SolCall>::SELECTOR
4656                }
4657                Self::transferOwnership(_) => {
4658                    <transferOwnershipCall as alloy_sol_types::SolCall>::SELECTOR
4659                }
4660                Self::updateStakeContract(_) => {
4661                    <updateStakeContractCall as alloy_sol_types::SolCall>::SELECTOR
4662                }
4663            }
4664        }
4665        #[inline]
4666        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
4667            Self::SELECTORS.get(i).copied()
4668        }
4669        #[inline]
4670        fn valid_selector(selector: [u8; 4]) -> bool {
4671            Self::SELECTORS.binary_search(&selector).is_ok()
4672        }
4673        #[inline]
4674        #[allow(non_snake_case)]
4675        fn abi_decode_raw(
4676            selector: [u8; 4],
4677            data: &[u8],
4678        ) -> alloy_sol_types::Result<Self> {
4679            static DECODE_SHIMS: &[fn(
4680                &[u8],
4681            ) -> alloy_sol_types::Result<HoprStakingProxyForNetworkRegistryCalls>] = &[
4682                {
4683                    fn stakeContract(
4684                        data: &[u8],
4685                    ) -> alloy_sol_types::Result<
4686                        HoprStakingProxyForNetworkRegistryCalls,
4687                    > {
4688                        <stakeContractCall as alloy_sol_types::SolCall>::abi_decode_raw(
4689                                data,
4690                            )
4691                            .map(HoprStakingProxyForNetworkRegistryCalls::stakeContract)
4692                    }
4693                    stakeContract
4694                },
4695                {
4696                    fn specialNftTypeAndRank(
4697                        data: &[u8],
4698                    ) -> alloy_sol_types::Result<
4699                        HoprStakingProxyForNetworkRegistryCalls,
4700                    > {
4701                        <specialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw(
4702                                data,
4703                            )
4704                            .map(
4705                                HoprStakingProxyForNetworkRegistryCalls::specialNftTypeAndRank,
4706                            )
4707                    }
4708                    specialNftTypeAndRank
4709                },
4710                {
4711                    fn ownerBatchAddNftTypeAndRank(
4712                        data: &[u8],
4713                    ) -> alloy_sol_types::Result<
4714                        HoprStakingProxyForNetworkRegistryCalls,
4715                    > {
4716                        <ownerBatchAddNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw(
4717                                data,
4718                            )
4719                            .map(
4720                                HoprStakingProxyForNetworkRegistryCalls::ownerBatchAddNftTypeAndRank,
4721                            )
4722                    }
4723                    ownerBatchAddNftTypeAndRank
4724                },
4725                {
4726                    fn ownerRemoveNftTypeAndRank(
4727                        data: &[u8],
4728                    ) -> alloy_sol_types::Result<
4729                        HoprStakingProxyForNetworkRegistryCalls,
4730                    > {
4731                        <ownerRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw(
4732                                data,
4733                            )
4734                            .map(
4735                                HoprStakingProxyForNetworkRegistryCalls::ownerRemoveNftTypeAndRank,
4736                            )
4737                    }
4738                    ownerRemoveNftTypeAndRank
4739                },
4740                {
4741                    fn ownerBatchAddSpecialNftTypeAndRank(
4742                        data: &[u8],
4743                    ) -> alloy_sol_types::Result<
4744                        HoprStakingProxyForNetworkRegistryCalls,
4745                    > {
4746                        <ownerBatchAddSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw(
4747                                data,
4748                            )
4749                            .map(
4750                                HoprStakingProxyForNetworkRegistryCalls::ownerBatchAddSpecialNftTypeAndRank,
4751                            )
4752                    }
4753                    ownerBatchAddSpecialNftTypeAndRank
4754                },
4755                {
4756                    fn renounceOwnership(
4757                        data: &[u8],
4758                    ) -> alloy_sol_types::Result<
4759                        HoprStakingProxyForNetworkRegistryCalls,
4760                    > {
4761                        <renounceOwnershipCall as alloy_sol_types::SolCall>::abi_decode_raw(
4762                                data,
4763                            )
4764                            .map(
4765                                HoprStakingProxyForNetworkRegistryCalls::renounceOwnership,
4766                            )
4767                    }
4768                    renounceOwnership
4769                },
4770                {
4771                    fn updateStakeContract(
4772                        data: &[u8],
4773                    ) -> alloy_sol_types::Result<
4774                        HoprStakingProxyForNetworkRegistryCalls,
4775                    > {
4776                        <updateStakeContractCall as alloy_sol_types::SolCall>::abi_decode_raw(
4777                                data,
4778                            )
4779                            .map(
4780                                HoprStakingProxyForNetworkRegistryCalls::updateStakeContract,
4781                            )
4782                    }
4783                    updateStakeContract
4784                },
4785                {
4786                    fn owner(
4787                        data: &[u8],
4788                    ) -> alloy_sol_types::Result<
4789                        HoprStakingProxyForNetworkRegistryCalls,
4790                    > {
4791                        <ownerCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
4792                            .map(HoprStakingProxyForNetworkRegistryCalls::owner)
4793                    }
4794                    owner
4795                },
4796                {
4797                    fn ownerAddNftTypeAndRank(
4798                        data: &[u8],
4799                    ) -> alloy_sol_types::Result<
4800                        HoprStakingProxyForNetworkRegistryCalls,
4801                    > {
4802                        <ownerAddNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw(
4803                                data,
4804                            )
4805                            .map(
4806                                HoprStakingProxyForNetworkRegistryCalls::ownerAddNftTypeAndRank,
4807                            )
4808                    }
4809                    ownerAddNftTypeAndRank
4810                },
4811                {
4812                    fn ownerBatchRemoveSpecialNftTypeAndRank(
4813                        data: &[u8],
4814                    ) -> alloy_sol_types::Result<
4815                        HoprStakingProxyForNetworkRegistryCalls,
4816                    > {
4817                        <ownerBatchRemoveSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw(
4818                                data,
4819                            )
4820                            .map(
4821                                HoprStakingProxyForNetworkRegistryCalls::ownerBatchRemoveSpecialNftTypeAndRank,
4822                            )
4823                    }
4824                    ownerBatchRemoveSpecialNftTypeAndRank
4825                },
4826                {
4827                    fn maxAllowedRegistrations(
4828                        data: &[u8],
4829                    ) -> alloy_sol_types::Result<
4830                        HoprStakingProxyForNetworkRegistryCalls,
4831                    > {
4832                        <maxAllowedRegistrationsCall as alloy_sol_types::SolCall>::abi_decode_raw(
4833                                data,
4834                            )
4835                            .map(
4836                                HoprStakingProxyForNetworkRegistryCalls::maxAllowedRegistrations,
4837                            )
4838                    }
4839                    maxAllowedRegistrations
4840                },
4841                {
4842                    fn maxRegistrationsPerSpecialNft(
4843                        data: &[u8],
4844                    ) -> alloy_sol_types::Result<
4845                        HoprStakingProxyForNetworkRegistryCalls,
4846                    > {
4847                        <maxRegistrationsPerSpecialNftCall as alloy_sol_types::SolCall>::abi_decode_raw(
4848                                data,
4849                            )
4850                            .map(
4851                                HoprStakingProxyForNetworkRegistryCalls::maxRegistrationsPerSpecialNft,
4852                            )
4853                    }
4854                    maxRegistrationsPerSpecialNft
4855                },
4856                {
4857                    fn canOperateFor(
4858                        data: &[u8],
4859                    ) -> alloy_sol_types::Result<
4860                        HoprStakingProxyForNetworkRegistryCalls,
4861                    > {
4862                        <canOperateForCall as alloy_sol_types::SolCall>::abi_decode_raw(
4863                                data,
4864                            )
4865                            .map(HoprStakingProxyForNetworkRegistryCalls::canOperateFor)
4866                    }
4867                    canOperateFor
4868                },
4869                {
4870                    fn eligibleNftTypeAndRank(
4871                        data: &[u8],
4872                    ) -> alloy_sol_types::Result<
4873                        HoprStakingProxyForNetworkRegistryCalls,
4874                    > {
4875                        <eligibleNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw(
4876                                data,
4877                            )
4878                            .map(
4879                                HoprStakingProxyForNetworkRegistryCalls::eligibleNftTypeAndRank,
4880                            )
4881                    }
4882                    eligibleNftTypeAndRank
4883                },
4884                {
4885                    fn ownerUpdateThreshold(
4886                        data: &[u8],
4887                    ) -> alloy_sol_types::Result<
4888                        HoprStakingProxyForNetworkRegistryCalls,
4889                    > {
4890                        <ownerUpdateThresholdCall as alloy_sol_types::SolCall>::abi_decode_raw(
4891                                data,
4892                            )
4893                            .map(
4894                                HoprStakingProxyForNetworkRegistryCalls::ownerUpdateThreshold,
4895                            )
4896                    }
4897                    ownerUpdateThreshold
4898                },
4899                {
4900                    fn stakeThreshold(
4901                        data: &[u8],
4902                    ) -> alloy_sol_types::Result<
4903                        HoprStakingProxyForNetworkRegistryCalls,
4904                    > {
4905                        <stakeThresholdCall as alloy_sol_types::SolCall>::abi_decode_raw(
4906                                data,
4907                            )
4908                            .map(HoprStakingProxyForNetworkRegistryCalls::stakeThreshold)
4909                    }
4910                    stakeThreshold
4911                },
4912                {
4913                    fn transferOwnership(
4914                        data: &[u8],
4915                    ) -> alloy_sol_types::Result<
4916                        HoprStakingProxyForNetworkRegistryCalls,
4917                    > {
4918                        <transferOwnershipCall as alloy_sol_types::SolCall>::abi_decode_raw(
4919                                data,
4920                            )
4921                            .map(
4922                                HoprStakingProxyForNetworkRegistryCalls::transferOwnership,
4923                            )
4924                    }
4925                    transferOwnership
4926                },
4927                {
4928                    fn ownerBatchRemoveNftTypeAndRank(
4929                        data: &[u8],
4930                    ) -> alloy_sol_types::Result<
4931                        HoprStakingProxyForNetworkRegistryCalls,
4932                    > {
4933                        <ownerBatchRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw(
4934                                data,
4935                            )
4936                            .map(
4937                                HoprStakingProxyForNetworkRegistryCalls::ownerBatchRemoveNftTypeAndRank,
4938                            )
4939                    }
4940                    ownerBatchRemoveNftTypeAndRank
4941                },
4942            ];
4943            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4944                return Err(
4945                    alloy_sol_types::Error::unknown_selector(
4946                        <Self as alloy_sol_types::SolInterface>::NAME,
4947                        selector,
4948                    ),
4949                );
4950            };
4951            DECODE_SHIMS[idx](data)
4952        }
4953        #[inline]
4954        #[allow(non_snake_case)]
4955        fn abi_decode_raw_validate(
4956            selector: [u8; 4],
4957            data: &[u8],
4958        ) -> alloy_sol_types::Result<Self> {
4959            static DECODE_VALIDATE_SHIMS: &[fn(
4960                &[u8],
4961            ) -> alloy_sol_types::Result<HoprStakingProxyForNetworkRegistryCalls>] = &[
4962                {
4963                    fn stakeContract(
4964                        data: &[u8],
4965                    ) -> alloy_sol_types::Result<
4966                        HoprStakingProxyForNetworkRegistryCalls,
4967                    > {
4968                        <stakeContractCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
4969                                data,
4970                            )
4971                            .map(HoprStakingProxyForNetworkRegistryCalls::stakeContract)
4972                    }
4973                    stakeContract
4974                },
4975                {
4976                    fn specialNftTypeAndRank(
4977                        data: &[u8],
4978                    ) -> alloy_sol_types::Result<
4979                        HoprStakingProxyForNetworkRegistryCalls,
4980                    > {
4981                        <specialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
4982                                data,
4983                            )
4984                            .map(
4985                                HoprStakingProxyForNetworkRegistryCalls::specialNftTypeAndRank,
4986                            )
4987                    }
4988                    specialNftTypeAndRank
4989                },
4990                {
4991                    fn ownerBatchAddNftTypeAndRank(
4992                        data: &[u8],
4993                    ) -> alloy_sol_types::Result<
4994                        HoprStakingProxyForNetworkRegistryCalls,
4995                    > {
4996                        <ownerBatchAddNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
4997                                data,
4998                            )
4999                            .map(
5000                                HoprStakingProxyForNetworkRegistryCalls::ownerBatchAddNftTypeAndRank,
5001                            )
5002                    }
5003                    ownerBatchAddNftTypeAndRank
5004                },
5005                {
5006                    fn ownerRemoveNftTypeAndRank(
5007                        data: &[u8],
5008                    ) -> alloy_sol_types::Result<
5009                        HoprStakingProxyForNetworkRegistryCalls,
5010                    > {
5011                        <ownerRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5012                                data,
5013                            )
5014                            .map(
5015                                HoprStakingProxyForNetworkRegistryCalls::ownerRemoveNftTypeAndRank,
5016                            )
5017                    }
5018                    ownerRemoveNftTypeAndRank
5019                },
5020                {
5021                    fn ownerBatchAddSpecialNftTypeAndRank(
5022                        data: &[u8],
5023                    ) -> alloy_sol_types::Result<
5024                        HoprStakingProxyForNetworkRegistryCalls,
5025                    > {
5026                        <ownerBatchAddSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5027                                data,
5028                            )
5029                            .map(
5030                                HoprStakingProxyForNetworkRegistryCalls::ownerBatchAddSpecialNftTypeAndRank,
5031                            )
5032                    }
5033                    ownerBatchAddSpecialNftTypeAndRank
5034                },
5035                {
5036                    fn renounceOwnership(
5037                        data: &[u8],
5038                    ) -> alloy_sol_types::Result<
5039                        HoprStakingProxyForNetworkRegistryCalls,
5040                    > {
5041                        <renounceOwnershipCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5042                                data,
5043                            )
5044                            .map(
5045                                HoprStakingProxyForNetworkRegistryCalls::renounceOwnership,
5046                            )
5047                    }
5048                    renounceOwnership
5049                },
5050                {
5051                    fn updateStakeContract(
5052                        data: &[u8],
5053                    ) -> alloy_sol_types::Result<
5054                        HoprStakingProxyForNetworkRegistryCalls,
5055                    > {
5056                        <updateStakeContractCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5057                                data,
5058                            )
5059                            .map(
5060                                HoprStakingProxyForNetworkRegistryCalls::updateStakeContract,
5061                            )
5062                    }
5063                    updateStakeContract
5064                },
5065                {
5066                    fn owner(
5067                        data: &[u8],
5068                    ) -> alloy_sol_types::Result<
5069                        HoprStakingProxyForNetworkRegistryCalls,
5070                    > {
5071                        <ownerCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5072                                data,
5073                            )
5074                            .map(HoprStakingProxyForNetworkRegistryCalls::owner)
5075                    }
5076                    owner
5077                },
5078                {
5079                    fn ownerAddNftTypeAndRank(
5080                        data: &[u8],
5081                    ) -> alloy_sol_types::Result<
5082                        HoprStakingProxyForNetworkRegistryCalls,
5083                    > {
5084                        <ownerAddNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5085                                data,
5086                            )
5087                            .map(
5088                                HoprStakingProxyForNetworkRegistryCalls::ownerAddNftTypeAndRank,
5089                            )
5090                    }
5091                    ownerAddNftTypeAndRank
5092                },
5093                {
5094                    fn ownerBatchRemoveSpecialNftTypeAndRank(
5095                        data: &[u8],
5096                    ) -> alloy_sol_types::Result<
5097                        HoprStakingProxyForNetworkRegistryCalls,
5098                    > {
5099                        <ownerBatchRemoveSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5100                                data,
5101                            )
5102                            .map(
5103                                HoprStakingProxyForNetworkRegistryCalls::ownerBatchRemoveSpecialNftTypeAndRank,
5104                            )
5105                    }
5106                    ownerBatchRemoveSpecialNftTypeAndRank
5107                },
5108                {
5109                    fn maxAllowedRegistrations(
5110                        data: &[u8],
5111                    ) -> alloy_sol_types::Result<
5112                        HoprStakingProxyForNetworkRegistryCalls,
5113                    > {
5114                        <maxAllowedRegistrationsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5115                                data,
5116                            )
5117                            .map(
5118                                HoprStakingProxyForNetworkRegistryCalls::maxAllowedRegistrations,
5119                            )
5120                    }
5121                    maxAllowedRegistrations
5122                },
5123                {
5124                    fn maxRegistrationsPerSpecialNft(
5125                        data: &[u8],
5126                    ) -> alloy_sol_types::Result<
5127                        HoprStakingProxyForNetworkRegistryCalls,
5128                    > {
5129                        <maxRegistrationsPerSpecialNftCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5130                                data,
5131                            )
5132                            .map(
5133                                HoprStakingProxyForNetworkRegistryCalls::maxRegistrationsPerSpecialNft,
5134                            )
5135                    }
5136                    maxRegistrationsPerSpecialNft
5137                },
5138                {
5139                    fn canOperateFor(
5140                        data: &[u8],
5141                    ) -> alloy_sol_types::Result<
5142                        HoprStakingProxyForNetworkRegistryCalls,
5143                    > {
5144                        <canOperateForCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5145                                data,
5146                            )
5147                            .map(HoprStakingProxyForNetworkRegistryCalls::canOperateFor)
5148                    }
5149                    canOperateFor
5150                },
5151                {
5152                    fn eligibleNftTypeAndRank(
5153                        data: &[u8],
5154                    ) -> alloy_sol_types::Result<
5155                        HoprStakingProxyForNetworkRegistryCalls,
5156                    > {
5157                        <eligibleNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5158                                data,
5159                            )
5160                            .map(
5161                                HoprStakingProxyForNetworkRegistryCalls::eligibleNftTypeAndRank,
5162                            )
5163                    }
5164                    eligibleNftTypeAndRank
5165                },
5166                {
5167                    fn ownerUpdateThreshold(
5168                        data: &[u8],
5169                    ) -> alloy_sol_types::Result<
5170                        HoprStakingProxyForNetworkRegistryCalls,
5171                    > {
5172                        <ownerUpdateThresholdCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5173                                data,
5174                            )
5175                            .map(
5176                                HoprStakingProxyForNetworkRegistryCalls::ownerUpdateThreshold,
5177                            )
5178                    }
5179                    ownerUpdateThreshold
5180                },
5181                {
5182                    fn stakeThreshold(
5183                        data: &[u8],
5184                    ) -> alloy_sol_types::Result<
5185                        HoprStakingProxyForNetworkRegistryCalls,
5186                    > {
5187                        <stakeThresholdCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5188                                data,
5189                            )
5190                            .map(HoprStakingProxyForNetworkRegistryCalls::stakeThreshold)
5191                    }
5192                    stakeThreshold
5193                },
5194                {
5195                    fn transferOwnership(
5196                        data: &[u8],
5197                    ) -> alloy_sol_types::Result<
5198                        HoprStakingProxyForNetworkRegistryCalls,
5199                    > {
5200                        <transferOwnershipCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5201                                data,
5202                            )
5203                            .map(
5204                                HoprStakingProxyForNetworkRegistryCalls::transferOwnership,
5205                            )
5206                    }
5207                    transferOwnership
5208                },
5209                {
5210                    fn ownerBatchRemoveNftTypeAndRank(
5211                        data: &[u8],
5212                    ) -> alloy_sol_types::Result<
5213                        HoprStakingProxyForNetworkRegistryCalls,
5214                    > {
5215                        <ownerBatchRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
5216                                data,
5217                            )
5218                            .map(
5219                                HoprStakingProxyForNetworkRegistryCalls::ownerBatchRemoveNftTypeAndRank,
5220                            )
5221                    }
5222                    ownerBatchRemoveNftTypeAndRank
5223                },
5224            ];
5225            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
5226                return Err(
5227                    alloy_sol_types::Error::unknown_selector(
5228                        <Self as alloy_sol_types::SolInterface>::NAME,
5229                        selector,
5230                    ),
5231                );
5232            };
5233            DECODE_VALIDATE_SHIMS[idx](data)
5234        }
5235        #[inline]
5236        fn abi_encoded_size(&self) -> usize {
5237            match self {
5238                Self::canOperateFor(inner) => {
5239                    <canOperateForCall as alloy_sol_types::SolCall>::abi_encoded_size(
5240                        inner,
5241                    )
5242                }
5243                Self::eligibleNftTypeAndRank(inner) => {
5244                    <eligibleNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encoded_size(
5245                        inner,
5246                    )
5247                }
5248                Self::maxAllowedRegistrations(inner) => {
5249                    <maxAllowedRegistrationsCall as alloy_sol_types::SolCall>::abi_encoded_size(
5250                        inner,
5251                    )
5252                }
5253                Self::maxRegistrationsPerSpecialNft(inner) => {
5254                    <maxRegistrationsPerSpecialNftCall as alloy_sol_types::SolCall>::abi_encoded_size(
5255                        inner,
5256                    )
5257                }
5258                Self::owner(inner) => {
5259                    <ownerCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
5260                }
5261                Self::ownerAddNftTypeAndRank(inner) => {
5262                    <ownerAddNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encoded_size(
5263                        inner,
5264                    )
5265                }
5266                Self::ownerBatchAddNftTypeAndRank(inner) => {
5267                    <ownerBatchAddNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encoded_size(
5268                        inner,
5269                    )
5270                }
5271                Self::ownerBatchAddSpecialNftTypeAndRank(inner) => {
5272                    <ownerBatchAddSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encoded_size(
5273                        inner,
5274                    )
5275                }
5276                Self::ownerBatchRemoveNftTypeAndRank(inner) => {
5277                    <ownerBatchRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encoded_size(
5278                        inner,
5279                    )
5280                }
5281                Self::ownerBatchRemoveSpecialNftTypeAndRank(inner) => {
5282                    <ownerBatchRemoveSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encoded_size(
5283                        inner,
5284                    )
5285                }
5286                Self::ownerRemoveNftTypeAndRank(inner) => {
5287                    <ownerRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encoded_size(
5288                        inner,
5289                    )
5290                }
5291                Self::ownerUpdateThreshold(inner) => {
5292                    <ownerUpdateThresholdCall as alloy_sol_types::SolCall>::abi_encoded_size(
5293                        inner,
5294                    )
5295                }
5296                Self::renounceOwnership(inner) => {
5297                    <renounceOwnershipCall as alloy_sol_types::SolCall>::abi_encoded_size(
5298                        inner,
5299                    )
5300                }
5301                Self::specialNftTypeAndRank(inner) => {
5302                    <specialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encoded_size(
5303                        inner,
5304                    )
5305                }
5306                Self::stakeContract(inner) => {
5307                    <stakeContractCall as alloy_sol_types::SolCall>::abi_encoded_size(
5308                        inner,
5309                    )
5310                }
5311                Self::stakeThreshold(inner) => {
5312                    <stakeThresholdCall as alloy_sol_types::SolCall>::abi_encoded_size(
5313                        inner,
5314                    )
5315                }
5316                Self::transferOwnership(inner) => {
5317                    <transferOwnershipCall as alloy_sol_types::SolCall>::abi_encoded_size(
5318                        inner,
5319                    )
5320                }
5321                Self::updateStakeContract(inner) => {
5322                    <updateStakeContractCall as alloy_sol_types::SolCall>::abi_encoded_size(
5323                        inner,
5324                    )
5325                }
5326            }
5327        }
5328        #[inline]
5329        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
5330            match self {
5331                Self::canOperateFor(inner) => {
5332                    <canOperateForCall as alloy_sol_types::SolCall>::abi_encode_raw(
5333                        inner,
5334                        out,
5335                    )
5336                }
5337                Self::eligibleNftTypeAndRank(inner) => {
5338                    <eligibleNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encode_raw(
5339                        inner,
5340                        out,
5341                    )
5342                }
5343                Self::maxAllowedRegistrations(inner) => {
5344                    <maxAllowedRegistrationsCall as alloy_sol_types::SolCall>::abi_encode_raw(
5345                        inner,
5346                        out,
5347                    )
5348                }
5349                Self::maxRegistrationsPerSpecialNft(inner) => {
5350                    <maxRegistrationsPerSpecialNftCall as alloy_sol_types::SolCall>::abi_encode_raw(
5351                        inner,
5352                        out,
5353                    )
5354                }
5355                Self::owner(inner) => {
5356                    <ownerCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
5357                }
5358                Self::ownerAddNftTypeAndRank(inner) => {
5359                    <ownerAddNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encode_raw(
5360                        inner,
5361                        out,
5362                    )
5363                }
5364                Self::ownerBatchAddNftTypeAndRank(inner) => {
5365                    <ownerBatchAddNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encode_raw(
5366                        inner,
5367                        out,
5368                    )
5369                }
5370                Self::ownerBatchAddSpecialNftTypeAndRank(inner) => {
5371                    <ownerBatchAddSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encode_raw(
5372                        inner,
5373                        out,
5374                    )
5375                }
5376                Self::ownerBatchRemoveNftTypeAndRank(inner) => {
5377                    <ownerBatchRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encode_raw(
5378                        inner,
5379                        out,
5380                    )
5381                }
5382                Self::ownerBatchRemoveSpecialNftTypeAndRank(inner) => {
5383                    <ownerBatchRemoveSpecialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encode_raw(
5384                        inner,
5385                        out,
5386                    )
5387                }
5388                Self::ownerRemoveNftTypeAndRank(inner) => {
5389                    <ownerRemoveNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encode_raw(
5390                        inner,
5391                        out,
5392                    )
5393                }
5394                Self::ownerUpdateThreshold(inner) => {
5395                    <ownerUpdateThresholdCall as alloy_sol_types::SolCall>::abi_encode_raw(
5396                        inner,
5397                        out,
5398                    )
5399                }
5400                Self::renounceOwnership(inner) => {
5401                    <renounceOwnershipCall as alloy_sol_types::SolCall>::abi_encode_raw(
5402                        inner,
5403                        out,
5404                    )
5405                }
5406                Self::specialNftTypeAndRank(inner) => {
5407                    <specialNftTypeAndRankCall as alloy_sol_types::SolCall>::abi_encode_raw(
5408                        inner,
5409                        out,
5410                    )
5411                }
5412                Self::stakeContract(inner) => {
5413                    <stakeContractCall as alloy_sol_types::SolCall>::abi_encode_raw(
5414                        inner,
5415                        out,
5416                    )
5417                }
5418                Self::stakeThreshold(inner) => {
5419                    <stakeThresholdCall as alloy_sol_types::SolCall>::abi_encode_raw(
5420                        inner,
5421                        out,
5422                    )
5423                }
5424                Self::transferOwnership(inner) => {
5425                    <transferOwnershipCall as alloy_sol_types::SolCall>::abi_encode_raw(
5426                        inner,
5427                        out,
5428                    )
5429                }
5430                Self::updateStakeContract(inner) => {
5431                    <updateStakeContractCall as alloy_sol_types::SolCall>::abi_encode_raw(
5432                        inner,
5433                        out,
5434                    )
5435                }
5436            }
5437        }
5438    }
5439    ///Container for all the [`HoprStakingProxyForNetworkRegistry`](self) custom errors.
5440    #[derive(serde::Serialize, serde::Deserialize)]
5441    #[derive(Debug, PartialEq, Eq, Hash)]
5442    pub enum HoprStakingProxyForNetworkRegistryErrors {
5443        #[allow(missing_docs)]
5444        MaxRegistrationsMismatch(MaxRegistrationsMismatch),
5445        #[allow(missing_docs)]
5446        NftRanksMismatch(NftRanksMismatch),
5447        #[allow(missing_docs)]
5448        SameStakingThreshold(SameStakingThreshold),
5449    }
5450    #[automatically_derived]
5451    impl HoprStakingProxyForNetworkRegistryErrors {
5452        /// All the selectors of this enum.
5453        ///
5454        /// Note that the selectors might not be in the same order as the variants.
5455        /// No guarantees are made about the order of the selectors.
5456        ///
5457        /// Prefer using `SolInterface` methods instead.
5458        pub const SELECTORS: &'static [[u8; 4usize]] = &[
5459            [25u8, 121u8, 16u8, 233u8],
5460            [32u8, 228u8, 123u8, 19u8],
5461            [72u8, 133u8, 245u8, 155u8],
5462        ];
5463    }
5464    #[automatically_derived]
5465    impl alloy_sol_types::SolInterface for HoprStakingProxyForNetworkRegistryErrors {
5466        const NAME: &'static str = "HoprStakingProxyForNetworkRegistryErrors";
5467        const MIN_DATA_LENGTH: usize = 0usize;
5468        const COUNT: usize = 3usize;
5469        #[inline]
5470        fn selector(&self) -> [u8; 4] {
5471            match self {
5472                Self::MaxRegistrationsMismatch(_) => {
5473                    <MaxRegistrationsMismatch as alloy_sol_types::SolError>::SELECTOR
5474                }
5475                Self::NftRanksMismatch(_) => {
5476                    <NftRanksMismatch as alloy_sol_types::SolError>::SELECTOR
5477                }
5478                Self::SameStakingThreshold(_) => {
5479                    <SameStakingThreshold as alloy_sol_types::SolError>::SELECTOR
5480                }
5481            }
5482        }
5483        #[inline]
5484        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
5485            Self::SELECTORS.get(i).copied()
5486        }
5487        #[inline]
5488        fn valid_selector(selector: [u8; 4]) -> bool {
5489            Self::SELECTORS.binary_search(&selector).is_ok()
5490        }
5491        #[inline]
5492        #[allow(non_snake_case)]
5493        fn abi_decode_raw(
5494            selector: [u8; 4],
5495            data: &[u8],
5496        ) -> alloy_sol_types::Result<Self> {
5497            static DECODE_SHIMS: &[fn(
5498                &[u8],
5499            ) -> alloy_sol_types::Result<HoprStakingProxyForNetworkRegistryErrors>] = &[
5500                {
5501                    fn MaxRegistrationsMismatch(
5502                        data: &[u8],
5503                    ) -> alloy_sol_types::Result<
5504                        HoprStakingProxyForNetworkRegistryErrors,
5505                    > {
5506                        <MaxRegistrationsMismatch as alloy_sol_types::SolError>::abi_decode_raw(
5507                                data,
5508                            )
5509                            .map(
5510                                HoprStakingProxyForNetworkRegistryErrors::MaxRegistrationsMismatch,
5511                            )
5512                    }
5513                    MaxRegistrationsMismatch
5514                },
5515                {
5516                    fn SameStakingThreshold(
5517                        data: &[u8],
5518                    ) -> alloy_sol_types::Result<
5519                        HoprStakingProxyForNetworkRegistryErrors,
5520                    > {
5521                        <SameStakingThreshold as alloy_sol_types::SolError>::abi_decode_raw(
5522                                data,
5523                            )
5524                            .map(
5525                                HoprStakingProxyForNetworkRegistryErrors::SameStakingThreshold,
5526                            )
5527                    }
5528                    SameStakingThreshold
5529                },
5530                {
5531                    fn NftRanksMismatch(
5532                        data: &[u8],
5533                    ) -> alloy_sol_types::Result<
5534                        HoprStakingProxyForNetworkRegistryErrors,
5535                    > {
5536                        <NftRanksMismatch as alloy_sol_types::SolError>::abi_decode_raw(
5537                                data,
5538                            )
5539                            .map(
5540                                HoprStakingProxyForNetworkRegistryErrors::NftRanksMismatch,
5541                            )
5542                    }
5543                    NftRanksMismatch
5544                },
5545            ];
5546            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
5547                return Err(
5548                    alloy_sol_types::Error::unknown_selector(
5549                        <Self as alloy_sol_types::SolInterface>::NAME,
5550                        selector,
5551                    ),
5552                );
5553            };
5554            DECODE_SHIMS[idx](data)
5555        }
5556        #[inline]
5557        #[allow(non_snake_case)]
5558        fn abi_decode_raw_validate(
5559            selector: [u8; 4],
5560            data: &[u8],
5561        ) -> alloy_sol_types::Result<Self> {
5562            static DECODE_VALIDATE_SHIMS: &[fn(
5563                &[u8],
5564            ) -> alloy_sol_types::Result<HoprStakingProxyForNetworkRegistryErrors>] = &[
5565                {
5566                    fn MaxRegistrationsMismatch(
5567                        data: &[u8],
5568                    ) -> alloy_sol_types::Result<
5569                        HoprStakingProxyForNetworkRegistryErrors,
5570                    > {
5571                        <MaxRegistrationsMismatch as alloy_sol_types::SolError>::abi_decode_raw_validate(
5572                                data,
5573                            )
5574                            .map(
5575                                HoprStakingProxyForNetworkRegistryErrors::MaxRegistrationsMismatch,
5576                            )
5577                    }
5578                    MaxRegistrationsMismatch
5579                },
5580                {
5581                    fn SameStakingThreshold(
5582                        data: &[u8],
5583                    ) -> alloy_sol_types::Result<
5584                        HoprStakingProxyForNetworkRegistryErrors,
5585                    > {
5586                        <SameStakingThreshold as alloy_sol_types::SolError>::abi_decode_raw_validate(
5587                                data,
5588                            )
5589                            .map(
5590                                HoprStakingProxyForNetworkRegistryErrors::SameStakingThreshold,
5591                            )
5592                    }
5593                    SameStakingThreshold
5594                },
5595                {
5596                    fn NftRanksMismatch(
5597                        data: &[u8],
5598                    ) -> alloy_sol_types::Result<
5599                        HoprStakingProxyForNetworkRegistryErrors,
5600                    > {
5601                        <NftRanksMismatch as alloy_sol_types::SolError>::abi_decode_raw_validate(
5602                                data,
5603                            )
5604                            .map(
5605                                HoprStakingProxyForNetworkRegistryErrors::NftRanksMismatch,
5606                            )
5607                    }
5608                    NftRanksMismatch
5609                },
5610            ];
5611            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
5612                return Err(
5613                    alloy_sol_types::Error::unknown_selector(
5614                        <Self as alloy_sol_types::SolInterface>::NAME,
5615                        selector,
5616                    ),
5617                );
5618            };
5619            DECODE_VALIDATE_SHIMS[idx](data)
5620        }
5621        #[inline]
5622        fn abi_encoded_size(&self) -> usize {
5623            match self {
5624                Self::MaxRegistrationsMismatch(inner) => {
5625                    <MaxRegistrationsMismatch as alloy_sol_types::SolError>::abi_encoded_size(
5626                        inner,
5627                    )
5628                }
5629                Self::NftRanksMismatch(inner) => {
5630                    <NftRanksMismatch as alloy_sol_types::SolError>::abi_encoded_size(
5631                        inner,
5632                    )
5633                }
5634                Self::SameStakingThreshold(inner) => {
5635                    <SameStakingThreshold as alloy_sol_types::SolError>::abi_encoded_size(
5636                        inner,
5637                    )
5638                }
5639            }
5640        }
5641        #[inline]
5642        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
5643            match self {
5644                Self::MaxRegistrationsMismatch(inner) => {
5645                    <MaxRegistrationsMismatch as alloy_sol_types::SolError>::abi_encode_raw(
5646                        inner,
5647                        out,
5648                    )
5649                }
5650                Self::NftRanksMismatch(inner) => {
5651                    <NftRanksMismatch as alloy_sol_types::SolError>::abi_encode_raw(
5652                        inner,
5653                        out,
5654                    )
5655                }
5656                Self::SameStakingThreshold(inner) => {
5657                    <SameStakingThreshold as alloy_sol_types::SolError>::abi_encode_raw(
5658                        inner,
5659                        out,
5660                    )
5661                }
5662            }
5663        }
5664    }
5665    ///Container for all the [`HoprStakingProxyForNetworkRegistry`](self) events.
5666    #[derive(serde::Serialize, serde::Deserialize)]
5667    #[derive(Debug, PartialEq, Eq, Hash)]
5668    pub enum HoprStakingProxyForNetworkRegistryEvents {
5669        #[allow(missing_docs)]
5670        NftTypeAndRankAdded(NftTypeAndRankAdded),
5671        #[allow(missing_docs)]
5672        NftTypeAndRankRemoved(NftTypeAndRankRemoved),
5673        #[allow(missing_docs)]
5674        OwnershipTransferred(OwnershipTransferred),
5675        #[allow(missing_docs)]
5676        SpecialNftTypeAndRankAdded(SpecialNftTypeAndRankAdded),
5677        #[allow(missing_docs)]
5678        SpecialNftTypeAndRankRemoved(SpecialNftTypeAndRankRemoved),
5679        #[allow(missing_docs)]
5680        StakeContractUpdated(StakeContractUpdated),
5681        #[allow(missing_docs)]
5682        ThresholdUpdated(ThresholdUpdated),
5683    }
5684    #[automatically_derived]
5685    impl HoprStakingProxyForNetworkRegistryEvents {
5686        /// All the selectors of this enum.
5687        ///
5688        /// Note that the selectors might not be in the same order as the variants.
5689        /// No guarantees are made about the order of the selectors.
5690        ///
5691        /// Prefer using `SolInterface` methods instead.
5692        pub const SELECTORS: &'static [[u8; 32usize]] = &[
5693            [
5694                35u8, 96u8, 238u8, 62u8, 119u8, 72u8, 84u8, 65u8, 207u8, 160u8, 126u8,
5695                48u8, 232u8, 220u8, 91u8, 3u8, 31u8, 172u8, 56u8, 69u8, 86u8, 71u8,
5696                200u8, 154u8, 118u8, 52u8, 52u8, 245u8, 135u8, 51u8, 252u8, 193u8,
5697            ],
5698            [
5699                87u8, 59u8, 191u8, 166u8, 121u8, 175u8, 111u8, 220u8, 219u8, 217u8,
5700                207u8, 25u8, 28u8, 94u8, 243u8, 229u8, 38u8, 89u8, 154u8, 194u8, 191u8,
5701                117u8, 233u8, 23u8, 125u8, 71u8, 173u8, 184u8, 83u8, 11u8, 156u8, 105u8,
5702            ],
5703            [
5704                139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8,
5705                31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8,
5706                218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8,
5707            ],
5708            [
5709                173u8, 250u8, 142u8, 203u8, 33u8, 182u8, 150u8, 46u8, 188u8, 208u8,
5710                173u8, 189u8, 154u8, 185u8, 133u8, 183u8, 180u8, 197u8, 181u8, 235u8,
5711                59u8, 13u8, 234u8, 214u8, 131u8, 23u8, 21u8, 101u8, 199u8, 191u8, 225u8,
5712                113u8,
5713            ],
5714            [
5715                177u8, 50u8, 62u8, 66u8, 217u8, 123u8, 43u8, 61u8, 69u8, 249u8, 212u8,
5716                100u8, 27u8, 244u8, 182u8, 179u8, 249u8, 208u8, 208u8, 30u8, 144u8,
5717                131u8, 42u8, 231u8, 183u8, 65u8, 49u8, 9u8, 183u8, 165u8, 211u8, 71u8,
5718            ],
5719            [
5720                219u8, 117u8, 25u8, 145u8, 3u8, 80u8, 75u8, 209u8, 211u8, 101u8, 61u8,
5721                231u8, 88u8, 212u8, 41u8, 91u8, 240u8, 13u8, 69u8, 135u8, 225u8, 213u8,
5722                61u8, 252u8, 17u8, 68u8, 100u8, 204u8, 71u8, 237u8, 151u8, 183u8,
5723            ],
5724            [
5725                228u8, 59u8, 245u8, 245u8, 248u8, 161u8, 33u8, 25u8, 48u8, 229u8, 114u8,
5726                107u8, 160u8, 171u8, 206u8, 172u8, 177u8, 116u8, 143u8, 151u8, 178u8,
5727                150u8, 109u8, 179u8, 10u8, 129u8, 139u8, 161u8, 9u8, 97u8, 203u8, 204u8,
5728            ],
5729        ];
5730    }
5731    #[automatically_derived]
5732    impl alloy_sol_types::SolEventInterface
5733    for HoprStakingProxyForNetworkRegistryEvents {
5734        const NAME: &'static str = "HoprStakingProxyForNetworkRegistryEvents";
5735        const COUNT: usize = 7usize;
5736        fn decode_raw_log(
5737            topics: &[alloy_sol_types::Word],
5738            data: &[u8],
5739        ) -> alloy_sol_types::Result<Self> {
5740            match topics.first().copied() {
5741                Some(
5742                    <NftTypeAndRankAdded as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
5743                ) => {
5744                    <NftTypeAndRankAdded as alloy_sol_types::SolEvent>::decode_raw_log(
5745                            topics,
5746                            data,
5747                        )
5748                        .map(Self::NftTypeAndRankAdded)
5749                }
5750                Some(
5751                    <NftTypeAndRankRemoved as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
5752                ) => {
5753                    <NftTypeAndRankRemoved as alloy_sol_types::SolEvent>::decode_raw_log(
5754                            topics,
5755                            data,
5756                        )
5757                        .map(Self::NftTypeAndRankRemoved)
5758                }
5759                Some(
5760                    <OwnershipTransferred as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
5761                ) => {
5762                    <OwnershipTransferred as alloy_sol_types::SolEvent>::decode_raw_log(
5763                            topics,
5764                            data,
5765                        )
5766                        .map(Self::OwnershipTransferred)
5767                }
5768                Some(
5769                    <SpecialNftTypeAndRankAdded as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
5770                ) => {
5771                    <SpecialNftTypeAndRankAdded as alloy_sol_types::SolEvent>::decode_raw_log(
5772                            topics,
5773                            data,
5774                        )
5775                        .map(Self::SpecialNftTypeAndRankAdded)
5776                }
5777                Some(
5778                    <SpecialNftTypeAndRankRemoved as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
5779                ) => {
5780                    <SpecialNftTypeAndRankRemoved as alloy_sol_types::SolEvent>::decode_raw_log(
5781                            topics,
5782                            data,
5783                        )
5784                        .map(Self::SpecialNftTypeAndRankRemoved)
5785                }
5786                Some(
5787                    <StakeContractUpdated as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
5788                ) => {
5789                    <StakeContractUpdated as alloy_sol_types::SolEvent>::decode_raw_log(
5790                            topics,
5791                            data,
5792                        )
5793                        .map(Self::StakeContractUpdated)
5794                }
5795                Some(<ThresholdUpdated as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
5796                    <ThresholdUpdated as alloy_sol_types::SolEvent>::decode_raw_log(
5797                            topics,
5798                            data,
5799                        )
5800                        .map(Self::ThresholdUpdated)
5801                }
5802                _ => {
5803                    alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog {
5804                        name: <Self as alloy_sol_types::SolEventInterface>::NAME,
5805                        log: alloy_sol_types::private::Box::new(
5806                            alloy_sol_types::private::LogData::new_unchecked(
5807                                topics.to_vec(),
5808                                data.to_vec().into(),
5809                            ),
5810                        ),
5811                    })
5812                }
5813            }
5814        }
5815    }
5816    #[automatically_derived]
5817    impl alloy_sol_types::private::IntoLogData
5818    for HoprStakingProxyForNetworkRegistryEvents {
5819        fn to_log_data(&self) -> alloy_sol_types::private::LogData {
5820            match self {
5821                Self::NftTypeAndRankAdded(inner) => {
5822                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
5823                }
5824                Self::NftTypeAndRankRemoved(inner) => {
5825                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
5826                }
5827                Self::OwnershipTransferred(inner) => {
5828                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
5829                }
5830                Self::SpecialNftTypeAndRankAdded(inner) => {
5831                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
5832                }
5833                Self::SpecialNftTypeAndRankRemoved(inner) => {
5834                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
5835                }
5836                Self::StakeContractUpdated(inner) => {
5837                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
5838                }
5839                Self::ThresholdUpdated(inner) => {
5840                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
5841                }
5842            }
5843        }
5844        fn into_log_data(self) -> alloy_sol_types::private::LogData {
5845            match self {
5846                Self::NftTypeAndRankAdded(inner) => {
5847                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
5848                }
5849                Self::NftTypeAndRankRemoved(inner) => {
5850                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
5851                }
5852                Self::OwnershipTransferred(inner) => {
5853                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
5854                }
5855                Self::SpecialNftTypeAndRankAdded(inner) => {
5856                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
5857                }
5858                Self::SpecialNftTypeAndRankRemoved(inner) => {
5859                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
5860                }
5861                Self::StakeContractUpdated(inner) => {
5862                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
5863                }
5864                Self::ThresholdUpdated(inner) => {
5865                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
5866                }
5867            }
5868        }
5869    }
5870    use alloy::contract as alloy_contract;
5871    /**Creates a new wrapper around an on-chain [`HoprStakingProxyForNetworkRegistry`](self) contract instance.
5872
5873See the [wrapper's documentation](`HoprStakingProxyForNetworkRegistryInstance`) for more details.*/
5874    #[inline]
5875    pub const fn new<
5876        P: alloy_contract::private::Provider<N>,
5877        N: alloy_contract::private::Network,
5878    >(
5879        address: alloy_sol_types::private::Address,
5880        provider: P,
5881    ) -> HoprStakingProxyForNetworkRegistryInstance<P, N> {
5882        HoprStakingProxyForNetworkRegistryInstance::<P, N>::new(address, provider)
5883    }
5884    /**Deploys this contract using the given `provider` and constructor arguments, if any.
5885
5886Returns a new instance of the contract, if the deployment was successful.
5887
5888For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
5889    #[inline]
5890    pub fn deploy<
5891        P: alloy_contract::private::Provider<N>,
5892        N: alloy_contract::private::Network,
5893    >(
5894        provider: P,
5895        _stakeContract: alloy::sol_types::private::Address,
5896        _newOwner: alloy::sol_types::private::Address,
5897        _minStake: alloy::sol_types::private::primitives::aliases::U256,
5898    ) -> impl ::core::future::Future<
5899        Output = alloy_contract::Result<HoprStakingProxyForNetworkRegistryInstance<P, N>>,
5900    > {
5901        HoprStakingProxyForNetworkRegistryInstance::<
5902            P,
5903            N,
5904        >::deploy(provider, _stakeContract, _newOwner, _minStake)
5905    }
5906    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
5907and constructor arguments, if any.
5908
5909This is a simple wrapper around creating a `RawCallBuilder` with the data set to
5910the bytecode concatenated with the constructor's ABI-encoded arguments.*/
5911    #[inline]
5912    pub fn deploy_builder<
5913        P: alloy_contract::private::Provider<N>,
5914        N: alloy_contract::private::Network,
5915    >(
5916        provider: P,
5917        _stakeContract: alloy::sol_types::private::Address,
5918        _newOwner: alloy::sol_types::private::Address,
5919        _minStake: alloy::sol_types::private::primitives::aliases::U256,
5920    ) -> alloy_contract::RawCallBuilder<P, N> {
5921        HoprStakingProxyForNetworkRegistryInstance::<
5922            P,
5923            N,
5924        >::deploy_builder(provider, _stakeContract, _newOwner, _minStake)
5925    }
5926    /**A [`HoprStakingProxyForNetworkRegistry`](self) instance.
5927
5928Contains type-safe methods for interacting with an on-chain instance of the
5929[`HoprStakingProxyForNetworkRegistry`](self) contract located at a given `address`, using a given
5930provider `P`.
5931
5932If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
5933documentation on how to provide it), the `deploy` and `deploy_builder` methods can
5934be used to deploy a new instance of the contract.
5935
5936See the [module-level documentation](self) for all the available methods.*/
5937    #[derive(Clone)]
5938    pub struct HoprStakingProxyForNetworkRegistryInstance<
5939        P,
5940        N = alloy_contract::private::Ethereum,
5941    > {
5942        address: alloy_sol_types::private::Address,
5943        provider: P,
5944        _network: ::core::marker::PhantomData<N>,
5945    }
5946    #[automatically_derived]
5947    impl<P, N> ::core::fmt::Debug for HoprStakingProxyForNetworkRegistryInstance<P, N> {
5948        #[inline]
5949        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
5950            f.debug_tuple("HoprStakingProxyForNetworkRegistryInstance")
5951                .field(&self.address)
5952                .finish()
5953        }
5954    }
5955    /// Instantiation and getters/setters.
5956    #[automatically_derived]
5957    impl<
5958        P: alloy_contract::private::Provider<N>,
5959        N: alloy_contract::private::Network,
5960    > HoprStakingProxyForNetworkRegistryInstance<P, N> {
5961        /**Creates a new wrapper around an on-chain [`HoprStakingProxyForNetworkRegistry`](self) contract instance.
5962
5963See the [wrapper's documentation](`HoprStakingProxyForNetworkRegistryInstance`) for more details.*/
5964        #[inline]
5965        pub const fn new(
5966            address: alloy_sol_types::private::Address,
5967            provider: P,
5968        ) -> Self {
5969            Self {
5970                address,
5971                provider,
5972                _network: ::core::marker::PhantomData,
5973            }
5974        }
5975        /**Deploys this contract using the given `provider` and constructor arguments, if any.
5976
5977Returns a new instance of the contract, if the deployment was successful.
5978
5979For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
5980        #[inline]
5981        pub async fn deploy(
5982            provider: P,
5983            _stakeContract: alloy::sol_types::private::Address,
5984            _newOwner: alloy::sol_types::private::Address,
5985            _minStake: alloy::sol_types::private::primitives::aliases::U256,
5986        ) -> alloy_contract::Result<HoprStakingProxyForNetworkRegistryInstance<P, N>> {
5987            let call_builder = Self::deploy_builder(
5988                provider,
5989                _stakeContract,
5990                _newOwner,
5991                _minStake,
5992            );
5993            let contract_address = call_builder.deploy().await?;
5994            Ok(Self::new(contract_address, call_builder.provider))
5995        }
5996        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
5997and constructor arguments, if any.
5998
5999This is a simple wrapper around creating a `RawCallBuilder` with the data set to
6000the bytecode concatenated with the constructor's ABI-encoded arguments.*/
6001        #[inline]
6002        pub fn deploy_builder(
6003            provider: P,
6004            _stakeContract: alloy::sol_types::private::Address,
6005            _newOwner: alloy::sol_types::private::Address,
6006            _minStake: alloy::sol_types::private::primitives::aliases::U256,
6007        ) -> alloy_contract::RawCallBuilder<P, N> {
6008            alloy_contract::RawCallBuilder::new_raw_deploy(
6009                provider,
6010                [
6011                    &BYTECODE[..],
6012                    &alloy_sol_types::SolConstructor::abi_encode(
6013                        &constructorCall {
6014                            _stakeContract,
6015                            _newOwner,
6016                            _minStake,
6017                        },
6018                    )[..],
6019                ]
6020                    .concat()
6021                    .into(),
6022            )
6023        }
6024        /// Returns a reference to the address.
6025        #[inline]
6026        pub const fn address(&self) -> &alloy_sol_types::private::Address {
6027            &self.address
6028        }
6029        /// Sets the address.
6030        #[inline]
6031        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
6032            self.address = address;
6033        }
6034        /// Sets the address and returns `self`.
6035        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
6036            self.set_address(address);
6037            self
6038        }
6039        /// Returns a reference to the provider.
6040        #[inline]
6041        pub const fn provider(&self) -> &P {
6042            &self.provider
6043        }
6044    }
6045    impl<P: ::core::clone::Clone, N> HoprStakingProxyForNetworkRegistryInstance<&P, N> {
6046        /// Clones the provider and returns a new instance with the cloned provider.
6047        #[inline]
6048        pub fn with_cloned_provider(
6049            self,
6050        ) -> HoprStakingProxyForNetworkRegistryInstance<P, N> {
6051            HoprStakingProxyForNetworkRegistryInstance {
6052                address: self.address,
6053                provider: ::core::clone::Clone::clone(&self.provider),
6054                _network: ::core::marker::PhantomData,
6055            }
6056        }
6057    }
6058    /// Function calls.
6059    #[automatically_derived]
6060    impl<
6061        P: alloy_contract::private::Provider<N>,
6062        N: alloy_contract::private::Network,
6063    > HoprStakingProxyForNetworkRegistryInstance<P, N> {
6064        /// Creates a new call builder using this contract instance's provider and address.
6065        ///
6066        /// Note that the call can be any function call, not just those defined in this
6067        /// contract. Prefer using the other methods for building type-safe contract calls.
6068        pub fn call_builder<C: alloy_sol_types::SolCall>(
6069            &self,
6070            call: &C,
6071        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
6072            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
6073        }
6074        ///Creates a new call builder for the [`canOperateFor`] function.
6075        pub fn canOperateFor(
6076            &self,
6077            _0: alloy::sol_types::private::Address,
6078            _1: alloy::sol_types::private::Address,
6079        ) -> alloy_contract::SolCallBuilder<&P, canOperateForCall, N> {
6080            self.call_builder(&canOperateForCall { _0, _1 })
6081        }
6082        ///Creates a new call builder for the [`eligibleNftTypeAndRank`] function.
6083        pub fn eligibleNftTypeAndRank(
6084            &self,
6085            _0: alloy::sol_types::private::primitives::aliases::U256,
6086        ) -> alloy_contract::SolCallBuilder<&P, eligibleNftTypeAndRankCall, N> {
6087            self.call_builder(&eligibleNftTypeAndRankCall(_0))
6088        }
6089        ///Creates a new call builder for the [`maxAllowedRegistrations`] function.
6090        pub fn maxAllowedRegistrations(
6091            &self,
6092            account: alloy::sol_types::private::Address,
6093        ) -> alloy_contract::SolCallBuilder<&P, maxAllowedRegistrationsCall, N> {
6094            self.call_builder(
6095                &maxAllowedRegistrationsCall {
6096                    account,
6097                },
6098            )
6099        }
6100        ///Creates a new call builder for the [`maxRegistrationsPerSpecialNft`] function.
6101        pub fn maxRegistrationsPerSpecialNft(
6102            &self,
6103            _0: alloy::sol_types::private::primitives::aliases::U256,
6104        ) -> alloy_contract::SolCallBuilder<&P, maxRegistrationsPerSpecialNftCall, N> {
6105            self.call_builder(&maxRegistrationsPerSpecialNftCall(_0))
6106        }
6107        ///Creates a new call builder for the [`owner`] function.
6108        pub fn owner(&self) -> alloy_contract::SolCallBuilder<&P, ownerCall, N> {
6109            self.call_builder(&ownerCall)
6110        }
6111        ///Creates a new call builder for the [`ownerAddNftTypeAndRank`] function.
6112        pub fn ownerAddNftTypeAndRank(
6113            &self,
6114            nftType: alloy::sol_types::private::primitives::aliases::U256,
6115            nftRank: alloy::sol_types::private::String,
6116        ) -> alloy_contract::SolCallBuilder<&P, ownerAddNftTypeAndRankCall, N> {
6117            self.call_builder(
6118                &ownerAddNftTypeAndRankCall {
6119                    nftType,
6120                    nftRank,
6121                },
6122            )
6123        }
6124        ///Creates a new call builder for the [`ownerBatchAddNftTypeAndRank`] function.
6125        pub fn ownerBatchAddNftTypeAndRank(
6126            &self,
6127            nftTypes: alloy::sol_types::private::Vec<
6128                alloy::sol_types::private::primitives::aliases::U256,
6129            >,
6130            nftRanks: alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
6131        ) -> alloy_contract::SolCallBuilder<&P, ownerBatchAddNftTypeAndRankCall, N> {
6132            self.call_builder(
6133                &ownerBatchAddNftTypeAndRankCall {
6134                    nftTypes,
6135                    nftRanks,
6136                },
6137            )
6138        }
6139        ///Creates a new call builder for the [`ownerBatchAddSpecialNftTypeAndRank`] function.
6140        pub fn ownerBatchAddSpecialNftTypeAndRank(
6141            &self,
6142            nftTypes: alloy::sol_types::private::Vec<
6143                alloy::sol_types::private::primitives::aliases::U256,
6144            >,
6145            nftRanks: alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
6146            maxRegistrations: alloy::sol_types::private::Vec<
6147                alloy::sol_types::private::primitives::aliases::U256,
6148            >,
6149        ) -> alloy_contract::SolCallBuilder<
6150            &P,
6151            ownerBatchAddSpecialNftTypeAndRankCall,
6152            N,
6153        > {
6154            self.call_builder(
6155                &ownerBatchAddSpecialNftTypeAndRankCall {
6156                    nftTypes,
6157                    nftRanks,
6158                    maxRegistrations,
6159                },
6160            )
6161        }
6162        ///Creates a new call builder for the [`ownerBatchRemoveNftTypeAndRank`] function.
6163        pub fn ownerBatchRemoveNftTypeAndRank(
6164            &self,
6165            nftTypes: alloy::sol_types::private::Vec<
6166                alloy::sol_types::private::primitives::aliases::U256,
6167            >,
6168            nftRanks: alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
6169        ) -> alloy_contract::SolCallBuilder<&P, ownerBatchRemoveNftTypeAndRankCall, N> {
6170            self.call_builder(
6171                &ownerBatchRemoveNftTypeAndRankCall {
6172                    nftTypes,
6173                    nftRanks,
6174                },
6175            )
6176        }
6177        ///Creates a new call builder for the [`ownerBatchRemoveSpecialNftTypeAndRank`] function.
6178        pub fn ownerBatchRemoveSpecialNftTypeAndRank(
6179            &self,
6180            nftTypes: alloy::sol_types::private::Vec<
6181                alloy::sol_types::private::primitives::aliases::U256,
6182            >,
6183            nftRanks: alloy::sol_types::private::Vec<alloy::sol_types::private::String>,
6184        ) -> alloy_contract::SolCallBuilder<
6185            &P,
6186            ownerBatchRemoveSpecialNftTypeAndRankCall,
6187            N,
6188        > {
6189            self.call_builder(
6190                &ownerBatchRemoveSpecialNftTypeAndRankCall {
6191                    nftTypes,
6192                    nftRanks,
6193                },
6194            )
6195        }
6196        ///Creates a new call builder for the [`ownerRemoveNftTypeAndRank`] function.
6197        pub fn ownerRemoveNftTypeAndRank(
6198            &self,
6199            nftType: alloy::sol_types::private::primitives::aliases::U256,
6200            nftRank: alloy::sol_types::private::String,
6201        ) -> alloy_contract::SolCallBuilder<&P, ownerRemoveNftTypeAndRankCall, N> {
6202            self.call_builder(
6203                &ownerRemoveNftTypeAndRankCall {
6204                    nftType,
6205                    nftRank,
6206                },
6207            )
6208        }
6209        ///Creates a new call builder for the [`ownerUpdateThreshold`] function.
6210        pub fn ownerUpdateThreshold(
6211            &self,
6212            newThreshold: alloy::sol_types::private::primitives::aliases::U256,
6213        ) -> alloy_contract::SolCallBuilder<&P, ownerUpdateThresholdCall, N> {
6214            self.call_builder(
6215                &ownerUpdateThresholdCall {
6216                    newThreshold,
6217                },
6218            )
6219        }
6220        ///Creates a new call builder for the [`renounceOwnership`] function.
6221        pub fn renounceOwnership(
6222            &self,
6223        ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> {
6224            self.call_builder(&renounceOwnershipCall)
6225        }
6226        ///Creates a new call builder for the [`specialNftTypeAndRank`] function.
6227        pub fn specialNftTypeAndRank(
6228            &self,
6229            _0: alloy::sol_types::private::primitives::aliases::U256,
6230        ) -> alloy_contract::SolCallBuilder<&P, specialNftTypeAndRankCall, N> {
6231            self.call_builder(&specialNftTypeAndRankCall(_0))
6232        }
6233        ///Creates a new call builder for the [`stakeContract`] function.
6234        pub fn stakeContract(
6235            &self,
6236        ) -> alloy_contract::SolCallBuilder<&P, stakeContractCall, N> {
6237            self.call_builder(&stakeContractCall)
6238        }
6239        ///Creates a new call builder for the [`stakeThreshold`] function.
6240        pub fn stakeThreshold(
6241            &self,
6242        ) -> alloy_contract::SolCallBuilder<&P, stakeThresholdCall, N> {
6243            self.call_builder(&stakeThresholdCall)
6244        }
6245        ///Creates a new call builder for the [`transferOwnership`] function.
6246        pub fn transferOwnership(
6247            &self,
6248            newOwner: alloy::sol_types::private::Address,
6249        ) -> alloy_contract::SolCallBuilder<&P, transferOwnershipCall, N> {
6250            self.call_builder(&transferOwnershipCall { newOwner })
6251        }
6252        ///Creates a new call builder for the [`updateStakeContract`] function.
6253        pub fn updateStakeContract(
6254            &self,
6255            _stakeContract: alloy::sol_types::private::Address,
6256        ) -> alloy_contract::SolCallBuilder<&P, updateStakeContractCall, N> {
6257            self.call_builder(
6258                &updateStakeContractCall {
6259                    _stakeContract,
6260                },
6261            )
6262        }
6263    }
6264    /// Event filters.
6265    #[automatically_derived]
6266    impl<
6267        P: alloy_contract::private::Provider<N>,
6268        N: alloy_contract::private::Network,
6269    > HoprStakingProxyForNetworkRegistryInstance<P, N> {
6270        /// Creates a new event filter using this contract instance's provider and address.
6271        ///
6272        /// Note that the type can be any event, not just those defined in this contract.
6273        /// Prefer using the other methods for building type-safe event filters.
6274        pub fn event_filter<E: alloy_sol_types::SolEvent>(
6275            &self,
6276        ) -> alloy_contract::Event<&P, E, N> {
6277            alloy_contract::Event::new_sol(&self.provider, &self.address)
6278        }
6279        ///Creates a new event filter for the [`NftTypeAndRankAdded`] event.
6280        pub fn NftTypeAndRankAdded_filter(
6281            &self,
6282        ) -> alloy_contract::Event<&P, NftTypeAndRankAdded, N> {
6283            self.event_filter::<NftTypeAndRankAdded>()
6284        }
6285        ///Creates a new event filter for the [`NftTypeAndRankRemoved`] event.
6286        pub fn NftTypeAndRankRemoved_filter(
6287            &self,
6288        ) -> alloy_contract::Event<&P, NftTypeAndRankRemoved, N> {
6289            self.event_filter::<NftTypeAndRankRemoved>()
6290        }
6291        ///Creates a new event filter for the [`OwnershipTransferred`] event.
6292        pub fn OwnershipTransferred_filter(
6293            &self,
6294        ) -> alloy_contract::Event<&P, OwnershipTransferred, N> {
6295            self.event_filter::<OwnershipTransferred>()
6296        }
6297        ///Creates a new event filter for the [`SpecialNftTypeAndRankAdded`] event.
6298        pub fn SpecialNftTypeAndRankAdded_filter(
6299            &self,
6300        ) -> alloy_contract::Event<&P, SpecialNftTypeAndRankAdded, N> {
6301            self.event_filter::<SpecialNftTypeAndRankAdded>()
6302        }
6303        ///Creates a new event filter for the [`SpecialNftTypeAndRankRemoved`] event.
6304        pub fn SpecialNftTypeAndRankRemoved_filter(
6305            &self,
6306        ) -> alloy_contract::Event<&P, SpecialNftTypeAndRankRemoved, N> {
6307            self.event_filter::<SpecialNftTypeAndRankRemoved>()
6308        }
6309        ///Creates a new event filter for the [`StakeContractUpdated`] event.
6310        pub fn StakeContractUpdated_filter(
6311            &self,
6312        ) -> alloy_contract::Event<&P, StakeContractUpdated, N> {
6313            self.event_filter::<StakeContractUpdated>()
6314        }
6315        ///Creates a new event filter for the [`ThresholdUpdated`] event.
6316        pub fn ThresholdUpdated_filter(
6317            &self,
6318        ) -> alloy_contract::Event<&P, ThresholdUpdated, N> {
6319            self.event_filter::<ThresholdUpdated>()
6320        }
6321    }
6322}