hopr_bindings/codegen/
hoprboost.rs

1/**
2
3Generated by the following Solidity interface...
4```solidity
5interface HoprBoost {
6    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
7    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
8    event BoostMinted(uint256 indexed boostTypeIndex, uint256 indexed boostNumerator, uint256 indexed redeemDeadline);
9    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
10    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
11    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
12    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
13
14    constructor(address newAdmin, string baseTokenURI);
15
16    function DEFAULT_ADMIN_ROLE() external view returns (bytes32);
17    function MINTER_ROLE() external view returns (bytes32);
18    function approve(address to, uint256 tokenId) external;
19    function balanceOf(address owner) external view returns (uint256);
20    function batchMint(address[] memory to, string memory boostType, string memory boostRank, uint256 boostNumerator, uint256 redeemDeadline) external;
21    function boostOf(uint256 tokenId) external view returns (uint256, uint256);
22    function getApproved(uint256 tokenId) external view returns (address);
23    function getRoleAdmin(bytes32 role) external view returns (bytes32);
24    function getRoleMember(bytes32 role, uint256 index) external view returns (address);
25    function getRoleMemberCount(bytes32 role) external view returns (uint256);
26    function grantRole(bytes32 role, address account) external;
27    function hasRole(bytes32 role, address account) external view returns (bool);
28    function isApprovedForAll(address owner, address operator) external view returns (bool);
29    function mint(address to, string memory boostType, string memory boostRank, uint256 boostNumerator, uint256 redeemDeadline) external;
30    function name() external view returns (string memory);
31    function ownerOf(uint256 tokenId) external view returns (address);
32    function reclaimErc20Tokens(address tokenAddress) external;
33    function reclaimErc721Tokens(address tokenAddress, uint256 tokenId) external;
34    function renounceRole(bytes32 role, address account) external;
35    function revokeRole(bytes32 role, address account) external;
36    function safeTransferFrom(address from, address to, uint256 tokenId) external;
37    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) external;
38    function setApprovalForAll(address operator, bool approved) external;
39    function supportsInterface(bytes4 interfaceId) external view returns (bool);
40    function symbol() external view returns (string memory);
41    function tokenByIndex(uint256 index) external view returns (uint256);
42    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
43    function tokenURI(uint256 tokenId) external view returns (string memory);
44    function totalSupply() external view returns (uint256);
45    function transferFrom(address from, address to, uint256 tokenId) external;
46    function typeAt(uint256 typeIndex) external view returns (string memory);
47    function typeIndexOf(uint256 tokenId) external view returns (uint256);
48    function typeOf(uint256 tokenId) external view returns (string memory);
49    function updateBaseURI(string memory baseTokenURI) external;
50}
51```
52
53...which was generated by the following JSON ABI:
54```json
55[
56  {
57    "type": "constructor",
58    "inputs": [
59      {
60        "name": "newAdmin",
61        "type": "address",
62        "internalType": "address"
63      },
64      {
65        "name": "baseTokenURI",
66        "type": "string",
67        "internalType": "string"
68      }
69    ],
70    "stateMutability": "nonpayable"
71  },
72  {
73    "type": "function",
74    "name": "DEFAULT_ADMIN_ROLE",
75    "inputs": [],
76    "outputs": [
77      {
78        "name": "",
79        "type": "bytes32",
80        "internalType": "bytes32"
81      }
82    ],
83    "stateMutability": "view"
84  },
85  {
86    "type": "function",
87    "name": "MINTER_ROLE",
88    "inputs": [],
89    "outputs": [
90      {
91        "name": "",
92        "type": "bytes32",
93        "internalType": "bytes32"
94      }
95    ],
96    "stateMutability": "view"
97  },
98  {
99    "type": "function",
100    "name": "approve",
101    "inputs": [
102      {
103        "name": "to",
104        "type": "address",
105        "internalType": "address"
106      },
107      {
108        "name": "tokenId",
109        "type": "uint256",
110        "internalType": "uint256"
111      }
112    ],
113    "outputs": [],
114    "stateMutability": "nonpayable"
115  },
116  {
117    "type": "function",
118    "name": "balanceOf",
119    "inputs": [
120      {
121        "name": "owner",
122        "type": "address",
123        "internalType": "address"
124      }
125    ],
126    "outputs": [
127      {
128        "name": "",
129        "type": "uint256",
130        "internalType": "uint256"
131      }
132    ],
133    "stateMutability": "view"
134  },
135  {
136    "type": "function",
137    "name": "batchMint",
138    "inputs": [
139      {
140        "name": "to",
141        "type": "address[]",
142        "internalType": "address[]"
143      },
144      {
145        "name": "boostType",
146        "type": "string",
147        "internalType": "string"
148      },
149      {
150        "name": "boostRank",
151        "type": "string",
152        "internalType": "string"
153      },
154      {
155        "name": "boostNumerator",
156        "type": "uint256",
157        "internalType": "uint256"
158      },
159      {
160        "name": "redeemDeadline",
161        "type": "uint256",
162        "internalType": "uint256"
163      }
164    ],
165    "outputs": [],
166    "stateMutability": "nonpayable"
167  },
168  {
169    "type": "function",
170    "name": "boostOf",
171    "inputs": [
172      {
173        "name": "tokenId",
174        "type": "uint256",
175        "internalType": "uint256"
176      }
177    ],
178    "outputs": [
179      {
180        "name": "",
181        "type": "uint256",
182        "internalType": "uint256"
183      },
184      {
185        "name": "",
186        "type": "uint256",
187        "internalType": "uint256"
188      }
189    ],
190    "stateMutability": "view"
191  },
192  {
193    "type": "function",
194    "name": "getApproved",
195    "inputs": [
196      {
197        "name": "tokenId",
198        "type": "uint256",
199        "internalType": "uint256"
200      }
201    ],
202    "outputs": [
203      {
204        "name": "",
205        "type": "address",
206        "internalType": "address"
207      }
208    ],
209    "stateMutability": "view"
210  },
211  {
212    "type": "function",
213    "name": "getRoleAdmin",
214    "inputs": [
215      {
216        "name": "role",
217        "type": "bytes32",
218        "internalType": "bytes32"
219      }
220    ],
221    "outputs": [
222      {
223        "name": "",
224        "type": "bytes32",
225        "internalType": "bytes32"
226      }
227    ],
228    "stateMutability": "view"
229  },
230  {
231    "type": "function",
232    "name": "getRoleMember",
233    "inputs": [
234      {
235        "name": "role",
236        "type": "bytes32",
237        "internalType": "bytes32"
238      },
239      {
240        "name": "index",
241        "type": "uint256",
242        "internalType": "uint256"
243      }
244    ],
245    "outputs": [
246      {
247        "name": "",
248        "type": "address",
249        "internalType": "address"
250      }
251    ],
252    "stateMutability": "view"
253  },
254  {
255    "type": "function",
256    "name": "getRoleMemberCount",
257    "inputs": [
258      {
259        "name": "role",
260        "type": "bytes32",
261        "internalType": "bytes32"
262      }
263    ],
264    "outputs": [
265      {
266        "name": "",
267        "type": "uint256",
268        "internalType": "uint256"
269      }
270    ],
271    "stateMutability": "view"
272  },
273  {
274    "type": "function",
275    "name": "grantRole",
276    "inputs": [
277      {
278        "name": "role",
279        "type": "bytes32",
280        "internalType": "bytes32"
281      },
282      {
283        "name": "account",
284        "type": "address",
285        "internalType": "address"
286      }
287    ],
288    "outputs": [],
289    "stateMutability": "nonpayable"
290  },
291  {
292    "type": "function",
293    "name": "hasRole",
294    "inputs": [
295      {
296        "name": "role",
297        "type": "bytes32",
298        "internalType": "bytes32"
299      },
300      {
301        "name": "account",
302        "type": "address",
303        "internalType": "address"
304      }
305    ],
306    "outputs": [
307      {
308        "name": "",
309        "type": "bool",
310        "internalType": "bool"
311      }
312    ],
313    "stateMutability": "view"
314  },
315  {
316    "type": "function",
317    "name": "isApprovedForAll",
318    "inputs": [
319      {
320        "name": "owner",
321        "type": "address",
322        "internalType": "address"
323      },
324      {
325        "name": "operator",
326        "type": "address",
327        "internalType": "address"
328      }
329    ],
330    "outputs": [
331      {
332        "name": "",
333        "type": "bool",
334        "internalType": "bool"
335      }
336    ],
337    "stateMutability": "view"
338  },
339  {
340    "type": "function",
341    "name": "mint",
342    "inputs": [
343      {
344        "name": "to",
345        "type": "address",
346        "internalType": "address"
347      },
348      {
349        "name": "boostType",
350        "type": "string",
351        "internalType": "string"
352      },
353      {
354        "name": "boostRank",
355        "type": "string",
356        "internalType": "string"
357      },
358      {
359        "name": "boostNumerator",
360        "type": "uint256",
361        "internalType": "uint256"
362      },
363      {
364        "name": "redeemDeadline",
365        "type": "uint256",
366        "internalType": "uint256"
367      }
368    ],
369    "outputs": [],
370    "stateMutability": "nonpayable"
371  },
372  {
373    "type": "function",
374    "name": "name",
375    "inputs": [],
376    "outputs": [
377      {
378        "name": "",
379        "type": "string",
380        "internalType": "string"
381      }
382    ],
383    "stateMutability": "view"
384  },
385  {
386    "type": "function",
387    "name": "ownerOf",
388    "inputs": [
389      {
390        "name": "tokenId",
391        "type": "uint256",
392        "internalType": "uint256"
393      }
394    ],
395    "outputs": [
396      {
397        "name": "",
398        "type": "address",
399        "internalType": "address"
400      }
401    ],
402    "stateMutability": "view"
403  },
404  {
405    "type": "function",
406    "name": "reclaimErc20Tokens",
407    "inputs": [
408      {
409        "name": "tokenAddress",
410        "type": "address",
411        "internalType": "address"
412      }
413    ],
414    "outputs": [],
415    "stateMutability": "nonpayable"
416  },
417  {
418    "type": "function",
419    "name": "reclaimErc721Tokens",
420    "inputs": [
421      {
422        "name": "tokenAddress",
423        "type": "address",
424        "internalType": "address"
425      },
426      {
427        "name": "tokenId",
428        "type": "uint256",
429        "internalType": "uint256"
430      }
431    ],
432    "outputs": [],
433    "stateMutability": "nonpayable"
434  },
435  {
436    "type": "function",
437    "name": "renounceRole",
438    "inputs": [
439      {
440        "name": "role",
441        "type": "bytes32",
442        "internalType": "bytes32"
443      },
444      {
445        "name": "account",
446        "type": "address",
447        "internalType": "address"
448      }
449    ],
450    "outputs": [],
451    "stateMutability": "nonpayable"
452  },
453  {
454    "type": "function",
455    "name": "revokeRole",
456    "inputs": [
457      {
458        "name": "role",
459        "type": "bytes32",
460        "internalType": "bytes32"
461      },
462      {
463        "name": "account",
464        "type": "address",
465        "internalType": "address"
466      }
467    ],
468    "outputs": [],
469    "stateMutability": "nonpayable"
470  },
471  {
472    "type": "function",
473    "name": "safeTransferFrom",
474    "inputs": [
475      {
476        "name": "from",
477        "type": "address",
478        "internalType": "address"
479      },
480      {
481        "name": "to",
482        "type": "address",
483        "internalType": "address"
484      },
485      {
486        "name": "tokenId",
487        "type": "uint256",
488        "internalType": "uint256"
489      }
490    ],
491    "outputs": [],
492    "stateMutability": "nonpayable"
493  },
494  {
495    "type": "function",
496    "name": "safeTransferFrom",
497    "inputs": [
498      {
499        "name": "from",
500        "type": "address",
501        "internalType": "address"
502      },
503      {
504        "name": "to",
505        "type": "address",
506        "internalType": "address"
507      },
508      {
509        "name": "tokenId",
510        "type": "uint256",
511        "internalType": "uint256"
512      },
513      {
514        "name": "_data",
515        "type": "bytes",
516        "internalType": "bytes"
517      }
518    ],
519    "outputs": [],
520    "stateMutability": "nonpayable"
521  },
522  {
523    "type": "function",
524    "name": "setApprovalForAll",
525    "inputs": [
526      {
527        "name": "operator",
528        "type": "address",
529        "internalType": "address"
530      },
531      {
532        "name": "approved",
533        "type": "bool",
534        "internalType": "bool"
535      }
536    ],
537    "outputs": [],
538    "stateMutability": "nonpayable"
539  },
540  {
541    "type": "function",
542    "name": "supportsInterface",
543    "inputs": [
544      {
545        "name": "interfaceId",
546        "type": "bytes4",
547        "internalType": "bytes4"
548      }
549    ],
550    "outputs": [
551      {
552        "name": "",
553        "type": "bool",
554        "internalType": "bool"
555      }
556    ],
557    "stateMutability": "view"
558  },
559  {
560    "type": "function",
561    "name": "symbol",
562    "inputs": [],
563    "outputs": [
564      {
565        "name": "",
566        "type": "string",
567        "internalType": "string"
568      }
569    ],
570    "stateMutability": "view"
571  },
572  {
573    "type": "function",
574    "name": "tokenByIndex",
575    "inputs": [
576      {
577        "name": "index",
578        "type": "uint256",
579        "internalType": "uint256"
580      }
581    ],
582    "outputs": [
583      {
584        "name": "",
585        "type": "uint256",
586        "internalType": "uint256"
587      }
588    ],
589    "stateMutability": "view"
590  },
591  {
592    "type": "function",
593    "name": "tokenOfOwnerByIndex",
594    "inputs": [
595      {
596        "name": "owner",
597        "type": "address",
598        "internalType": "address"
599      },
600      {
601        "name": "index",
602        "type": "uint256",
603        "internalType": "uint256"
604      }
605    ],
606    "outputs": [
607      {
608        "name": "",
609        "type": "uint256",
610        "internalType": "uint256"
611      }
612    ],
613    "stateMutability": "view"
614  },
615  {
616    "type": "function",
617    "name": "tokenURI",
618    "inputs": [
619      {
620        "name": "tokenId",
621        "type": "uint256",
622        "internalType": "uint256"
623      }
624    ],
625    "outputs": [
626      {
627        "name": "",
628        "type": "string",
629        "internalType": "string"
630      }
631    ],
632    "stateMutability": "view"
633  },
634  {
635    "type": "function",
636    "name": "totalSupply",
637    "inputs": [],
638    "outputs": [
639      {
640        "name": "",
641        "type": "uint256",
642        "internalType": "uint256"
643      }
644    ],
645    "stateMutability": "view"
646  },
647  {
648    "type": "function",
649    "name": "transferFrom",
650    "inputs": [
651      {
652        "name": "from",
653        "type": "address",
654        "internalType": "address"
655      },
656      {
657        "name": "to",
658        "type": "address",
659        "internalType": "address"
660      },
661      {
662        "name": "tokenId",
663        "type": "uint256",
664        "internalType": "uint256"
665      }
666    ],
667    "outputs": [],
668    "stateMutability": "nonpayable"
669  },
670  {
671    "type": "function",
672    "name": "typeAt",
673    "inputs": [
674      {
675        "name": "typeIndex",
676        "type": "uint256",
677        "internalType": "uint256"
678      }
679    ],
680    "outputs": [
681      {
682        "name": "",
683        "type": "string",
684        "internalType": "string"
685      }
686    ],
687    "stateMutability": "view"
688  },
689  {
690    "type": "function",
691    "name": "typeIndexOf",
692    "inputs": [
693      {
694        "name": "tokenId",
695        "type": "uint256",
696        "internalType": "uint256"
697      }
698    ],
699    "outputs": [
700      {
701        "name": "",
702        "type": "uint256",
703        "internalType": "uint256"
704      }
705    ],
706    "stateMutability": "view"
707  },
708  {
709    "type": "function",
710    "name": "typeOf",
711    "inputs": [
712      {
713        "name": "tokenId",
714        "type": "uint256",
715        "internalType": "uint256"
716      }
717    ],
718    "outputs": [
719      {
720        "name": "",
721        "type": "string",
722        "internalType": "string"
723      }
724    ],
725    "stateMutability": "view"
726  },
727  {
728    "type": "function",
729    "name": "updateBaseURI",
730    "inputs": [
731      {
732        "name": "baseTokenURI",
733        "type": "string",
734        "internalType": "string"
735      }
736    ],
737    "outputs": [],
738    "stateMutability": "nonpayable"
739  },
740  {
741    "type": "event",
742    "name": "Approval",
743    "inputs": [
744      {
745        "name": "owner",
746        "type": "address",
747        "indexed": true,
748        "internalType": "address"
749      },
750      {
751        "name": "approved",
752        "type": "address",
753        "indexed": true,
754        "internalType": "address"
755      },
756      {
757        "name": "tokenId",
758        "type": "uint256",
759        "indexed": true,
760        "internalType": "uint256"
761      }
762    ],
763    "anonymous": false
764  },
765  {
766    "type": "event",
767    "name": "ApprovalForAll",
768    "inputs": [
769      {
770        "name": "owner",
771        "type": "address",
772        "indexed": true,
773        "internalType": "address"
774      },
775      {
776        "name": "operator",
777        "type": "address",
778        "indexed": true,
779        "internalType": "address"
780      },
781      {
782        "name": "approved",
783        "type": "bool",
784        "indexed": false,
785        "internalType": "bool"
786      }
787    ],
788    "anonymous": false
789  },
790  {
791    "type": "event",
792    "name": "BoostMinted",
793    "inputs": [
794      {
795        "name": "boostTypeIndex",
796        "type": "uint256",
797        "indexed": true,
798        "internalType": "uint256"
799      },
800      {
801        "name": "boostNumerator",
802        "type": "uint256",
803        "indexed": true,
804        "internalType": "uint256"
805      },
806      {
807        "name": "redeemDeadline",
808        "type": "uint256",
809        "indexed": true,
810        "internalType": "uint256"
811      }
812    ],
813    "anonymous": false
814  },
815  {
816    "type": "event",
817    "name": "RoleAdminChanged",
818    "inputs": [
819      {
820        "name": "role",
821        "type": "bytes32",
822        "indexed": true,
823        "internalType": "bytes32"
824      },
825      {
826        "name": "previousAdminRole",
827        "type": "bytes32",
828        "indexed": true,
829        "internalType": "bytes32"
830      },
831      {
832        "name": "newAdminRole",
833        "type": "bytes32",
834        "indexed": true,
835        "internalType": "bytes32"
836      }
837    ],
838    "anonymous": false
839  },
840  {
841    "type": "event",
842    "name": "RoleGranted",
843    "inputs": [
844      {
845        "name": "role",
846        "type": "bytes32",
847        "indexed": true,
848        "internalType": "bytes32"
849      },
850      {
851        "name": "account",
852        "type": "address",
853        "indexed": true,
854        "internalType": "address"
855      },
856      {
857        "name": "sender",
858        "type": "address",
859        "indexed": true,
860        "internalType": "address"
861      }
862    ],
863    "anonymous": false
864  },
865  {
866    "type": "event",
867    "name": "RoleRevoked",
868    "inputs": [
869      {
870        "name": "role",
871        "type": "bytes32",
872        "indexed": true,
873        "internalType": "bytes32"
874      },
875      {
876        "name": "account",
877        "type": "address",
878        "indexed": true,
879        "internalType": "address"
880      },
881      {
882        "name": "sender",
883        "type": "address",
884        "indexed": true,
885        "internalType": "address"
886      }
887    ],
888    "anonymous": false
889  },
890  {
891    "type": "event",
892    "name": "Transfer",
893    "inputs": [
894      {
895        "name": "from",
896        "type": "address",
897        "indexed": true,
898        "internalType": "address"
899      },
900      {
901        "name": "to",
902        "type": "address",
903        "indexed": true,
904        "internalType": "address"
905      },
906      {
907        "name": "tokenId",
908        "type": "uint256",
909        "indexed": true,
910        "internalType": "uint256"
911      }
912    ],
913    "anonymous": false
914  }
915]
916```*/
917#[allow(
918    non_camel_case_types,
919    non_snake_case,
920    clippy::pub_underscore_fields,
921    clippy::style,
922    clippy::empty_structs_with_brackets
923)]
924pub mod HoprBoost {
925    use super::*;
926    use alloy::sol_types as alloy_sol_types;
927    /// The creation / init bytecode of the contract.
928    ///
929    /// ```text
930    ///0x60806040523480156200001157600080fd5b50604051620034db380380620034db833981016040819052620000349162000259565b6040518060400160405280600e81526020016d1213d41488109bdbdcdd0813919560921b8152506040518060400160405280600a8152602001691213d41488109bdbdcdd60b21b81525081600290816200008f9190620003dd565b5060036200009e8282620003dd565b50506001600d5550600e620000b48282620003dd565b50620000c2600083620000f6565b620000ee7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683620000f6565b5050620004a9565b62000102828262000106565b5050565b62000112828262000131565b60008281526001602052604090206200012c9082620001d1565b505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000102576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556200018d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000620001e8836001600160a01b038416620001f1565b90505b92915050565b60008181526001830160205260408120546200023a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001eb565b506000620001eb565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200026d57600080fd5b82516001600160a01b03811681146200028557600080fd5b602084810151919350906001600160401b0380821115620002a557600080fd5b818601915086601f830112620002ba57600080fd5b815181811115620002cf57620002cf62000243565b604051601f8201601f19908116603f01168101908382118183101715620002fa57620002fa62000243565b8160405282815289868487010111156200031357600080fd5b600093505b8284101562000337578484018601518185018701529285019262000318565b60008684830101528096505050505050509250929050565b600181811c908216806200036457607f821691505b6020821081036200038557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200012c57600081815260208120601f850160051c81016020861015620003b45750805b601f850160051c820191505b81811015620003d557828155600101620003c0565b505050505050565b81516001600160401b03811115620003f957620003f962000243565b62000411816200040a84546200034f565b846200038b565b602080601f831160018114620004495760008415620004305750858301515b600019600386901b1c1916600185901b178555620003d5565b600085815260208120601f198616915b828110156200047a5788860151825594840194600190910190840162000459565b5085821015620004995787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61302280620004b96000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a22cb465116100ad578063c87b56dd1161007c578063c87b56dd14610498578063ca15c873146104ab578063d5391393146104be578063d547741f146104e5578063e985e9c5146104f857600080fd5b8063a22cb4651461044c578063b5185a881461045f578063b88d4fde14610472578063c588ff8b1461048557600080fd5b8063931688cb116100e9578063931688cb146104165780639365c5331461042957806395d89b411461043c578063a217fddf1461044457600080fd5b806370a082311461039b578063896cddf4146103ae5780639010d07c146103f057806391d148541461040357600080fd5b80632f2ff15d1161019d57806348c64e411161016c57806348c64e411461032f5780634f6ccce714610342578063562317c5146103555780636067bc15146103755780636352211e1461038857600080fd5b80632f2ff15d146102e35780632f745c59146102f657806336568abe1461030957806342842e0e1461031c57600080fd5b806318160ddd116101d957806318160ddd1461028857806323b872dd1461029a578063248a9ca3146102ad57806329867dac146102d057600080fd5b806301ffc9a71461020b57806306fdde0314610233578063081812fc14610248578063095ea7b314610273575b600080fd5b61021e61021936600461266f565b610534565b60405190151581526020015b60405180910390f35b61023b61055f565b60405161022a91906126dc565b61025b6102563660046126ef565b6105f1565b6040516001600160a01b03909116815260200161022a565b610286610281366004612724565b61067e565b005b600b545b60405190815260200161022a565b6102866102a836600461274e565b610793565b61028c6102bb3660046126ef565b60009081526020819052604090206001015490565b6102866102de366004612836565b6107c4565b6102866102f13660046128bc565b610876565b61028c610304366004612724565b61089c565b6102866103173660046128bc565b610932565b61028661032a36600461274e565b6109b0565b61028661033d366004612724565b6109cb565b61028c6103503660046126ef565b610aa4565b61028c6103633660046126ef565b60009081526013602052604090205490565b6102866103833660046128e8565b610b37565b61025b6103963660046126ef565b610c20565b61028c6103a93660046128e8565b610c97565b6103db6103bc3660046126ef565b6000908152601160209081526040808320546012909252909120549091565b6040805192835260208301919091520161022a565b61025b6103fe366004612903565b610d1e565b61021e6104113660046128bc565b610d3d565b610286610424366004612925565b610d66565b6102866104373660046129a3565b610d7e565b61023b610eeb565b61028c600081565b61028661045a366004612a88565b610efa565b61023b61046d3660046126ef565b610f05565b610286610480366004612abf565b610f12565b61023b6104933660046126ef565b610f4a565b61023b6104a63660046126ef565b610f68565b61028c6104b93660046126ef565b610f73565b61028c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102866104f33660046128bc565b610f8a565b61021e610506366004612b3b565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006001600160e01b03198216630d639add60e11b1480610559575061055982610fb0565b92915050565b60606002805461056e90612b65565b80601f016020809104026020016040519081016040528092919081815260200182805461059a90612b65565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b5050505050905090565b60006105fc82610fd5565b6106625760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061068982610c20565b9050806001600160a01b0316836001600160a01b0316036106f65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610659565b336001600160a01b038216148061071257506107128133610506565b6107845760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610659565b61078e8383610ff2565b505050565b61079d3382611060565b6107b95760405162461bcd60e51b815260040161065990612b9f565b61078e83838361114a565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66107ef81336112f5565b6107fa600f86611359565b506000610808600f87611406565b90506000868660405160200161081f929190612bf0565b604051602081830303815290604052905061083d8886868585611431565b8385837f735e5eb5afdd72cc64657ded7e5de390af3708afb5b9a80b0e5c911a0499d98f60405160405180910390a45050505050505050565b60008281526020819052604090206001015461089281336112f5565b61078e8383611482565b60006108a783610c97565b82106109095760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610659565b506001600160a01b03919091166000908152600960209081526040808320938352929052205490565b6001600160a01b03811633146109a25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610659565b6109ac82826114a4565b5050565b61078e83838360405180602001604052806000815250610f12565b60006109d781336112f5565b6002600d5403610a295760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610659565b6002600d55604080516323b872dd60e01b81523060048201523360248201526044810184905290516001600160a01b038516916323b872dd91606480830192600092919082900301818387803b158015610a8257600080fd5b505af1158015610a96573d6000803e3d6000fd5b50506001600d555050505050565b6000610aaf600b5490565b8210610b125760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610659565b600b8281548110610b2557610b25612c2c565b90600052602060002001549050919050565b6000610b4381336112f5565b6002600d5403610b955760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610659565b6002600d55610c17336040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c069190612c42565b6001600160a01b03851691906114c6565b50506001600d55565b6000818152600460205260408120546001600160a01b0316806105595760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610659565b60006001600160a01b038216610d025760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610659565b506001600160a01b031660009081526005602052604090205490565b6000828152600160205260408120610d369083611518565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610d7281336112f5565b600e61078e8382612ca1565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610da981336112f5565b610dec87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600f939250506113599050565b506000610e3288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600f939250506114069050565b9050600088888888604051602001610e4d9493929190612d61565b604051602081830303815290604052905060005b8a811015610eae57610e9c8c8c83818110610e7e57610e7e612c2c565b9050602002016020810190610e9391906128e8565b87878686611431565b80610ea681612da2565b915050610e61565b508385837f735e5eb5afdd72cc64657ded7e5de390af3708afb5b9a80b0e5c911a0499d98f60405160405180910390a45050505050505050505050565b60606003805461056e90612b65565b6109ac338383611524565b6060610559600f836115f2565b610f1c3383611060565b610f385760405162461bcd60e51b815260040161065990612b9f565b610f44848484846116ab565b50505050565b60008181526013602052604090205460609061055990600f906115f2565b6060610559826116de565b60008181526001602052604081206105599061183f565b600082815260208190526040902060010154610fa681336112f5565b61078e83836114a4565b60006001600160e01b0319821663780e9d6360e01b1480610559575061055982611849565b6000908152600460205260409020546001600160a01b0316151590565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155819061102782610c20565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061106b82610fd5565b6110cc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610659565b60006110d783610c20565b9050806001600160a01b0316846001600160a01b031614806111125750836001600160a01b0316611107846105f1565b6001600160a01b0316145b8061114257506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661115d82610c20565b6001600160a01b0316146111c55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610659565b6001600160a01b0382166112275760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610659565b611232838383611889565b61123d600082610ff2565b6001600160a01b0383166000908152600560205260408120805460019290611266908490612dbb565b90915550506001600160a01b0382166000908152600560205260408120805460019290611294908490612dce565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6112ff8282610d3d565b6109ac57611317816001600160a01b03166014611894565b611322836020611894565b604051602001611333929190612de1565b60408051601f198184030181529082905262461bcd60e51b8252610659916004016126dc565b60006113658383611a30565b6113fe578254600181018455600084815260209020016113858382612ca1565b508254604051600185019061139b908590612e56565b90815260200160405180910390208190555082600101826040516113bf9190612e56565b90815260405190819003602001812054907f11497a834951095469930ec62e1641f0dcf3617d9cd7579b6da76e54df3000a790600090a2506001610559565b506000610559565b6000826001018260405161141a9190612e56565b908152602001604051809103902054905092915050565b600061143c600b5490565b90506114488682611a5d565b6000818152601160209081526040808320889055601282528083208790556013909152902083905561147a8183611b9c565b505050505050565b61148c8282611c20565b600082815260016020526040902061078e9082611ca4565b6114ae8282611cb9565b600082815260016020526040902061078e9082611d1e565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261078e908490611d33565b6000610d368383611e05565b816001600160a01b0316836001600160a01b0316036115855760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610659565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b606082611600600184612dbb565b8154811061161057611610612c2c565b90600052602060002001805461162590612b65565b80601f016020809104026020016040519081016040528092919081815260200182805461165190612b65565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b5050505050905092915050565b6116b684848461114a565b6116c284848484611e2f565b610f445760405162461bcd60e51b815260040161065990612e72565b60606116e982610fd5565b61174f5760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610659565b6000828152600860205260408120805461176890612b65565b80601f016020809104026020016040519081016040528092919081815260200182805461179490612b65565b80156117e15780601f106117b6576101008083540402835291602001916117e1565b820191906000526020600020905b8154815290600101906020018083116117c457829003601f168201915b5050505050905060006117f2611f30565b90508051600003611804575092915050565b81511561183657808260405160200161181e929190612ec4565b60405160208183030381529060405292505050919050565b61114284611f3f565b6000610559825490565b60006001600160e01b031982166380ac58cd60e01b148061187a57506001600160e01b03198216635b5e139f60e01b145b80610559575061055982612009565b61078e83838361202e565b606060006118a3836002612ef3565b6118ae906002612dce565b67ffffffffffffffff8111156118c6576118c661278a565b6040519080825280601f01601f1916602001820160405280156118f0576020820181803683370190505b509050600360fc1b8160008151811061190b5761190b612c2c565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061193a5761193a612c2c565b60200101906001600160f81b031916908160001a905350600061195e846002612ef3565b611969906001612dce565b90505b60018111156119e1576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061199d5761199d612c2c565b1a60f81b8282815181106119b3576119b3612c2c565b60200101906001600160f81b031916908160001a90535060049490941c936119da81612f0a565b905061196c565b508315610d365760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610659565b60008260010182604051611a449190612e56565b9081526040519081900360200190205415159392505050565b6001600160a01b038216611ab35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610659565b611abc81610fd5565b15611b095760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610659565b611b1560008383611889565b6001600160a01b0382166000908152600560205260408120805460019290611b3e908490612dce565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611ba582610fd5565b611c085760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610659565b600082815260086020526040902061078e8282612ca1565b611c2a8282610d3d565b6109ac576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055611c603390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610d36836001600160a01b0384166120e6565b611cc38282610d3d565b156109ac576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610d36836001600160a01b03841661212d565b6000611d88826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122209092919063ffffffff16565b80519091501561078e5780806020019051810190611da69190612f21565b61078e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610659565b6000826000018281548110611e1c57611e1c612c2c565b9060005260206000200154905092915050565b60006001600160a01b0384163b15611f2557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e73903390899088908890600401612f3e565b6020604051808303816000875af1925050508015611eae575060408051601f3d908101601f19168201909252611eab91810190612f7b565b60015b611f0b573d808015611edc576040519150601f19603f3d011682016040523d82523d6000602084013e611ee1565b606091505b508051600003611f035760405162461bcd60e51b815260040161065990612e72565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611142565b506001949350505050565b6060600e805461056e90612b65565b6060611f4a82610fd5565b611fae5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610659565b6000611fb8611f30565b90506000815111611fd85760405180602001604052806000815250610d36565b80611fe28461222f565b604051602001611ff3929190612ec4565b6040516020818303038152906040529392505050565b60006001600160e01b03198216635a05180f60e01b1480610559575061055982612330565b6001600160a01b0383166120895761208481600b80546000838152600c60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b6120ac565b816001600160a01b0316836001600160a01b0316146120ac576120ac8382612365565b6001600160a01b0382166120c35761078e81612402565b826001600160a01b0316826001600160a01b03161461078e5761078e82826124b1565b60008181526001830160205260408120546113fe57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610559565b60008181526001830160205260408120548015612216576000612151600183612dbb565b855490915060009061216590600190612dbb565b90508181146121ca57600086600001828154811061218557612185612c2c565b90600052602060002001549050808760000184815481106121a8576121a8612c2c565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806121db576121db612f98565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610559565b6000915050610559565b606061114284846000856124f5565b6060816000036122565750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612280578061226a81612da2565b91506122799050600a83612fc4565b915061225a565b60008167ffffffffffffffff81111561229b5761229b61278a565b6040519080825280601f01601f1916602001820160405280156122c5576020820181803683370190505b5090505b8415611142576122da600183612dbb565b91506122e7600a86612fd8565b6122f2906030612dce565b60f81b81838151811061230757612307612c2c565b60200101906001600160f81b031916908160001a905350612329600a86612fc4565b94506122c9565b60006001600160e01b03198216637965db0b60e01b148061055957506301ffc9a760e01b6001600160e01b0319831614610559565b6000600161237284610c97565b61237c9190612dbb565b6000838152600a60205260409020549091508082146123cf576001600160a01b03841660009081526009602090815260408083208584528252808320548484528184208190558352600a90915290208190555b506000918252600a602090815260408084208490556001600160a01b039094168352600981528383209183525290812055565b600b5460009061241490600190612dbb565b6000838152600c6020526040812054600b805493945090928490811061243c5761243c612c2c565b9060005260206000200154905080600b838154811061245d5761245d612c2c565b6000918252602080832090910192909255828152600c9091526040808220849055858252812055600b80548061249557612495612f98565b6001900381819060005260206000200160009055905550505050565b60006124bc83610c97565b6001600160a01b0390931660009081526009602090815260408083208684528252808320859055938252600a9052919091209190915550565b6060824710156125565760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610659565b843b6125a45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610659565b600080866001600160a01b031685876040516125c09190612e56565b60006040518083038185875af1925050503d80600081146125fd576040519150601f19603f3d011682016040523d82523d6000602084013e612602565b606091505b509150915061261282828661261d565b979650505050505050565b6060831561262c575081610d36565b82511561263c5782518084602001fd5b8160405162461bcd60e51b815260040161065991906126dc565b6001600160e01b03198116811461266c57600080fd5b50565b60006020828403121561268157600080fd5b8135610d3681612656565b60005b838110156126a757818101518382015260200161268f565b50506000910152565b600081518084526126c881602086016020860161268c565b601f01601f19169290920160200192915050565b602081526000610d3660208301846126b0565b60006020828403121561270157600080fd5b5035919050565b80356001600160a01b038116811461271f57600080fd5b919050565b6000806040838503121561273757600080fd5b61274083612708565b946020939093013593505050565b60008060006060848603121561276357600080fd5b61276c84612708565b925061277a60208501612708565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156127bb576127bb61278a565b604051601f8501601f19908116603f011681019082821181831017156127e3576127e361278a565b816040528093508581528686860111156127fc57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261282757600080fd5b610d36838335602085016127a0565b600080600080600060a0868803121561284e57600080fd5b61285786612708565b9450602086013567ffffffffffffffff8082111561287457600080fd5b61288089838a01612816565b9550604088013591508082111561289657600080fd5b506128a388828901612816565b9598949750949560608101359550608001359392505050565b600080604083850312156128cf57600080fd5b823591506128df60208401612708565b90509250929050565b6000602082840312156128fa57600080fd5b610d3682612708565b6000806040838503121561291657600080fd5b50508035926020909101359150565b60006020828403121561293757600080fd5b813567ffffffffffffffff81111561294e57600080fd5b61114284828501612816565b60008083601f84011261296c57600080fd5b50813567ffffffffffffffff81111561298457600080fd5b60208301915083602082850101111561299c57600080fd5b9250929050565b60008060008060008060008060a0898b0312156129bf57600080fd5b883567ffffffffffffffff808211156129d757600080fd5b818b0191508b601f8301126129eb57600080fd5b8135818111156129fa57600080fd5b8c60208260051b8501011115612a0f57600080fd5b60209283019a509850908a01359080821115612a2a57600080fd5b612a368c838d0161295a565b909850965060408b0135915080821115612a4f57600080fd5b50612a5c8b828c0161295a565b999c989b509699959896976060870135966080013595509350505050565b801515811461266c57600080fd5b60008060408385031215612a9b57600080fd5b612aa483612708565b91506020830135612ab481612a7a565b809150509250929050565b60008060008060808587031215612ad557600080fd5b612ade85612708565b9350612aec60208601612708565b925060408501359150606085013567ffffffffffffffff811115612b0f57600080fd5b8501601f81018713612b2057600080fd5b612b2f878235602084016127a0565b91505092959194509250565b60008060408385031215612b4e57600080fd5b612b5783612708565b91506128df60208401612708565b600181811c90821680612b7957607f821691505b602082108103612b9957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008351612c0281846020880161268c565b602f60f81b9083019081528351612c2081600184016020880161268c565b01600101949350505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c5457600080fd5b5051919050565b601f82111561078e57600081815260208120601f850160051c81016020861015612c825750805b601f850160051c820191505b8181101561147a57828155600101612c8e565b815167ffffffffffffffff811115612cbb57612cbb61278a565b612ccf81612cc98454612b65565b84612c5b565b602080601f831160018114612d045760008415612cec5750858301515b600019600386901b1c1916600185901b17855561147a565b600085815260208120601f198616915b82811015612d3357888601518255948401946001909101908401612d14565b5085821015612d515787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b838582376000848201602f60f81b815283856001830137600093016001019283525090949350505050565b634e487b7160e01b600052601160045260246000fd5b600060018201612db457612db4612d8c565b5060010190565b8181038181111561055957610559612d8c565b8082018082111561055957610559612d8c565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612e1981601785016020880161268c565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612e4a81602884016020880161268c565b01602801949350505050565b60008251612e6881846020870161268c565b9190910192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351612ed681846020880161268c565b835190830190612eea81836020880161268c565b01949350505050565b808202811582820484141761055957610559612d8c565b600081612f1957612f19612d8c565b506000190190565b600060208284031215612f3357600080fd5b8151610d3681612a7a565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f71908301846126b0565b9695505050505050565b600060208284031215612f8d57600080fd5b8151610d3681612656565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612fd357612fd3612fae565b500490565b600082612fe757612fe7612fae565b50069056fea26469706673582212206d7bdeeafd6b3cbb431f4c7c2225045ed0e8e39a368f310a27ae495f2fc10cdb64736f6c63430008130033
931    /// ```
932    #[rustfmt::skip]
933    #[allow(clippy::all)]
934    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
935        b"`\x80`@R4\x80\x15b\0\0\x11W`\0\x80\xFD[P`@Qb\x004\xDB8\x03\x80b\x004\xDB\x839\x81\x01`@\x81\x90Rb\0\x004\x91b\0\x02YV[`@Q\x80`@\x01`@R\x80`\x0E\x81R` \x01m\x12\x13\xD4\x14\x88\x10\x9B\xDB\xDC\xDD\x08\x13\x91\x95`\x92\x1B\x81RP`@Q\x80`@\x01`@R\x80`\n\x81R` \x01i\x12\x13\xD4\x14\x88\x10\x9B\xDB\xDC\xDD`\xB2\x1B\x81RP\x81`\x02\x90\x81b\0\0\x8F\x91\x90b\0\x03\xDDV[P`\x03b\0\0\x9E\x82\x82b\0\x03\xDDV[PP`\x01`\rUP`\x0Eb\0\0\xB4\x82\x82b\0\x03\xDDV[Pb\0\0\xC2`\0\x83b\0\0\xF6V[b\0\0\xEE\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA6\x83b\0\0\xF6V[PPb\0\x04\xA9V[b\0\x01\x02\x82\x82b\0\x01\x06V[PPV[b\0\x01\x12\x82\x82b\0\x011V[`\0\x82\x81R`\x01` R`@\x90 b\0\x01,\x90\x82b\0\x01\xD1V[PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16b\0\x01\x02W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ub\0\x01\x8D3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0b\0\x01\xE8\x83`\x01`\x01`\xA0\x1B\x03\x84\x16b\0\x01\xF1V[\x90P[\x92\x91PPV[`\0\x81\x81R`\x01\x83\x01` R`@\x81 Tb\0\x02:WP\x81T`\x01\x81\x81\x01\x84U`\0\x84\x81R` \x80\x82 \x90\x93\x01\x84\x90U\x84T\x84\x82R\x82\x86\x01\x90\x93R`@\x90 \x91\x90\x91Ub\0\x01\xEBV[P`\0b\0\x01\xEBV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x80`@\x83\x85\x03\x12\x15b\0\x02mW`\0\x80\xFD[\x82Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\x02\x85W`\0\x80\xFD[` \x84\x81\x01Q\x91\x93P\x90`\x01`\x01`@\x1B\x03\x80\x82\x11\x15b\0\x02\xA5W`\0\x80\xFD[\x81\x86\x01\x91P\x86`\x1F\x83\x01\x12b\0\x02\xBAW`\0\x80\xFD[\x81Q\x81\x81\x11\x15b\0\x02\xCFWb\0\x02\xCFb\0\x02CV[`@Q`\x1F\x82\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x83\x82\x11\x81\x83\x10\x17\x15b\0\x02\xFAWb\0\x02\xFAb\0\x02CV[\x81`@R\x82\x81R\x89\x86\x84\x87\x01\x01\x11\x15b\0\x03\x13W`\0\x80\xFD[`\0\x93P[\x82\x84\x10\x15b\0\x037W\x84\x84\x01\x86\x01Q\x81\x85\x01\x87\x01R\x92\x85\x01\x92b\0\x03\x18V[`\0\x86\x84\x83\x01\x01R\x80\x96PPPPPPP\x92P\x92\x90PV[`\x01\x81\x81\x1C\x90\x82\x16\x80b\0\x03dW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03b\0\x03\x85WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15b\0\x01,W`\0\x81\x81R` \x81 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15b\0\x03\xB4WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15b\0\x03\xD5W\x82\x81U`\x01\x01b\0\x03\xC0V[PPPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15b\0\x03\xF9Wb\0\x03\xF9b\0\x02CV[b\0\x04\x11\x81b\0\x04\n\x84Tb\0\x03OV[\x84b\0\x03\x8BV[` \x80`\x1F\x83\x11`\x01\x81\x14b\0\x04IW`\0\x84\x15b\0\x040WP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ub\0\x03\xD5V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15b\0\x04zW\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01b\0\x04YV[P\x85\x82\x10\x15b\0\x04\x99W\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[a0\"\x80b\0\x04\xB9`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x02\x06W`\x005`\xE0\x1C\x80cp\xA0\x821\x11a\x01\x1AW\x80c\xA2,\xB4e\x11a\0\xADW\x80c\xC8{V\xDD\x11a\0|W\x80c\xC8{V\xDD\x14a\x04\x98W\x80c\xCA\x15\xC8s\x14a\x04\xABW\x80c\xD59\x13\x93\x14a\x04\xBEW\x80c\xD5Gt\x1F\x14a\x04\xE5W\x80c\xE9\x85\xE9\xC5\x14a\x04\xF8W`\0\x80\xFD[\x80c\xA2,\xB4e\x14a\x04LW\x80c\xB5\x18Z\x88\x14a\x04_W\x80c\xB8\x8DO\xDE\x14a\x04rW\x80c\xC5\x88\xFF\x8B\x14a\x04\x85W`\0\x80\xFD[\x80c\x93\x16\x88\xCB\x11a\0\xE9W\x80c\x93\x16\x88\xCB\x14a\x04\x16W\x80c\x93e\xC53\x14a\x04)W\x80c\x95\xD8\x9BA\x14a\x04<W\x80c\xA2\x17\xFD\xDF\x14a\x04DW`\0\x80\xFD[\x80cp\xA0\x821\x14a\x03\x9BW\x80c\x89l\xDD\xF4\x14a\x03\xAEW\x80c\x90\x10\xD0|\x14a\x03\xF0W\x80c\x91\xD1HT\x14a\x04\x03W`\0\x80\xFD[\x80c//\xF1]\x11a\x01\x9DW\x80cH\xC6NA\x11a\x01lW\x80cH\xC6NA\x14a\x03/W\x80cOl\xCC\xE7\x14a\x03BW\x80cV#\x17\xC5\x14a\x03UW\x80c`g\xBC\x15\x14a\x03uW\x80ccR!\x1E\x14a\x03\x88W`\0\x80\xFD[\x80c//\xF1]\x14a\x02\xE3W\x80c/t\\Y\x14a\x02\xF6W\x80c6V\x8A\xBE\x14a\x03\tW\x80cB\x84.\x0E\x14a\x03\x1CW`\0\x80\xFD[\x80c\x18\x16\r\xDD\x11a\x01\xD9W\x80c\x18\x16\r\xDD\x14a\x02\x88W\x80c#\xB8r\xDD\x14a\x02\x9AW\x80c$\x8A\x9C\xA3\x14a\x02\xADW\x80c)\x86}\xAC\x14a\x02\xD0W`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x02\x0BW\x80c\x06\xFD\xDE\x03\x14a\x023W\x80c\x08\x18\x12\xFC\x14a\x02HW\x80c\t^\xA7\xB3\x14a\x02sW[`\0\x80\xFD[a\x02\x1Ea\x02\x196`\x04a&oV[a\x054V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02;a\x05_V[`@Qa\x02*\x91\x90a&\xDCV[a\x02[a\x02V6`\x04a&\xEFV[a\x05\xF1V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x02*V[a\x02\x86a\x02\x816`\x04a'$V[a\x06~V[\0[`\x0BT[`@Q\x90\x81R` \x01a\x02*V[a\x02\x86a\x02\xA86`\x04a'NV[a\x07\x93V[a\x02\x8Ca\x02\xBB6`\x04a&\xEFV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\x86a\x02\xDE6`\x04a(6V[a\x07\xC4V[a\x02\x86a\x02\xF16`\x04a(\xBCV[a\x08vV[a\x02\x8Ca\x03\x046`\x04a'$V[a\x08\x9CV[a\x02\x86a\x03\x176`\x04a(\xBCV[a\t2V[a\x02\x86a\x03*6`\x04a'NV[a\t\xB0V[a\x02\x86a\x03=6`\x04a'$V[a\t\xCBV[a\x02\x8Ca\x03P6`\x04a&\xEFV[a\n\xA4V[a\x02\x8Ca\x03c6`\x04a&\xEFV[`\0\x90\x81R`\x13` R`@\x90 T\x90V[a\x02\x86a\x03\x836`\x04a(\xE8V[a\x0B7V[a\x02[a\x03\x966`\x04a&\xEFV[a\x0C V[a\x02\x8Ca\x03\xA96`\x04a(\xE8V[a\x0C\x97V[a\x03\xDBa\x03\xBC6`\x04a&\xEFV[`\0\x90\x81R`\x11` \x90\x81R`@\x80\x83 T`\x12\x90\x92R\x90\x91 T\x90\x91V[`@\x80Q\x92\x83R` \x83\x01\x91\x90\x91R\x01a\x02*V[a\x02[a\x03\xFE6`\x04a)\x03V[a\r\x1EV[a\x02\x1Ea\x04\x116`\x04a(\xBCV[a\r=V[a\x02\x86a\x04$6`\x04a)%V[a\rfV[a\x02\x86a\x0476`\x04a)\xA3V[a\r~V[a\x02;a\x0E\xEBV[a\x02\x8C`\0\x81V[a\x02\x86a\x04Z6`\x04a*\x88V[a\x0E\xFAV[a\x02;a\x04m6`\x04a&\xEFV[a\x0F\x05V[a\x02\x86a\x04\x806`\x04a*\xBFV[a\x0F\x12V[a\x02;a\x04\x936`\x04a&\xEFV[a\x0FJV[a\x02;a\x04\xA66`\x04a&\xEFV[a\x0FhV[a\x02\x8Ca\x04\xB96`\x04a&\xEFV[a\x0FsV[a\x02\x8C\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA6\x81V[a\x02\x86a\x04\xF36`\x04a(\xBCV[a\x0F\x8AV[a\x02\x1Ea\x05\x066`\x04a+;V[`\x01`\x01`\xA0\x1B\x03\x91\x82\x16`\0\x90\x81R`\x07` \x90\x81R`@\x80\x83 \x93\x90\x94\x16\x82R\x91\x90\x91R T`\xFF\x16\x90V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c\rc\x9A\xDD`\xE1\x1B\x14\x80a\x05YWPa\x05Y\x82a\x0F\xB0V[\x92\x91PPV[```\x02\x80Ta\x05n\x90a+eV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x05\x9A\x90a+eV[\x80\x15a\x05\xE7W\x80`\x1F\x10a\x05\xBCWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x05\xE7V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x05\xCAW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x90V[`\0a\x05\xFC\x82a\x0F\xD5V[a\x06bW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7FERC721: approved query for nonex`D\x82\x01Rk4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`\xA1\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[P`\0\x90\x81R`\x06` R`@\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0a\x06\x89\x82a\x0C V[\x90P\x80`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x03a\x06\xF6W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FERC721: approval to current owne`D\x82\x01R`9`\xF9\x1B`d\x82\x01R`\x84\x01a\x06YV[3`\x01`\x01`\xA0\x1B\x03\x82\x16\x14\x80a\x07\x12WPa\x07\x12\x813a\x05\x06V[a\x07\x84W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7FERC721: approve caller is not ow`D\x82\x01R\x7Fner nor approved for all\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06YV[a\x07\x8E\x83\x83a\x0F\xF2V[PPPV[a\x07\x9D3\x82a\x10`V[a\x07\xB9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x90a+\x9FV[a\x07\x8E\x83\x83\x83a\x11JV[\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA6a\x07\xEF\x813a\x12\xF5V[a\x07\xFA`\x0F\x86a\x13YV[P`\0a\x08\x08`\x0F\x87a\x14\x06V[\x90P`\0\x86\x86`@Q` \x01a\x08\x1F\x92\x91\x90a+\xF0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08=\x88\x86\x86\x85\x85a\x141V[\x83\x85\x83\x7Fs^^\xB5\xAF\xDDr\xCCde}\xED~]\xE3\x90\xAF7\x08\xAF\xB5\xB9\xA8\x0B\x0E\\\x91\x1A\x04\x99\xD9\x8F`@Q`@Q\x80\x91\x03\x90\xA4PPPPPPPPV[`\0\x82\x81R` \x81\x90R`@\x90 `\x01\x01Ta\x08\x92\x813a\x12\xF5V[a\x07\x8E\x83\x83a\x14\x82V[`\0a\x08\xA7\x83a\x0C\x97V[\x82\x10a\t\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FERC721Enumerable: owner index ou`D\x82\x01Rjt of bounds`\xA8\x1B`d\x82\x01R`\x84\x01a\x06YV[P`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 \x93\x83R\x92\x90R T\x90V[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\xA2W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06YV[a\t\xAC\x82\x82a\x14\xA4V[PPV[a\x07\x8E\x83\x83\x83`@Q\x80` \x01`@R\x80`\0\x81RPa\x0F\x12V[`\0a\t\xD7\x813a\x12\xF5V[`\x02`\rT\x03a\n)W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1F`$\x82\x01R\x7FReentrancyGuard: reentrant call\0`D\x82\x01R`d\x01a\x06YV[`\x02`\rU`@\x80Qc#\xB8r\xDD`\xE0\x1B\x81R0`\x04\x82\x01R3`$\x82\x01R`D\x81\x01\x84\x90R\x90Q`\x01`\x01`\xA0\x1B\x03\x85\x16\x91c#\xB8r\xDD\x91`d\x80\x83\x01\x92`\0\x92\x91\x90\x82\x90\x03\x01\x81\x83\x87\x80;\x15\x80\x15a\n\x82W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\n\x96W=`\0\x80>=`\0\xFD[PP`\x01`\rUPPPPPV[`\0a\n\xAF`\x0BT\x90V[\x82\x10a\x0B\x12W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7FERC721Enumerable: global index o`D\x82\x01Rkut of bounds`\xA0\x1B`d\x82\x01R`\x84\x01a\x06YV[`\x0B\x82\x81T\x81\x10a\x0B%Wa\x0B%a,,V[\x90`\0R` `\0 \x01T\x90P\x91\x90PV[`\0a\x0BC\x813a\x12\xF5V[`\x02`\rT\x03a\x0B\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1F`$\x82\x01R\x7FReentrancyGuard: reentrant call\0`D\x82\x01R`d\x01a\x06YV[`\x02`\rUa\x0C\x173`@Qcp\xA0\x821`\xE0\x1B\x81R0`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x85\x16\x90cp\xA0\x821\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\xE2W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\x06\x91\x90a,BV[`\x01`\x01`\xA0\x1B\x03\x85\x16\x91\x90a\x14\xC6V[PP`\x01`\rUV[`\0\x81\x81R`\x04` R`@\x81 T`\x01`\x01`\xA0\x1B\x03\x16\x80a\x05YW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FERC721: owner query for nonexist`D\x82\x01Rh2\xB7:\x10:7\xB5\xB2\xB7`\xB9\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0`\x01`\x01`\xA0\x1B\x03\x82\x16a\r\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FERC721: balance query for the ze`D\x82\x01Riro address`\xB0\x1B`d\x82\x01R`\x84\x01a\x06YV[P`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\x05` R`@\x90 T\x90V[`\0\x82\x81R`\x01` R`@\x81 a\r6\x90\x83a\x15\x18V[\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0a\rr\x813a\x12\xF5V[`\x0Ea\x07\x8E\x83\x82a,\xA1V[\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA6a\r\xA9\x813a\x12\xF5V[a\r\xEC\x87\x87\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`\x0F\x93\x92PPa\x13Y\x90PV[P`\0a\x0E2\x88\x88\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`\x0F\x93\x92PPa\x14\x06\x90PV[\x90P`\0\x88\x88\x88\x88`@Q` \x01a\x0EM\x94\x93\x92\x91\x90a-aV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x8A\x81\x10\x15a\x0E\xAEWa\x0E\x9C\x8C\x8C\x83\x81\x81\x10a\x0E~Wa\x0E~a,,V[\x90P` \x02\x01` \x81\x01\x90a\x0E\x93\x91\x90a(\xE8V[\x87\x87\x86\x86a\x141V[\x80a\x0E\xA6\x81a-\xA2V[\x91PPa\x0EaV[P\x83\x85\x83\x7Fs^^\xB5\xAF\xDDr\xCCde}\xED~]\xE3\x90\xAF7\x08\xAF\xB5\xB9\xA8\x0B\x0E\\\x91\x1A\x04\x99\xD9\x8F`@Q`@Q\x80\x91\x03\x90\xA4PPPPPPPPPPPV[```\x03\x80Ta\x05n\x90a+eV[a\t\xAC3\x83\x83a\x15$V[``a\x05Y`\x0F\x83a\x15\xF2V[a\x0F\x1C3\x83a\x10`V[a\x0F8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x90a+\x9FV[a\x0FD\x84\x84\x84\x84a\x16\xABV[PPPPV[`\0\x81\x81R`\x13` R`@\x90 T``\x90a\x05Y\x90`\x0F\x90a\x15\xF2V[``a\x05Y\x82a\x16\xDEV[`\0\x81\x81R`\x01` R`@\x81 a\x05Y\x90a\x18?V[`\0\x82\x81R` \x81\x90R`@\x90 `\x01\x01Ta\x0F\xA6\x813a\x12\xF5V[a\x07\x8E\x83\x83a\x14\xA4V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cx\x0E\x9Dc`\xE0\x1B\x14\x80a\x05YWPa\x05Y\x82a\x18IV[`\0\x90\x81R`\x04` R`@\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x15\x15\x90V[`\0\x81\x81R`\x06` R`@\x90 \x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x84\x16\x90\x81\x17\x90\x91U\x81\x90a\x10'\x82a\x0C V[`\x01`\x01`\xA0\x1B\x03\x16\x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0a\x10k\x82a\x0F\xD5V[a\x10\xCCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7FERC721: operator query for nonex`D\x82\x01Rk4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`\xA1\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0a\x10\xD7\x83a\x0C V[\x90P\x80`\x01`\x01`\xA0\x1B\x03\x16\x84`\x01`\x01`\xA0\x1B\x03\x16\x14\x80a\x11\x12WP\x83`\x01`\x01`\xA0\x1B\x03\x16a\x11\x07\x84a\x05\xF1V[`\x01`\x01`\xA0\x1B\x03\x16\x14[\x80a\x11BWP`\x01`\x01`\xA0\x1B\x03\x80\x82\x16`\0\x90\x81R`\x07` \x90\x81R`@\x80\x83 \x93\x88\x16\x83R\x92\x90R T`\xFF\x16[\x94\x93PPPPV[\x82`\x01`\x01`\xA0\x1B\x03\x16a\x11]\x82a\x0C V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11\xC5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FERC721: transfer of token that i`D\x82\x01Rh9\x9077\xBA\x107\xBB\xB7`\xB9\x1B`d\x82\x01R`\x84\x01a\x06YV[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x12'W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FERC721: transfer to the zero add`D\x82\x01Rcress`\xE0\x1B`d\x82\x01R`\x84\x01a\x06YV[a\x122\x83\x83\x83a\x18\x89V[a\x12=`\0\x82a\x0F\xF2V[`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x05` R`@\x81 \x80T`\x01\x92\x90a\x12f\x90\x84\x90a-\xBBV[\x90\x91UPP`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x05` R`@\x81 \x80T`\x01\x92\x90a\x12\x94\x90\x84\x90a-\xCEV[\x90\x91UPP`\0\x81\x81R`\x04` R`@\x80\x82 \x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x86\x81\x16\x91\x82\x17\x90\x92U\x91Q\x84\x93\x91\x87\x16\x91\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x91\xA4PPPV[a\x12\xFF\x82\x82a\r=V[a\t\xACWa\x13\x17\x81`\x01`\x01`\xA0\x1B\x03\x16`\x14a\x18\x94V[a\x13\"\x83` a\x18\x94V[`@Q` \x01a\x133\x92\x91\x90a-\xE1V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06Y\x91`\x04\x01a&\xDCV[`\0a\x13e\x83\x83a\x1A0V[a\x13\xFEW\x82T`\x01\x81\x01\x84U`\0\x84\x81R` \x90 \x01a\x13\x85\x83\x82a,\xA1V[P\x82T`@Q`\x01\x85\x01\x90a\x13\x9B\x90\x85\x90a.VV[\x90\x81R` \x01`@Q\x80\x91\x03\x90 \x81\x90UP\x82`\x01\x01\x82`@Qa\x13\xBF\x91\x90a.VV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x81 T\x90\x7F\x11Iz\x83IQ\tTi\x93\x0E\xC6.\x16A\xF0\xDC\xF3a}\x9C\xD7W\x9Bm\xA7nT\xDF0\0\xA7\x90`\0\x90\xA2P`\x01a\x05YV[P`\0a\x05YV[`\0\x82`\x01\x01\x82`@Qa\x14\x1A\x91\x90a.VV[\x90\x81R` \x01`@Q\x80\x91\x03\x90 T\x90P\x92\x91PPV[`\0a\x14<`\x0BT\x90V[\x90Pa\x14H\x86\x82a\x1A]V[`\0\x81\x81R`\x11` \x90\x81R`@\x80\x83 \x88\x90U`\x12\x82R\x80\x83 \x87\x90U`\x13\x90\x91R\x90 \x83\x90Ua\x14z\x81\x83a\x1B\x9CV[PPPPPPV[a\x14\x8C\x82\x82a\x1C V[`\0\x82\x81R`\x01` R`@\x90 a\x07\x8E\x90\x82a\x1C\xA4V[a\x14\xAE\x82\x82a\x1C\xB9V[`\0\x82\x81R`\x01` R`@\x90 a\x07\x8E\x90\x82a\x1D\x1EV[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R`D\x80\x82\x01\x84\x90R\x82Q\x80\x83\x03\x90\x91\x01\x81R`d\x90\x91\x01\x90\x91R` \x81\x01\x80Q`\x01`\x01`\xE0\x1B\x03\x16c\xA9\x05\x9C\xBB`\xE0\x1B\x17\x90Ra\x07\x8E\x90\x84\x90a\x1D3V[`\0a\r6\x83\x83a\x1E\x05V[\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x03a\x15\x85W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x19`$\x82\x01R\x7FERC721: approve to caller\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x06YV[`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\0\x81\x81R`\x07` \x90\x81R`@\x80\x83 \x94\x87\x16\x80\x84R\x94\x82R\x91\x82\x90 \x80T`\xFF\x19\x16\x86\x15\x15\x90\x81\x17\x90\x91U\x91Q\x91\x82R\x7F\x170~\xAB9\xABa\x07\xE8\x89\x98E\xAD=Y\xBD\x96S\xF2\0\xF2 \x92\x04\x89\xCA+Y7il1\x91\x01`@Q\x80\x91\x03\x90\xA3PPPV[``\x82a\x16\0`\x01\x84a-\xBBV[\x81T\x81\x10a\x16\x10Wa\x16\x10a,,V[\x90`\0R` `\0 \x01\x80Ta\x16%\x90a+eV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x16Q\x90a+eV[\x80\x15a\x16\x9EW\x80`\x1F\x10a\x16sWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x16\x9EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x16\x81W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x92\x91PPV[a\x16\xB6\x84\x84\x84a\x11JV[a\x16\xC2\x84\x84\x84\x84a\x1E/V[a\x0FDW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x90a.rV[``a\x16\xE9\x82a\x0F\xD5V[a\x17OW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`1`$\x82\x01R\x7FERC721URIStorage: URI query for `D\x82\x01Rp77\xB72\xBC4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`y\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0\x82\x81R`\x08` R`@\x81 \x80Ta\x17h\x90a+eV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x17\x94\x90a+eV[\x80\x15a\x17\xE1W\x80`\x1F\x10a\x17\xB6Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x17\xE1V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x17\xC4W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0a\x17\xF2a\x1F0V[\x90P\x80Q`\0\x03a\x18\x04WP\x92\x91PPV[\x81Q\x15a\x186W\x80\x82`@Q` \x01a\x18\x1E\x92\x91\x90a.\xC4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[a\x11B\x84a\x1F?V[`\0a\x05Y\x82T\x90V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c\x80\xACX\xCD`\xE0\x1B\x14\x80a\x18zWP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c[^\x13\x9F`\xE0\x1B\x14[\x80a\x05YWPa\x05Y\x82a \tV[a\x07\x8E\x83\x83\x83a .V[```\0a\x18\xA3\x83`\x02a.\xF3V[a\x18\xAE\x90`\x02a-\xCEV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x18\xC6Wa\x18\xC6a'\x8AV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x18\xF0W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x19\x0BWa\x19\x0Ba,,V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x19:Wa\x19:a,,V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x19^\x84`\x02a.\xF3V[a\x19i\x90`\x01a-\xCEV[\x90P[`\x01\x81\x11\x15a\x19\xE1Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x19\x9DWa\x19\x9Da,,V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x19\xB3Wa\x19\xB3a,,V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x19\xDA\x81a/\nV[\x90Pa\x19lV[P\x83\x15a\r6W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06YV[`\0\x82`\x01\x01\x82`@Qa\x1AD\x91\x90a.VV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T\x15\x15\x93\x92PPPV[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x1A\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FERC721: mint to the zero address`D\x82\x01R`d\x01a\x06YV[a\x1A\xBC\x81a\x0F\xD5V[\x15a\x1B\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FERC721: token already minted\0\0\0\0`D\x82\x01R`d\x01a\x06YV[a\x1B\x15`\0\x83\x83a\x18\x89V[`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x05` R`@\x81 \x80T`\x01\x92\x90a\x1B>\x90\x84\x90a-\xCEV[\x90\x91UPP`\0\x81\x81R`\x04` R`@\x80\x82 \x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x86\x16\x90\x81\x17\x90\x91U\x90Q\x83\x92\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90\x82\x90\xA4PPV[a\x1B\xA5\x82a\x0F\xD5V[a\x1C\x08W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`.`$\x82\x01R\x7FERC721URIStorage: URI set of non`D\x82\x01Rm2\xBC4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`\x91\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0\x82\x81R`\x08` R`@\x90 a\x07\x8E\x82\x82a,\xA1V[a\x1C*\x82\x82a\r=V[a\t\xACW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x1C`3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0a\r6\x83`\x01`\x01`\xA0\x1B\x03\x84\x16a \xE6V[a\x1C\xC3\x82\x82a\r=V[\x15a\t\xACW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`\0a\r6\x83`\x01`\x01`\xA0\x1B\x03\x84\x16a!-V[`\0a\x1D\x88\x82`@Q\x80`@\x01`@R\x80` \x81R` \x01\x7FSafeERC20: low-level call failed\x81RP\x85`\x01`\x01`\xA0\x1B\x03\x16a\" \x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x80Q\x90\x91P\x15a\x07\x8EW\x80\x80` \x01\x90Q\x81\x01\x90a\x1D\xA6\x91\x90a/!V[a\x07\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSafeERC20: ERC20 operation did n`D\x82\x01Ri\x1B\xDD\x08\x1C\xDDX\xD8\xD9YY`\xB2\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0\x82`\0\x01\x82\x81T\x81\x10a\x1E\x1CWa\x1E\x1Ca,,V[\x90`\0R` `\0 \x01T\x90P\x92\x91PPV[`\0`\x01`\x01`\xA0\x1B\x03\x84\x16;\x15a\x1F%W`@Qc\n\x85\xBD\x01`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16\x90c\x15\x0Bz\x02\x90a\x1Es\x903\x90\x89\x90\x88\x90\x88\x90`\x04\x01a/>V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x92PPP\x80\x15a\x1E\xAEWP`@\x80Q`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01\x90\x92Ra\x1E\xAB\x91\x81\x01\x90a/{V[`\x01[a\x1F\x0BW=\x80\x80\x15a\x1E\xDCW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x1E\xE1V[``\x91P[P\x80Q`\0\x03a\x1F\x03W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x90a.rV[\x80Q\x81` \x01\xFD[`\x01`\x01`\xE0\x1B\x03\x19\x16c\n\x85\xBD\x01`\xE1\x1B\x14\x90Pa\x11BV[P`\x01\x94\x93PPPPV[```\x0E\x80Ta\x05n\x90a+eV[``a\x1FJ\x82a\x0F\xD5V[a\x1F\xAEW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FERC721Metadata: URI query for no`D\x82\x01Rn72\xBC4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`\x89\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0a\x1F\xB8a\x1F0V[\x90P`\0\x81Q\x11a\x1F\xD8W`@Q\x80` \x01`@R\x80`\0\x81RPa\r6V[\x80a\x1F\xE2\x84a\"/V[`@Q` \x01a\x1F\xF3\x92\x91\x90a.\xC4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x93\x92PPPV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cZ\x05\x18\x0F`\xE0\x1B\x14\x80a\x05YWPa\x05Y\x82a#0V[`\x01`\x01`\xA0\x1B\x03\x83\x16a \x89Wa \x84\x81`\x0B\x80T`\0\x83\x81R`\x0C` R`@\x81 \x82\x90U`\x01\x82\x01\x83U\x91\x90\x91R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x01UV[a \xACV[\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x14a \xACWa \xAC\x83\x82a#eV[`\x01`\x01`\xA0\x1B\x03\x82\x16a \xC3Wa\x07\x8E\x81a$\x02V[\x82`\x01`\x01`\xA0\x1B\x03\x16\x82`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\x8EWa\x07\x8E\x82\x82a$\xB1V[`\0\x81\x81R`\x01\x83\x01` R`@\x81 Ta\x13\xFEWP\x81T`\x01\x81\x81\x01\x84U`\0\x84\x81R` \x80\x82 \x90\x93\x01\x84\x90U\x84T\x84\x82R\x82\x86\x01\x90\x93R`@\x90 \x91\x90\x91Ua\x05YV[`\0\x81\x81R`\x01\x83\x01` R`@\x81 T\x80\x15a\"\x16W`\0a!Q`\x01\x83a-\xBBV[\x85T\x90\x91P`\0\x90a!e\x90`\x01\x90a-\xBBV[\x90P\x81\x81\x14a!\xCAW`\0\x86`\0\x01\x82\x81T\x81\x10a!\x85Wa!\x85a,,V[\x90`\0R` `\0 \x01T\x90P\x80\x87`\0\x01\x84\x81T\x81\x10a!\xA8Wa!\xA8a,,V[`\0\x91\x82R` \x80\x83 \x90\x91\x01\x92\x90\x92U\x91\x82R`\x01\x88\x01\x90R`@\x90 \x83\x90U[\x85T\x86\x90\x80a!\xDBWa!\xDBa/\x98V[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90U\x85`\x01\x01`\0\x86\x81R` \x01\x90\x81R` \x01`\0 `\0\x90U`\x01\x93PPPPa\x05YV[`\0\x91PPa\x05YV[``a\x11B\x84\x84`\0\x85a$\xF5V[``\x81`\0\x03a\"VWPP`@\x80Q\x80\x82\x01\x90\x91R`\x01\x81R`\x03`\xFC\x1B` \x82\x01R\x90V[\x81`\0[\x81\x15a\"\x80W\x80a\"j\x81a-\xA2V[\x91Pa\"y\x90P`\n\x83a/\xC4V[\x91Pa\"ZV[`\0\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\"\x9BWa\"\x9Ba'\x8AV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\"\xC5W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P[\x84\x15a\x11BWa\"\xDA`\x01\x83a-\xBBV[\x91Pa\"\xE7`\n\x86a/\xD8V[a\"\xF2\x90`0a-\xCEV[`\xF8\x1B\x81\x83\x81Q\x81\x10a#\x07Wa#\x07a,,V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SPa#)`\n\x86a/\xC4V[\x94Pa\"\xC9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x05YWPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14a\x05YV[`\0`\x01a#r\x84a\x0C\x97V[a#|\x91\x90a-\xBBV[`\0\x83\x81R`\n` R`@\x90 T\x90\x91P\x80\x82\x14a#\xCFW`\x01`\x01`\xA0\x1B\x03\x84\x16`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 \x85\x84R\x82R\x80\x83 T\x84\x84R\x81\x84 \x81\x90U\x83R`\n\x90\x91R\x90 \x81\x90U[P`\0\x91\x82R`\n` \x90\x81R`@\x80\x84 \x84\x90U`\x01`\x01`\xA0\x1B\x03\x90\x94\x16\x83R`\t\x81R\x83\x83 \x91\x83RR\x90\x81 UV[`\x0BT`\0\x90a$\x14\x90`\x01\x90a-\xBBV[`\0\x83\x81R`\x0C` R`@\x81 T`\x0B\x80T\x93\x94P\x90\x92\x84\x90\x81\x10a$<Wa$<a,,V[\x90`\0R` `\0 \x01T\x90P\x80`\x0B\x83\x81T\x81\x10a$]Wa$]a,,V[`\0\x91\x82R` \x80\x83 \x90\x91\x01\x92\x90\x92U\x82\x81R`\x0C\x90\x91R`@\x80\x82 \x84\x90U\x85\x82R\x81 U`\x0B\x80T\x80a$\x95Wa$\x95a/\x98V[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90UPPPPV[`\0a$\xBC\x83a\x0C\x97V[`\x01`\x01`\xA0\x1B\x03\x90\x93\x16`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 \x86\x84R\x82R\x80\x83 \x85\x90U\x93\x82R`\n\x90R\x91\x90\x91 \x91\x90\x91UPV[``\x82G\x10\x15a%VW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FAddress: insufficient balance fo`D\x82\x01Re\x1C\x88\x18\xD8[\x1B`\xD2\x1B`d\x82\x01R`\x84\x01a\x06YV[\x84;a%\xA4W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FAddress: call to non-contract\0\0\0`D\x82\x01R`d\x01a\x06YV[`\0\x80\x86`\x01`\x01`\xA0\x1B\x03\x16\x85\x87`@Qa%\xC0\x91\x90a.VV[`\0`@Q\x80\x83\x03\x81\x85\x87Z\xF1\x92PPP=\x80`\0\x81\x14a%\xFDW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a&\x02V[``\x91P[P\x91P\x91Pa&\x12\x82\x82\x86a&\x1DV[\x97\x96PPPPPPPV[``\x83\x15a&,WP\x81a\r6V[\x82Q\x15a&<W\x82Q\x80\x84` \x01\xFD[\x81`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x91\x90a&\xDCV[`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a&lW`\0\x80\xFD[PV[`\0` \x82\x84\x03\x12\x15a&\x81W`\0\x80\xFD[\x815a\r6\x81a&VV[`\0[\x83\x81\x10\x15a&\xA7W\x81\x81\x01Q\x83\x82\x01R` \x01a&\x8FV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra&\xC8\x81` \x86\x01` \x86\x01a&\x8CV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0a\r6` \x83\x01\x84a&\xB0V[`\0` \x82\x84\x03\x12\x15a'\x01W`\0\x80\xFD[P5\x91\x90PV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a'\x1FW`\0\x80\xFD[\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a'7W`\0\x80\xFD[a'@\x83a'\x08V[\x94` \x93\x90\x93\x015\x93PPPV[`\0\x80`\0``\x84\x86\x03\x12\x15a'cW`\0\x80\xFD[a'l\x84a'\x08V[\x92Pa'z` \x85\x01a'\x08V[\x91P`@\x84\x015\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x84\x11\x15a'\xBBWa'\xBBa'\x8AV[`@Q`\x1F\x85\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a'\xE3Wa'\xE3a'\x8AV[\x81`@R\x80\x93P\x85\x81R\x86\x86\x86\x01\x11\x15a'\xFCW`\0\x80\xFD[\x85\x85` \x83\x017`\0` \x87\x83\x01\x01RPPP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a('W`\0\x80\xFD[a\r6\x83\x835` \x85\x01a'\xA0V[`\0\x80`\0\x80`\0`\xA0\x86\x88\x03\x12\x15a(NW`\0\x80\xFD[a(W\x86a'\x08V[\x94P` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a(tW`\0\x80\xFD[a(\x80\x89\x83\x8A\x01a(\x16V[\x95P`@\x88\x015\x91P\x80\x82\x11\x15a(\x96W`\0\x80\xFD[Pa(\xA3\x88\x82\x89\x01a(\x16V[\x95\x98\x94\x97P\x94\x95``\x81\x015\x95P`\x80\x015\x93\x92PPPV[`\0\x80`@\x83\x85\x03\x12\x15a(\xCFW`\0\x80\xFD[\x825\x91Pa(\xDF` \x84\x01a'\x08V[\x90P\x92P\x92\x90PV[`\0` \x82\x84\x03\x12\x15a(\xFAW`\0\x80\xFD[a\r6\x82a'\x08V[`\0\x80`@\x83\x85\x03\x12\x15a)\x16W`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[`\0` \x82\x84\x03\x12\x15a)7W`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a)NW`\0\x80\xFD[a\x11B\x84\x82\x85\x01a(\x16V[`\0\x80\x83`\x1F\x84\x01\x12a)lW`\0\x80\xFD[P\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a)\x84W`\0\x80\xFD[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15a)\x9CW`\0\x80\xFD[\x92P\x92\x90PV[`\0\x80`\0\x80`\0\x80`\0\x80`\xA0\x89\x8B\x03\x12\x15a)\xBFW`\0\x80\xFD[\x885g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a)\xD7W`\0\x80\xFD[\x81\x8B\x01\x91P\x8B`\x1F\x83\x01\x12a)\xEBW`\0\x80\xFD[\x815\x81\x81\x11\x15a)\xFAW`\0\x80\xFD[\x8C` \x82`\x05\x1B\x85\x01\x01\x11\x15a*\x0FW`\0\x80\xFD[` \x92\x83\x01\x9AP\x98P\x90\x8A\x015\x90\x80\x82\x11\x15a**W`\0\x80\xFD[a*6\x8C\x83\x8D\x01a)ZV[\x90\x98P\x96P`@\x8B\x015\x91P\x80\x82\x11\x15a*OW`\0\x80\xFD[Pa*\\\x8B\x82\x8C\x01a)ZV[\x99\x9C\x98\x9BP\x96\x99\x95\x98\x96\x97``\x87\x015\x96`\x80\x015\x95P\x93PPPPV[\x80\x15\x15\x81\x14a&lW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a*\x9BW`\0\x80\xFD[a*\xA4\x83a'\x08V[\x91P` \x83\x015a*\xB4\x81a*zV[\x80\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a*\xD5W`\0\x80\xFD[a*\xDE\x85a'\x08V[\x93Pa*\xEC` \x86\x01a'\x08V[\x92P`@\x85\x015\x91P``\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a+\x0FW`\0\x80\xFD[\x85\x01`\x1F\x81\x01\x87\x13a+ W`\0\x80\xFD[a+/\x87\x825` \x84\x01a'\xA0V[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`@\x83\x85\x03\x12\x15a+NW`\0\x80\xFD[a+W\x83a'\x08V[\x91Pa(\xDF` \x84\x01a'\x08V[`\x01\x81\x81\x1C\x90\x82\x16\x80a+yW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a+\x99WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[` \x80\x82R`1\x90\x82\x01R\x7FERC721: transfer caller is not o`@\x82\x01Rp\x1D\xDB\x99\\\x88\x1B\x9B\xDC\x88\x18\\\x1C\x1C\x9B\xDD\x99Y`z\x1B``\x82\x01R`\x80\x01\x90V[`\0\x83Qa,\x02\x81\x84` \x88\x01a&\x8CV[`/`\xF8\x1B\x90\x83\x01\x90\x81R\x83Qa, \x81`\x01\x84\x01` \x88\x01a&\x8CV[\x01`\x01\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0` \x82\x84\x03\x12\x15a,TW`\0\x80\xFD[PQ\x91\x90PV[`\x1F\x82\x11\x15a\x07\x8EW`\0\x81\x81R` \x81 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a,\x82WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x14zW\x82\x81U`\x01\x01a,\x8EV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a,\xBBWa,\xBBa'\x8AV[a,\xCF\x81a,\xC9\x84Ta+eV[\x84a,[V[` \x80`\x1F\x83\x11`\x01\x81\x14a-\x04W`\0\x84\x15a,\xECWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x14zV[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a-3W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a-\x14V[P\x85\x82\x10\x15a-QW\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[\x83\x85\x827`\0\x84\x82\x01`/`\xF8\x1B\x81R\x83\x85`\x01\x83\x017`\0\x93\x01`\x01\x01\x92\x83RP\x90\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a-\xB4Wa-\xB4a-\x8CV[P`\x01\x01\x90V[\x81\x81\x03\x81\x81\x11\x15a\x05YWa\x05Ya-\x8CV[\x80\x82\x01\x80\x82\x11\x15a\x05YWa\x05Ya-\x8CV[\x7FAccessControl: account \0\0\0\0\0\0\0\0\0\x81R`\0\x83Qa.\x19\x81`\x17\x85\x01` \x88\x01a&\x8CV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa.J\x81`(\x84\x01` \x88\x01a&\x8CV[\x01`(\x01\x94\x93PPPPV[`\0\x82Qa.h\x81\x84` \x87\x01a&\x8CV[\x91\x90\x91\x01\x92\x91PPV[` \x80\x82R`2\x90\x82\x01R\x7FERC721: transfer to non ERC721Re`@\x82\x01Rq1\xB2\xB4\xBB2\xB9\x104\xB6\xB862\xB6\xB2\xB7:2\xB9`q\x1B``\x82\x01R`\x80\x01\x90V[`\0\x83Qa.\xD6\x81\x84` \x88\x01a&\x8CV[\x83Q\x90\x83\x01\x90a.\xEA\x81\x83` \x88\x01a&\x8CV[\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x05YWa\x05Ya-\x8CV[`\0\x81a/\x19Wa/\x19a-\x8CV[P`\0\x19\x01\x90V[`\0` \x82\x84\x03\x12\x15a/3W`\0\x80\xFD[\x81Qa\r6\x81a*zV[`\x01`\x01`\xA0\x1B\x03\x85\x81\x16\x82R\x84\x16` \x82\x01R`@\x81\x01\x83\x90R`\x80``\x82\x01\x81\x90R`\0\x90a/q\x90\x83\x01\x84a&\xB0V[\x96\x95PPPPPPV[`\0` \x82\x84\x03\x12\x15a/\x8DW`\0\x80\xFD[\x81Qa\r6\x81a&VV[cNH{q`\xE0\x1B`\0R`1`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a/\xD3Wa/\xD3a/\xAEV[P\x04\x90V[`\0\x82a/\xE7Wa/\xE7a/\xAEV[P\x06\x90V\xFE\xA2dipfsX\"\x12 m{\xDE\xEA\xFDk<\xBBC\x1FL|\"%\x04^\xD0\xE8\xE3\x9A6\x8F1\n'\xAEI_/\xC1\x0C\xDBdsolcC\0\x08\x13\x003",
936    );
937    /// The runtime bytecode of the contract, as deployed on the network.
938    ///
939    /// ```text
940    ///0x608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a22cb465116100ad578063c87b56dd1161007c578063c87b56dd14610498578063ca15c873146104ab578063d5391393146104be578063d547741f146104e5578063e985e9c5146104f857600080fd5b8063a22cb4651461044c578063b5185a881461045f578063b88d4fde14610472578063c588ff8b1461048557600080fd5b8063931688cb116100e9578063931688cb146104165780639365c5331461042957806395d89b411461043c578063a217fddf1461044457600080fd5b806370a082311461039b578063896cddf4146103ae5780639010d07c146103f057806391d148541461040357600080fd5b80632f2ff15d1161019d57806348c64e411161016c57806348c64e411461032f5780634f6ccce714610342578063562317c5146103555780636067bc15146103755780636352211e1461038857600080fd5b80632f2ff15d146102e35780632f745c59146102f657806336568abe1461030957806342842e0e1461031c57600080fd5b806318160ddd116101d957806318160ddd1461028857806323b872dd1461029a578063248a9ca3146102ad57806329867dac146102d057600080fd5b806301ffc9a71461020b57806306fdde0314610233578063081812fc14610248578063095ea7b314610273575b600080fd5b61021e61021936600461266f565b610534565b60405190151581526020015b60405180910390f35b61023b61055f565b60405161022a91906126dc565b61025b6102563660046126ef565b6105f1565b6040516001600160a01b03909116815260200161022a565b610286610281366004612724565b61067e565b005b600b545b60405190815260200161022a565b6102866102a836600461274e565b610793565b61028c6102bb3660046126ef565b60009081526020819052604090206001015490565b6102866102de366004612836565b6107c4565b6102866102f13660046128bc565b610876565b61028c610304366004612724565b61089c565b6102866103173660046128bc565b610932565b61028661032a36600461274e565b6109b0565b61028661033d366004612724565b6109cb565b61028c6103503660046126ef565b610aa4565b61028c6103633660046126ef565b60009081526013602052604090205490565b6102866103833660046128e8565b610b37565b61025b6103963660046126ef565b610c20565b61028c6103a93660046128e8565b610c97565b6103db6103bc3660046126ef565b6000908152601160209081526040808320546012909252909120549091565b6040805192835260208301919091520161022a565b61025b6103fe366004612903565b610d1e565b61021e6104113660046128bc565b610d3d565b610286610424366004612925565b610d66565b6102866104373660046129a3565b610d7e565b61023b610eeb565b61028c600081565b61028661045a366004612a88565b610efa565b61023b61046d3660046126ef565b610f05565b610286610480366004612abf565b610f12565b61023b6104933660046126ef565b610f4a565b61023b6104a63660046126ef565b610f68565b61028c6104b93660046126ef565b610f73565b61028c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102866104f33660046128bc565b610f8a565b61021e610506366004612b3b565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b60006001600160e01b03198216630d639add60e11b1480610559575061055982610fb0565b92915050565b60606002805461056e90612b65565b80601f016020809104026020016040519081016040528092919081815260200182805461059a90612b65565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b5050505050905090565b60006105fc82610fd5565b6106625760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061068982610c20565b9050806001600160a01b0316836001600160a01b0316036106f65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610659565b336001600160a01b038216148061071257506107128133610506565b6107845760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610659565b61078e8383610ff2565b505050565b61079d3382611060565b6107b95760405162461bcd60e51b815260040161065990612b9f565b61078e83838361114a565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66107ef81336112f5565b6107fa600f86611359565b506000610808600f87611406565b90506000868660405160200161081f929190612bf0565b604051602081830303815290604052905061083d8886868585611431565b8385837f735e5eb5afdd72cc64657ded7e5de390af3708afb5b9a80b0e5c911a0499d98f60405160405180910390a45050505050505050565b60008281526020819052604090206001015461089281336112f5565b61078e8383611482565b60006108a783610c97565b82106109095760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610659565b506001600160a01b03919091166000908152600960209081526040808320938352929052205490565b6001600160a01b03811633146109a25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610659565b6109ac82826114a4565b5050565b61078e83838360405180602001604052806000815250610f12565b60006109d781336112f5565b6002600d5403610a295760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610659565b6002600d55604080516323b872dd60e01b81523060048201523360248201526044810184905290516001600160a01b038516916323b872dd91606480830192600092919082900301818387803b158015610a8257600080fd5b505af1158015610a96573d6000803e3d6000fd5b50506001600d555050505050565b6000610aaf600b5490565b8210610b125760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610659565b600b8281548110610b2557610b25612c2c565b90600052602060002001549050919050565b6000610b4381336112f5565b6002600d5403610b955760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610659565b6002600d55610c17336040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c069190612c42565b6001600160a01b03851691906114c6565b50506001600d55565b6000818152600460205260408120546001600160a01b0316806105595760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610659565b60006001600160a01b038216610d025760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610659565b506001600160a01b031660009081526005602052604090205490565b6000828152600160205260408120610d369083611518565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610d7281336112f5565b600e61078e8382612ca1565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610da981336112f5565b610dec87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600f939250506113599050565b506000610e3288888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600f939250506114069050565b9050600088888888604051602001610e4d9493929190612d61565b604051602081830303815290604052905060005b8a811015610eae57610e9c8c8c83818110610e7e57610e7e612c2c565b9050602002016020810190610e9391906128e8565b87878686611431565b80610ea681612da2565b915050610e61565b508385837f735e5eb5afdd72cc64657ded7e5de390af3708afb5b9a80b0e5c911a0499d98f60405160405180910390a45050505050505050505050565b60606003805461056e90612b65565b6109ac338383611524565b6060610559600f836115f2565b610f1c3383611060565b610f385760405162461bcd60e51b815260040161065990612b9f565b610f44848484846116ab565b50505050565b60008181526013602052604090205460609061055990600f906115f2565b6060610559826116de565b60008181526001602052604081206105599061183f565b600082815260208190526040902060010154610fa681336112f5565b61078e83836114a4565b60006001600160e01b0319821663780e9d6360e01b1480610559575061055982611849565b6000908152600460205260409020546001600160a01b0316151590565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155819061102782610c20565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061106b82610fd5565b6110cc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610659565b60006110d783610c20565b9050806001600160a01b0316846001600160a01b031614806111125750836001600160a01b0316611107846105f1565b6001600160a01b0316145b8061114257506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661115d82610c20565b6001600160a01b0316146111c55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610659565b6001600160a01b0382166112275760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610659565b611232838383611889565b61123d600082610ff2565b6001600160a01b0383166000908152600560205260408120805460019290611266908490612dbb565b90915550506001600160a01b0382166000908152600560205260408120805460019290611294908490612dce565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6112ff8282610d3d565b6109ac57611317816001600160a01b03166014611894565b611322836020611894565b604051602001611333929190612de1565b60408051601f198184030181529082905262461bcd60e51b8252610659916004016126dc565b60006113658383611a30565b6113fe578254600181018455600084815260209020016113858382612ca1565b508254604051600185019061139b908590612e56565b90815260200160405180910390208190555082600101826040516113bf9190612e56565b90815260405190819003602001812054907f11497a834951095469930ec62e1641f0dcf3617d9cd7579b6da76e54df3000a790600090a2506001610559565b506000610559565b6000826001018260405161141a9190612e56565b908152602001604051809103902054905092915050565b600061143c600b5490565b90506114488682611a5d565b6000818152601160209081526040808320889055601282528083208790556013909152902083905561147a8183611b9c565b505050505050565b61148c8282611c20565b600082815260016020526040902061078e9082611ca4565b6114ae8282611cb9565b600082815260016020526040902061078e9082611d1e565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261078e908490611d33565b6000610d368383611e05565b816001600160a01b0316836001600160a01b0316036115855760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610659565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b606082611600600184612dbb565b8154811061161057611610612c2c565b90600052602060002001805461162590612b65565b80601f016020809104026020016040519081016040528092919081815260200182805461165190612b65565b801561169e5780601f106116735761010080835404028352916020019161169e565b820191906000526020600020905b81548152906001019060200180831161168157829003601f168201915b5050505050905092915050565b6116b684848461114a565b6116c284848484611e2f565b610f445760405162461bcd60e51b815260040161065990612e72565b60606116e982610fd5565b61174f5760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610659565b6000828152600860205260408120805461176890612b65565b80601f016020809104026020016040519081016040528092919081815260200182805461179490612b65565b80156117e15780601f106117b6576101008083540402835291602001916117e1565b820191906000526020600020905b8154815290600101906020018083116117c457829003601f168201915b5050505050905060006117f2611f30565b90508051600003611804575092915050565b81511561183657808260405160200161181e929190612ec4565b60405160208183030381529060405292505050919050565b61114284611f3f565b6000610559825490565b60006001600160e01b031982166380ac58cd60e01b148061187a57506001600160e01b03198216635b5e139f60e01b145b80610559575061055982612009565b61078e83838361202e565b606060006118a3836002612ef3565b6118ae906002612dce565b67ffffffffffffffff8111156118c6576118c661278a565b6040519080825280601f01601f1916602001820160405280156118f0576020820181803683370190505b509050600360fc1b8160008151811061190b5761190b612c2c565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061193a5761193a612c2c565b60200101906001600160f81b031916908160001a905350600061195e846002612ef3565b611969906001612dce565b90505b60018111156119e1576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061199d5761199d612c2c565b1a60f81b8282815181106119b3576119b3612c2c565b60200101906001600160f81b031916908160001a90535060049490941c936119da81612f0a565b905061196c565b508315610d365760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610659565b60008260010182604051611a449190612e56565b9081526040519081900360200190205415159392505050565b6001600160a01b038216611ab35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610659565b611abc81610fd5565b15611b095760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610659565b611b1560008383611889565b6001600160a01b0382166000908152600560205260408120805460019290611b3e908490612dce565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b611ba582610fd5565b611c085760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610659565b600082815260086020526040902061078e8282612ca1565b611c2a8282610d3d565b6109ac576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055611c603390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610d36836001600160a01b0384166120e6565b611cc38282610d3d565b156109ac576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610d36836001600160a01b03841661212d565b6000611d88826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122209092919063ffffffff16565b80519091501561078e5780806020019051810190611da69190612f21565b61078e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610659565b6000826000018281548110611e1c57611e1c612c2c565b9060005260206000200154905092915050565b60006001600160a01b0384163b15611f2557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e73903390899088908890600401612f3e565b6020604051808303816000875af1925050508015611eae575060408051601f3d908101601f19168201909252611eab91810190612f7b565b60015b611f0b573d808015611edc576040519150601f19603f3d011682016040523d82523d6000602084013e611ee1565b606091505b508051600003611f035760405162461bcd60e51b815260040161065990612e72565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611142565b506001949350505050565b6060600e805461056e90612b65565b6060611f4a82610fd5565b611fae5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610659565b6000611fb8611f30565b90506000815111611fd85760405180602001604052806000815250610d36565b80611fe28461222f565b604051602001611ff3929190612ec4565b6040516020818303038152906040529392505050565b60006001600160e01b03198216635a05180f60e01b1480610559575061055982612330565b6001600160a01b0383166120895761208481600b80546000838152600c60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b6120ac565b816001600160a01b0316836001600160a01b0316146120ac576120ac8382612365565b6001600160a01b0382166120c35761078e81612402565b826001600160a01b0316826001600160a01b03161461078e5761078e82826124b1565b60008181526001830160205260408120546113fe57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610559565b60008181526001830160205260408120548015612216576000612151600183612dbb565b855490915060009061216590600190612dbb565b90508181146121ca57600086600001828154811061218557612185612c2c565b90600052602060002001549050808760000184815481106121a8576121a8612c2c565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806121db576121db612f98565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610559565b6000915050610559565b606061114284846000856124f5565b6060816000036122565750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612280578061226a81612da2565b91506122799050600a83612fc4565b915061225a565b60008167ffffffffffffffff81111561229b5761229b61278a565b6040519080825280601f01601f1916602001820160405280156122c5576020820181803683370190505b5090505b8415611142576122da600183612dbb565b91506122e7600a86612fd8565b6122f2906030612dce565b60f81b81838151811061230757612307612c2c565b60200101906001600160f81b031916908160001a905350612329600a86612fc4565b94506122c9565b60006001600160e01b03198216637965db0b60e01b148061055957506301ffc9a760e01b6001600160e01b0319831614610559565b6000600161237284610c97565b61237c9190612dbb565b6000838152600a60205260409020549091508082146123cf576001600160a01b03841660009081526009602090815260408083208584528252808320548484528184208190558352600a90915290208190555b506000918252600a602090815260408084208490556001600160a01b039094168352600981528383209183525290812055565b600b5460009061241490600190612dbb565b6000838152600c6020526040812054600b805493945090928490811061243c5761243c612c2c565b9060005260206000200154905080600b838154811061245d5761245d612c2c565b6000918252602080832090910192909255828152600c9091526040808220849055858252812055600b80548061249557612495612f98565b6001900381819060005260206000200160009055905550505050565b60006124bc83610c97565b6001600160a01b0390931660009081526009602090815260408083208684528252808320859055938252600a9052919091209190915550565b6060824710156125565760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610659565b843b6125a45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610659565b600080866001600160a01b031685876040516125c09190612e56565b60006040518083038185875af1925050503d80600081146125fd576040519150601f19603f3d011682016040523d82523d6000602084013e612602565b606091505b509150915061261282828661261d565b979650505050505050565b6060831561262c575081610d36565b82511561263c5782518084602001fd5b8160405162461bcd60e51b815260040161065991906126dc565b6001600160e01b03198116811461266c57600080fd5b50565b60006020828403121561268157600080fd5b8135610d3681612656565b60005b838110156126a757818101518382015260200161268f565b50506000910152565b600081518084526126c881602086016020860161268c565b601f01601f19169290920160200192915050565b602081526000610d3660208301846126b0565b60006020828403121561270157600080fd5b5035919050565b80356001600160a01b038116811461271f57600080fd5b919050565b6000806040838503121561273757600080fd5b61274083612708565b946020939093013593505050565b60008060006060848603121561276357600080fd5b61276c84612708565b925061277a60208501612708565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156127bb576127bb61278a565b604051601f8501601f19908116603f011681019082821181831017156127e3576127e361278a565b816040528093508581528686860111156127fc57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261282757600080fd5b610d36838335602085016127a0565b600080600080600060a0868803121561284e57600080fd5b61285786612708565b9450602086013567ffffffffffffffff8082111561287457600080fd5b61288089838a01612816565b9550604088013591508082111561289657600080fd5b506128a388828901612816565b9598949750949560608101359550608001359392505050565b600080604083850312156128cf57600080fd5b823591506128df60208401612708565b90509250929050565b6000602082840312156128fa57600080fd5b610d3682612708565b6000806040838503121561291657600080fd5b50508035926020909101359150565b60006020828403121561293757600080fd5b813567ffffffffffffffff81111561294e57600080fd5b61114284828501612816565b60008083601f84011261296c57600080fd5b50813567ffffffffffffffff81111561298457600080fd5b60208301915083602082850101111561299c57600080fd5b9250929050565b60008060008060008060008060a0898b0312156129bf57600080fd5b883567ffffffffffffffff808211156129d757600080fd5b818b0191508b601f8301126129eb57600080fd5b8135818111156129fa57600080fd5b8c60208260051b8501011115612a0f57600080fd5b60209283019a509850908a01359080821115612a2a57600080fd5b612a368c838d0161295a565b909850965060408b0135915080821115612a4f57600080fd5b50612a5c8b828c0161295a565b999c989b509699959896976060870135966080013595509350505050565b801515811461266c57600080fd5b60008060408385031215612a9b57600080fd5b612aa483612708565b91506020830135612ab481612a7a565b809150509250929050565b60008060008060808587031215612ad557600080fd5b612ade85612708565b9350612aec60208601612708565b925060408501359150606085013567ffffffffffffffff811115612b0f57600080fd5b8501601f81018713612b2057600080fd5b612b2f878235602084016127a0565b91505092959194509250565b60008060408385031215612b4e57600080fd5b612b5783612708565b91506128df60208401612708565b600181811c90821680612b7957607f821691505b602082108103612b9957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008351612c0281846020880161268c565b602f60f81b9083019081528351612c2081600184016020880161268c565b01600101949350505050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c5457600080fd5b5051919050565b601f82111561078e57600081815260208120601f850160051c81016020861015612c825750805b601f850160051c820191505b8181101561147a57828155600101612c8e565b815167ffffffffffffffff811115612cbb57612cbb61278a565b612ccf81612cc98454612b65565b84612c5b565b602080601f831160018114612d045760008415612cec5750858301515b600019600386901b1c1916600185901b17855561147a565b600085815260208120601f198616915b82811015612d3357888601518255948401946001909101908401612d14565b5085821015612d515787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b838582376000848201602f60f81b815283856001830137600093016001019283525090949350505050565b634e487b7160e01b600052601160045260246000fd5b600060018201612db457612db4612d8c565b5060010190565b8181038181111561055957610559612d8c565b8082018082111561055957610559612d8c565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612e1981601785016020880161268c565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612e4a81602884016020880161268c565b01602801949350505050565b60008251612e6881846020870161268c565b9190910192915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351612ed681846020880161268c565b835190830190612eea81836020880161268c565b01949350505050565b808202811582820484141761055957610559612d8c565b600081612f1957612f19612d8c565b506000190190565b600060208284031215612f3357600080fd5b8151610d3681612a7a565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f71908301846126b0565b9695505050505050565b600060208284031215612f8d57600080fd5b8151610d3681612656565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082612fd357612fd3612fae565b500490565b600082612fe757612fe7612fae565b50069056fea26469706673582212206d7bdeeafd6b3cbb431f4c7c2225045ed0e8e39a368f310a27ae495f2fc10cdb64736f6c63430008130033
941    /// ```
942    #[rustfmt::skip]
943    #[allow(clippy::all)]
944    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
945        b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x02\x06W`\x005`\xE0\x1C\x80cp\xA0\x821\x11a\x01\x1AW\x80c\xA2,\xB4e\x11a\0\xADW\x80c\xC8{V\xDD\x11a\0|W\x80c\xC8{V\xDD\x14a\x04\x98W\x80c\xCA\x15\xC8s\x14a\x04\xABW\x80c\xD59\x13\x93\x14a\x04\xBEW\x80c\xD5Gt\x1F\x14a\x04\xE5W\x80c\xE9\x85\xE9\xC5\x14a\x04\xF8W`\0\x80\xFD[\x80c\xA2,\xB4e\x14a\x04LW\x80c\xB5\x18Z\x88\x14a\x04_W\x80c\xB8\x8DO\xDE\x14a\x04rW\x80c\xC5\x88\xFF\x8B\x14a\x04\x85W`\0\x80\xFD[\x80c\x93\x16\x88\xCB\x11a\0\xE9W\x80c\x93\x16\x88\xCB\x14a\x04\x16W\x80c\x93e\xC53\x14a\x04)W\x80c\x95\xD8\x9BA\x14a\x04<W\x80c\xA2\x17\xFD\xDF\x14a\x04DW`\0\x80\xFD[\x80cp\xA0\x821\x14a\x03\x9BW\x80c\x89l\xDD\xF4\x14a\x03\xAEW\x80c\x90\x10\xD0|\x14a\x03\xF0W\x80c\x91\xD1HT\x14a\x04\x03W`\0\x80\xFD[\x80c//\xF1]\x11a\x01\x9DW\x80cH\xC6NA\x11a\x01lW\x80cH\xC6NA\x14a\x03/W\x80cOl\xCC\xE7\x14a\x03BW\x80cV#\x17\xC5\x14a\x03UW\x80c`g\xBC\x15\x14a\x03uW\x80ccR!\x1E\x14a\x03\x88W`\0\x80\xFD[\x80c//\xF1]\x14a\x02\xE3W\x80c/t\\Y\x14a\x02\xF6W\x80c6V\x8A\xBE\x14a\x03\tW\x80cB\x84.\x0E\x14a\x03\x1CW`\0\x80\xFD[\x80c\x18\x16\r\xDD\x11a\x01\xD9W\x80c\x18\x16\r\xDD\x14a\x02\x88W\x80c#\xB8r\xDD\x14a\x02\x9AW\x80c$\x8A\x9C\xA3\x14a\x02\xADW\x80c)\x86}\xAC\x14a\x02\xD0W`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x02\x0BW\x80c\x06\xFD\xDE\x03\x14a\x023W\x80c\x08\x18\x12\xFC\x14a\x02HW\x80c\t^\xA7\xB3\x14a\x02sW[`\0\x80\xFD[a\x02\x1Ea\x02\x196`\x04a&oV[a\x054V[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02;a\x05_V[`@Qa\x02*\x91\x90a&\xDCV[a\x02[a\x02V6`\x04a&\xEFV[a\x05\xF1V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x02*V[a\x02\x86a\x02\x816`\x04a'$V[a\x06~V[\0[`\x0BT[`@Q\x90\x81R` \x01a\x02*V[a\x02\x86a\x02\xA86`\x04a'NV[a\x07\x93V[a\x02\x8Ca\x02\xBB6`\x04a&\xEFV[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\x86a\x02\xDE6`\x04a(6V[a\x07\xC4V[a\x02\x86a\x02\xF16`\x04a(\xBCV[a\x08vV[a\x02\x8Ca\x03\x046`\x04a'$V[a\x08\x9CV[a\x02\x86a\x03\x176`\x04a(\xBCV[a\t2V[a\x02\x86a\x03*6`\x04a'NV[a\t\xB0V[a\x02\x86a\x03=6`\x04a'$V[a\t\xCBV[a\x02\x8Ca\x03P6`\x04a&\xEFV[a\n\xA4V[a\x02\x8Ca\x03c6`\x04a&\xEFV[`\0\x90\x81R`\x13` R`@\x90 T\x90V[a\x02\x86a\x03\x836`\x04a(\xE8V[a\x0B7V[a\x02[a\x03\x966`\x04a&\xEFV[a\x0C V[a\x02\x8Ca\x03\xA96`\x04a(\xE8V[a\x0C\x97V[a\x03\xDBa\x03\xBC6`\x04a&\xEFV[`\0\x90\x81R`\x11` \x90\x81R`@\x80\x83 T`\x12\x90\x92R\x90\x91 T\x90\x91V[`@\x80Q\x92\x83R` \x83\x01\x91\x90\x91R\x01a\x02*V[a\x02[a\x03\xFE6`\x04a)\x03V[a\r\x1EV[a\x02\x1Ea\x04\x116`\x04a(\xBCV[a\r=V[a\x02\x86a\x04$6`\x04a)%V[a\rfV[a\x02\x86a\x0476`\x04a)\xA3V[a\r~V[a\x02;a\x0E\xEBV[a\x02\x8C`\0\x81V[a\x02\x86a\x04Z6`\x04a*\x88V[a\x0E\xFAV[a\x02;a\x04m6`\x04a&\xEFV[a\x0F\x05V[a\x02\x86a\x04\x806`\x04a*\xBFV[a\x0F\x12V[a\x02;a\x04\x936`\x04a&\xEFV[a\x0FJV[a\x02;a\x04\xA66`\x04a&\xEFV[a\x0FhV[a\x02\x8Ca\x04\xB96`\x04a&\xEFV[a\x0FsV[a\x02\x8C\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA6\x81V[a\x02\x86a\x04\xF36`\x04a(\xBCV[a\x0F\x8AV[a\x02\x1Ea\x05\x066`\x04a+;V[`\x01`\x01`\xA0\x1B\x03\x91\x82\x16`\0\x90\x81R`\x07` \x90\x81R`@\x80\x83 \x93\x90\x94\x16\x82R\x91\x90\x91R T`\xFF\x16\x90V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c\rc\x9A\xDD`\xE1\x1B\x14\x80a\x05YWPa\x05Y\x82a\x0F\xB0V[\x92\x91PPV[```\x02\x80Ta\x05n\x90a+eV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x05\x9A\x90a+eV[\x80\x15a\x05\xE7W\x80`\x1F\x10a\x05\xBCWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x05\xE7V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x05\xCAW\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x90V[`\0a\x05\xFC\x82a\x0F\xD5V[a\x06bW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7FERC721: approved query for nonex`D\x82\x01Rk4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`\xA1\x1B`d\x82\x01R`\x84\x01[`@Q\x80\x91\x03\x90\xFD[P`\0\x90\x81R`\x06` R`@\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x90V[`\0a\x06\x89\x82a\x0C V[\x90P\x80`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x03a\x06\xF6W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FERC721: approval to current owne`D\x82\x01R`9`\xF9\x1B`d\x82\x01R`\x84\x01a\x06YV[3`\x01`\x01`\xA0\x1B\x03\x82\x16\x14\x80a\x07\x12WPa\x07\x12\x813a\x05\x06V[a\x07\x84W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`8`$\x82\x01R\x7FERC721: approve caller is not ow`D\x82\x01R\x7Fner nor approved for all\0\0\0\0\0\0\0\0`d\x82\x01R`\x84\x01a\x06YV[a\x07\x8E\x83\x83a\x0F\xF2V[PPPV[a\x07\x9D3\x82a\x10`V[a\x07\xB9W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x90a+\x9FV[a\x07\x8E\x83\x83\x83a\x11JV[\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA6a\x07\xEF\x813a\x12\xF5V[a\x07\xFA`\x0F\x86a\x13YV[P`\0a\x08\x08`\x0F\x87a\x14\x06V[\x90P`\0\x86\x86`@Q` \x01a\x08\x1F\x92\x91\x90a+\xF0V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90Pa\x08=\x88\x86\x86\x85\x85a\x141V[\x83\x85\x83\x7Fs^^\xB5\xAF\xDDr\xCCde}\xED~]\xE3\x90\xAF7\x08\xAF\xB5\xB9\xA8\x0B\x0E\\\x91\x1A\x04\x99\xD9\x8F`@Q`@Q\x80\x91\x03\x90\xA4PPPPPPPPV[`\0\x82\x81R` \x81\x90R`@\x90 `\x01\x01Ta\x08\x92\x813a\x12\xF5V[a\x07\x8E\x83\x83a\x14\x82V[`\0a\x08\xA7\x83a\x0C\x97V[\x82\x10a\t\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`+`$\x82\x01R\x7FERC721Enumerable: owner index ou`D\x82\x01Rjt of bounds`\xA8\x1B`d\x82\x01R`\x84\x01a\x06YV[P`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 \x93\x83R\x92\x90R T\x90V[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\t\xA2W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06YV[a\t\xAC\x82\x82a\x14\xA4V[PPV[a\x07\x8E\x83\x83\x83`@Q\x80` \x01`@R\x80`\0\x81RPa\x0F\x12V[`\0a\t\xD7\x813a\x12\xF5V[`\x02`\rT\x03a\n)W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1F`$\x82\x01R\x7FReentrancyGuard: reentrant call\0`D\x82\x01R`d\x01a\x06YV[`\x02`\rU`@\x80Qc#\xB8r\xDD`\xE0\x1B\x81R0`\x04\x82\x01R3`$\x82\x01R`D\x81\x01\x84\x90R\x90Q`\x01`\x01`\xA0\x1B\x03\x85\x16\x91c#\xB8r\xDD\x91`d\x80\x83\x01\x92`\0\x92\x91\x90\x82\x90\x03\x01\x81\x83\x87\x80;\x15\x80\x15a\n\x82W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\n\x96W=`\0\x80>=`\0\xFD[PP`\x01`\rUPPPPPV[`\0a\n\xAF`\x0BT\x90V[\x82\x10a\x0B\x12W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7FERC721Enumerable: global index o`D\x82\x01Rkut of bounds`\xA0\x1B`d\x82\x01R`\x84\x01a\x06YV[`\x0B\x82\x81T\x81\x10a\x0B%Wa\x0B%a,,V[\x90`\0R` `\0 \x01T\x90P\x91\x90PV[`\0a\x0BC\x813a\x12\xF5V[`\x02`\rT\x03a\x0B\x95W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1F`$\x82\x01R\x7FReentrancyGuard: reentrant call\0`D\x82\x01R`d\x01a\x06YV[`\x02`\rUa\x0C\x173`@Qcp\xA0\x821`\xE0\x1B\x81R0`\x04\x82\x01R`\x01`\x01`\xA0\x1B\x03\x85\x16\x90cp\xA0\x821\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\xE2W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0C\x06\x91\x90a,BV[`\x01`\x01`\xA0\x1B\x03\x85\x16\x91\x90a\x14\xC6V[PP`\x01`\rUV[`\0\x81\x81R`\x04` R`@\x81 T`\x01`\x01`\xA0\x1B\x03\x16\x80a\x05YW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FERC721: owner query for nonexist`D\x82\x01Rh2\xB7:\x10:7\xB5\xB2\xB7`\xB9\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0`\x01`\x01`\xA0\x1B\x03\x82\x16a\r\x02W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FERC721: balance query for the ze`D\x82\x01Riro address`\xB0\x1B`d\x82\x01R`\x84\x01a\x06YV[P`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\x05` R`@\x90 T\x90V[`\0\x82\x81R`\x01` R`@\x81 a\r6\x90\x83a\x15\x18V[\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0a\rr\x813a\x12\xF5V[`\x0Ea\x07\x8E\x83\x82a,\xA1V[\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA6a\r\xA9\x813a\x12\xF5V[a\r\xEC\x87\x87\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`\x0F\x93\x92PPa\x13Y\x90PV[P`\0a\x0E2\x88\x88\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`\x0F\x93\x92PPa\x14\x06\x90PV[\x90P`\0\x88\x88\x88\x88`@Q` \x01a\x0EM\x94\x93\x92\x91\x90a-aV[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x90P`\0[\x8A\x81\x10\x15a\x0E\xAEWa\x0E\x9C\x8C\x8C\x83\x81\x81\x10a\x0E~Wa\x0E~a,,V[\x90P` \x02\x01` \x81\x01\x90a\x0E\x93\x91\x90a(\xE8V[\x87\x87\x86\x86a\x141V[\x80a\x0E\xA6\x81a-\xA2V[\x91PPa\x0EaV[P\x83\x85\x83\x7Fs^^\xB5\xAF\xDDr\xCCde}\xED~]\xE3\x90\xAF7\x08\xAF\xB5\xB9\xA8\x0B\x0E\\\x91\x1A\x04\x99\xD9\x8F`@Q`@Q\x80\x91\x03\x90\xA4PPPPPPPPPPPV[```\x03\x80Ta\x05n\x90a+eV[a\t\xAC3\x83\x83a\x15$V[``a\x05Y`\x0F\x83a\x15\xF2V[a\x0F\x1C3\x83a\x10`V[a\x0F8W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x90a+\x9FV[a\x0FD\x84\x84\x84\x84a\x16\xABV[PPPPV[`\0\x81\x81R`\x13` R`@\x90 T``\x90a\x05Y\x90`\x0F\x90a\x15\xF2V[``a\x05Y\x82a\x16\xDEV[`\0\x81\x81R`\x01` R`@\x81 a\x05Y\x90a\x18?V[`\0\x82\x81R` \x81\x90R`@\x90 `\x01\x01Ta\x0F\xA6\x813a\x12\xF5V[a\x07\x8E\x83\x83a\x14\xA4V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cx\x0E\x9Dc`\xE0\x1B\x14\x80a\x05YWPa\x05Y\x82a\x18IV[`\0\x90\x81R`\x04` R`@\x90 T`\x01`\x01`\xA0\x1B\x03\x16\x15\x15\x90V[`\0\x81\x81R`\x06` R`@\x90 \x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x84\x16\x90\x81\x17\x90\x91U\x81\x90a\x10'\x82a\x0C V[`\x01`\x01`\xA0\x1B\x03\x16\x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0a\x10k\x82a\x0F\xD5V[a\x10\xCCW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`,`$\x82\x01R\x7FERC721: operator query for nonex`D\x82\x01Rk4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`\xA1\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0a\x10\xD7\x83a\x0C V[\x90P\x80`\x01`\x01`\xA0\x1B\x03\x16\x84`\x01`\x01`\xA0\x1B\x03\x16\x14\x80a\x11\x12WP\x83`\x01`\x01`\xA0\x1B\x03\x16a\x11\x07\x84a\x05\xF1V[`\x01`\x01`\xA0\x1B\x03\x16\x14[\x80a\x11BWP`\x01`\x01`\xA0\x1B\x03\x80\x82\x16`\0\x90\x81R`\x07` \x90\x81R`@\x80\x83 \x93\x88\x16\x83R\x92\x90R T`\xFF\x16[\x94\x93PPPPV[\x82`\x01`\x01`\xA0\x1B\x03\x16a\x11]\x82a\x0C V[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x11\xC5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FERC721: transfer of token that i`D\x82\x01Rh9\x9077\xBA\x107\xBB\xB7`\xB9\x1B`d\x82\x01R`\x84\x01a\x06YV[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x12'W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FERC721: transfer to the zero add`D\x82\x01Rcress`\xE0\x1B`d\x82\x01R`\x84\x01a\x06YV[a\x122\x83\x83\x83a\x18\x89V[a\x12=`\0\x82a\x0F\xF2V[`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x05` R`@\x81 \x80T`\x01\x92\x90a\x12f\x90\x84\x90a-\xBBV[\x90\x91UPP`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x05` R`@\x81 \x80T`\x01\x92\x90a\x12\x94\x90\x84\x90a-\xCEV[\x90\x91UPP`\0\x81\x81R`\x04` R`@\x80\x82 \x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x86\x81\x16\x91\x82\x17\x90\x92U\x91Q\x84\x93\x91\x87\x16\x91\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x91\xA4PPPV[a\x12\xFF\x82\x82a\r=V[a\t\xACWa\x13\x17\x81`\x01`\x01`\xA0\x1B\x03\x16`\x14a\x18\x94V[a\x13\"\x83` a\x18\x94V[`@Q` \x01a\x133\x92\x91\x90a-\xE1V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06Y\x91`\x04\x01a&\xDCV[`\0a\x13e\x83\x83a\x1A0V[a\x13\xFEW\x82T`\x01\x81\x01\x84U`\0\x84\x81R` \x90 \x01a\x13\x85\x83\x82a,\xA1V[P\x82T`@Q`\x01\x85\x01\x90a\x13\x9B\x90\x85\x90a.VV[\x90\x81R` \x01`@Q\x80\x91\x03\x90 \x81\x90UP\x82`\x01\x01\x82`@Qa\x13\xBF\x91\x90a.VV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x81 T\x90\x7F\x11Iz\x83IQ\tTi\x93\x0E\xC6.\x16A\xF0\xDC\xF3a}\x9C\xD7W\x9Bm\xA7nT\xDF0\0\xA7\x90`\0\x90\xA2P`\x01a\x05YV[P`\0a\x05YV[`\0\x82`\x01\x01\x82`@Qa\x14\x1A\x91\x90a.VV[\x90\x81R` \x01`@Q\x80\x91\x03\x90 T\x90P\x92\x91PPV[`\0a\x14<`\x0BT\x90V[\x90Pa\x14H\x86\x82a\x1A]V[`\0\x81\x81R`\x11` \x90\x81R`@\x80\x83 \x88\x90U`\x12\x82R\x80\x83 \x87\x90U`\x13\x90\x91R\x90 \x83\x90Ua\x14z\x81\x83a\x1B\x9CV[PPPPPPV[a\x14\x8C\x82\x82a\x1C V[`\0\x82\x81R`\x01` R`@\x90 a\x07\x8E\x90\x82a\x1C\xA4V[a\x14\xAE\x82\x82a\x1C\xB9V[`\0\x82\x81R`\x01` R`@\x90 a\x07\x8E\x90\x82a\x1D\x1EV[`@\x80Q`\x01`\x01`\xA0\x1B\x03\x84\x16`$\x82\x01R`D\x80\x82\x01\x84\x90R\x82Q\x80\x83\x03\x90\x91\x01\x81R`d\x90\x91\x01\x90\x91R` \x81\x01\x80Q`\x01`\x01`\xE0\x1B\x03\x16c\xA9\x05\x9C\xBB`\xE0\x1B\x17\x90Ra\x07\x8E\x90\x84\x90a\x1D3V[`\0a\r6\x83\x83a\x1E\x05V[\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x03a\x15\x85W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x19`$\x82\x01R\x7FERC721: approve to caller\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x06YV[`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\0\x81\x81R`\x07` \x90\x81R`@\x80\x83 \x94\x87\x16\x80\x84R\x94\x82R\x91\x82\x90 \x80T`\xFF\x19\x16\x86\x15\x15\x90\x81\x17\x90\x91U\x91Q\x91\x82R\x7F\x170~\xAB9\xABa\x07\xE8\x89\x98E\xAD=Y\xBD\x96S\xF2\0\xF2 \x92\x04\x89\xCA+Y7il1\x91\x01`@Q\x80\x91\x03\x90\xA3PPPV[``\x82a\x16\0`\x01\x84a-\xBBV[\x81T\x81\x10a\x16\x10Wa\x16\x10a,,V[\x90`\0R` `\0 \x01\x80Ta\x16%\x90a+eV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x16Q\x90a+eV[\x80\x15a\x16\x9EW\x80`\x1F\x10a\x16sWa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x16\x9EV[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x16\x81W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P\x92\x91PPV[a\x16\xB6\x84\x84\x84a\x11JV[a\x16\xC2\x84\x84\x84\x84a\x1E/V[a\x0FDW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x90a.rV[``a\x16\xE9\x82a\x0F\xD5V[a\x17OW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`1`$\x82\x01R\x7FERC721URIStorage: URI query for `D\x82\x01Rp77\xB72\xBC4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`y\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0\x82\x81R`\x08` R`@\x81 \x80Ta\x17h\x90a+eV[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x17\x94\x90a+eV[\x80\x15a\x17\xE1W\x80`\x1F\x10a\x17\xB6Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x17\xE1V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x17\xC4W\x82\x90\x03`\x1F\x16\x82\x01\x91[PPPPP\x90P`\0a\x17\xF2a\x1F0V[\x90P\x80Q`\0\x03a\x18\x04WP\x92\x91PPV[\x81Q\x15a\x186W\x80\x82`@Q` \x01a\x18\x1E\x92\x91\x90a.\xC4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x92PPP\x91\x90PV[a\x11B\x84a\x1F?V[`\0a\x05Y\x82T\x90V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c\x80\xACX\xCD`\xE0\x1B\x14\x80a\x18zWP`\x01`\x01`\xE0\x1B\x03\x19\x82\x16c[^\x13\x9F`\xE0\x1B\x14[\x80a\x05YWPa\x05Y\x82a \tV[a\x07\x8E\x83\x83\x83a .V[```\0a\x18\xA3\x83`\x02a.\xF3V[a\x18\xAE\x90`\x02a-\xCEV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x18\xC6Wa\x18\xC6a'\x8AV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x18\xF0W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x19\x0BWa\x19\x0Ba,,V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x19:Wa\x19:a,,V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x19^\x84`\x02a.\xF3V[a\x19i\x90`\x01a-\xCEV[\x90P[`\x01\x81\x11\x15a\x19\xE1Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x19\x9DWa\x19\x9Da,,V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x19\xB3Wa\x19\xB3a,,V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x19\xDA\x81a/\nV[\x90Pa\x19lV[P\x83\x15a\r6W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06YV[`\0\x82`\x01\x01\x82`@Qa\x1AD\x91\x90a.VV[\x90\x81R`@Q\x90\x81\x90\x03` \x01\x90 T\x15\x15\x93\x92PPPV[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x1A\xB3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FERC721: mint to the zero address`D\x82\x01R`d\x01a\x06YV[a\x1A\xBC\x81a\x0F\xD5V[\x15a\x1B\tW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FERC721: token already minted\0\0\0\0`D\x82\x01R`d\x01a\x06YV[a\x1B\x15`\0\x83\x83a\x18\x89V[`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x05` R`@\x81 \x80T`\x01\x92\x90a\x1B>\x90\x84\x90a-\xCEV[\x90\x91UPP`\0\x81\x81R`\x04` R`@\x80\x82 \x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x86\x16\x90\x81\x17\x90\x91U\x90Q\x83\x92\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90\x82\x90\xA4PPV[a\x1B\xA5\x82a\x0F\xD5V[a\x1C\x08W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`.`$\x82\x01R\x7FERC721URIStorage: URI set of non`D\x82\x01Rm2\xBC4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`\x91\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0\x82\x81R`\x08` R`@\x90 a\x07\x8E\x82\x82a,\xA1V[a\x1C*\x82\x82a\r=V[a\t\xACW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x1C`3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0a\r6\x83`\x01`\x01`\xA0\x1B\x03\x84\x16a \xE6V[a\x1C\xC3\x82\x82a\r=V[\x15a\t\xACW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`\0a\r6\x83`\x01`\x01`\xA0\x1B\x03\x84\x16a!-V[`\0a\x1D\x88\x82`@Q\x80`@\x01`@R\x80` \x81R` \x01\x7FSafeERC20: low-level call failed\x81RP\x85`\x01`\x01`\xA0\x1B\x03\x16a\" \x90\x92\x91\x90c\xFF\xFF\xFF\xFF\x16V[\x80Q\x90\x91P\x15a\x07\x8EW\x80\x80` \x01\x90Q\x81\x01\x90a\x1D\xA6\x91\x90a/!V[a\x07\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSafeERC20: ERC20 operation did n`D\x82\x01Ri\x1B\xDD\x08\x1C\xDDX\xD8\xD9YY`\xB2\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0\x82`\0\x01\x82\x81T\x81\x10a\x1E\x1CWa\x1E\x1Ca,,V[\x90`\0R` `\0 \x01T\x90P\x92\x91PPV[`\0`\x01`\x01`\xA0\x1B\x03\x84\x16;\x15a\x1F%W`@Qc\n\x85\xBD\x01`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x16\x90c\x15\x0Bz\x02\x90a\x1Es\x903\x90\x89\x90\x88\x90\x88\x90`\x04\x01a/>V[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x92PPP\x80\x15a\x1E\xAEWP`@\x80Q`\x1F=\x90\x81\x01`\x1F\x19\x16\x82\x01\x90\x92Ra\x1E\xAB\x91\x81\x01\x90a/{V[`\x01[a\x1F\x0BW=\x80\x80\x15a\x1E\xDCW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a\x1E\xE1V[``\x91P[P\x80Q`\0\x03a\x1F\x03W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x90a.rV[\x80Q\x81` \x01\xFD[`\x01`\x01`\xE0\x1B\x03\x19\x16c\n\x85\xBD\x01`\xE1\x1B\x14\x90Pa\x11BV[P`\x01\x94\x93PPPPV[```\x0E\x80Ta\x05n\x90a+eV[``a\x1FJ\x82a\x0F\xD5V[a\x1F\xAEW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FERC721Metadata: URI query for no`D\x82\x01Rn72\xBC4\xB9\xBA2\xB7:\x10:7\xB5\xB2\xB7`\x89\x1B`d\x82\x01R`\x84\x01a\x06YV[`\0a\x1F\xB8a\x1F0V[\x90P`\0\x81Q\x11a\x1F\xD8W`@Q\x80` \x01`@R\x80`\0\x81RPa\r6V[\x80a\x1F\xE2\x84a\"/V[`@Q` \x01a\x1F\xF3\x92\x91\x90a.\xC4V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x93\x92PPPV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cZ\x05\x18\x0F`\xE0\x1B\x14\x80a\x05YWPa\x05Y\x82a#0V[`\x01`\x01`\xA0\x1B\x03\x83\x16a \x89Wa \x84\x81`\x0B\x80T`\0\x83\x81R`\x0C` R`@\x81 \x82\x90U`\x01\x82\x01\x83U\x91\x90\x91R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x01UV[a \xACV[\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x14a \xACWa \xAC\x83\x82a#eV[`\x01`\x01`\xA0\x1B\x03\x82\x16a \xC3Wa\x07\x8E\x81a$\x02V[\x82`\x01`\x01`\xA0\x1B\x03\x16\x82`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\x8EWa\x07\x8E\x82\x82a$\xB1V[`\0\x81\x81R`\x01\x83\x01` R`@\x81 Ta\x13\xFEWP\x81T`\x01\x81\x81\x01\x84U`\0\x84\x81R` \x80\x82 \x90\x93\x01\x84\x90U\x84T\x84\x82R\x82\x86\x01\x90\x93R`@\x90 \x91\x90\x91Ua\x05YV[`\0\x81\x81R`\x01\x83\x01` R`@\x81 T\x80\x15a\"\x16W`\0a!Q`\x01\x83a-\xBBV[\x85T\x90\x91P`\0\x90a!e\x90`\x01\x90a-\xBBV[\x90P\x81\x81\x14a!\xCAW`\0\x86`\0\x01\x82\x81T\x81\x10a!\x85Wa!\x85a,,V[\x90`\0R` `\0 \x01T\x90P\x80\x87`\0\x01\x84\x81T\x81\x10a!\xA8Wa!\xA8a,,V[`\0\x91\x82R` \x80\x83 \x90\x91\x01\x92\x90\x92U\x91\x82R`\x01\x88\x01\x90R`@\x90 \x83\x90U[\x85T\x86\x90\x80a!\xDBWa!\xDBa/\x98V[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90U\x85`\x01\x01`\0\x86\x81R` \x01\x90\x81R` \x01`\0 `\0\x90U`\x01\x93PPPPa\x05YV[`\0\x91PPa\x05YV[``a\x11B\x84\x84`\0\x85a$\xF5V[``\x81`\0\x03a\"VWPP`@\x80Q\x80\x82\x01\x90\x91R`\x01\x81R`\x03`\xFC\x1B` \x82\x01R\x90V[\x81`\0[\x81\x15a\"\x80W\x80a\"j\x81a-\xA2V[\x91Pa\"y\x90P`\n\x83a/\xC4V[\x91Pa\"ZV[`\0\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\"\x9BWa\"\x9Ba'\x8AV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\"\xC5W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P[\x84\x15a\x11BWa\"\xDA`\x01\x83a-\xBBV[\x91Pa\"\xE7`\n\x86a/\xD8V[a\"\xF2\x90`0a-\xCEV[`\xF8\x1B\x81\x83\x81Q\x81\x10a#\x07Wa#\x07a,,V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SPa#)`\n\x86a/\xC4V[\x94Pa\"\xC9V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x05YWPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14a\x05YV[`\0`\x01a#r\x84a\x0C\x97V[a#|\x91\x90a-\xBBV[`\0\x83\x81R`\n` R`@\x90 T\x90\x91P\x80\x82\x14a#\xCFW`\x01`\x01`\xA0\x1B\x03\x84\x16`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 \x85\x84R\x82R\x80\x83 T\x84\x84R\x81\x84 \x81\x90U\x83R`\n\x90\x91R\x90 \x81\x90U[P`\0\x91\x82R`\n` \x90\x81R`@\x80\x84 \x84\x90U`\x01`\x01`\xA0\x1B\x03\x90\x94\x16\x83R`\t\x81R\x83\x83 \x91\x83RR\x90\x81 UV[`\x0BT`\0\x90a$\x14\x90`\x01\x90a-\xBBV[`\0\x83\x81R`\x0C` R`@\x81 T`\x0B\x80T\x93\x94P\x90\x92\x84\x90\x81\x10a$<Wa$<a,,V[\x90`\0R` `\0 \x01T\x90P\x80`\x0B\x83\x81T\x81\x10a$]Wa$]a,,V[`\0\x91\x82R` \x80\x83 \x90\x91\x01\x92\x90\x92U\x82\x81R`\x0C\x90\x91R`@\x80\x82 \x84\x90U\x85\x82R\x81 U`\x0B\x80T\x80a$\x95Wa$\x95a/\x98V[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90UPPPPV[`\0a$\xBC\x83a\x0C\x97V[`\x01`\x01`\xA0\x1B\x03\x90\x93\x16`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 \x86\x84R\x82R\x80\x83 \x85\x90U\x93\x82R`\n\x90R\x91\x90\x91 \x91\x90\x91UPV[``\x82G\x10\x15a%VW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FAddress: insufficient balance fo`D\x82\x01Re\x1C\x88\x18\xD8[\x1B`\xD2\x1B`d\x82\x01R`\x84\x01a\x06YV[\x84;a%\xA4W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FAddress: call to non-contract\0\0\0`D\x82\x01R`d\x01a\x06YV[`\0\x80\x86`\x01`\x01`\xA0\x1B\x03\x16\x85\x87`@Qa%\xC0\x91\x90a.VV[`\0`@Q\x80\x83\x03\x81\x85\x87Z\xF1\x92PPP=\x80`\0\x81\x14a%\xFDW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a&\x02V[``\x91P[P\x91P\x91Pa&\x12\x82\x82\x86a&\x1DV[\x97\x96PPPPPPPV[``\x83\x15a&,WP\x81a\r6V[\x82Q\x15a&<W\x82Q\x80\x84` \x01\xFD[\x81`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06Y\x91\x90a&\xDCV[`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a&lW`\0\x80\xFD[PV[`\0` \x82\x84\x03\x12\x15a&\x81W`\0\x80\xFD[\x815a\r6\x81a&VV[`\0[\x83\x81\x10\x15a&\xA7W\x81\x81\x01Q\x83\x82\x01R` \x01a&\x8FV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra&\xC8\x81` \x86\x01` \x86\x01a&\x8CV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0a\r6` \x83\x01\x84a&\xB0V[`\0` \x82\x84\x03\x12\x15a'\x01W`\0\x80\xFD[P5\x91\x90PV[\x805`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a'\x1FW`\0\x80\xFD[\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a'7W`\0\x80\xFD[a'@\x83a'\x08V[\x94` \x93\x90\x93\x015\x93PPPV[`\0\x80`\0``\x84\x86\x03\x12\x15a'cW`\0\x80\xFD[a'l\x84a'\x08V[\x92Pa'z` \x85\x01a'\x08V[\x91P`@\x84\x015\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x84\x11\x15a'\xBBWa'\xBBa'\x8AV[`@Q`\x1F\x85\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a'\xE3Wa'\xE3a'\x8AV[\x81`@R\x80\x93P\x85\x81R\x86\x86\x86\x01\x11\x15a'\xFCW`\0\x80\xFD[\x85\x85` \x83\x017`\0` \x87\x83\x01\x01RPPP\x93\x92PPPV[`\0\x82`\x1F\x83\x01\x12a('W`\0\x80\xFD[a\r6\x83\x835` \x85\x01a'\xA0V[`\0\x80`\0\x80`\0`\xA0\x86\x88\x03\x12\x15a(NW`\0\x80\xFD[a(W\x86a'\x08V[\x94P` \x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a(tW`\0\x80\xFD[a(\x80\x89\x83\x8A\x01a(\x16V[\x95P`@\x88\x015\x91P\x80\x82\x11\x15a(\x96W`\0\x80\xFD[Pa(\xA3\x88\x82\x89\x01a(\x16V[\x95\x98\x94\x97P\x94\x95``\x81\x015\x95P`\x80\x015\x93\x92PPPV[`\0\x80`@\x83\x85\x03\x12\x15a(\xCFW`\0\x80\xFD[\x825\x91Pa(\xDF` \x84\x01a'\x08V[\x90P\x92P\x92\x90PV[`\0` \x82\x84\x03\x12\x15a(\xFAW`\0\x80\xFD[a\r6\x82a'\x08V[`\0\x80`@\x83\x85\x03\x12\x15a)\x16W`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[`\0` \x82\x84\x03\x12\x15a)7W`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a)NW`\0\x80\xFD[a\x11B\x84\x82\x85\x01a(\x16V[`\0\x80\x83`\x1F\x84\x01\x12a)lW`\0\x80\xFD[P\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a)\x84W`\0\x80\xFD[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15a)\x9CW`\0\x80\xFD[\x92P\x92\x90PV[`\0\x80`\0\x80`\0\x80`\0\x80`\xA0\x89\x8B\x03\x12\x15a)\xBFW`\0\x80\xFD[\x885g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a)\xD7W`\0\x80\xFD[\x81\x8B\x01\x91P\x8B`\x1F\x83\x01\x12a)\xEBW`\0\x80\xFD[\x815\x81\x81\x11\x15a)\xFAW`\0\x80\xFD[\x8C` \x82`\x05\x1B\x85\x01\x01\x11\x15a*\x0FW`\0\x80\xFD[` \x92\x83\x01\x9AP\x98P\x90\x8A\x015\x90\x80\x82\x11\x15a**W`\0\x80\xFD[a*6\x8C\x83\x8D\x01a)ZV[\x90\x98P\x96P`@\x8B\x015\x91P\x80\x82\x11\x15a*OW`\0\x80\xFD[Pa*\\\x8B\x82\x8C\x01a)ZV[\x99\x9C\x98\x9BP\x96\x99\x95\x98\x96\x97``\x87\x015\x96`\x80\x015\x95P\x93PPPPV[\x80\x15\x15\x81\x14a&lW`\0\x80\xFD[`\0\x80`@\x83\x85\x03\x12\x15a*\x9BW`\0\x80\xFD[a*\xA4\x83a'\x08V[\x91P` \x83\x015a*\xB4\x81a*zV[\x80\x91PP\x92P\x92\x90PV[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a*\xD5W`\0\x80\xFD[a*\xDE\x85a'\x08V[\x93Pa*\xEC` \x86\x01a'\x08V[\x92P`@\x85\x015\x91P``\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a+\x0FW`\0\x80\xFD[\x85\x01`\x1F\x81\x01\x87\x13a+ W`\0\x80\xFD[a+/\x87\x825` \x84\x01a'\xA0V[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`@\x83\x85\x03\x12\x15a+NW`\0\x80\xFD[a+W\x83a'\x08V[\x91Pa(\xDF` \x84\x01a'\x08V[`\x01\x81\x81\x1C\x90\x82\x16\x80a+yW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a+\x99WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[` \x80\x82R`1\x90\x82\x01R\x7FERC721: transfer caller is not o`@\x82\x01Rp\x1D\xDB\x99\\\x88\x1B\x9B\xDC\x88\x18\\\x1C\x1C\x9B\xDD\x99Y`z\x1B``\x82\x01R`\x80\x01\x90V[`\0\x83Qa,\x02\x81\x84` \x88\x01a&\x8CV[`/`\xF8\x1B\x90\x83\x01\x90\x81R\x83Qa, \x81`\x01\x84\x01` \x88\x01a&\x8CV[\x01`\x01\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0` \x82\x84\x03\x12\x15a,TW`\0\x80\xFD[PQ\x91\x90PV[`\x1F\x82\x11\x15a\x07\x8EW`\0\x81\x81R` \x81 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15a,\x82WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15a\x14zW\x82\x81U`\x01\x01a,\x8EV[\x81Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a,\xBBWa,\xBBa'\x8AV[a,\xCF\x81a,\xC9\x84Ta+eV[\x84a,[V[` \x80`\x1F\x83\x11`\x01\x81\x14a-\x04W`\0\x84\x15a,\xECWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ua\x14zV[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15a-3W\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01a-\x14V[P\x85\x82\x10\x15a-QW\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[\x83\x85\x827`\0\x84\x82\x01`/`\xF8\x1B\x81R\x83\x85`\x01\x83\x017`\0\x93\x01`\x01\x01\x92\x83RP\x90\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[`\0`\x01\x82\x01a-\xB4Wa-\xB4a-\x8CV[P`\x01\x01\x90V[\x81\x81\x03\x81\x81\x11\x15a\x05YWa\x05Ya-\x8CV[\x80\x82\x01\x80\x82\x11\x15a\x05YWa\x05Ya-\x8CV[\x7FAccessControl: account \0\0\0\0\0\0\0\0\0\x81R`\0\x83Qa.\x19\x81`\x17\x85\x01` \x88\x01a&\x8CV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa.J\x81`(\x84\x01` \x88\x01a&\x8CV[\x01`(\x01\x94\x93PPPPV[`\0\x82Qa.h\x81\x84` \x87\x01a&\x8CV[\x91\x90\x91\x01\x92\x91PPV[` \x80\x82R`2\x90\x82\x01R\x7FERC721: transfer to non ERC721Re`@\x82\x01Rq1\xB2\xB4\xBB2\xB9\x104\xB6\xB862\xB6\xB2\xB7:2\xB9`q\x1B``\x82\x01R`\x80\x01\x90V[`\0\x83Qa.\xD6\x81\x84` \x88\x01a&\x8CV[\x83Q\x90\x83\x01\x90a.\xEA\x81\x83` \x88\x01a&\x8CV[\x01\x94\x93PPPPV[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x05YWa\x05Ya-\x8CV[`\0\x81a/\x19Wa/\x19a-\x8CV[P`\0\x19\x01\x90V[`\0` \x82\x84\x03\x12\x15a/3W`\0\x80\xFD[\x81Qa\r6\x81a*zV[`\x01`\x01`\xA0\x1B\x03\x85\x81\x16\x82R\x84\x16` \x82\x01R`@\x81\x01\x83\x90R`\x80``\x82\x01\x81\x90R`\0\x90a/q\x90\x83\x01\x84a&\xB0V[\x96\x95PPPPPPV[`\0` \x82\x84\x03\x12\x15a/\x8DW`\0\x80\xFD[\x81Qa\r6\x81a&VV[cNH{q`\xE0\x1B`\0R`1`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[`\0\x82a/\xD3Wa/\xD3a/\xAEV[P\x04\x90V[`\0\x82a/\xE7Wa/\xE7a/\xAEV[P\x06\x90V\xFE\xA2dipfsX\"\x12 m{\xDE\xEA\xFDk<\xBBC\x1FL|\"%\x04^\xD0\xE8\xE3\x9A6\x8F1\n'\xAEI_/\xC1\x0C\xDBdsolcC\0\x08\x13\x003",
946    );
947    #[derive(serde::Serialize, serde::Deserialize)]
948    #[derive(Default, Debug, PartialEq, Eq, Hash)]
949    /**Event with signature `Approval(address,address,uint256)` and selector `0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925`.
950```solidity
951event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
952```*/
953    #[allow(
954        non_camel_case_types,
955        non_snake_case,
956        clippy::pub_underscore_fields,
957        clippy::style
958    )]
959    #[derive(Clone)]
960    pub struct Approval {
961        #[allow(missing_docs)]
962        pub owner: alloy::sol_types::private::Address,
963        #[allow(missing_docs)]
964        pub approved: alloy::sol_types::private::Address,
965        #[allow(missing_docs)]
966        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
967    }
968    #[allow(
969        non_camel_case_types,
970        non_snake_case,
971        clippy::pub_underscore_fields,
972        clippy::style
973    )]
974    const _: () = {
975        use alloy::sol_types as alloy_sol_types;
976        #[automatically_derived]
977        impl alloy_sol_types::SolEvent for Approval {
978            type DataTuple<'a> = ();
979            type DataToken<'a> = <Self::DataTuple<
980                'a,
981            > as alloy_sol_types::SolType>::Token<'a>;
982            type TopicList = (
983                alloy_sol_types::sol_data::FixedBytes<32>,
984                alloy::sol_types::sol_data::Address,
985                alloy::sol_types::sol_data::Address,
986                alloy::sol_types::sol_data::Uint<256>,
987            );
988            const SIGNATURE: &'static str = "Approval(address,address,uint256)";
989            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
990                140u8, 91u8, 225u8, 229u8, 235u8, 236u8, 125u8, 91u8, 209u8, 79u8, 113u8,
991                66u8, 125u8, 30u8, 132u8, 243u8, 221u8, 3u8, 20u8, 192u8, 247u8, 178u8,
992                41u8, 30u8, 91u8, 32u8, 10u8, 200u8, 199u8, 195u8, 185u8, 37u8,
993            ]);
994            const ANONYMOUS: bool = false;
995            #[allow(unused_variables)]
996            #[inline]
997            fn new(
998                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
999                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1000            ) -> Self {
1001                Self {
1002                    owner: topics.1,
1003                    approved: topics.2,
1004                    tokenId: topics.3,
1005                }
1006            }
1007            #[inline]
1008            fn check_signature(
1009                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1010            ) -> alloy_sol_types::Result<()> {
1011                if topics.0 != Self::SIGNATURE_HASH {
1012                    return Err(
1013                        alloy_sol_types::Error::invalid_event_signature_hash(
1014                            Self::SIGNATURE,
1015                            topics.0,
1016                            Self::SIGNATURE_HASH,
1017                        ),
1018                    );
1019                }
1020                Ok(())
1021            }
1022            #[inline]
1023            fn tokenize_body(&self) -> Self::DataToken<'_> {
1024                ()
1025            }
1026            #[inline]
1027            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1028                (
1029                    Self::SIGNATURE_HASH.into(),
1030                    self.owner.clone(),
1031                    self.approved.clone(),
1032                    self.tokenId.clone(),
1033                )
1034            }
1035            #[inline]
1036            fn encode_topics_raw(
1037                &self,
1038                out: &mut [alloy_sol_types::abi::token::WordToken],
1039            ) -> alloy_sol_types::Result<()> {
1040                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1041                    return Err(alloy_sol_types::Error::Overrun);
1042                }
1043                out[0usize] = alloy_sol_types::abi::token::WordToken(
1044                    Self::SIGNATURE_HASH,
1045                );
1046                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1047                    &self.owner,
1048                );
1049                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1050                    &self.approved,
1051                );
1052                out[3usize] = <alloy::sol_types::sol_data::Uint<
1053                    256,
1054                > as alloy_sol_types::EventTopic>::encode_topic(&self.tokenId);
1055                Ok(())
1056            }
1057        }
1058        #[automatically_derived]
1059        impl alloy_sol_types::private::IntoLogData for Approval {
1060            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1061                From::from(self)
1062            }
1063            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1064                From::from(&self)
1065            }
1066        }
1067        #[automatically_derived]
1068        impl From<&Approval> for alloy_sol_types::private::LogData {
1069            #[inline]
1070            fn from(this: &Approval) -> alloy_sol_types::private::LogData {
1071                alloy_sol_types::SolEvent::encode_log_data(this)
1072            }
1073        }
1074    };
1075    #[derive(serde::Serialize, serde::Deserialize)]
1076    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1077    /**Event with signature `ApprovalForAll(address,address,bool)` and selector `0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31`.
1078```solidity
1079event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
1080```*/
1081    #[allow(
1082        non_camel_case_types,
1083        non_snake_case,
1084        clippy::pub_underscore_fields,
1085        clippy::style
1086    )]
1087    #[derive(Clone)]
1088    pub struct ApprovalForAll {
1089        #[allow(missing_docs)]
1090        pub owner: alloy::sol_types::private::Address,
1091        #[allow(missing_docs)]
1092        pub operator: alloy::sol_types::private::Address,
1093        #[allow(missing_docs)]
1094        pub approved: bool,
1095    }
1096    #[allow(
1097        non_camel_case_types,
1098        non_snake_case,
1099        clippy::pub_underscore_fields,
1100        clippy::style
1101    )]
1102    const _: () = {
1103        use alloy::sol_types as alloy_sol_types;
1104        #[automatically_derived]
1105        impl alloy_sol_types::SolEvent for ApprovalForAll {
1106            type DataTuple<'a> = (alloy::sol_types::sol_data::Bool,);
1107            type DataToken<'a> = <Self::DataTuple<
1108                'a,
1109            > as alloy_sol_types::SolType>::Token<'a>;
1110            type TopicList = (
1111                alloy_sol_types::sol_data::FixedBytes<32>,
1112                alloy::sol_types::sol_data::Address,
1113                alloy::sol_types::sol_data::Address,
1114            );
1115            const SIGNATURE: &'static str = "ApprovalForAll(address,address,bool)";
1116            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1117                23u8, 48u8, 126u8, 171u8, 57u8, 171u8, 97u8, 7u8, 232u8, 137u8, 152u8,
1118                69u8, 173u8, 61u8, 89u8, 189u8, 150u8, 83u8, 242u8, 0u8, 242u8, 32u8,
1119                146u8, 4u8, 137u8, 202u8, 43u8, 89u8, 55u8, 105u8, 108u8, 49u8,
1120            ]);
1121            const ANONYMOUS: bool = false;
1122            #[allow(unused_variables)]
1123            #[inline]
1124            fn new(
1125                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1126                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1127            ) -> Self {
1128                Self {
1129                    owner: topics.1,
1130                    operator: topics.2,
1131                    approved: data.0,
1132                }
1133            }
1134            #[inline]
1135            fn check_signature(
1136                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1137            ) -> alloy_sol_types::Result<()> {
1138                if topics.0 != Self::SIGNATURE_HASH {
1139                    return Err(
1140                        alloy_sol_types::Error::invalid_event_signature_hash(
1141                            Self::SIGNATURE,
1142                            topics.0,
1143                            Self::SIGNATURE_HASH,
1144                        ),
1145                    );
1146                }
1147                Ok(())
1148            }
1149            #[inline]
1150            fn tokenize_body(&self) -> Self::DataToken<'_> {
1151                (
1152                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
1153                        &self.approved,
1154                    ),
1155                )
1156            }
1157            #[inline]
1158            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1159                (Self::SIGNATURE_HASH.into(), self.owner.clone(), self.operator.clone())
1160            }
1161            #[inline]
1162            fn encode_topics_raw(
1163                &self,
1164                out: &mut [alloy_sol_types::abi::token::WordToken],
1165            ) -> alloy_sol_types::Result<()> {
1166                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1167                    return Err(alloy_sol_types::Error::Overrun);
1168                }
1169                out[0usize] = alloy_sol_types::abi::token::WordToken(
1170                    Self::SIGNATURE_HASH,
1171                );
1172                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1173                    &self.owner,
1174                );
1175                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1176                    &self.operator,
1177                );
1178                Ok(())
1179            }
1180        }
1181        #[automatically_derived]
1182        impl alloy_sol_types::private::IntoLogData for ApprovalForAll {
1183            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1184                From::from(self)
1185            }
1186            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1187                From::from(&self)
1188            }
1189        }
1190        #[automatically_derived]
1191        impl From<&ApprovalForAll> for alloy_sol_types::private::LogData {
1192            #[inline]
1193            fn from(this: &ApprovalForAll) -> alloy_sol_types::private::LogData {
1194                alloy_sol_types::SolEvent::encode_log_data(this)
1195            }
1196        }
1197    };
1198    #[derive(serde::Serialize, serde::Deserialize)]
1199    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1200    /**Event with signature `BoostMinted(uint256,uint256,uint256)` and selector `0x735e5eb5afdd72cc64657ded7e5de390af3708afb5b9a80b0e5c911a0499d98f`.
1201```solidity
1202event BoostMinted(uint256 indexed boostTypeIndex, uint256 indexed boostNumerator, uint256 indexed redeemDeadline);
1203```*/
1204    #[allow(
1205        non_camel_case_types,
1206        non_snake_case,
1207        clippy::pub_underscore_fields,
1208        clippy::style
1209    )]
1210    #[derive(Clone)]
1211    pub struct BoostMinted {
1212        #[allow(missing_docs)]
1213        pub boostTypeIndex: alloy::sol_types::private::primitives::aliases::U256,
1214        #[allow(missing_docs)]
1215        pub boostNumerator: alloy::sol_types::private::primitives::aliases::U256,
1216        #[allow(missing_docs)]
1217        pub redeemDeadline: alloy::sol_types::private::primitives::aliases::U256,
1218    }
1219    #[allow(
1220        non_camel_case_types,
1221        non_snake_case,
1222        clippy::pub_underscore_fields,
1223        clippy::style
1224    )]
1225    const _: () = {
1226        use alloy::sol_types as alloy_sol_types;
1227        #[automatically_derived]
1228        impl alloy_sol_types::SolEvent for BoostMinted {
1229            type DataTuple<'a> = ();
1230            type DataToken<'a> = <Self::DataTuple<
1231                'a,
1232            > as alloy_sol_types::SolType>::Token<'a>;
1233            type TopicList = (
1234                alloy_sol_types::sol_data::FixedBytes<32>,
1235                alloy::sol_types::sol_data::Uint<256>,
1236                alloy::sol_types::sol_data::Uint<256>,
1237                alloy::sol_types::sol_data::Uint<256>,
1238            );
1239            const SIGNATURE: &'static str = "BoostMinted(uint256,uint256,uint256)";
1240            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1241                115u8, 94u8, 94u8, 181u8, 175u8, 221u8, 114u8, 204u8, 100u8, 101u8,
1242                125u8, 237u8, 126u8, 93u8, 227u8, 144u8, 175u8, 55u8, 8u8, 175u8, 181u8,
1243                185u8, 168u8, 11u8, 14u8, 92u8, 145u8, 26u8, 4u8, 153u8, 217u8, 143u8,
1244            ]);
1245            const ANONYMOUS: bool = false;
1246            #[allow(unused_variables)]
1247            #[inline]
1248            fn new(
1249                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1250                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1251            ) -> Self {
1252                Self {
1253                    boostTypeIndex: topics.1,
1254                    boostNumerator: topics.2,
1255                    redeemDeadline: topics.3,
1256                }
1257            }
1258            #[inline]
1259            fn check_signature(
1260                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1261            ) -> alloy_sol_types::Result<()> {
1262                if topics.0 != Self::SIGNATURE_HASH {
1263                    return Err(
1264                        alloy_sol_types::Error::invalid_event_signature_hash(
1265                            Self::SIGNATURE,
1266                            topics.0,
1267                            Self::SIGNATURE_HASH,
1268                        ),
1269                    );
1270                }
1271                Ok(())
1272            }
1273            #[inline]
1274            fn tokenize_body(&self) -> Self::DataToken<'_> {
1275                ()
1276            }
1277            #[inline]
1278            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1279                (
1280                    Self::SIGNATURE_HASH.into(),
1281                    self.boostTypeIndex.clone(),
1282                    self.boostNumerator.clone(),
1283                    self.redeemDeadline.clone(),
1284                )
1285            }
1286            #[inline]
1287            fn encode_topics_raw(
1288                &self,
1289                out: &mut [alloy_sol_types::abi::token::WordToken],
1290            ) -> alloy_sol_types::Result<()> {
1291                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1292                    return Err(alloy_sol_types::Error::Overrun);
1293                }
1294                out[0usize] = alloy_sol_types::abi::token::WordToken(
1295                    Self::SIGNATURE_HASH,
1296                );
1297                out[1usize] = <alloy::sol_types::sol_data::Uint<
1298                    256,
1299                > as alloy_sol_types::EventTopic>::encode_topic(&self.boostTypeIndex);
1300                out[2usize] = <alloy::sol_types::sol_data::Uint<
1301                    256,
1302                > as alloy_sol_types::EventTopic>::encode_topic(&self.boostNumerator);
1303                out[3usize] = <alloy::sol_types::sol_data::Uint<
1304                    256,
1305                > as alloy_sol_types::EventTopic>::encode_topic(&self.redeemDeadline);
1306                Ok(())
1307            }
1308        }
1309        #[automatically_derived]
1310        impl alloy_sol_types::private::IntoLogData for BoostMinted {
1311            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1312                From::from(self)
1313            }
1314            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1315                From::from(&self)
1316            }
1317        }
1318        #[automatically_derived]
1319        impl From<&BoostMinted> for alloy_sol_types::private::LogData {
1320            #[inline]
1321            fn from(this: &BoostMinted) -> alloy_sol_types::private::LogData {
1322                alloy_sol_types::SolEvent::encode_log_data(this)
1323            }
1324        }
1325    };
1326    #[derive(serde::Serialize, serde::Deserialize)]
1327    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1328    /**Event with signature `RoleAdminChanged(bytes32,bytes32,bytes32)` and selector `0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff`.
1329```solidity
1330event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
1331```*/
1332    #[allow(
1333        non_camel_case_types,
1334        non_snake_case,
1335        clippy::pub_underscore_fields,
1336        clippy::style
1337    )]
1338    #[derive(Clone)]
1339    pub struct RoleAdminChanged {
1340        #[allow(missing_docs)]
1341        pub role: alloy::sol_types::private::FixedBytes<32>,
1342        #[allow(missing_docs)]
1343        pub previousAdminRole: alloy::sol_types::private::FixedBytes<32>,
1344        #[allow(missing_docs)]
1345        pub newAdminRole: alloy::sol_types::private::FixedBytes<32>,
1346    }
1347    #[allow(
1348        non_camel_case_types,
1349        non_snake_case,
1350        clippy::pub_underscore_fields,
1351        clippy::style
1352    )]
1353    const _: () = {
1354        use alloy::sol_types as alloy_sol_types;
1355        #[automatically_derived]
1356        impl alloy_sol_types::SolEvent for RoleAdminChanged {
1357            type DataTuple<'a> = ();
1358            type DataToken<'a> = <Self::DataTuple<
1359                'a,
1360            > as alloy_sol_types::SolType>::Token<'a>;
1361            type TopicList = (
1362                alloy_sol_types::sol_data::FixedBytes<32>,
1363                alloy::sol_types::sol_data::FixedBytes<32>,
1364                alloy::sol_types::sol_data::FixedBytes<32>,
1365                alloy::sol_types::sol_data::FixedBytes<32>,
1366            );
1367            const SIGNATURE: &'static str = "RoleAdminChanged(bytes32,bytes32,bytes32)";
1368            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1369                189u8, 121u8, 184u8, 111u8, 254u8, 10u8, 184u8, 232u8, 119u8, 97u8, 81u8,
1370                81u8, 66u8, 23u8, 205u8, 124u8, 172u8, 213u8, 44u8, 144u8, 159u8, 102u8,
1371                71u8, 92u8, 58u8, 244u8, 78u8, 18u8, 159u8, 11u8, 0u8, 255u8,
1372            ]);
1373            const ANONYMOUS: bool = false;
1374            #[allow(unused_variables)]
1375            #[inline]
1376            fn new(
1377                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1378                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1379            ) -> Self {
1380                Self {
1381                    role: topics.1,
1382                    previousAdminRole: topics.2,
1383                    newAdminRole: topics.3,
1384                }
1385            }
1386            #[inline]
1387            fn check_signature(
1388                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1389            ) -> alloy_sol_types::Result<()> {
1390                if topics.0 != Self::SIGNATURE_HASH {
1391                    return Err(
1392                        alloy_sol_types::Error::invalid_event_signature_hash(
1393                            Self::SIGNATURE,
1394                            topics.0,
1395                            Self::SIGNATURE_HASH,
1396                        ),
1397                    );
1398                }
1399                Ok(())
1400            }
1401            #[inline]
1402            fn tokenize_body(&self) -> Self::DataToken<'_> {
1403                ()
1404            }
1405            #[inline]
1406            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1407                (
1408                    Self::SIGNATURE_HASH.into(),
1409                    self.role.clone(),
1410                    self.previousAdminRole.clone(),
1411                    self.newAdminRole.clone(),
1412                )
1413            }
1414            #[inline]
1415            fn encode_topics_raw(
1416                &self,
1417                out: &mut [alloy_sol_types::abi::token::WordToken],
1418            ) -> alloy_sol_types::Result<()> {
1419                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1420                    return Err(alloy_sol_types::Error::Overrun);
1421                }
1422                out[0usize] = alloy_sol_types::abi::token::WordToken(
1423                    Self::SIGNATURE_HASH,
1424                );
1425                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
1426                    32,
1427                > as alloy_sol_types::EventTopic>::encode_topic(&self.role);
1428                out[2usize] = <alloy::sol_types::sol_data::FixedBytes<
1429                    32,
1430                > as alloy_sol_types::EventTopic>::encode_topic(&self.previousAdminRole);
1431                out[3usize] = <alloy::sol_types::sol_data::FixedBytes<
1432                    32,
1433                > as alloy_sol_types::EventTopic>::encode_topic(&self.newAdminRole);
1434                Ok(())
1435            }
1436        }
1437        #[automatically_derived]
1438        impl alloy_sol_types::private::IntoLogData for RoleAdminChanged {
1439            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1440                From::from(self)
1441            }
1442            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1443                From::from(&self)
1444            }
1445        }
1446        #[automatically_derived]
1447        impl From<&RoleAdminChanged> for alloy_sol_types::private::LogData {
1448            #[inline]
1449            fn from(this: &RoleAdminChanged) -> alloy_sol_types::private::LogData {
1450                alloy_sol_types::SolEvent::encode_log_data(this)
1451            }
1452        }
1453    };
1454    #[derive(serde::Serialize, serde::Deserialize)]
1455    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1456    /**Event with signature `RoleGranted(bytes32,address,address)` and selector `0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d`.
1457```solidity
1458event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
1459```*/
1460    #[allow(
1461        non_camel_case_types,
1462        non_snake_case,
1463        clippy::pub_underscore_fields,
1464        clippy::style
1465    )]
1466    #[derive(Clone)]
1467    pub struct RoleGranted {
1468        #[allow(missing_docs)]
1469        pub role: alloy::sol_types::private::FixedBytes<32>,
1470        #[allow(missing_docs)]
1471        pub account: alloy::sol_types::private::Address,
1472        #[allow(missing_docs)]
1473        pub sender: alloy::sol_types::private::Address,
1474    }
1475    #[allow(
1476        non_camel_case_types,
1477        non_snake_case,
1478        clippy::pub_underscore_fields,
1479        clippy::style
1480    )]
1481    const _: () = {
1482        use alloy::sol_types as alloy_sol_types;
1483        #[automatically_derived]
1484        impl alloy_sol_types::SolEvent for RoleGranted {
1485            type DataTuple<'a> = ();
1486            type DataToken<'a> = <Self::DataTuple<
1487                'a,
1488            > as alloy_sol_types::SolType>::Token<'a>;
1489            type TopicList = (
1490                alloy_sol_types::sol_data::FixedBytes<32>,
1491                alloy::sol_types::sol_data::FixedBytes<32>,
1492                alloy::sol_types::sol_data::Address,
1493                alloy::sol_types::sol_data::Address,
1494            );
1495            const SIGNATURE: &'static str = "RoleGranted(bytes32,address,address)";
1496            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1497                47u8, 135u8, 136u8, 17u8, 126u8, 126u8, 255u8, 29u8, 130u8, 233u8, 38u8,
1498                236u8, 121u8, 73u8, 1u8, 209u8, 124u8, 120u8, 2u8, 74u8, 80u8, 39u8, 9u8,
1499                64u8, 48u8, 69u8, 64u8, 167u8, 51u8, 101u8, 111u8, 13u8,
1500            ]);
1501            const ANONYMOUS: bool = false;
1502            #[allow(unused_variables)]
1503            #[inline]
1504            fn new(
1505                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1506                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1507            ) -> Self {
1508                Self {
1509                    role: topics.1,
1510                    account: topics.2,
1511                    sender: topics.3,
1512                }
1513            }
1514            #[inline]
1515            fn check_signature(
1516                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1517            ) -> alloy_sol_types::Result<()> {
1518                if topics.0 != Self::SIGNATURE_HASH {
1519                    return Err(
1520                        alloy_sol_types::Error::invalid_event_signature_hash(
1521                            Self::SIGNATURE,
1522                            topics.0,
1523                            Self::SIGNATURE_HASH,
1524                        ),
1525                    );
1526                }
1527                Ok(())
1528            }
1529            #[inline]
1530            fn tokenize_body(&self) -> Self::DataToken<'_> {
1531                ()
1532            }
1533            #[inline]
1534            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1535                (
1536                    Self::SIGNATURE_HASH.into(),
1537                    self.role.clone(),
1538                    self.account.clone(),
1539                    self.sender.clone(),
1540                )
1541            }
1542            #[inline]
1543            fn encode_topics_raw(
1544                &self,
1545                out: &mut [alloy_sol_types::abi::token::WordToken],
1546            ) -> alloy_sol_types::Result<()> {
1547                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1548                    return Err(alloy_sol_types::Error::Overrun);
1549                }
1550                out[0usize] = alloy_sol_types::abi::token::WordToken(
1551                    Self::SIGNATURE_HASH,
1552                );
1553                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
1554                    32,
1555                > as alloy_sol_types::EventTopic>::encode_topic(&self.role);
1556                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1557                    &self.account,
1558                );
1559                out[3usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1560                    &self.sender,
1561                );
1562                Ok(())
1563            }
1564        }
1565        #[automatically_derived]
1566        impl alloy_sol_types::private::IntoLogData for RoleGranted {
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<&RoleGranted> for alloy_sol_types::private::LogData {
1576            #[inline]
1577            fn from(this: &RoleGranted) -> alloy_sol_types::private::LogData {
1578                alloy_sol_types::SolEvent::encode_log_data(this)
1579            }
1580        }
1581    };
1582    #[derive(serde::Serialize, serde::Deserialize)]
1583    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1584    /**Event with signature `RoleRevoked(bytes32,address,address)` and selector `0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b`.
1585```solidity
1586event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
1587```*/
1588    #[allow(
1589        non_camel_case_types,
1590        non_snake_case,
1591        clippy::pub_underscore_fields,
1592        clippy::style
1593    )]
1594    #[derive(Clone)]
1595    pub struct RoleRevoked {
1596        #[allow(missing_docs)]
1597        pub role: alloy::sol_types::private::FixedBytes<32>,
1598        #[allow(missing_docs)]
1599        pub account: alloy::sol_types::private::Address,
1600        #[allow(missing_docs)]
1601        pub sender: alloy::sol_types::private::Address,
1602    }
1603    #[allow(
1604        non_camel_case_types,
1605        non_snake_case,
1606        clippy::pub_underscore_fields,
1607        clippy::style
1608    )]
1609    const _: () = {
1610        use alloy::sol_types as alloy_sol_types;
1611        #[automatically_derived]
1612        impl alloy_sol_types::SolEvent for RoleRevoked {
1613            type DataTuple<'a> = ();
1614            type DataToken<'a> = <Self::DataTuple<
1615                'a,
1616            > as alloy_sol_types::SolType>::Token<'a>;
1617            type TopicList = (
1618                alloy_sol_types::sol_data::FixedBytes<32>,
1619                alloy::sol_types::sol_data::FixedBytes<32>,
1620                alloy::sol_types::sol_data::Address,
1621                alloy::sol_types::sol_data::Address,
1622            );
1623            const SIGNATURE: &'static str = "RoleRevoked(bytes32,address,address)";
1624            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1625                246u8, 57u8, 31u8, 92u8, 50u8, 217u8, 198u8, 157u8, 42u8, 71u8, 234u8,
1626                103u8, 11u8, 68u8, 41u8, 116u8, 181u8, 57u8, 53u8, 209u8, 237u8, 199u8,
1627                253u8, 100u8, 235u8, 33u8, 224u8, 71u8, 168u8, 57u8, 23u8, 27u8,
1628            ]);
1629            const ANONYMOUS: bool = false;
1630            #[allow(unused_variables)]
1631            #[inline]
1632            fn new(
1633                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1634                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1635            ) -> Self {
1636                Self {
1637                    role: topics.1,
1638                    account: topics.2,
1639                    sender: topics.3,
1640                }
1641            }
1642            #[inline]
1643            fn check_signature(
1644                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1645            ) -> alloy_sol_types::Result<()> {
1646                if topics.0 != Self::SIGNATURE_HASH {
1647                    return Err(
1648                        alloy_sol_types::Error::invalid_event_signature_hash(
1649                            Self::SIGNATURE,
1650                            topics.0,
1651                            Self::SIGNATURE_HASH,
1652                        ),
1653                    );
1654                }
1655                Ok(())
1656            }
1657            #[inline]
1658            fn tokenize_body(&self) -> Self::DataToken<'_> {
1659                ()
1660            }
1661            #[inline]
1662            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1663                (
1664                    Self::SIGNATURE_HASH.into(),
1665                    self.role.clone(),
1666                    self.account.clone(),
1667                    self.sender.clone(),
1668                )
1669            }
1670            #[inline]
1671            fn encode_topics_raw(
1672                &self,
1673                out: &mut [alloy_sol_types::abi::token::WordToken],
1674            ) -> alloy_sol_types::Result<()> {
1675                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1676                    return Err(alloy_sol_types::Error::Overrun);
1677                }
1678                out[0usize] = alloy_sol_types::abi::token::WordToken(
1679                    Self::SIGNATURE_HASH,
1680                );
1681                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
1682                    32,
1683                > as alloy_sol_types::EventTopic>::encode_topic(&self.role);
1684                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1685                    &self.account,
1686                );
1687                out[3usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1688                    &self.sender,
1689                );
1690                Ok(())
1691            }
1692        }
1693        #[automatically_derived]
1694        impl alloy_sol_types::private::IntoLogData for RoleRevoked {
1695            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1696                From::from(self)
1697            }
1698            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1699                From::from(&self)
1700            }
1701        }
1702        #[automatically_derived]
1703        impl From<&RoleRevoked> for alloy_sol_types::private::LogData {
1704            #[inline]
1705            fn from(this: &RoleRevoked) -> alloy_sol_types::private::LogData {
1706                alloy_sol_types::SolEvent::encode_log_data(this)
1707            }
1708        }
1709    };
1710    #[derive(serde::Serialize, serde::Deserialize)]
1711    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1712    /**Event with signature `Transfer(address,address,uint256)` and selector `0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef`.
1713```solidity
1714event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
1715```*/
1716    #[allow(
1717        non_camel_case_types,
1718        non_snake_case,
1719        clippy::pub_underscore_fields,
1720        clippy::style
1721    )]
1722    #[derive(Clone)]
1723    pub struct Transfer {
1724        #[allow(missing_docs)]
1725        pub from: alloy::sol_types::private::Address,
1726        #[allow(missing_docs)]
1727        pub to: alloy::sol_types::private::Address,
1728        #[allow(missing_docs)]
1729        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
1730    }
1731    #[allow(
1732        non_camel_case_types,
1733        non_snake_case,
1734        clippy::pub_underscore_fields,
1735        clippy::style
1736    )]
1737    const _: () = {
1738        use alloy::sol_types as alloy_sol_types;
1739        #[automatically_derived]
1740        impl alloy_sol_types::SolEvent for Transfer {
1741            type DataTuple<'a> = ();
1742            type DataToken<'a> = <Self::DataTuple<
1743                'a,
1744            > as alloy_sol_types::SolType>::Token<'a>;
1745            type TopicList = (
1746                alloy_sol_types::sol_data::FixedBytes<32>,
1747                alloy::sol_types::sol_data::Address,
1748                alloy::sol_types::sol_data::Address,
1749                alloy::sol_types::sol_data::Uint<256>,
1750            );
1751            const SIGNATURE: &'static str = "Transfer(address,address,uint256)";
1752            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1753                221u8, 242u8, 82u8, 173u8, 27u8, 226u8, 200u8, 155u8, 105u8, 194u8,
1754                176u8, 104u8, 252u8, 55u8, 141u8, 170u8, 149u8, 43u8, 167u8, 241u8, 99u8,
1755                196u8, 161u8, 22u8, 40u8, 245u8, 90u8, 77u8, 245u8, 35u8, 179u8, 239u8,
1756            ]);
1757            const ANONYMOUS: bool = false;
1758            #[allow(unused_variables)]
1759            #[inline]
1760            fn new(
1761                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1762                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1763            ) -> Self {
1764                Self {
1765                    from: topics.1,
1766                    to: topics.2,
1767                    tokenId: topics.3,
1768                }
1769            }
1770            #[inline]
1771            fn check_signature(
1772                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1773            ) -> alloy_sol_types::Result<()> {
1774                if topics.0 != Self::SIGNATURE_HASH {
1775                    return Err(
1776                        alloy_sol_types::Error::invalid_event_signature_hash(
1777                            Self::SIGNATURE,
1778                            topics.0,
1779                            Self::SIGNATURE_HASH,
1780                        ),
1781                    );
1782                }
1783                Ok(())
1784            }
1785            #[inline]
1786            fn tokenize_body(&self) -> Self::DataToken<'_> {
1787                ()
1788            }
1789            #[inline]
1790            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1791                (
1792                    Self::SIGNATURE_HASH.into(),
1793                    self.from.clone(),
1794                    self.to.clone(),
1795                    self.tokenId.clone(),
1796                )
1797            }
1798            #[inline]
1799            fn encode_topics_raw(
1800                &self,
1801                out: &mut [alloy_sol_types::abi::token::WordToken],
1802            ) -> alloy_sol_types::Result<()> {
1803                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1804                    return Err(alloy_sol_types::Error::Overrun);
1805                }
1806                out[0usize] = alloy_sol_types::abi::token::WordToken(
1807                    Self::SIGNATURE_HASH,
1808                );
1809                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1810                    &self.from,
1811                );
1812                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1813                    &self.to,
1814                );
1815                out[3usize] = <alloy::sol_types::sol_data::Uint<
1816                    256,
1817                > as alloy_sol_types::EventTopic>::encode_topic(&self.tokenId);
1818                Ok(())
1819            }
1820        }
1821        #[automatically_derived]
1822        impl alloy_sol_types::private::IntoLogData for Transfer {
1823            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1824                From::from(self)
1825            }
1826            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1827                From::from(&self)
1828            }
1829        }
1830        #[automatically_derived]
1831        impl From<&Transfer> for alloy_sol_types::private::LogData {
1832            #[inline]
1833            fn from(this: &Transfer) -> alloy_sol_types::private::LogData {
1834                alloy_sol_types::SolEvent::encode_log_data(this)
1835            }
1836        }
1837    };
1838    /**Constructor`.
1839```solidity
1840constructor(address newAdmin, string baseTokenURI);
1841```*/
1842    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1843    #[derive(Clone)]
1844    pub struct constructorCall {
1845        #[allow(missing_docs)]
1846        pub newAdmin: alloy::sol_types::private::Address,
1847        #[allow(missing_docs)]
1848        pub baseTokenURI: alloy::sol_types::private::String,
1849    }
1850    const _: () = {
1851        use alloy::sol_types as alloy_sol_types;
1852        {
1853            #[doc(hidden)]
1854            type UnderlyingSolTuple<'a> = (
1855                alloy::sol_types::sol_data::Address,
1856                alloy::sol_types::sol_data::String,
1857            );
1858            #[doc(hidden)]
1859            type UnderlyingRustTuple<'a> = (
1860                alloy::sol_types::private::Address,
1861                alloy::sol_types::private::String,
1862            );
1863            #[cfg(test)]
1864            #[allow(dead_code, unreachable_patterns)]
1865            fn _type_assertion(
1866                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1867            ) {
1868                match _t {
1869                    alloy_sol_types::private::AssertTypeEq::<
1870                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1871                    >(_) => {}
1872                }
1873            }
1874            #[automatically_derived]
1875            #[doc(hidden)]
1876            impl ::core::convert::From<constructorCall> for UnderlyingRustTuple<'_> {
1877                fn from(value: constructorCall) -> Self {
1878                    (value.newAdmin, value.baseTokenURI)
1879                }
1880            }
1881            #[automatically_derived]
1882            #[doc(hidden)]
1883            impl ::core::convert::From<UnderlyingRustTuple<'_>> for constructorCall {
1884                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1885                    Self {
1886                        newAdmin: tuple.0,
1887                        baseTokenURI: tuple.1,
1888                    }
1889                }
1890            }
1891        }
1892        #[automatically_derived]
1893        impl alloy_sol_types::SolConstructor for constructorCall {
1894            type Parameters<'a> = (
1895                alloy::sol_types::sol_data::Address,
1896                alloy::sol_types::sol_data::String,
1897            );
1898            type Token<'a> = <Self::Parameters<
1899                'a,
1900            > as alloy_sol_types::SolType>::Token<'a>;
1901            #[inline]
1902            fn new<'a>(
1903                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
1904            ) -> Self {
1905                tuple.into()
1906            }
1907            #[inline]
1908            fn tokenize(&self) -> Self::Token<'_> {
1909                (
1910                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
1911                        &self.newAdmin,
1912                    ),
1913                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
1914                        &self.baseTokenURI,
1915                    ),
1916                )
1917            }
1918        }
1919    };
1920    #[derive(serde::Serialize, serde::Deserialize)]
1921    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1922    /**Function with signature `DEFAULT_ADMIN_ROLE()` and selector `0xa217fddf`.
1923```solidity
1924function DEFAULT_ADMIN_ROLE() external view returns (bytes32);
1925```*/
1926    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1927    #[derive(Clone)]
1928    pub struct DEFAULT_ADMIN_ROLECall;
1929    #[derive(serde::Serialize, serde::Deserialize)]
1930    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1931    ///Container type for the return parameters of the [`DEFAULT_ADMIN_ROLE()`](DEFAULT_ADMIN_ROLECall) function.
1932    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1933    #[derive(Clone)]
1934    pub struct DEFAULT_ADMIN_ROLEReturn {
1935        #[allow(missing_docs)]
1936        pub _0: alloy::sol_types::private::FixedBytes<32>,
1937    }
1938    #[allow(
1939        non_camel_case_types,
1940        non_snake_case,
1941        clippy::pub_underscore_fields,
1942        clippy::style
1943    )]
1944    const _: () = {
1945        use alloy::sol_types as alloy_sol_types;
1946        {
1947            #[doc(hidden)]
1948            type UnderlyingSolTuple<'a> = ();
1949            #[doc(hidden)]
1950            type UnderlyingRustTuple<'a> = ();
1951            #[cfg(test)]
1952            #[allow(dead_code, unreachable_patterns)]
1953            fn _type_assertion(
1954                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1955            ) {
1956                match _t {
1957                    alloy_sol_types::private::AssertTypeEq::<
1958                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1959                    >(_) => {}
1960                }
1961            }
1962            #[automatically_derived]
1963            #[doc(hidden)]
1964            impl ::core::convert::From<DEFAULT_ADMIN_ROLECall>
1965            for UnderlyingRustTuple<'_> {
1966                fn from(value: DEFAULT_ADMIN_ROLECall) -> Self {
1967                    ()
1968                }
1969            }
1970            #[automatically_derived]
1971            #[doc(hidden)]
1972            impl ::core::convert::From<UnderlyingRustTuple<'_>>
1973            for DEFAULT_ADMIN_ROLECall {
1974                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1975                    Self
1976                }
1977            }
1978        }
1979        {
1980            #[doc(hidden)]
1981            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
1982            #[doc(hidden)]
1983            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
1984            #[cfg(test)]
1985            #[allow(dead_code, unreachable_patterns)]
1986            fn _type_assertion(
1987                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1988            ) {
1989                match _t {
1990                    alloy_sol_types::private::AssertTypeEq::<
1991                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1992                    >(_) => {}
1993                }
1994            }
1995            #[automatically_derived]
1996            #[doc(hidden)]
1997            impl ::core::convert::From<DEFAULT_ADMIN_ROLEReturn>
1998            for UnderlyingRustTuple<'_> {
1999                fn from(value: DEFAULT_ADMIN_ROLEReturn) -> Self {
2000                    (value._0,)
2001                }
2002            }
2003            #[automatically_derived]
2004            #[doc(hidden)]
2005            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2006            for DEFAULT_ADMIN_ROLEReturn {
2007                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2008                    Self { _0: tuple.0 }
2009                }
2010            }
2011        }
2012        #[automatically_derived]
2013        impl alloy_sol_types::SolCall for DEFAULT_ADMIN_ROLECall {
2014            type Parameters<'a> = ();
2015            type Token<'a> = <Self::Parameters<
2016                'a,
2017            > as alloy_sol_types::SolType>::Token<'a>;
2018            type Return = alloy::sol_types::private::FixedBytes<32>;
2019            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
2020            type ReturnToken<'a> = <Self::ReturnTuple<
2021                'a,
2022            > as alloy_sol_types::SolType>::Token<'a>;
2023            const SIGNATURE: &'static str = "DEFAULT_ADMIN_ROLE()";
2024            const SELECTOR: [u8; 4] = [162u8, 23u8, 253u8, 223u8];
2025            #[inline]
2026            fn new<'a>(
2027                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2028            ) -> Self {
2029                tuple.into()
2030            }
2031            #[inline]
2032            fn tokenize(&self) -> Self::Token<'_> {
2033                ()
2034            }
2035            #[inline]
2036            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2037                (
2038                    <alloy::sol_types::sol_data::FixedBytes<
2039                        32,
2040                    > as alloy_sol_types::SolType>::tokenize(ret),
2041                )
2042            }
2043            #[inline]
2044            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2045                <Self::ReturnTuple<
2046                    '_,
2047                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2048                    .map(|r| {
2049                        let r: DEFAULT_ADMIN_ROLEReturn = r.into();
2050                        r._0
2051                    })
2052            }
2053            #[inline]
2054            fn abi_decode_returns_validate(
2055                data: &[u8],
2056            ) -> alloy_sol_types::Result<Self::Return> {
2057                <Self::ReturnTuple<
2058                    '_,
2059                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2060                    .map(|r| {
2061                        let r: DEFAULT_ADMIN_ROLEReturn = r.into();
2062                        r._0
2063                    })
2064            }
2065        }
2066    };
2067    #[derive(serde::Serialize, serde::Deserialize)]
2068    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2069    /**Function with signature `MINTER_ROLE()` and selector `0xd5391393`.
2070```solidity
2071function MINTER_ROLE() external view returns (bytes32);
2072```*/
2073    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2074    #[derive(Clone)]
2075    pub struct MINTER_ROLECall;
2076    #[derive(serde::Serialize, serde::Deserialize)]
2077    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2078    ///Container type for the return parameters of the [`MINTER_ROLE()`](MINTER_ROLECall) function.
2079    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2080    #[derive(Clone)]
2081    pub struct MINTER_ROLEReturn {
2082        #[allow(missing_docs)]
2083        pub _0: alloy::sol_types::private::FixedBytes<32>,
2084    }
2085    #[allow(
2086        non_camel_case_types,
2087        non_snake_case,
2088        clippy::pub_underscore_fields,
2089        clippy::style
2090    )]
2091    const _: () = {
2092        use alloy::sol_types as alloy_sol_types;
2093        {
2094            #[doc(hidden)]
2095            type UnderlyingSolTuple<'a> = ();
2096            #[doc(hidden)]
2097            type UnderlyingRustTuple<'a> = ();
2098            #[cfg(test)]
2099            #[allow(dead_code, unreachable_patterns)]
2100            fn _type_assertion(
2101                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2102            ) {
2103                match _t {
2104                    alloy_sol_types::private::AssertTypeEq::<
2105                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2106                    >(_) => {}
2107                }
2108            }
2109            #[automatically_derived]
2110            #[doc(hidden)]
2111            impl ::core::convert::From<MINTER_ROLECall> for UnderlyingRustTuple<'_> {
2112                fn from(value: MINTER_ROLECall) -> Self {
2113                    ()
2114                }
2115            }
2116            #[automatically_derived]
2117            #[doc(hidden)]
2118            impl ::core::convert::From<UnderlyingRustTuple<'_>> for MINTER_ROLECall {
2119                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2120                    Self
2121                }
2122            }
2123        }
2124        {
2125            #[doc(hidden)]
2126            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
2127            #[doc(hidden)]
2128            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
2129            #[cfg(test)]
2130            #[allow(dead_code, unreachable_patterns)]
2131            fn _type_assertion(
2132                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2133            ) {
2134                match _t {
2135                    alloy_sol_types::private::AssertTypeEq::<
2136                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2137                    >(_) => {}
2138                }
2139            }
2140            #[automatically_derived]
2141            #[doc(hidden)]
2142            impl ::core::convert::From<MINTER_ROLEReturn> for UnderlyingRustTuple<'_> {
2143                fn from(value: MINTER_ROLEReturn) -> Self {
2144                    (value._0,)
2145                }
2146            }
2147            #[automatically_derived]
2148            #[doc(hidden)]
2149            impl ::core::convert::From<UnderlyingRustTuple<'_>> for MINTER_ROLEReturn {
2150                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2151                    Self { _0: tuple.0 }
2152                }
2153            }
2154        }
2155        #[automatically_derived]
2156        impl alloy_sol_types::SolCall for MINTER_ROLECall {
2157            type Parameters<'a> = ();
2158            type Token<'a> = <Self::Parameters<
2159                'a,
2160            > as alloy_sol_types::SolType>::Token<'a>;
2161            type Return = alloy::sol_types::private::FixedBytes<32>;
2162            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
2163            type ReturnToken<'a> = <Self::ReturnTuple<
2164                'a,
2165            > as alloy_sol_types::SolType>::Token<'a>;
2166            const SIGNATURE: &'static str = "MINTER_ROLE()";
2167            const SELECTOR: [u8; 4] = [213u8, 57u8, 19u8, 147u8];
2168            #[inline]
2169            fn new<'a>(
2170                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2171            ) -> Self {
2172                tuple.into()
2173            }
2174            #[inline]
2175            fn tokenize(&self) -> Self::Token<'_> {
2176                ()
2177            }
2178            #[inline]
2179            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2180                (
2181                    <alloy::sol_types::sol_data::FixedBytes<
2182                        32,
2183                    > as alloy_sol_types::SolType>::tokenize(ret),
2184                )
2185            }
2186            #[inline]
2187            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2188                <Self::ReturnTuple<
2189                    '_,
2190                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2191                    .map(|r| {
2192                        let r: MINTER_ROLEReturn = r.into();
2193                        r._0
2194                    })
2195            }
2196            #[inline]
2197            fn abi_decode_returns_validate(
2198                data: &[u8],
2199            ) -> alloy_sol_types::Result<Self::Return> {
2200                <Self::ReturnTuple<
2201                    '_,
2202                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2203                    .map(|r| {
2204                        let r: MINTER_ROLEReturn = r.into();
2205                        r._0
2206                    })
2207            }
2208        }
2209    };
2210    #[derive(serde::Serialize, serde::Deserialize)]
2211    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2212    /**Function with signature `approve(address,uint256)` and selector `0x095ea7b3`.
2213```solidity
2214function approve(address to, uint256 tokenId) external;
2215```*/
2216    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2217    #[derive(Clone)]
2218    pub struct approveCall {
2219        #[allow(missing_docs)]
2220        pub to: alloy::sol_types::private::Address,
2221        #[allow(missing_docs)]
2222        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
2223    }
2224    ///Container type for the return parameters of the [`approve(address,uint256)`](approveCall) function.
2225    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2226    #[derive(Clone)]
2227    pub struct approveReturn {}
2228    #[allow(
2229        non_camel_case_types,
2230        non_snake_case,
2231        clippy::pub_underscore_fields,
2232        clippy::style
2233    )]
2234    const _: () = {
2235        use alloy::sol_types as alloy_sol_types;
2236        {
2237            #[doc(hidden)]
2238            type UnderlyingSolTuple<'a> = (
2239                alloy::sol_types::sol_data::Address,
2240                alloy::sol_types::sol_data::Uint<256>,
2241            );
2242            #[doc(hidden)]
2243            type UnderlyingRustTuple<'a> = (
2244                alloy::sol_types::private::Address,
2245                alloy::sol_types::private::primitives::aliases::U256,
2246            );
2247            #[cfg(test)]
2248            #[allow(dead_code, unreachable_patterns)]
2249            fn _type_assertion(
2250                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2251            ) {
2252                match _t {
2253                    alloy_sol_types::private::AssertTypeEq::<
2254                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2255                    >(_) => {}
2256                }
2257            }
2258            #[automatically_derived]
2259            #[doc(hidden)]
2260            impl ::core::convert::From<approveCall> for UnderlyingRustTuple<'_> {
2261                fn from(value: approveCall) -> Self {
2262                    (value.to, value.tokenId)
2263                }
2264            }
2265            #[automatically_derived]
2266            #[doc(hidden)]
2267            impl ::core::convert::From<UnderlyingRustTuple<'_>> for approveCall {
2268                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2269                    Self {
2270                        to: tuple.0,
2271                        tokenId: tuple.1,
2272                    }
2273                }
2274            }
2275        }
2276        {
2277            #[doc(hidden)]
2278            type UnderlyingSolTuple<'a> = ();
2279            #[doc(hidden)]
2280            type UnderlyingRustTuple<'a> = ();
2281            #[cfg(test)]
2282            #[allow(dead_code, unreachable_patterns)]
2283            fn _type_assertion(
2284                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2285            ) {
2286                match _t {
2287                    alloy_sol_types::private::AssertTypeEq::<
2288                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2289                    >(_) => {}
2290                }
2291            }
2292            #[automatically_derived]
2293            #[doc(hidden)]
2294            impl ::core::convert::From<approveReturn> for UnderlyingRustTuple<'_> {
2295                fn from(value: approveReturn) -> Self {
2296                    ()
2297                }
2298            }
2299            #[automatically_derived]
2300            #[doc(hidden)]
2301            impl ::core::convert::From<UnderlyingRustTuple<'_>> for approveReturn {
2302                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2303                    Self {}
2304                }
2305            }
2306        }
2307        impl approveReturn {
2308            fn _tokenize(
2309                &self,
2310            ) -> <approveCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
2311                ()
2312            }
2313        }
2314        #[automatically_derived]
2315        impl alloy_sol_types::SolCall for approveCall {
2316            type Parameters<'a> = (
2317                alloy::sol_types::sol_data::Address,
2318                alloy::sol_types::sol_data::Uint<256>,
2319            );
2320            type Token<'a> = <Self::Parameters<
2321                'a,
2322            > as alloy_sol_types::SolType>::Token<'a>;
2323            type Return = approveReturn;
2324            type ReturnTuple<'a> = ();
2325            type ReturnToken<'a> = <Self::ReturnTuple<
2326                'a,
2327            > as alloy_sol_types::SolType>::Token<'a>;
2328            const SIGNATURE: &'static str = "approve(address,uint256)";
2329            const SELECTOR: [u8; 4] = [9u8, 94u8, 167u8, 179u8];
2330            #[inline]
2331            fn new<'a>(
2332                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2333            ) -> Self {
2334                tuple.into()
2335            }
2336            #[inline]
2337            fn tokenize(&self) -> Self::Token<'_> {
2338                (
2339                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
2340                        &self.to,
2341                    ),
2342                    <alloy::sol_types::sol_data::Uint<
2343                        256,
2344                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
2345                )
2346            }
2347            #[inline]
2348            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2349                approveReturn::_tokenize(ret)
2350            }
2351            #[inline]
2352            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2353                <Self::ReturnTuple<
2354                    '_,
2355                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2356                    .map(Into::into)
2357            }
2358            #[inline]
2359            fn abi_decode_returns_validate(
2360                data: &[u8],
2361            ) -> alloy_sol_types::Result<Self::Return> {
2362                <Self::ReturnTuple<
2363                    '_,
2364                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2365                    .map(Into::into)
2366            }
2367        }
2368    };
2369    #[derive(serde::Serialize, serde::Deserialize)]
2370    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2371    /**Function with signature `balanceOf(address)` and selector `0x70a08231`.
2372```solidity
2373function balanceOf(address owner) external view returns (uint256);
2374```*/
2375    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2376    #[derive(Clone)]
2377    pub struct balanceOfCall {
2378        #[allow(missing_docs)]
2379        pub owner: alloy::sol_types::private::Address,
2380    }
2381    #[derive(serde::Serialize, serde::Deserialize)]
2382    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2383    ///Container type for the return parameters of the [`balanceOf(address)`](balanceOfCall) function.
2384    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2385    #[derive(Clone)]
2386    pub struct balanceOfReturn {
2387        #[allow(missing_docs)]
2388        pub _0: alloy::sol_types::private::primitives::aliases::U256,
2389    }
2390    #[allow(
2391        non_camel_case_types,
2392        non_snake_case,
2393        clippy::pub_underscore_fields,
2394        clippy::style
2395    )]
2396    const _: () = {
2397        use alloy::sol_types as alloy_sol_types;
2398        {
2399            #[doc(hidden)]
2400            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
2401            #[doc(hidden)]
2402            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
2403            #[cfg(test)]
2404            #[allow(dead_code, unreachable_patterns)]
2405            fn _type_assertion(
2406                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2407            ) {
2408                match _t {
2409                    alloy_sol_types::private::AssertTypeEq::<
2410                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2411                    >(_) => {}
2412                }
2413            }
2414            #[automatically_derived]
2415            #[doc(hidden)]
2416            impl ::core::convert::From<balanceOfCall> for UnderlyingRustTuple<'_> {
2417                fn from(value: balanceOfCall) -> Self {
2418                    (value.owner,)
2419                }
2420            }
2421            #[automatically_derived]
2422            #[doc(hidden)]
2423            impl ::core::convert::From<UnderlyingRustTuple<'_>> for balanceOfCall {
2424                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2425                    Self { owner: tuple.0 }
2426                }
2427            }
2428        }
2429        {
2430            #[doc(hidden)]
2431            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2432            #[doc(hidden)]
2433            type UnderlyingRustTuple<'a> = (
2434                alloy::sol_types::private::primitives::aliases::U256,
2435            );
2436            #[cfg(test)]
2437            #[allow(dead_code, unreachable_patterns)]
2438            fn _type_assertion(
2439                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2440            ) {
2441                match _t {
2442                    alloy_sol_types::private::AssertTypeEq::<
2443                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2444                    >(_) => {}
2445                }
2446            }
2447            #[automatically_derived]
2448            #[doc(hidden)]
2449            impl ::core::convert::From<balanceOfReturn> for UnderlyingRustTuple<'_> {
2450                fn from(value: balanceOfReturn) -> Self {
2451                    (value._0,)
2452                }
2453            }
2454            #[automatically_derived]
2455            #[doc(hidden)]
2456            impl ::core::convert::From<UnderlyingRustTuple<'_>> for balanceOfReturn {
2457                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2458                    Self { _0: tuple.0 }
2459                }
2460            }
2461        }
2462        #[automatically_derived]
2463        impl alloy_sol_types::SolCall for balanceOfCall {
2464            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
2465            type Token<'a> = <Self::Parameters<
2466                'a,
2467            > as alloy_sol_types::SolType>::Token<'a>;
2468            type Return = alloy::sol_types::private::primitives::aliases::U256;
2469            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2470            type ReturnToken<'a> = <Self::ReturnTuple<
2471                'a,
2472            > as alloy_sol_types::SolType>::Token<'a>;
2473            const SIGNATURE: &'static str = "balanceOf(address)";
2474            const SELECTOR: [u8; 4] = [112u8, 160u8, 130u8, 49u8];
2475            #[inline]
2476            fn new<'a>(
2477                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2478            ) -> Self {
2479                tuple.into()
2480            }
2481            #[inline]
2482            fn tokenize(&self) -> Self::Token<'_> {
2483                (
2484                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
2485                        &self.owner,
2486                    ),
2487                )
2488            }
2489            #[inline]
2490            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2491                (
2492                    <alloy::sol_types::sol_data::Uint<
2493                        256,
2494                    > as alloy_sol_types::SolType>::tokenize(ret),
2495                )
2496            }
2497            #[inline]
2498            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2499                <Self::ReturnTuple<
2500                    '_,
2501                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2502                    .map(|r| {
2503                        let r: balanceOfReturn = r.into();
2504                        r._0
2505                    })
2506            }
2507            #[inline]
2508            fn abi_decode_returns_validate(
2509                data: &[u8],
2510            ) -> alloy_sol_types::Result<Self::Return> {
2511                <Self::ReturnTuple<
2512                    '_,
2513                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2514                    .map(|r| {
2515                        let r: balanceOfReturn = r.into();
2516                        r._0
2517                    })
2518            }
2519        }
2520    };
2521    #[derive(serde::Serialize, serde::Deserialize)]
2522    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2523    /**Function with signature `batchMint(address[],string,string,uint256,uint256)` and selector `0x9365c533`.
2524```solidity
2525function batchMint(address[] memory to, string memory boostType, string memory boostRank, uint256 boostNumerator, uint256 redeemDeadline) external;
2526```*/
2527    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2528    #[derive(Clone)]
2529    pub struct batchMintCall {
2530        #[allow(missing_docs)]
2531        pub to: alloy::sol_types::private::Vec<alloy::sol_types::private::Address>,
2532        #[allow(missing_docs)]
2533        pub boostType: alloy::sol_types::private::String,
2534        #[allow(missing_docs)]
2535        pub boostRank: alloy::sol_types::private::String,
2536        #[allow(missing_docs)]
2537        pub boostNumerator: alloy::sol_types::private::primitives::aliases::U256,
2538        #[allow(missing_docs)]
2539        pub redeemDeadline: alloy::sol_types::private::primitives::aliases::U256,
2540    }
2541    ///Container type for the return parameters of the [`batchMint(address[],string,string,uint256,uint256)`](batchMintCall) function.
2542    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2543    #[derive(Clone)]
2544    pub struct batchMintReturn {}
2545    #[allow(
2546        non_camel_case_types,
2547        non_snake_case,
2548        clippy::pub_underscore_fields,
2549        clippy::style
2550    )]
2551    const _: () = {
2552        use alloy::sol_types as alloy_sol_types;
2553        {
2554            #[doc(hidden)]
2555            type UnderlyingSolTuple<'a> = (
2556                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Address>,
2557                alloy::sol_types::sol_data::String,
2558                alloy::sol_types::sol_data::String,
2559                alloy::sol_types::sol_data::Uint<256>,
2560                alloy::sol_types::sol_data::Uint<256>,
2561            );
2562            #[doc(hidden)]
2563            type UnderlyingRustTuple<'a> = (
2564                alloy::sol_types::private::Vec<alloy::sol_types::private::Address>,
2565                alloy::sol_types::private::String,
2566                alloy::sol_types::private::String,
2567                alloy::sol_types::private::primitives::aliases::U256,
2568                alloy::sol_types::private::primitives::aliases::U256,
2569            );
2570            #[cfg(test)]
2571            #[allow(dead_code, unreachable_patterns)]
2572            fn _type_assertion(
2573                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2574            ) {
2575                match _t {
2576                    alloy_sol_types::private::AssertTypeEq::<
2577                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2578                    >(_) => {}
2579                }
2580            }
2581            #[automatically_derived]
2582            #[doc(hidden)]
2583            impl ::core::convert::From<batchMintCall> for UnderlyingRustTuple<'_> {
2584                fn from(value: batchMintCall) -> Self {
2585                    (
2586                        value.to,
2587                        value.boostType,
2588                        value.boostRank,
2589                        value.boostNumerator,
2590                        value.redeemDeadline,
2591                    )
2592                }
2593            }
2594            #[automatically_derived]
2595            #[doc(hidden)]
2596            impl ::core::convert::From<UnderlyingRustTuple<'_>> for batchMintCall {
2597                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2598                    Self {
2599                        to: tuple.0,
2600                        boostType: tuple.1,
2601                        boostRank: tuple.2,
2602                        boostNumerator: tuple.3,
2603                        redeemDeadline: tuple.4,
2604                    }
2605                }
2606            }
2607        }
2608        {
2609            #[doc(hidden)]
2610            type UnderlyingSolTuple<'a> = ();
2611            #[doc(hidden)]
2612            type UnderlyingRustTuple<'a> = ();
2613            #[cfg(test)]
2614            #[allow(dead_code, unreachable_patterns)]
2615            fn _type_assertion(
2616                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2617            ) {
2618                match _t {
2619                    alloy_sol_types::private::AssertTypeEq::<
2620                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2621                    >(_) => {}
2622                }
2623            }
2624            #[automatically_derived]
2625            #[doc(hidden)]
2626            impl ::core::convert::From<batchMintReturn> for UnderlyingRustTuple<'_> {
2627                fn from(value: batchMintReturn) -> Self {
2628                    ()
2629                }
2630            }
2631            #[automatically_derived]
2632            #[doc(hidden)]
2633            impl ::core::convert::From<UnderlyingRustTuple<'_>> for batchMintReturn {
2634                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2635                    Self {}
2636                }
2637            }
2638        }
2639        impl batchMintReturn {
2640            fn _tokenize(
2641                &self,
2642            ) -> <batchMintCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
2643                ()
2644            }
2645        }
2646        #[automatically_derived]
2647        impl alloy_sol_types::SolCall for batchMintCall {
2648            type Parameters<'a> = (
2649                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Address>,
2650                alloy::sol_types::sol_data::String,
2651                alloy::sol_types::sol_data::String,
2652                alloy::sol_types::sol_data::Uint<256>,
2653                alloy::sol_types::sol_data::Uint<256>,
2654            );
2655            type Token<'a> = <Self::Parameters<
2656                'a,
2657            > as alloy_sol_types::SolType>::Token<'a>;
2658            type Return = batchMintReturn;
2659            type ReturnTuple<'a> = ();
2660            type ReturnToken<'a> = <Self::ReturnTuple<
2661                'a,
2662            > as alloy_sol_types::SolType>::Token<'a>;
2663            const SIGNATURE: &'static str = "batchMint(address[],string,string,uint256,uint256)";
2664            const SELECTOR: [u8; 4] = [147u8, 101u8, 197u8, 51u8];
2665            #[inline]
2666            fn new<'a>(
2667                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2668            ) -> Self {
2669                tuple.into()
2670            }
2671            #[inline]
2672            fn tokenize(&self) -> Self::Token<'_> {
2673                (
2674                    <alloy::sol_types::sol_data::Array<
2675                        alloy::sol_types::sol_data::Address,
2676                    > as alloy_sol_types::SolType>::tokenize(&self.to),
2677                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
2678                        &self.boostType,
2679                    ),
2680                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
2681                        &self.boostRank,
2682                    ),
2683                    <alloy::sol_types::sol_data::Uint<
2684                        256,
2685                    > as alloy_sol_types::SolType>::tokenize(&self.boostNumerator),
2686                    <alloy::sol_types::sol_data::Uint<
2687                        256,
2688                    > as alloy_sol_types::SolType>::tokenize(&self.redeemDeadline),
2689                )
2690            }
2691            #[inline]
2692            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2693                batchMintReturn::_tokenize(ret)
2694            }
2695            #[inline]
2696            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2697                <Self::ReturnTuple<
2698                    '_,
2699                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2700                    .map(Into::into)
2701            }
2702            #[inline]
2703            fn abi_decode_returns_validate(
2704                data: &[u8],
2705            ) -> alloy_sol_types::Result<Self::Return> {
2706                <Self::ReturnTuple<
2707                    '_,
2708                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2709                    .map(Into::into)
2710            }
2711        }
2712    };
2713    #[derive(serde::Serialize, serde::Deserialize)]
2714    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2715    /**Function with signature `boostOf(uint256)` and selector `0x896cddf4`.
2716```solidity
2717function boostOf(uint256 tokenId) external view returns (uint256, uint256);
2718```*/
2719    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2720    #[derive(Clone)]
2721    pub struct boostOfCall {
2722        #[allow(missing_docs)]
2723        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
2724    }
2725    #[derive(serde::Serialize, serde::Deserialize)]
2726    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2727    ///Container type for the return parameters of the [`boostOf(uint256)`](boostOfCall) function.
2728    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2729    #[derive(Clone)]
2730    pub struct boostOfReturn {
2731        #[allow(missing_docs)]
2732        pub _0: alloy::sol_types::private::primitives::aliases::U256,
2733        #[allow(missing_docs)]
2734        pub _1: alloy::sol_types::private::primitives::aliases::U256,
2735    }
2736    #[allow(
2737        non_camel_case_types,
2738        non_snake_case,
2739        clippy::pub_underscore_fields,
2740        clippy::style
2741    )]
2742    const _: () = {
2743        use alloy::sol_types as alloy_sol_types;
2744        {
2745            #[doc(hidden)]
2746            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2747            #[doc(hidden)]
2748            type UnderlyingRustTuple<'a> = (
2749                alloy::sol_types::private::primitives::aliases::U256,
2750            );
2751            #[cfg(test)]
2752            #[allow(dead_code, unreachable_patterns)]
2753            fn _type_assertion(
2754                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2755            ) {
2756                match _t {
2757                    alloy_sol_types::private::AssertTypeEq::<
2758                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2759                    >(_) => {}
2760                }
2761            }
2762            #[automatically_derived]
2763            #[doc(hidden)]
2764            impl ::core::convert::From<boostOfCall> for UnderlyingRustTuple<'_> {
2765                fn from(value: boostOfCall) -> Self {
2766                    (value.tokenId,)
2767                }
2768            }
2769            #[automatically_derived]
2770            #[doc(hidden)]
2771            impl ::core::convert::From<UnderlyingRustTuple<'_>> for boostOfCall {
2772                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2773                    Self { tokenId: tuple.0 }
2774                }
2775            }
2776        }
2777        {
2778            #[doc(hidden)]
2779            type UnderlyingSolTuple<'a> = (
2780                alloy::sol_types::sol_data::Uint<256>,
2781                alloy::sol_types::sol_data::Uint<256>,
2782            );
2783            #[doc(hidden)]
2784            type UnderlyingRustTuple<'a> = (
2785                alloy::sol_types::private::primitives::aliases::U256,
2786                alloy::sol_types::private::primitives::aliases::U256,
2787            );
2788            #[cfg(test)]
2789            #[allow(dead_code, unreachable_patterns)]
2790            fn _type_assertion(
2791                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2792            ) {
2793                match _t {
2794                    alloy_sol_types::private::AssertTypeEq::<
2795                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2796                    >(_) => {}
2797                }
2798            }
2799            #[automatically_derived]
2800            #[doc(hidden)]
2801            impl ::core::convert::From<boostOfReturn> for UnderlyingRustTuple<'_> {
2802                fn from(value: boostOfReturn) -> Self {
2803                    (value._0, value._1)
2804                }
2805            }
2806            #[automatically_derived]
2807            #[doc(hidden)]
2808            impl ::core::convert::From<UnderlyingRustTuple<'_>> for boostOfReturn {
2809                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2810                    Self { _0: tuple.0, _1: tuple.1 }
2811                }
2812            }
2813        }
2814        impl boostOfReturn {
2815            fn _tokenize(
2816                &self,
2817            ) -> <boostOfCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
2818                (
2819                    <alloy::sol_types::sol_data::Uint<
2820                        256,
2821                    > as alloy_sol_types::SolType>::tokenize(&self._0),
2822                    <alloy::sol_types::sol_data::Uint<
2823                        256,
2824                    > as alloy_sol_types::SolType>::tokenize(&self._1),
2825                )
2826            }
2827        }
2828        #[automatically_derived]
2829        impl alloy_sol_types::SolCall for boostOfCall {
2830            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2831            type Token<'a> = <Self::Parameters<
2832                'a,
2833            > as alloy_sol_types::SolType>::Token<'a>;
2834            type Return = boostOfReturn;
2835            type ReturnTuple<'a> = (
2836                alloy::sol_types::sol_data::Uint<256>,
2837                alloy::sol_types::sol_data::Uint<256>,
2838            );
2839            type ReturnToken<'a> = <Self::ReturnTuple<
2840                'a,
2841            > as alloy_sol_types::SolType>::Token<'a>;
2842            const SIGNATURE: &'static str = "boostOf(uint256)";
2843            const SELECTOR: [u8; 4] = [137u8, 108u8, 221u8, 244u8];
2844            #[inline]
2845            fn new<'a>(
2846                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2847            ) -> Self {
2848                tuple.into()
2849            }
2850            #[inline]
2851            fn tokenize(&self) -> Self::Token<'_> {
2852                (
2853                    <alloy::sol_types::sol_data::Uint<
2854                        256,
2855                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
2856                )
2857            }
2858            #[inline]
2859            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2860                boostOfReturn::_tokenize(ret)
2861            }
2862            #[inline]
2863            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2864                <Self::ReturnTuple<
2865                    '_,
2866                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2867                    .map(Into::into)
2868            }
2869            #[inline]
2870            fn abi_decode_returns_validate(
2871                data: &[u8],
2872            ) -> alloy_sol_types::Result<Self::Return> {
2873                <Self::ReturnTuple<
2874                    '_,
2875                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2876                    .map(Into::into)
2877            }
2878        }
2879    };
2880    #[derive(serde::Serialize, serde::Deserialize)]
2881    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2882    /**Function with signature `getApproved(uint256)` and selector `0x081812fc`.
2883```solidity
2884function getApproved(uint256 tokenId) external view returns (address);
2885```*/
2886    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2887    #[derive(Clone)]
2888    pub struct getApprovedCall {
2889        #[allow(missing_docs)]
2890        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
2891    }
2892    #[derive(serde::Serialize, serde::Deserialize)]
2893    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2894    ///Container type for the return parameters of the [`getApproved(uint256)`](getApprovedCall) function.
2895    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2896    #[derive(Clone)]
2897    pub struct getApprovedReturn {
2898        #[allow(missing_docs)]
2899        pub _0: alloy::sol_types::private::Address,
2900    }
2901    #[allow(
2902        non_camel_case_types,
2903        non_snake_case,
2904        clippy::pub_underscore_fields,
2905        clippy::style
2906    )]
2907    const _: () = {
2908        use alloy::sol_types as alloy_sol_types;
2909        {
2910            #[doc(hidden)]
2911            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2912            #[doc(hidden)]
2913            type UnderlyingRustTuple<'a> = (
2914                alloy::sol_types::private::primitives::aliases::U256,
2915            );
2916            #[cfg(test)]
2917            #[allow(dead_code, unreachable_patterns)]
2918            fn _type_assertion(
2919                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2920            ) {
2921                match _t {
2922                    alloy_sol_types::private::AssertTypeEq::<
2923                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2924                    >(_) => {}
2925                }
2926            }
2927            #[automatically_derived]
2928            #[doc(hidden)]
2929            impl ::core::convert::From<getApprovedCall> for UnderlyingRustTuple<'_> {
2930                fn from(value: getApprovedCall) -> Self {
2931                    (value.tokenId,)
2932                }
2933            }
2934            #[automatically_derived]
2935            #[doc(hidden)]
2936            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getApprovedCall {
2937                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2938                    Self { tokenId: tuple.0 }
2939                }
2940            }
2941        }
2942        {
2943            #[doc(hidden)]
2944            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
2945            #[doc(hidden)]
2946            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
2947            #[cfg(test)]
2948            #[allow(dead_code, unreachable_patterns)]
2949            fn _type_assertion(
2950                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2951            ) {
2952                match _t {
2953                    alloy_sol_types::private::AssertTypeEq::<
2954                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2955                    >(_) => {}
2956                }
2957            }
2958            #[automatically_derived]
2959            #[doc(hidden)]
2960            impl ::core::convert::From<getApprovedReturn> for UnderlyingRustTuple<'_> {
2961                fn from(value: getApprovedReturn) -> Self {
2962                    (value._0,)
2963                }
2964            }
2965            #[automatically_derived]
2966            #[doc(hidden)]
2967            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getApprovedReturn {
2968                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2969                    Self { _0: tuple.0 }
2970                }
2971            }
2972        }
2973        #[automatically_derived]
2974        impl alloy_sol_types::SolCall for getApprovedCall {
2975            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2976            type Token<'a> = <Self::Parameters<
2977                'a,
2978            > as alloy_sol_types::SolType>::Token<'a>;
2979            type Return = alloy::sol_types::private::Address;
2980            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
2981            type ReturnToken<'a> = <Self::ReturnTuple<
2982                'a,
2983            > as alloy_sol_types::SolType>::Token<'a>;
2984            const SIGNATURE: &'static str = "getApproved(uint256)";
2985            const SELECTOR: [u8; 4] = [8u8, 24u8, 18u8, 252u8];
2986            #[inline]
2987            fn new<'a>(
2988                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2989            ) -> Self {
2990                tuple.into()
2991            }
2992            #[inline]
2993            fn tokenize(&self) -> Self::Token<'_> {
2994                (
2995                    <alloy::sol_types::sol_data::Uint<
2996                        256,
2997                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
2998                )
2999            }
3000            #[inline]
3001            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3002                (
3003                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3004                        ret,
3005                    ),
3006                )
3007            }
3008            #[inline]
3009            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3010                <Self::ReturnTuple<
3011                    '_,
3012                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3013                    .map(|r| {
3014                        let r: getApprovedReturn = r.into();
3015                        r._0
3016                    })
3017            }
3018            #[inline]
3019            fn abi_decode_returns_validate(
3020                data: &[u8],
3021            ) -> alloy_sol_types::Result<Self::Return> {
3022                <Self::ReturnTuple<
3023                    '_,
3024                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3025                    .map(|r| {
3026                        let r: getApprovedReturn = r.into();
3027                        r._0
3028                    })
3029            }
3030        }
3031    };
3032    #[derive(serde::Serialize, serde::Deserialize)]
3033    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3034    /**Function with signature `getRoleAdmin(bytes32)` and selector `0x248a9ca3`.
3035```solidity
3036function getRoleAdmin(bytes32 role) external view returns (bytes32);
3037```*/
3038    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3039    #[derive(Clone)]
3040    pub struct getRoleAdminCall {
3041        #[allow(missing_docs)]
3042        pub role: alloy::sol_types::private::FixedBytes<32>,
3043    }
3044    #[derive(serde::Serialize, serde::Deserialize)]
3045    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3046    ///Container type for the return parameters of the [`getRoleAdmin(bytes32)`](getRoleAdminCall) function.
3047    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3048    #[derive(Clone)]
3049    pub struct getRoleAdminReturn {
3050        #[allow(missing_docs)]
3051        pub _0: alloy::sol_types::private::FixedBytes<32>,
3052    }
3053    #[allow(
3054        non_camel_case_types,
3055        non_snake_case,
3056        clippy::pub_underscore_fields,
3057        clippy::style
3058    )]
3059    const _: () = {
3060        use alloy::sol_types as alloy_sol_types;
3061        {
3062            #[doc(hidden)]
3063            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
3064            #[doc(hidden)]
3065            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
3066            #[cfg(test)]
3067            #[allow(dead_code, unreachable_patterns)]
3068            fn _type_assertion(
3069                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3070            ) {
3071                match _t {
3072                    alloy_sol_types::private::AssertTypeEq::<
3073                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3074                    >(_) => {}
3075                }
3076            }
3077            #[automatically_derived]
3078            #[doc(hidden)]
3079            impl ::core::convert::From<getRoleAdminCall> for UnderlyingRustTuple<'_> {
3080                fn from(value: getRoleAdminCall) -> Self {
3081                    (value.role,)
3082                }
3083            }
3084            #[automatically_derived]
3085            #[doc(hidden)]
3086            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getRoleAdminCall {
3087                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3088                    Self { role: tuple.0 }
3089                }
3090            }
3091        }
3092        {
3093            #[doc(hidden)]
3094            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
3095            #[doc(hidden)]
3096            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
3097            #[cfg(test)]
3098            #[allow(dead_code, unreachable_patterns)]
3099            fn _type_assertion(
3100                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3101            ) {
3102                match _t {
3103                    alloy_sol_types::private::AssertTypeEq::<
3104                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3105                    >(_) => {}
3106                }
3107            }
3108            #[automatically_derived]
3109            #[doc(hidden)]
3110            impl ::core::convert::From<getRoleAdminReturn> for UnderlyingRustTuple<'_> {
3111                fn from(value: getRoleAdminReturn) -> Self {
3112                    (value._0,)
3113                }
3114            }
3115            #[automatically_derived]
3116            #[doc(hidden)]
3117            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getRoleAdminReturn {
3118                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3119                    Self { _0: tuple.0 }
3120                }
3121            }
3122        }
3123        #[automatically_derived]
3124        impl alloy_sol_types::SolCall for getRoleAdminCall {
3125            type Parameters<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
3126            type Token<'a> = <Self::Parameters<
3127                'a,
3128            > as alloy_sol_types::SolType>::Token<'a>;
3129            type Return = alloy::sol_types::private::FixedBytes<32>;
3130            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
3131            type ReturnToken<'a> = <Self::ReturnTuple<
3132                'a,
3133            > as alloy_sol_types::SolType>::Token<'a>;
3134            const SIGNATURE: &'static str = "getRoleAdmin(bytes32)";
3135            const SELECTOR: [u8; 4] = [36u8, 138u8, 156u8, 163u8];
3136            #[inline]
3137            fn new<'a>(
3138                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3139            ) -> Self {
3140                tuple.into()
3141            }
3142            #[inline]
3143            fn tokenize(&self) -> Self::Token<'_> {
3144                (
3145                    <alloy::sol_types::sol_data::FixedBytes<
3146                        32,
3147                    > as alloy_sol_types::SolType>::tokenize(&self.role),
3148                )
3149            }
3150            #[inline]
3151            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3152                (
3153                    <alloy::sol_types::sol_data::FixedBytes<
3154                        32,
3155                    > as alloy_sol_types::SolType>::tokenize(ret),
3156                )
3157            }
3158            #[inline]
3159            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3160                <Self::ReturnTuple<
3161                    '_,
3162                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3163                    .map(|r| {
3164                        let r: getRoleAdminReturn = r.into();
3165                        r._0
3166                    })
3167            }
3168            #[inline]
3169            fn abi_decode_returns_validate(
3170                data: &[u8],
3171            ) -> alloy_sol_types::Result<Self::Return> {
3172                <Self::ReturnTuple<
3173                    '_,
3174                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3175                    .map(|r| {
3176                        let r: getRoleAdminReturn = r.into();
3177                        r._0
3178                    })
3179            }
3180        }
3181    };
3182    #[derive(serde::Serialize, serde::Deserialize)]
3183    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3184    /**Function with signature `getRoleMember(bytes32,uint256)` and selector `0x9010d07c`.
3185```solidity
3186function getRoleMember(bytes32 role, uint256 index) external view returns (address);
3187```*/
3188    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3189    #[derive(Clone)]
3190    pub struct getRoleMemberCall {
3191        #[allow(missing_docs)]
3192        pub role: alloy::sol_types::private::FixedBytes<32>,
3193        #[allow(missing_docs)]
3194        pub index: alloy::sol_types::private::primitives::aliases::U256,
3195    }
3196    #[derive(serde::Serialize, serde::Deserialize)]
3197    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3198    ///Container type for the return parameters of the [`getRoleMember(bytes32,uint256)`](getRoleMemberCall) function.
3199    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3200    #[derive(Clone)]
3201    pub struct getRoleMemberReturn {
3202        #[allow(missing_docs)]
3203        pub _0: alloy::sol_types::private::Address,
3204    }
3205    #[allow(
3206        non_camel_case_types,
3207        non_snake_case,
3208        clippy::pub_underscore_fields,
3209        clippy::style
3210    )]
3211    const _: () = {
3212        use alloy::sol_types as alloy_sol_types;
3213        {
3214            #[doc(hidden)]
3215            type UnderlyingSolTuple<'a> = (
3216                alloy::sol_types::sol_data::FixedBytes<32>,
3217                alloy::sol_types::sol_data::Uint<256>,
3218            );
3219            #[doc(hidden)]
3220            type UnderlyingRustTuple<'a> = (
3221                alloy::sol_types::private::FixedBytes<32>,
3222                alloy::sol_types::private::primitives::aliases::U256,
3223            );
3224            #[cfg(test)]
3225            #[allow(dead_code, unreachable_patterns)]
3226            fn _type_assertion(
3227                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3228            ) {
3229                match _t {
3230                    alloy_sol_types::private::AssertTypeEq::<
3231                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3232                    >(_) => {}
3233                }
3234            }
3235            #[automatically_derived]
3236            #[doc(hidden)]
3237            impl ::core::convert::From<getRoleMemberCall> for UnderlyingRustTuple<'_> {
3238                fn from(value: getRoleMemberCall) -> Self {
3239                    (value.role, value.index)
3240                }
3241            }
3242            #[automatically_derived]
3243            #[doc(hidden)]
3244            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getRoleMemberCall {
3245                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3246                    Self {
3247                        role: tuple.0,
3248                        index: tuple.1,
3249                    }
3250                }
3251            }
3252        }
3253        {
3254            #[doc(hidden)]
3255            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
3256            #[doc(hidden)]
3257            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
3258            #[cfg(test)]
3259            #[allow(dead_code, unreachable_patterns)]
3260            fn _type_assertion(
3261                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3262            ) {
3263                match _t {
3264                    alloy_sol_types::private::AssertTypeEq::<
3265                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3266                    >(_) => {}
3267                }
3268            }
3269            #[automatically_derived]
3270            #[doc(hidden)]
3271            impl ::core::convert::From<getRoleMemberReturn> for UnderlyingRustTuple<'_> {
3272                fn from(value: getRoleMemberReturn) -> Self {
3273                    (value._0,)
3274                }
3275            }
3276            #[automatically_derived]
3277            #[doc(hidden)]
3278            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getRoleMemberReturn {
3279                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3280                    Self { _0: tuple.0 }
3281                }
3282            }
3283        }
3284        #[automatically_derived]
3285        impl alloy_sol_types::SolCall for getRoleMemberCall {
3286            type Parameters<'a> = (
3287                alloy::sol_types::sol_data::FixedBytes<32>,
3288                alloy::sol_types::sol_data::Uint<256>,
3289            );
3290            type Token<'a> = <Self::Parameters<
3291                'a,
3292            > as alloy_sol_types::SolType>::Token<'a>;
3293            type Return = alloy::sol_types::private::Address;
3294            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
3295            type ReturnToken<'a> = <Self::ReturnTuple<
3296                'a,
3297            > as alloy_sol_types::SolType>::Token<'a>;
3298            const SIGNATURE: &'static str = "getRoleMember(bytes32,uint256)";
3299            const SELECTOR: [u8; 4] = [144u8, 16u8, 208u8, 124u8];
3300            #[inline]
3301            fn new<'a>(
3302                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3303            ) -> Self {
3304                tuple.into()
3305            }
3306            #[inline]
3307            fn tokenize(&self) -> Self::Token<'_> {
3308                (
3309                    <alloy::sol_types::sol_data::FixedBytes<
3310                        32,
3311                    > as alloy_sol_types::SolType>::tokenize(&self.role),
3312                    <alloy::sol_types::sol_data::Uint<
3313                        256,
3314                    > as alloy_sol_types::SolType>::tokenize(&self.index),
3315                )
3316            }
3317            #[inline]
3318            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3319                (
3320                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3321                        ret,
3322                    ),
3323                )
3324            }
3325            #[inline]
3326            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3327                <Self::ReturnTuple<
3328                    '_,
3329                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3330                    .map(|r| {
3331                        let r: getRoleMemberReturn = r.into();
3332                        r._0
3333                    })
3334            }
3335            #[inline]
3336            fn abi_decode_returns_validate(
3337                data: &[u8],
3338            ) -> alloy_sol_types::Result<Self::Return> {
3339                <Self::ReturnTuple<
3340                    '_,
3341                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3342                    .map(|r| {
3343                        let r: getRoleMemberReturn = r.into();
3344                        r._0
3345                    })
3346            }
3347        }
3348    };
3349    #[derive(serde::Serialize, serde::Deserialize)]
3350    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3351    /**Function with signature `getRoleMemberCount(bytes32)` and selector `0xca15c873`.
3352```solidity
3353function getRoleMemberCount(bytes32 role) external view returns (uint256);
3354```*/
3355    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3356    #[derive(Clone)]
3357    pub struct getRoleMemberCountCall {
3358        #[allow(missing_docs)]
3359        pub role: alloy::sol_types::private::FixedBytes<32>,
3360    }
3361    #[derive(serde::Serialize, serde::Deserialize)]
3362    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3363    ///Container type for the return parameters of the [`getRoleMemberCount(bytes32)`](getRoleMemberCountCall) function.
3364    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3365    #[derive(Clone)]
3366    pub struct getRoleMemberCountReturn {
3367        #[allow(missing_docs)]
3368        pub _0: alloy::sol_types::private::primitives::aliases::U256,
3369    }
3370    #[allow(
3371        non_camel_case_types,
3372        non_snake_case,
3373        clippy::pub_underscore_fields,
3374        clippy::style
3375    )]
3376    const _: () = {
3377        use alloy::sol_types as alloy_sol_types;
3378        {
3379            #[doc(hidden)]
3380            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
3381            #[doc(hidden)]
3382            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
3383            #[cfg(test)]
3384            #[allow(dead_code, unreachable_patterns)]
3385            fn _type_assertion(
3386                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3387            ) {
3388                match _t {
3389                    alloy_sol_types::private::AssertTypeEq::<
3390                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3391                    >(_) => {}
3392                }
3393            }
3394            #[automatically_derived]
3395            #[doc(hidden)]
3396            impl ::core::convert::From<getRoleMemberCountCall>
3397            for UnderlyingRustTuple<'_> {
3398                fn from(value: getRoleMemberCountCall) -> Self {
3399                    (value.role,)
3400                }
3401            }
3402            #[automatically_derived]
3403            #[doc(hidden)]
3404            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3405            for getRoleMemberCountCall {
3406                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3407                    Self { role: tuple.0 }
3408                }
3409            }
3410        }
3411        {
3412            #[doc(hidden)]
3413            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3414            #[doc(hidden)]
3415            type UnderlyingRustTuple<'a> = (
3416                alloy::sol_types::private::primitives::aliases::U256,
3417            );
3418            #[cfg(test)]
3419            #[allow(dead_code, unreachable_patterns)]
3420            fn _type_assertion(
3421                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3422            ) {
3423                match _t {
3424                    alloy_sol_types::private::AssertTypeEq::<
3425                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3426                    >(_) => {}
3427                }
3428            }
3429            #[automatically_derived]
3430            #[doc(hidden)]
3431            impl ::core::convert::From<getRoleMemberCountReturn>
3432            for UnderlyingRustTuple<'_> {
3433                fn from(value: getRoleMemberCountReturn) -> Self {
3434                    (value._0,)
3435                }
3436            }
3437            #[automatically_derived]
3438            #[doc(hidden)]
3439            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3440            for getRoleMemberCountReturn {
3441                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3442                    Self { _0: tuple.0 }
3443                }
3444            }
3445        }
3446        #[automatically_derived]
3447        impl alloy_sol_types::SolCall for getRoleMemberCountCall {
3448            type Parameters<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
3449            type Token<'a> = <Self::Parameters<
3450                'a,
3451            > as alloy_sol_types::SolType>::Token<'a>;
3452            type Return = alloy::sol_types::private::primitives::aliases::U256;
3453            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3454            type ReturnToken<'a> = <Self::ReturnTuple<
3455                'a,
3456            > as alloy_sol_types::SolType>::Token<'a>;
3457            const SIGNATURE: &'static str = "getRoleMemberCount(bytes32)";
3458            const SELECTOR: [u8; 4] = [202u8, 21u8, 200u8, 115u8];
3459            #[inline]
3460            fn new<'a>(
3461                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3462            ) -> Self {
3463                tuple.into()
3464            }
3465            #[inline]
3466            fn tokenize(&self) -> Self::Token<'_> {
3467                (
3468                    <alloy::sol_types::sol_data::FixedBytes<
3469                        32,
3470                    > as alloy_sol_types::SolType>::tokenize(&self.role),
3471                )
3472            }
3473            #[inline]
3474            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3475                (
3476                    <alloy::sol_types::sol_data::Uint<
3477                        256,
3478                    > as alloy_sol_types::SolType>::tokenize(ret),
3479                )
3480            }
3481            #[inline]
3482            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3483                <Self::ReturnTuple<
3484                    '_,
3485                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3486                    .map(|r| {
3487                        let r: getRoleMemberCountReturn = r.into();
3488                        r._0
3489                    })
3490            }
3491            #[inline]
3492            fn abi_decode_returns_validate(
3493                data: &[u8],
3494            ) -> alloy_sol_types::Result<Self::Return> {
3495                <Self::ReturnTuple<
3496                    '_,
3497                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3498                    .map(|r| {
3499                        let r: getRoleMemberCountReturn = r.into();
3500                        r._0
3501                    })
3502            }
3503        }
3504    };
3505    #[derive(serde::Serialize, serde::Deserialize)]
3506    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3507    /**Function with signature `grantRole(bytes32,address)` and selector `0x2f2ff15d`.
3508```solidity
3509function grantRole(bytes32 role, address account) external;
3510```*/
3511    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3512    #[derive(Clone)]
3513    pub struct grantRoleCall {
3514        #[allow(missing_docs)]
3515        pub role: alloy::sol_types::private::FixedBytes<32>,
3516        #[allow(missing_docs)]
3517        pub account: alloy::sol_types::private::Address,
3518    }
3519    ///Container type for the return parameters of the [`grantRole(bytes32,address)`](grantRoleCall) function.
3520    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3521    #[derive(Clone)]
3522    pub struct grantRoleReturn {}
3523    #[allow(
3524        non_camel_case_types,
3525        non_snake_case,
3526        clippy::pub_underscore_fields,
3527        clippy::style
3528    )]
3529    const _: () = {
3530        use alloy::sol_types as alloy_sol_types;
3531        {
3532            #[doc(hidden)]
3533            type UnderlyingSolTuple<'a> = (
3534                alloy::sol_types::sol_data::FixedBytes<32>,
3535                alloy::sol_types::sol_data::Address,
3536            );
3537            #[doc(hidden)]
3538            type UnderlyingRustTuple<'a> = (
3539                alloy::sol_types::private::FixedBytes<32>,
3540                alloy::sol_types::private::Address,
3541            );
3542            #[cfg(test)]
3543            #[allow(dead_code, unreachable_patterns)]
3544            fn _type_assertion(
3545                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3546            ) {
3547                match _t {
3548                    alloy_sol_types::private::AssertTypeEq::<
3549                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3550                    >(_) => {}
3551                }
3552            }
3553            #[automatically_derived]
3554            #[doc(hidden)]
3555            impl ::core::convert::From<grantRoleCall> for UnderlyingRustTuple<'_> {
3556                fn from(value: grantRoleCall) -> Self {
3557                    (value.role, value.account)
3558                }
3559            }
3560            #[automatically_derived]
3561            #[doc(hidden)]
3562            impl ::core::convert::From<UnderlyingRustTuple<'_>> for grantRoleCall {
3563                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3564                    Self {
3565                        role: tuple.0,
3566                        account: tuple.1,
3567                    }
3568                }
3569            }
3570        }
3571        {
3572            #[doc(hidden)]
3573            type UnderlyingSolTuple<'a> = ();
3574            #[doc(hidden)]
3575            type UnderlyingRustTuple<'a> = ();
3576            #[cfg(test)]
3577            #[allow(dead_code, unreachable_patterns)]
3578            fn _type_assertion(
3579                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3580            ) {
3581                match _t {
3582                    alloy_sol_types::private::AssertTypeEq::<
3583                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3584                    >(_) => {}
3585                }
3586            }
3587            #[automatically_derived]
3588            #[doc(hidden)]
3589            impl ::core::convert::From<grantRoleReturn> for UnderlyingRustTuple<'_> {
3590                fn from(value: grantRoleReturn) -> Self {
3591                    ()
3592                }
3593            }
3594            #[automatically_derived]
3595            #[doc(hidden)]
3596            impl ::core::convert::From<UnderlyingRustTuple<'_>> for grantRoleReturn {
3597                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3598                    Self {}
3599                }
3600            }
3601        }
3602        impl grantRoleReturn {
3603            fn _tokenize(
3604                &self,
3605            ) -> <grantRoleCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
3606                ()
3607            }
3608        }
3609        #[automatically_derived]
3610        impl alloy_sol_types::SolCall for grantRoleCall {
3611            type Parameters<'a> = (
3612                alloy::sol_types::sol_data::FixedBytes<32>,
3613                alloy::sol_types::sol_data::Address,
3614            );
3615            type Token<'a> = <Self::Parameters<
3616                'a,
3617            > as alloy_sol_types::SolType>::Token<'a>;
3618            type Return = grantRoleReturn;
3619            type ReturnTuple<'a> = ();
3620            type ReturnToken<'a> = <Self::ReturnTuple<
3621                'a,
3622            > as alloy_sol_types::SolType>::Token<'a>;
3623            const SIGNATURE: &'static str = "grantRole(bytes32,address)";
3624            const SELECTOR: [u8; 4] = [47u8, 47u8, 241u8, 93u8];
3625            #[inline]
3626            fn new<'a>(
3627                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3628            ) -> Self {
3629                tuple.into()
3630            }
3631            #[inline]
3632            fn tokenize(&self) -> Self::Token<'_> {
3633                (
3634                    <alloy::sol_types::sol_data::FixedBytes<
3635                        32,
3636                    > as alloy_sol_types::SolType>::tokenize(&self.role),
3637                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3638                        &self.account,
3639                    ),
3640                )
3641            }
3642            #[inline]
3643            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3644                grantRoleReturn::_tokenize(ret)
3645            }
3646            #[inline]
3647            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3648                <Self::ReturnTuple<
3649                    '_,
3650                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3651                    .map(Into::into)
3652            }
3653            #[inline]
3654            fn abi_decode_returns_validate(
3655                data: &[u8],
3656            ) -> alloy_sol_types::Result<Self::Return> {
3657                <Self::ReturnTuple<
3658                    '_,
3659                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3660                    .map(Into::into)
3661            }
3662        }
3663    };
3664    #[derive(serde::Serialize, serde::Deserialize)]
3665    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3666    /**Function with signature `hasRole(bytes32,address)` and selector `0x91d14854`.
3667```solidity
3668function hasRole(bytes32 role, address account) external view returns (bool);
3669```*/
3670    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3671    #[derive(Clone)]
3672    pub struct hasRoleCall {
3673        #[allow(missing_docs)]
3674        pub role: alloy::sol_types::private::FixedBytes<32>,
3675        #[allow(missing_docs)]
3676        pub account: alloy::sol_types::private::Address,
3677    }
3678    #[derive(serde::Serialize, serde::Deserialize)]
3679    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3680    ///Container type for the return parameters of the [`hasRole(bytes32,address)`](hasRoleCall) function.
3681    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3682    #[derive(Clone)]
3683    pub struct hasRoleReturn {
3684        #[allow(missing_docs)]
3685        pub _0: bool,
3686    }
3687    #[allow(
3688        non_camel_case_types,
3689        non_snake_case,
3690        clippy::pub_underscore_fields,
3691        clippy::style
3692    )]
3693    const _: () = {
3694        use alloy::sol_types as alloy_sol_types;
3695        {
3696            #[doc(hidden)]
3697            type UnderlyingSolTuple<'a> = (
3698                alloy::sol_types::sol_data::FixedBytes<32>,
3699                alloy::sol_types::sol_data::Address,
3700            );
3701            #[doc(hidden)]
3702            type UnderlyingRustTuple<'a> = (
3703                alloy::sol_types::private::FixedBytes<32>,
3704                alloy::sol_types::private::Address,
3705            );
3706            #[cfg(test)]
3707            #[allow(dead_code, unreachable_patterns)]
3708            fn _type_assertion(
3709                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3710            ) {
3711                match _t {
3712                    alloy_sol_types::private::AssertTypeEq::<
3713                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3714                    >(_) => {}
3715                }
3716            }
3717            #[automatically_derived]
3718            #[doc(hidden)]
3719            impl ::core::convert::From<hasRoleCall> for UnderlyingRustTuple<'_> {
3720                fn from(value: hasRoleCall) -> Self {
3721                    (value.role, value.account)
3722                }
3723            }
3724            #[automatically_derived]
3725            #[doc(hidden)]
3726            impl ::core::convert::From<UnderlyingRustTuple<'_>> for hasRoleCall {
3727                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3728                    Self {
3729                        role: tuple.0,
3730                        account: tuple.1,
3731                    }
3732                }
3733            }
3734        }
3735        {
3736            #[doc(hidden)]
3737            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3738            #[doc(hidden)]
3739            type UnderlyingRustTuple<'a> = (bool,);
3740            #[cfg(test)]
3741            #[allow(dead_code, unreachable_patterns)]
3742            fn _type_assertion(
3743                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3744            ) {
3745                match _t {
3746                    alloy_sol_types::private::AssertTypeEq::<
3747                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3748                    >(_) => {}
3749                }
3750            }
3751            #[automatically_derived]
3752            #[doc(hidden)]
3753            impl ::core::convert::From<hasRoleReturn> for UnderlyingRustTuple<'_> {
3754                fn from(value: hasRoleReturn) -> Self {
3755                    (value._0,)
3756                }
3757            }
3758            #[automatically_derived]
3759            #[doc(hidden)]
3760            impl ::core::convert::From<UnderlyingRustTuple<'_>> for hasRoleReturn {
3761                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3762                    Self { _0: tuple.0 }
3763                }
3764            }
3765        }
3766        #[automatically_derived]
3767        impl alloy_sol_types::SolCall for hasRoleCall {
3768            type Parameters<'a> = (
3769                alloy::sol_types::sol_data::FixedBytes<32>,
3770                alloy::sol_types::sol_data::Address,
3771            );
3772            type Token<'a> = <Self::Parameters<
3773                'a,
3774            > as alloy_sol_types::SolType>::Token<'a>;
3775            type Return = bool;
3776            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3777            type ReturnToken<'a> = <Self::ReturnTuple<
3778                'a,
3779            > as alloy_sol_types::SolType>::Token<'a>;
3780            const SIGNATURE: &'static str = "hasRole(bytes32,address)";
3781            const SELECTOR: [u8; 4] = [145u8, 209u8, 72u8, 84u8];
3782            #[inline]
3783            fn new<'a>(
3784                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3785            ) -> Self {
3786                tuple.into()
3787            }
3788            #[inline]
3789            fn tokenize(&self) -> Self::Token<'_> {
3790                (
3791                    <alloy::sol_types::sol_data::FixedBytes<
3792                        32,
3793                    > as alloy_sol_types::SolType>::tokenize(&self.role),
3794                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3795                        &self.account,
3796                    ),
3797                )
3798            }
3799            #[inline]
3800            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3801                (
3802                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
3803                        ret,
3804                    ),
3805                )
3806            }
3807            #[inline]
3808            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3809                <Self::ReturnTuple<
3810                    '_,
3811                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3812                    .map(|r| {
3813                        let r: hasRoleReturn = r.into();
3814                        r._0
3815                    })
3816            }
3817            #[inline]
3818            fn abi_decode_returns_validate(
3819                data: &[u8],
3820            ) -> alloy_sol_types::Result<Self::Return> {
3821                <Self::ReturnTuple<
3822                    '_,
3823                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3824                    .map(|r| {
3825                        let r: hasRoleReturn = r.into();
3826                        r._0
3827                    })
3828            }
3829        }
3830    };
3831    #[derive(serde::Serialize, serde::Deserialize)]
3832    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3833    /**Function with signature `isApprovedForAll(address,address)` and selector `0xe985e9c5`.
3834```solidity
3835function isApprovedForAll(address owner, address operator) external view returns (bool);
3836```*/
3837    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3838    #[derive(Clone)]
3839    pub struct isApprovedForAllCall {
3840        #[allow(missing_docs)]
3841        pub owner: alloy::sol_types::private::Address,
3842        #[allow(missing_docs)]
3843        pub operator: alloy::sol_types::private::Address,
3844    }
3845    #[derive(serde::Serialize, serde::Deserialize)]
3846    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3847    ///Container type for the return parameters of the [`isApprovedForAll(address,address)`](isApprovedForAllCall) function.
3848    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3849    #[derive(Clone)]
3850    pub struct isApprovedForAllReturn {
3851        #[allow(missing_docs)]
3852        pub _0: bool,
3853    }
3854    #[allow(
3855        non_camel_case_types,
3856        non_snake_case,
3857        clippy::pub_underscore_fields,
3858        clippy::style
3859    )]
3860    const _: () = {
3861        use alloy::sol_types as alloy_sol_types;
3862        {
3863            #[doc(hidden)]
3864            type UnderlyingSolTuple<'a> = (
3865                alloy::sol_types::sol_data::Address,
3866                alloy::sol_types::sol_data::Address,
3867            );
3868            #[doc(hidden)]
3869            type UnderlyingRustTuple<'a> = (
3870                alloy::sol_types::private::Address,
3871                alloy::sol_types::private::Address,
3872            );
3873            #[cfg(test)]
3874            #[allow(dead_code, unreachable_patterns)]
3875            fn _type_assertion(
3876                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3877            ) {
3878                match _t {
3879                    alloy_sol_types::private::AssertTypeEq::<
3880                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3881                    >(_) => {}
3882                }
3883            }
3884            #[automatically_derived]
3885            #[doc(hidden)]
3886            impl ::core::convert::From<isApprovedForAllCall>
3887            for UnderlyingRustTuple<'_> {
3888                fn from(value: isApprovedForAllCall) -> Self {
3889                    (value.owner, value.operator)
3890                }
3891            }
3892            #[automatically_derived]
3893            #[doc(hidden)]
3894            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3895            for isApprovedForAllCall {
3896                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3897                    Self {
3898                        owner: tuple.0,
3899                        operator: tuple.1,
3900                    }
3901                }
3902            }
3903        }
3904        {
3905            #[doc(hidden)]
3906            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3907            #[doc(hidden)]
3908            type UnderlyingRustTuple<'a> = (bool,);
3909            #[cfg(test)]
3910            #[allow(dead_code, unreachable_patterns)]
3911            fn _type_assertion(
3912                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3913            ) {
3914                match _t {
3915                    alloy_sol_types::private::AssertTypeEq::<
3916                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3917                    >(_) => {}
3918                }
3919            }
3920            #[automatically_derived]
3921            #[doc(hidden)]
3922            impl ::core::convert::From<isApprovedForAllReturn>
3923            for UnderlyingRustTuple<'_> {
3924                fn from(value: isApprovedForAllReturn) -> Self {
3925                    (value._0,)
3926                }
3927            }
3928            #[automatically_derived]
3929            #[doc(hidden)]
3930            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3931            for isApprovedForAllReturn {
3932                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3933                    Self { _0: tuple.0 }
3934                }
3935            }
3936        }
3937        #[automatically_derived]
3938        impl alloy_sol_types::SolCall for isApprovedForAllCall {
3939            type Parameters<'a> = (
3940                alloy::sol_types::sol_data::Address,
3941                alloy::sol_types::sol_data::Address,
3942            );
3943            type Token<'a> = <Self::Parameters<
3944                'a,
3945            > as alloy_sol_types::SolType>::Token<'a>;
3946            type Return = bool;
3947            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3948            type ReturnToken<'a> = <Self::ReturnTuple<
3949                'a,
3950            > as alloy_sol_types::SolType>::Token<'a>;
3951            const SIGNATURE: &'static str = "isApprovedForAll(address,address)";
3952            const SELECTOR: [u8; 4] = [233u8, 133u8, 233u8, 197u8];
3953            #[inline]
3954            fn new<'a>(
3955                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3956            ) -> Self {
3957                tuple.into()
3958            }
3959            #[inline]
3960            fn tokenize(&self) -> Self::Token<'_> {
3961                (
3962                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3963                        &self.owner,
3964                    ),
3965                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3966                        &self.operator,
3967                    ),
3968                )
3969            }
3970            #[inline]
3971            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3972                (
3973                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
3974                        ret,
3975                    ),
3976                )
3977            }
3978            #[inline]
3979            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3980                <Self::ReturnTuple<
3981                    '_,
3982                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3983                    .map(|r| {
3984                        let r: isApprovedForAllReturn = r.into();
3985                        r._0
3986                    })
3987            }
3988            #[inline]
3989            fn abi_decode_returns_validate(
3990                data: &[u8],
3991            ) -> alloy_sol_types::Result<Self::Return> {
3992                <Self::ReturnTuple<
3993                    '_,
3994                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3995                    .map(|r| {
3996                        let r: isApprovedForAllReturn = r.into();
3997                        r._0
3998                    })
3999            }
4000        }
4001    };
4002    #[derive(serde::Serialize, serde::Deserialize)]
4003    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4004    /**Function with signature `mint(address,string,string,uint256,uint256)` and selector `0x29867dac`.
4005```solidity
4006function mint(address to, string memory boostType, string memory boostRank, uint256 boostNumerator, uint256 redeemDeadline) external;
4007```*/
4008    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4009    #[derive(Clone)]
4010    pub struct mintCall {
4011        #[allow(missing_docs)]
4012        pub to: alloy::sol_types::private::Address,
4013        #[allow(missing_docs)]
4014        pub boostType: alloy::sol_types::private::String,
4015        #[allow(missing_docs)]
4016        pub boostRank: alloy::sol_types::private::String,
4017        #[allow(missing_docs)]
4018        pub boostNumerator: alloy::sol_types::private::primitives::aliases::U256,
4019        #[allow(missing_docs)]
4020        pub redeemDeadline: alloy::sol_types::private::primitives::aliases::U256,
4021    }
4022    ///Container type for the return parameters of the [`mint(address,string,string,uint256,uint256)`](mintCall) function.
4023    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4024    #[derive(Clone)]
4025    pub struct mintReturn {}
4026    #[allow(
4027        non_camel_case_types,
4028        non_snake_case,
4029        clippy::pub_underscore_fields,
4030        clippy::style
4031    )]
4032    const _: () = {
4033        use alloy::sol_types as alloy_sol_types;
4034        {
4035            #[doc(hidden)]
4036            type UnderlyingSolTuple<'a> = (
4037                alloy::sol_types::sol_data::Address,
4038                alloy::sol_types::sol_data::String,
4039                alloy::sol_types::sol_data::String,
4040                alloy::sol_types::sol_data::Uint<256>,
4041                alloy::sol_types::sol_data::Uint<256>,
4042            );
4043            #[doc(hidden)]
4044            type UnderlyingRustTuple<'a> = (
4045                alloy::sol_types::private::Address,
4046                alloy::sol_types::private::String,
4047                alloy::sol_types::private::String,
4048                alloy::sol_types::private::primitives::aliases::U256,
4049                alloy::sol_types::private::primitives::aliases::U256,
4050            );
4051            #[cfg(test)]
4052            #[allow(dead_code, unreachable_patterns)]
4053            fn _type_assertion(
4054                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4055            ) {
4056                match _t {
4057                    alloy_sol_types::private::AssertTypeEq::<
4058                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4059                    >(_) => {}
4060                }
4061            }
4062            #[automatically_derived]
4063            #[doc(hidden)]
4064            impl ::core::convert::From<mintCall> for UnderlyingRustTuple<'_> {
4065                fn from(value: mintCall) -> Self {
4066                    (
4067                        value.to,
4068                        value.boostType,
4069                        value.boostRank,
4070                        value.boostNumerator,
4071                        value.redeemDeadline,
4072                    )
4073                }
4074            }
4075            #[automatically_derived]
4076            #[doc(hidden)]
4077            impl ::core::convert::From<UnderlyingRustTuple<'_>> for mintCall {
4078                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4079                    Self {
4080                        to: tuple.0,
4081                        boostType: tuple.1,
4082                        boostRank: tuple.2,
4083                        boostNumerator: tuple.3,
4084                        redeemDeadline: tuple.4,
4085                    }
4086                }
4087            }
4088        }
4089        {
4090            #[doc(hidden)]
4091            type UnderlyingSolTuple<'a> = ();
4092            #[doc(hidden)]
4093            type UnderlyingRustTuple<'a> = ();
4094            #[cfg(test)]
4095            #[allow(dead_code, unreachable_patterns)]
4096            fn _type_assertion(
4097                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4098            ) {
4099                match _t {
4100                    alloy_sol_types::private::AssertTypeEq::<
4101                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4102                    >(_) => {}
4103                }
4104            }
4105            #[automatically_derived]
4106            #[doc(hidden)]
4107            impl ::core::convert::From<mintReturn> for UnderlyingRustTuple<'_> {
4108                fn from(value: mintReturn) -> Self {
4109                    ()
4110                }
4111            }
4112            #[automatically_derived]
4113            #[doc(hidden)]
4114            impl ::core::convert::From<UnderlyingRustTuple<'_>> for mintReturn {
4115                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4116                    Self {}
4117                }
4118            }
4119        }
4120        impl mintReturn {
4121            fn _tokenize(
4122                &self,
4123            ) -> <mintCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
4124                ()
4125            }
4126        }
4127        #[automatically_derived]
4128        impl alloy_sol_types::SolCall for mintCall {
4129            type Parameters<'a> = (
4130                alloy::sol_types::sol_data::Address,
4131                alloy::sol_types::sol_data::String,
4132                alloy::sol_types::sol_data::String,
4133                alloy::sol_types::sol_data::Uint<256>,
4134                alloy::sol_types::sol_data::Uint<256>,
4135            );
4136            type Token<'a> = <Self::Parameters<
4137                'a,
4138            > as alloy_sol_types::SolType>::Token<'a>;
4139            type Return = mintReturn;
4140            type ReturnTuple<'a> = ();
4141            type ReturnToken<'a> = <Self::ReturnTuple<
4142                'a,
4143            > as alloy_sol_types::SolType>::Token<'a>;
4144            const SIGNATURE: &'static str = "mint(address,string,string,uint256,uint256)";
4145            const SELECTOR: [u8; 4] = [41u8, 134u8, 125u8, 172u8];
4146            #[inline]
4147            fn new<'a>(
4148                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4149            ) -> Self {
4150                tuple.into()
4151            }
4152            #[inline]
4153            fn tokenize(&self) -> Self::Token<'_> {
4154                (
4155                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4156                        &self.to,
4157                    ),
4158                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
4159                        &self.boostType,
4160                    ),
4161                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
4162                        &self.boostRank,
4163                    ),
4164                    <alloy::sol_types::sol_data::Uint<
4165                        256,
4166                    > as alloy_sol_types::SolType>::tokenize(&self.boostNumerator),
4167                    <alloy::sol_types::sol_data::Uint<
4168                        256,
4169                    > as alloy_sol_types::SolType>::tokenize(&self.redeemDeadline),
4170                )
4171            }
4172            #[inline]
4173            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4174                mintReturn::_tokenize(ret)
4175            }
4176            #[inline]
4177            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4178                <Self::ReturnTuple<
4179                    '_,
4180                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4181                    .map(Into::into)
4182            }
4183            #[inline]
4184            fn abi_decode_returns_validate(
4185                data: &[u8],
4186            ) -> alloy_sol_types::Result<Self::Return> {
4187                <Self::ReturnTuple<
4188                    '_,
4189                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4190                    .map(Into::into)
4191            }
4192        }
4193    };
4194    #[derive(serde::Serialize, serde::Deserialize)]
4195    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4196    /**Function with signature `name()` and selector `0x06fdde03`.
4197```solidity
4198function name() external view returns (string memory);
4199```*/
4200    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4201    #[derive(Clone)]
4202    pub struct nameCall;
4203    #[derive(serde::Serialize, serde::Deserialize)]
4204    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4205    ///Container type for the return parameters of the [`name()`](nameCall) function.
4206    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4207    #[derive(Clone)]
4208    pub struct nameReturn {
4209        #[allow(missing_docs)]
4210        pub _0: alloy::sol_types::private::String,
4211    }
4212    #[allow(
4213        non_camel_case_types,
4214        non_snake_case,
4215        clippy::pub_underscore_fields,
4216        clippy::style
4217    )]
4218    const _: () = {
4219        use alloy::sol_types as alloy_sol_types;
4220        {
4221            #[doc(hidden)]
4222            type UnderlyingSolTuple<'a> = ();
4223            #[doc(hidden)]
4224            type UnderlyingRustTuple<'a> = ();
4225            #[cfg(test)]
4226            #[allow(dead_code, unreachable_patterns)]
4227            fn _type_assertion(
4228                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4229            ) {
4230                match _t {
4231                    alloy_sol_types::private::AssertTypeEq::<
4232                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4233                    >(_) => {}
4234                }
4235            }
4236            #[automatically_derived]
4237            #[doc(hidden)]
4238            impl ::core::convert::From<nameCall> for UnderlyingRustTuple<'_> {
4239                fn from(value: nameCall) -> Self {
4240                    ()
4241                }
4242            }
4243            #[automatically_derived]
4244            #[doc(hidden)]
4245            impl ::core::convert::From<UnderlyingRustTuple<'_>> for nameCall {
4246                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4247                    Self
4248                }
4249            }
4250        }
4251        {
4252            #[doc(hidden)]
4253            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
4254            #[doc(hidden)]
4255            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
4256            #[cfg(test)]
4257            #[allow(dead_code, unreachable_patterns)]
4258            fn _type_assertion(
4259                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4260            ) {
4261                match _t {
4262                    alloy_sol_types::private::AssertTypeEq::<
4263                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4264                    >(_) => {}
4265                }
4266            }
4267            #[automatically_derived]
4268            #[doc(hidden)]
4269            impl ::core::convert::From<nameReturn> for UnderlyingRustTuple<'_> {
4270                fn from(value: nameReturn) -> Self {
4271                    (value._0,)
4272                }
4273            }
4274            #[automatically_derived]
4275            #[doc(hidden)]
4276            impl ::core::convert::From<UnderlyingRustTuple<'_>> for nameReturn {
4277                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4278                    Self { _0: tuple.0 }
4279                }
4280            }
4281        }
4282        #[automatically_derived]
4283        impl alloy_sol_types::SolCall for nameCall {
4284            type Parameters<'a> = ();
4285            type Token<'a> = <Self::Parameters<
4286                'a,
4287            > as alloy_sol_types::SolType>::Token<'a>;
4288            type Return = alloy::sol_types::private::String;
4289            type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,);
4290            type ReturnToken<'a> = <Self::ReturnTuple<
4291                'a,
4292            > as alloy_sol_types::SolType>::Token<'a>;
4293            const SIGNATURE: &'static str = "name()";
4294            const SELECTOR: [u8; 4] = [6u8, 253u8, 222u8, 3u8];
4295            #[inline]
4296            fn new<'a>(
4297                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4298            ) -> Self {
4299                tuple.into()
4300            }
4301            #[inline]
4302            fn tokenize(&self) -> Self::Token<'_> {
4303                ()
4304            }
4305            #[inline]
4306            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4307                (
4308                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
4309                        ret,
4310                    ),
4311                )
4312            }
4313            #[inline]
4314            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4315                <Self::ReturnTuple<
4316                    '_,
4317                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4318                    .map(|r| {
4319                        let r: nameReturn = r.into();
4320                        r._0
4321                    })
4322            }
4323            #[inline]
4324            fn abi_decode_returns_validate(
4325                data: &[u8],
4326            ) -> alloy_sol_types::Result<Self::Return> {
4327                <Self::ReturnTuple<
4328                    '_,
4329                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4330                    .map(|r| {
4331                        let r: nameReturn = r.into();
4332                        r._0
4333                    })
4334            }
4335        }
4336    };
4337    #[derive(serde::Serialize, serde::Deserialize)]
4338    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4339    /**Function with signature `ownerOf(uint256)` and selector `0x6352211e`.
4340```solidity
4341function ownerOf(uint256 tokenId) external view returns (address);
4342```*/
4343    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4344    #[derive(Clone)]
4345    pub struct ownerOfCall {
4346        #[allow(missing_docs)]
4347        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
4348    }
4349    #[derive(serde::Serialize, serde::Deserialize)]
4350    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4351    ///Container type for the return parameters of the [`ownerOf(uint256)`](ownerOfCall) function.
4352    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4353    #[derive(Clone)]
4354    pub struct ownerOfReturn {
4355        #[allow(missing_docs)]
4356        pub _0: alloy::sol_types::private::Address,
4357    }
4358    #[allow(
4359        non_camel_case_types,
4360        non_snake_case,
4361        clippy::pub_underscore_fields,
4362        clippy::style
4363    )]
4364    const _: () = {
4365        use alloy::sol_types as alloy_sol_types;
4366        {
4367            #[doc(hidden)]
4368            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
4369            #[doc(hidden)]
4370            type UnderlyingRustTuple<'a> = (
4371                alloy::sol_types::private::primitives::aliases::U256,
4372            );
4373            #[cfg(test)]
4374            #[allow(dead_code, unreachable_patterns)]
4375            fn _type_assertion(
4376                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4377            ) {
4378                match _t {
4379                    alloy_sol_types::private::AssertTypeEq::<
4380                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4381                    >(_) => {}
4382                }
4383            }
4384            #[automatically_derived]
4385            #[doc(hidden)]
4386            impl ::core::convert::From<ownerOfCall> for UnderlyingRustTuple<'_> {
4387                fn from(value: ownerOfCall) -> Self {
4388                    (value.tokenId,)
4389                }
4390            }
4391            #[automatically_derived]
4392            #[doc(hidden)]
4393            impl ::core::convert::From<UnderlyingRustTuple<'_>> for ownerOfCall {
4394                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4395                    Self { tokenId: tuple.0 }
4396                }
4397            }
4398        }
4399        {
4400            #[doc(hidden)]
4401            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
4402            #[doc(hidden)]
4403            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
4404            #[cfg(test)]
4405            #[allow(dead_code, unreachable_patterns)]
4406            fn _type_assertion(
4407                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4408            ) {
4409                match _t {
4410                    alloy_sol_types::private::AssertTypeEq::<
4411                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4412                    >(_) => {}
4413                }
4414            }
4415            #[automatically_derived]
4416            #[doc(hidden)]
4417            impl ::core::convert::From<ownerOfReturn> for UnderlyingRustTuple<'_> {
4418                fn from(value: ownerOfReturn) -> Self {
4419                    (value._0,)
4420                }
4421            }
4422            #[automatically_derived]
4423            #[doc(hidden)]
4424            impl ::core::convert::From<UnderlyingRustTuple<'_>> for ownerOfReturn {
4425                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4426                    Self { _0: tuple.0 }
4427                }
4428            }
4429        }
4430        #[automatically_derived]
4431        impl alloy_sol_types::SolCall for ownerOfCall {
4432            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
4433            type Token<'a> = <Self::Parameters<
4434                'a,
4435            > as alloy_sol_types::SolType>::Token<'a>;
4436            type Return = alloy::sol_types::private::Address;
4437            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
4438            type ReturnToken<'a> = <Self::ReturnTuple<
4439                'a,
4440            > as alloy_sol_types::SolType>::Token<'a>;
4441            const SIGNATURE: &'static str = "ownerOf(uint256)";
4442            const SELECTOR: [u8; 4] = [99u8, 82u8, 33u8, 30u8];
4443            #[inline]
4444            fn new<'a>(
4445                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4446            ) -> Self {
4447                tuple.into()
4448            }
4449            #[inline]
4450            fn tokenize(&self) -> Self::Token<'_> {
4451                (
4452                    <alloy::sol_types::sol_data::Uint<
4453                        256,
4454                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
4455                )
4456            }
4457            #[inline]
4458            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4459                (
4460                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4461                        ret,
4462                    ),
4463                )
4464            }
4465            #[inline]
4466            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4467                <Self::ReturnTuple<
4468                    '_,
4469                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4470                    .map(|r| {
4471                        let r: ownerOfReturn = r.into();
4472                        r._0
4473                    })
4474            }
4475            #[inline]
4476            fn abi_decode_returns_validate(
4477                data: &[u8],
4478            ) -> alloy_sol_types::Result<Self::Return> {
4479                <Self::ReturnTuple<
4480                    '_,
4481                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4482                    .map(|r| {
4483                        let r: ownerOfReturn = r.into();
4484                        r._0
4485                    })
4486            }
4487        }
4488    };
4489    #[derive(serde::Serialize, serde::Deserialize)]
4490    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4491    /**Function with signature `reclaimErc20Tokens(address)` and selector `0x6067bc15`.
4492```solidity
4493function reclaimErc20Tokens(address tokenAddress) external;
4494```*/
4495    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4496    #[derive(Clone)]
4497    pub struct reclaimErc20TokensCall {
4498        #[allow(missing_docs)]
4499        pub tokenAddress: alloy::sol_types::private::Address,
4500    }
4501    ///Container type for the return parameters of the [`reclaimErc20Tokens(address)`](reclaimErc20TokensCall) function.
4502    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4503    #[derive(Clone)]
4504    pub struct reclaimErc20TokensReturn {}
4505    #[allow(
4506        non_camel_case_types,
4507        non_snake_case,
4508        clippy::pub_underscore_fields,
4509        clippy::style
4510    )]
4511    const _: () = {
4512        use alloy::sol_types as alloy_sol_types;
4513        {
4514            #[doc(hidden)]
4515            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
4516            #[doc(hidden)]
4517            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
4518            #[cfg(test)]
4519            #[allow(dead_code, unreachable_patterns)]
4520            fn _type_assertion(
4521                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4522            ) {
4523                match _t {
4524                    alloy_sol_types::private::AssertTypeEq::<
4525                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4526                    >(_) => {}
4527                }
4528            }
4529            #[automatically_derived]
4530            #[doc(hidden)]
4531            impl ::core::convert::From<reclaimErc20TokensCall>
4532            for UnderlyingRustTuple<'_> {
4533                fn from(value: reclaimErc20TokensCall) -> Self {
4534                    (value.tokenAddress,)
4535                }
4536            }
4537            #[automatically_derived]
4538            #[doc(hidden)]
4539            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4540            for reclaimErc20TokensCall {
4541                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4542                    Self { tokenAddress: tuple.0 }
4543                }
4544            }
4545        }
4546        {
4547            #[doc(hidden)]
4548            type UnderlyingSolTuple<'a> = ();
4549            #[doc(hidden)]
4550            type UnderlyingRustTuple<'a> = ();
4551            #[cfg(test)]
4552            #[allow(dead_code, unreachable_patterns)]
4553            fn _type_assertion(
4554                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4555            ) {
4556                match _t {
4557                    alloy_sol_types::private::AssertTypeEq::<
4558                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4559                    >(_) => {}
4560                }
4561            }
4562            #[automatically_derived]
4563            #[doc(hidden)]
4564            impl ::core::convert::From<reclaimErc20TokensReturn>
4565            for UnderlyingRustTuple<'_> {
4566                fn from(value: reclaimErc20TokensReturn) -> Self {
4567                    ()
4568                }
4569            }
4570            #[automatically_derived]
4571            #[doc(hidden)]
4572            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4573            for reclaimErc20TokensReturn {
4574                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4575                    Self {}
4576                }
4577            }
4578        }
4579        impl reclaimErc20TokensReturn {
4580            fn _tokenize(
4581                &self,
4582            ) -> <reclaimErc20TokensCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
4583                ()
4584            }
4585        }
4586        #[automatically_derived]
4587        impl alloy_sol_types::SolCall for reclaimErc20TokensCall {
4588            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
4589            type Token<'a> = <Self::Parameters<
4590                'a,
4591            > as alloy_sol_types::SolType>::Token<'a>;
4592            type Return = reclaimErc20TokensReturn;
4593            type ReturnTuple<'a> = ();
4594            type ReturnToken<'a> = <Self::ReturnTuple<
4595                'a,
4596            > as alloy_sol_types::SolType>::Token<'a>;
4597            const SIGNATURE: &'static str = "reclaimErc20Tokens(address)";
4598            const SELECTOR: [u8; 4] = [96u8, 103u8, 188u8, 21u8];
4599            #[inline]
4600            fn new<'a>(
4601                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4602            ) -> Self {
4603                tuple.into()
4604            }
4605            #[inline]
4606            fn tokenize(&self) -> Self::Token<'_> {
4607                (
4608                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4609                        &self.tokenAddress,
4610                    ),
4611                )
4612            }
4613            #[inline]
4614            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4615                reclaimErc20TokensReturn::_tokenize(ret)
4616            }
4617            #[inline]
4618            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4619                <Self::ReturnTuple<
4620                    '_,
4621                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4622                    .map(Into::into)
4623            }
4624            #[inline]
4625            fn abi_decode_returns_validate(
4626                data: &[u8],
4627            ) -> alloy_sol_types::Result<Self::Return> {
4628                <Self::ReturnTuple<
4629                    '_,
4630                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4631                    .map(Into::into)
4632            }
4633        }
4634    };
4635    #[derive(serde::Serialize, serde::Deserialize)]
4636    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4637    /**Function with signature `reclaimErc721Tokens(address,uint256)` and selector `0x48c64e41`.
4638```solidity
4639function reclaimErc721Tokens(address tokenAddress, uint256 tokenId) external;
4640```*/
4641    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4642    #[derive(Clone)]
4643    pub struct reclaimErc721TokensCall {
4644        #[allow(missing_docs)]
4645        pub tokenAddress: alloy::sol_types::private::Address,
4646        #[allow(missing_docs)]
4647        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
4648    }
4649    ///Container type for the return parameters of the [`reclaimErc721Tokens(address,uint256)`](reclaimErc721TokensCall) function.
4650    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4651    #[derive(Clone)]
4652    pub struct reclaimErc721TokensReturn {}
4653    #[allow(
4654        non_camel_case_types,
4655        non_snake_case,
4656        clippy::pub_underscore_fields,
4657        clippy::style
4658    )]
4659    const _: () = {
4660        use alloy::sol_types as alloy_sol_types;
4661        {
4662            #[doc(hidden)]
4663            type UnderlyingSolTuple<'a> = (
4664                alloy::sol_types::sol_data::Address,
4665                alloy::sol_types::sol_data::Uint<256>,
4666            );
4667            #[doc(hidden)]
4668            type UnderlyingRustTuple<'a> = (
4669                alloy::sol_types::private::Address,
4670                alloy::sol_types::private::primitives::aliases::U256,
4671            );
4672            #[cfg(test)]
4673            #[allow(dead_code, unreachable_patterns)]
4674            fn _type_assertion(
4675                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4676            ) {
4677                match _t {
4678                    alloy_sol_types::private::AssertTypeEq::<
4679                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4680                    >(_) => {}
4681                }
4682            }
4683            #[automatically_derived]
4684            #[doc(hidden)]
4685            impl ::core::convert::From<reclaimErc721TokensCall>
4686            for UnderlyingRustTuple<'_> {
4687                fn from(value: reclaimErc721TokensCall) -> Self {
4688                    (value.tokenAddress, value.tokenId)
4689                }
4690            }
4691            #[automatically_derived]
4692            #[doc(hidden)]
4693            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4694            for reclaimErc721TokensCall {
4695                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4696                    Self {
4697                        tokenAddress: tuple.0,
4698                        tokenId: tuple.1,
4699                    }
4700                }
4701            }
4702        }
4703        {
4704            #[doc(hidden)]
4705            type UnderlyingSolTuple<'a> = ();
4706            #[doc(hidden)]
4707            type UnderlyingRustTuple<'a> = ();
4708            #[cfg(test)]
4709            #[allow(dead_code, unreachable_patterns)]
4710            fn _type_assertion(
4711                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4712            ) {
4713                match _t {
4714                    alloy_sol_types::private::AssertTypeEq::<
4715                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4716                    >(_) => {}
4717                }
4718            }
4719            #[automatically_derived]
4720            #[doc(hidden)]
4721            impl ::core::convert::From<reclaimErc721TokensReturn>
4722            for UnderlyingRustTuple<'_> {
4723                fn from(value: reclaimErc721TokensReturn) -> Self {
4724                    ()
4725                }
4726            }
4727            #[automatically_derived]
4728            #[doc(hidden)]
4729            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4730            for reclaimErc721TokensReturn {
4731                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4732                    Self {}
4733                }
4734            }
4735        }
4736        impl reclaimErc721TokensReturn {
4737            fn _tokenize(
4738                &self,
4739            ) -> <reclaimErc721TokensCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
4740                ()
4741            }
4742        }
4743        #[automatically_derived]
4744        impl alloy_sol_types::SolCall for reclaimErc721TokensCall {
4745            type Parameters<'a> = (
4746                alloy::sol_types::sol_data::Address,
4747                alloy::sol_types::sol_data::Uint<256>,
4748            );
4749            type Token<'a> = <Self::Parameters<
4750                'a,
4751            > as alloy_sol_types::SolType>::Token<'a>;
4752            type Return = reclaimErc721TokensReturn;
4753            type ReturnTuple<'a> = ();
4754            type ReturnToken<'a> = <Self::ReturnTuple<
4755                'a,
4756            > as alloy_sol_types::SolType>::Token<'a>;
4757            const SIGNATURE: &'static str = "reclaimErc721Tokens(address,uint256)";
4758            const SELECTOR: [u8; 4] = [72u8, 198u8, 78u8, 65u8];
4759            #[inline]
4760            fn new<'a>(
4761                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4762            ) -> Self {
4763                tuple.into()
4764            }
4765            #[inline]
4766            fn tokenize(&self) -> Self::Token<'_> {
4767                (
4768                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4769                        &self.tokenAddress,
4770                    ),
4771                    <alloy::sol_types::sol_data::Uint<
4772                        256,
4773                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
4774                )
4775            }
4776            #[inline]
4777            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4778                reclaimErc721TokensReturn::_tokenize(ret)
4779            }
4780            #[inline]
4781            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4782                <Self::ReturnTuple<
4783                    '_,
4784                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4785                    .map(Into::into)
4786            }
4787            #[inline]
4788            fn abi_decode_returns_validate(
4789                data: &[u8],
4790            ) -> alloy_sol_types::Result<Self::Return> {
4791                <Self::ReturnTuple<
4792                    '_,
4793                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4794                    .map(Into::into)
4795            }
4796        }
4797    };
4798    #[derive(serde::Serialize, serde::Deserialize)]
4799    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4800    /**Function with signature `renounceRole(bytes32,address)` and selector `0x36568abe`.
4801```solidity
4802function renounceRole(bytes32 role, address account) external;
4803```*/
4804    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4805    #[derive(Clone)]
4806    pub struct renounceRoleCall {
4807        #[allow(missing_docs)]
4808        pub role: alloy::sol_types::private::FixedBytes<32>,
4809        #[allow(missing_docs)]
4810        pub account: alloy::sol_types::private::Address,
4811    }
4812    ///Container type for the return parameters of the [`renounceRole(bytes32,address)`](renounceRoleCall) function.
4813    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4814    #[derive(Clone)]
4815    pub struct renounceRoleReturn {}
4816    #[allow(
4817        non_camel_case_types,
4818        non_snake_case,
4819        clippy::pub_underscore_fields,
4820        clippy::style
4821    )]
4822    const _: () = {
4823        use alloy::sol_types as alloy_sol_types;
4824        {
4825            #[doc(hidden)]
4826            type UnderlyingSolTuple<'a> = (
4827                alloy::sol_types::sol_data::FixedBytes<32>,
4828                alloy::sol_types::sol_data::Address,
4829            );
4830            #[doc(hidden)]
4831            type UnderlyingRustTuple<'a> = (
4832                alloy::sol_types::private::FixedBytes<32>,
4833                alloy::sol_types::private::Address,
4834            );
4835            #[cfg(test)]
4836            #[allow(dead_code, unreachable_patterns)]
4837            fn _type_assertion(
4838                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4839            ) {
4840                match _t {
4841                    alloy_sol_types::private::AssertTypeEq::<
4842                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4843                    >(_) => {}
4844                }
4845            }
4846            #[automatically_derived]
4847            #[doc(hidden)]
4848            impl ::core::convert::From<renounceRoleCall> for UnderlyingRustTuple<'_> {
4849                fn from(value: renounceRoleCall) -> Self {
4850                    (value.role, value.account)
4851                }
4852            }
4853            #[automatically_derived]
4854            #[doc(hidden)]
4855            impl ::core::convert::From<UnderlyingRustTuple<'_>> for renounceRoleCall {
4856                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4857                    Self {
4858                        role: tuple.0,
4859                        account: tuple.1,
4860                    }
4861                }
4862            }
4863        }
4864        {
4865            #[doc(hidden)]
4866            type UnderlyingSolTuple<'a> = ();
4867            #[doc(hidden)]
4868            type UnderlyingRustTuple<'a> = ();
4869            #[cfg(test)]
4870            #[allow(dead_code, unreachable_patterns)]
4871            fn _type_assertion(
4872                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4873            ) {
4874                match _t {
4875                    alloy_sol_types::private::AssertTypeEq::<
4876                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4877                    >(_) => {}
4878                }
4879            }
4880            #[automatically_derived]
4881            #[doc(hidden)]
4882            impl ::core::convert::From<renounceRoleReturn> for UnderlyingRustTuple<'_> {
4883                fn from(value: renounceRoleReturn) -> Self {
4884                    ()
4885                }
4886            }
4887            #[automatically_derived]
4888            #[doc(hidden)]
4889            impl ::core::convert::From<UnderlyingRustTuple<'_>> for renounceRoleReturn {
4890                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4891                    Self {}
4892                }
4893            }
4894        }
4895        impl renounceRoleReturn {
4896            fn _tokenize(
4897                &self,
4898            ) -> <renounceRoleCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
4899                ()
4900            }
4901        }
4902        #[automatically_derived]
4903        impl alloy_sol_types::SolCall for renounceRoleCall {
4904            type Parameters<'a> = (
4905                alloy::sol_types::sol_data::FixedBytes<32>,
4906                alloy::sol_types::sol_data::Address,
4907            );
4908            type Token<'a> = <Self::Parameters<
4909                'a,
4910            > as alloy_sol_types::SolType>::Token<'a>;
4911            type Return = renounceRoleReturn;
4912            type ReturnTuple<'a> = ();
4913            type ReturnToken<'a> = <Self::ReturnTuple<
4914                'a,
4915            > as alloy_sol_types::SolType>::Token<'a>;
4916            const SIGNATURE: &'static str = "renounceRole(bytes32,address)";
4917            const SELECTOR: [u8; 4] = [54u8, 86u8, 138u8, 190u8];
4918            #[inline]
4919            fn new<'a>(
4920                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4921            ) -> Self {
4922                tuple.into()
4923            }
4924            #[inline]
4925            fn tokenize(&self) -> Self::Token<'_> {
4926                (
4927                    <alloy::sol_types::sol_data::FixedBytes<
4928                        32,
4929                    > as alloy_sol_types::SolType>::tokenize(&self.role),
4930                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4931                        &self.account,
4932                    ),
4933                )
4934            }
4935            #[inline]
4936            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4937                renounceRoleReturn::_tokenize(ret)
4938            }
4939            #[inline]
4940            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4941                <Self::ReturnTuple<
4942                    '_,
4943                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4944                    .map(Into::into)
4945            }
4946            #[inline]
4947            fn abi_decode_returns_validate(
4948                data: &[u8],
4949            ) -> alloy_sol_types::Result<Self::Return> {
4950                <Self::ReturnTuple<
4951                    '_,
4952                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4953                    .map(Into::into)
4954            }
4955        }
4956    };
4957    #[derive(serde::Serialize, serde::Deserialize)]
4958    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4959    /**Function with signature `revokeRole(bytes32,address)` and selector `0xd547741f`.
4960```solidity
4961function revokeRole(bytes32 role, address account) external;
4962```*/
4963    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4964    #[derive(Clone)]
4965    pub struct revokeRoleCall {
4966        #[allow(missing_docs)]
4967        pub role: alloy::sol_types::private::FixedBytes<32>,
4968        #[allow(missing_docs)]
4969        pub account: alloy::sol_types::private::Address,
4970    }
4971    ///Container type for the return parameters of the [`revokeRole(bytes32,address)`](revokeRoleCall) function.
4972    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4973    #[derive(Clone)]
4974    pub struct revokeRoleReturn {}
4975    #[allow(
4976        non_camel_case_types,
4977        non_snake_case,
4978        clippy::pub_underscore_fields,
4979        clippy::style
4980    )]
4981    const _: () = {
4982        use alloy::sol_types as alloy_sol_types;
4983        {
4984            #[doc(hidden)]
4985            type UnderlyingSolTuple<'a> = (
4986                alloy::sol_types::sol_data::FixedBytes<32>,
4987                alloy::sol_types::sol_data::Address,
4988            );
4989            #[doc(hidden)]
4990            type UnderlyingRustTuple<'a> = (
4991                alloy::sol_types::private::FixedBytes<32>,
4992                alloy::sol_types::private::Address,
4993            );
4994            #[cfg(test)]
4995            #[allow(dead_code, unreachable_patterns)]
4996            fn _type_assertion(
4997                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4998            ) {
4999                match _t {
5000                    alloy_sol_types::private::AssertTypeEq::<
5001                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5002                    >(_) => {}
5003                }
5004            }
5005            #[automatically_derived]
5006            #[doc(hidden)]
5007            impl ::core::convert::From<revokeRoleCall> for UnderlyingRustTuple<'_> {
5008                fn from(value: revokeRoleCall) -> Self {
5009                    (value.role, value.account)
5010                }
5011            }
5012            #[automatically_derived]
5013            #[doc(hidden)]
5014            impl ::core::convert::From<UnderlyingRustTuple<'_>> for revokeRoleCall {
5015                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5016                    Self {
5017                        role: tuple.0,
5018                        account: tuple.1,
5019                    }
5020                }
5021            }
5022        }
5023        {
5024            #[doc(hidden)]
5025            type UnderlyingSolTuple<'a> = ();
5026            #[doc(hidden)]
5027            type UnderlyingRustTuple<'a> = ();
5028            #[cfg(test)]
5029            #[allow(dead_code, unreachable_patterns)]
5030            fn _type_assertion(
5031                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5032            ) {
5033                match _t {
5034                    alloy_sol_types::private::AssertTypeEq::<
5035                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5036                    >(_) => {}
5037                }
5038            }
5039            #[automatically_derived]
5040            #[doc(hidden)]
5041            impl ::core::convert::From<revokeRoleReturn> for UnderlyingRustTuple<'_> {
5042                fn from(value: revokeRoleReturn) -> Self {
5043                    ()
5044                }
5045            }
5046            #[automatically_derived]
5047            #[doc(hidden)]
5048            impl ::core::convert::From<UnderlyingRustTuple<'_>> for revokeRoleReturn {
5049                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5050                    Self {}
5051                }
5052            }
5053        }
5054        impl revokeRoleReturn {
5055            fn _tokenize(
5056                &self,
5057            ) -> <revokeRoleCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
5058                ()
5059            }
5060        }
5061        #[automatically_derived]
5062        impl alloy_sol_types::SolCall for revokeRoleCall {
5063            type Parameters<'a> = (
5064                alloy::sol_types::sol_data::FixedBytes<32>,
5065                alloy::sol_types::sol_data::Address,
5066            );
5067            type Token<'a> = <Self::Parameters<
5068                'a,
5069            > as alloy_sol_types::SolType>::Token<'a>;
5070            type Return = revokeRoleReturn;
5071            type ReturnTuple<'a> = ();
5072            type ReturnToken<'a> = <Self::ReturnTuple<
5073                'a,
5074            > as alloy_sol_types::SolType>::Token<'a>;
5075            const SIGNATURE: &'static str = "revokeRole(bytes32,address)";
5076            const SELECTOR: [u8; 4] = [213u8, 71u8, 116u8, 31u8];
5077            #[inline]
5078            fn new<'a>(
5079                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5080            ) -> Self {
5081                tuple.into()
5082            }
5083            #[inline]
5084            fn tokenize(&self) -> Self::Token<'_> {
5085                (
5086                    <alloy::sol_types::sol_data::FixedBytes<
5087                        32,
5088                    > as alloy_sol_types::SolType>::tokenize(&self.role),
5089                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5090                        &self.account,
5091                    ),
5092                )
5093            }
5094            #[inline]
5095            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5096                revokeRoleReturn::_tokenize(ret)
5097            }
5098            #[inline]
5099            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5100                <Self::ReturnTuple<
5101                    '_,
5102                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5103                    .map(Into::into)
5104            }
5105            #[inline]
5106            fn abi_decode_returns_validate(
5107                data: &[u8],
5108            ) -> alloy_sol_types::Result<Self::Return> {
5109                <Self::ReturnTuple<
5110                    '_,
5111                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5112                    .map(Into::into)
5113            }
5114        }
5115    };
5116    #[derive(serde::Serialize, serde::Deserialize)]
5117    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5118    /**Function with signature `safeTransferFrom(address,address,uint256)` and selector `0x42842e0e`.
5119```solidity
5120function safeTransferFrom(address from, address to, uint256 tokenId) external;
5121```*/
5122    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5123    #[derive(Clone)]
5124    pub struct safeTransferFrom_0Call {
5125        #[allow(missing_docs)]
5126        pub from: alloy::sol_types::private::Address,
5127        #[allow(missing_docs)]
5128        pub to: alloy::sol_types::private::Address,
5129        #[allow(missing_docs)]
5130        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
5131    }
5132    ///Container type for the return parameters of the [`safeTransferFrom(address,address,uint256)`](safeTransferFrom_0Call) function.
5133    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5134    #[derive(Clone)]
5135    pub struct safeTransferFrom_0Return {}
5136    #[allow(
5137        non_camel_case_types,
5138        non_snake_case,
5139        clippy::pub_underscore_fields,
5140        clippy::style
5141    )]
5142    const _: () = {
5143        use alloy::sol_types as alloy_sol_types;
5144        {
5145            #[doc(hidden)]
5146            type UnderlyingSolTuple<'a> = (
5147                alloy::sol_types::sol_data::Address,
5148                alloy::sol_types::sol_data::Address,
5149                alloy::sol_types::sol_data::Uint<256>,
5150            );
5151            #[doc(hidden)]
5152            type UnderlyingRustTuple<'a> = (
5153                alloy::sol_types::private::Address,
5154                alloy::sol_types::private::Address,
5155                alloy::sol_types::private::primitives::aliases::U256,
5156            );
5157            #[cfg(test)]
5158            #[allow(dead_code, unreachable_patterns)]
5159            fn _type_assertion(
5160                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5161            ) {
5162                match _t {
5163                    alloy_sol_types::private::AssertTypeEq::<
5164                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5165                    >(_) => {}
5166                }
5167            }
5168            #[automatically_derived]
5169            #[doc(hidden)]
5170            impl ::core::convert::From<safeTransferFrom_0Call>
5171            for UnderlyingRustTuple<'_> {
5172                fn from(value: safeTransferFrom_0Call) -> Self {
5173                    (value.from, value.to, value.tokenId)
5174                }
5175            }
5176            #[automatically_derived]
5177            #[doc(hidden)]
5178            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5179            for safeTransferFrom_0Call {
5180                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5181                    Self {
5182                        from: tuple.0,
5183                        to: tuple.1,
5184                        tokenId: tuple.2,
5185                    }
5186                }
5187            }
5188        }
5189        {
5190            #[doc(hidden)]
5191            type UnderlyingSolTuple<'a> = ();
5192            #[doc(hidden)]
5193            type UnderlyingRustTuple<'a> = ();
5194            #[cfg(test)]
5195            #[allow(dead_code, unreachable_patterns)]
5196            fn _type_assertion(
5197                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5198            ) {
5199                match _t {
5200                    alloy_sol_types::private::AssertTypeEq::<
5201                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5202                    >(_) => {}
5203                }
5204            }
5205            #[automatically_derived]
5206            #[doc(hidden)]
5207            impl ::core::convert::From<safeTransferFrom_0Return>
5208            for UnderlyingRustTuple<'_> {
5209                fn from(value: safeTransferFrom_0Return) -> Self {
5210                    ()
5211                }
5212            }
5213            #[automatically_derived]
5214            #[doc(hidden)]
5215            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5216            for safeTransferFrom_0Return {
5217                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5218                    Self {}
5219                }
5220            }
5221        }
5222        impl safeTransferFrom_0Return {
5223            fn _tokenize(
5224                &self,
5225            ) -> <safeTransferFrom_0Call as alloy_sol_types::SolCall>::ReturnToken<'_> {
5226                ()
5227            }
5228        }
5229        #[automatically_derived]
5230        impl alloy_sol_types::SolCall for safeTransferFrom_0Call {
5231            type Parameters<'a> = (
5232                alloy::sol_types::sol_data::Address,
5233                alloy::sol_types::sol_data::Address,
5234                alloy::sol_types::sol_data::Uint<256>,
5235            );
5236            type Token<'a> = <Self::Parameters<
5237                'a,
5238            > as alloy_sol_types::SolType>::Token<'a>;
5239            type Return = safeTransferFrom_0Return;
5240            type ReturnTuple<'a> = ();
5241            type ReturnToken<'a> = <Self::ReturnTuple<
5242                'a,
5243            > as alloy_sol_types::SolType>::Token<'a>;
5244            const SIGNATURE: &'static str = "safeTransferFrom(address,address,uint256)";
5245            const SELECTOR: [u8; 4] = [66u8, 132u8, 46u8, 14u8];
5246            #[inline]
5247            fn new<'a>(
5248                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5249            ) -> Self {
5250                tuple.into()
5251            }
5252            #[inline]
5253            fn tokenize(&self) -> Self::Token<'_> {
5254                (
5255                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5256                        &self.from,
5257                    ),
5258                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5259                        &self.to,
5260                    ),
5261                    <alloy::sol_types::sol_data::Uint<
5262                        256,
5263                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
5264                )
5265            }
5266            #[inline]
5267            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5268                safeTransferFrom_0Return::_tokenize(ret)
5269            }
5270            #[inline]
5271            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5272                <Self::ReturnTuple<
5273                    '_,
5274                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5275                    .map(Into::into)
5276            }
5277            #[inline]
5278            fn abi_decode_returns_validate(
5279                data: &[u8],
5280            ) -> alloy_sol_types::Result<Self::Return> {
5281                <Self::ReturnTuple<
5282                    '_,
5283                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5284                    .map(Into::into)
5285            }
5286        }
5287    };
5288    #[derive(serde::Serialize, serde::Deserialize)]
5289    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5290    /**Function with signature `safeTransferFrom(address,address,uint256,bytes)` and selector `0xb88d4fde`.
5291```solidity
5292function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) external;
5293```*/
5294    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5295    #[derive(Clone)]
5296    pub struct safeTransferFrom_1Call {
5297        #[allow(missing_docs)]
5298        pub from: alloy::sol_types::private::Address,
5299        #[allow(missing_docs)]
5300        pub to: alloy::sol_types::private::Address,
5301        #[allow(missing_docs)]
5302        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
5303        #[allow(missing_docs)]
5304        pub _data: alloy::sol_types::private::Bytes,
5305    }
5306    ///Container type for the return parameters of the [`safeTransferFrom(address,address,uint256,bytes)`](safeTransferFrom_1Call) function.
5307    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5308    #[derive(Clone)]
5309    pub struct safeTransferFrom_1Return {}
5310    #[allow(
5311        non_camel_case_types,
5312        non_snake_case,
5313        clippy::pub_underscore_fields,
5314        clippy::style
5315    )]
5316    const _: () = {
5317        use alloy::sol_types as alloy_sol_types;
5318        {
5319            #[doc(hidden)]
5320            type UnderlyingSolTuple<'a> = (
5321                alloy::sol_types::sol_data::Address,
5322                alloy::sol_types::sol_data::Address,
5323                alloy::sol_types::sol_data::Uint<256>,
5324                alloy::sol_types::sol_data::Bytes,
5325            );
5326            #[doc(hidden)]
5327            type UnderlyingRustTuple<'a> = (
5328                alloy::sol_types::private::Address,
5329                alloy::sol_types::private::Address,
5330                alloy::sol_types::private::primitives::aliases::U256,
5331                alloy::sol_types::private::Bytes,
5332            );
5333            #[cfg(test)]
5334            #[allow(dead_code, unreachable_patterns)]
5335            fn _type_assertion(
5336                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5337            ) {
5338                match _t {
5339                    alloy_sol_types::private::AssertTypeEq::<
5340                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5341                    >(_) => {}
5342                }
5343            }
5344            #[automatically_derived]
5345            #[doc(hidden)]
5346            impl ::core::convert::From<safeTransferFrom_1Call>
5347            for UnderlyingRustTuple<'_> {
5348                fn from(value: safeTransferFrom_1Call) -> Self {
5349                    (value.from, value.to, value.tokenId, value._data)
5350                }
5351            }
5352            #[automatically_derived]
5353            #[doc(hidden)]
5354            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5355            for safeTransferFrom_1Call {
5356                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5357                    Self {
5358                        from: tuple.0,
5359                        to: tuple.1,
5360                        tokenId: tuple.2,
5361                        _data: tuple.3,
5362                    }
5363                }
5364            }
5365        }
5366        {
5367            #[doc(hidden)]
5368            type UnderlyingSolTuple<'a> = ();
5369            #[doc(hidden)]
5370            type UnderlyingRustTuple<'a> = ();
5371            #[cfg(test)]
5372            #[allow(dead_code, unreachable_patterns)]
5373            fn _type_assertion(
5374                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5375            ) {
5376                match _t {
5377                    alloy_sol_types::private::AssertTypeEq::<
5378                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5379                    >(_) => {}
5380                }
5381            }
5382            #[automatically_derived]
5383            #[doc(hidden)]
5384            impl ::core::convert::From<safeTransferFrom_1Return>
5385            for UnderlyingRustTuple<'_> {
5386                fn from(value: safeTransferFrom_1Return) -> Self {
5387                    ()
5388                }
5389            }
5390            #[automatically_derived]
5391            #[doc(hidden)]
5392            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5393            for safeTransferFrom_1Return {
5394                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5395                    Self {}
5396                }
5397            }
5398        }
5399        impl safeTransferFrom_1Return {
5400            fn _tokenize(
5401                &self,
5402            ) -> <safeTransferFrom_1Call as alloy_sol_types::SolCall>::ReturnToken<'_> {
5403                ()
5404            }
5405        }
5406        #[automatically_derived]
5407        impl alloy_sol_types::SolCall for safeTransferFrom_1Call {
5408            type Parameters<'a> = (
5409                alloy::sol_types::sol_data::Address,
5410                alloy::sol_types::sol_data::Address,
5411                alloy::sol_types::sol_data::Uint<256>,
5412                alloy::sol_types::sol_data::Bytes,
5413            );
5414            type Token<'a> = <Self::Parameters<
5415                'a,
5416            > as alloy_sol_types::SolType>::Token<'a>;
5417            type Return = safeTransferFrom_1Return;
5418            type ReturnTuple<'a> = ();
5419            type ReturnToken<'a> = <Self::ReturnTuple<
5420                'a,
5421            > as alloy_sol_types::SolType>::Token<'a>;
5422            const SIGNATURE: &'static str = "safeTransferFrom(address,address,uint256,bytes)";
5423            const SELECTOR: [u8; 4] = [184u8, 141u8, 79u8, 222u8];
5424            #[inline]
5425            fn new<'a>(
5426                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5427            ) -> Self {
5428                tuple.into()
5429            }
5430            #[inline]
5431            fn tokenize(&self) -> Self::Token<'_> {
5432                (
5433                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5434                        &self.from,
5435                    ),
5436                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5437                        &self.to,
5438                    ),
5439                    <alloy::sol_types::sol_data::Uint<
5440                        256,
5441                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
5442                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5443                        &self._data,
5444                    ),
5445                )
5446            }
5447            #[inline]
5448            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5449                safeTransferFrom_1Return::_tokenize(ret)
5450            }
5451            #[inline]
5452            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5453                <Self::ReturnTuple<
5454                    '_,
5455                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5456                    .map(Into::into)
5457            }
5458            #[inline]
5459            fn abi_decode_returns_validate(
5460                data: &[u8],
5461            ) -> alloy_sol_types::Result<Self::Return> {
5462                <Self::ReturnTuple<
5463                    '_,
5464                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5465                    .map(Into::into)
5466            }
5467        }
5468    };
5469    #[derive(serde::Serialize, serde::Deserialize)]
5470    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5471    /**Function with signature `setApprovalForAll(address,bool)` and selector `0xa22cb465`.
5472```solidity
5473function setApprovalForAll(address operator, bool approved) external;
5474```*/
5475    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5476    #[derive(Clone)]
5477    pub struct setApprovalForAllCall {
5478        #[allow(missing_docs)]
5479        pub operator: alloy::sol_types::private::Address,
5480        #[allow(missing_docs)]
5481        pub approved: bool,
5482    }
5483    ///Container type for the return parameters of the [`setApprovalForAll(address,bool)`](setApprovalForAllCall) function.
5484    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5485    #[derive(Clone)]
5486    pub struct setApprovalForAllReturn {}
5487    #[allow(
5488        non_camel_case_types,
5489        non_snake_case,
5490        clippy::pub_underscore_fields,
5491        clippy::style
5492    )]
5493    const _: () = {
5494        use alloy::sol_types as alloy_sol_types;
5495        {
5496            #[doc(hidden)]
5497            type UnderlyingSolTuple<'a> = (
5498                alloy::sol_types::sol_data::Address,
5499                alloy::sol_types::sol_data::Bool,
5500            );
5501            #[doc(hidden)]
5502            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address, bool);
5503            #[cfg(test)]
5504            #[allow(dead_code, unreachable_patterns)]
5505            fn _type_assertion(
5506                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5507            ) {
5508                match _t {
5509                    alloy_sol_types::private::AssertTypeEq::<
5510                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5511                    >(_) => {}
5512                }
5513            }
5514            #[automatically_derived]
5515            #[doc(hidden)]
5516            impl ::core::convert::From<setApprovalForAllCall>
5517            for UnderlyingRustTuple<'_> {
5518                fn from(value: setApprovalForAllCall) -> Self {
5519                    (value.operator, value.approved)
5520                }
5521            }
5522            #[automatically_derived]
5523            #[doc(hidden)]
5524            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5525            for setApprovalForAllCall {
5526                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5527                    Self {
5528                        operator: tuple.0,
5529                        approved: tuple.1,
5530                    }
5531                }
5532            }
5533        }
5534        {
5535            #[doc(hidden)]
5536            type UnderlyingSolTuple<'a> = ();
5537            #[doc(hidden)]
5538            type UnderlyingRustTuple<'a> = ();
5539            #[cfg(test)]
5540            #[allow(dead_code, unreachable_patterns)]
5541            fn _type_assertion(
5542                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5543            ) {
5544                match _t {
5545                    alloy_sol_types::private::AssertTypeEq::<
5546                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5547                    >(_) => {}
5548                }
5549            }
5550            #[automatically_derived]
5551            #[doc(hidden)]
5552            impl ::core::convert::From<setApprovalForAllReturn>
5553            for UnderlyingRustTuple<'_> {
5554                fn from(value: setApprovalForAllReturn) -> Self {
5555                    ()
5556                }
5557            }
5558            #[automatically_derived]
5559            #[doc(hidden)]
5560            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5561            for setApprovalForAllReturn {
5562                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5563                    Self {}
5564                }
5565            }
5566        }
5567        impl setApprovalForAllReturn {
5568            fn _tokenize(
5569                &self,
5570            ) -> <setApprovalForAllCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
5571                ()
5572            }
5573        }
5574        #[automatically_derived]
5575        impl alloy_sol_types::SolCall for setApprovalForAllCall {
5576            type Parameters<'a> = (
5577                alloy::sol_types::sol_data::Address,
5578                alloy::sol_types::sol_data::Bool,
5579            );
5580            type Token<'a> = <Self::Parameters<
5581                'a,
5582            > as alloy_sol_types::SolType>::Token<'a>;
5583            type Return = setApprovalForAllReturn;
5584            type ReturnTuple<'a> = ();
5585            type ReturnToken<'a> = <Self::ReturnTuple<
5586                'a,
5587            > as alloy_sol_types::SolType>::Token<'a>;
5588            const SIGNATURE: &'static str = "setApprovalForAll(address,bool)";
5589            const SELECTOR: [u8; 4] = [162u8, 44u8, 180u8, 101u8];
5590            #[inline]
5591            fn new<'a>(
5592                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5593            ) -> Self {
5594                tuple.into()
5595            }
5596            #[inline]
5597            fn tokenize(&self) -> Self::Token<'_> {
5598                (
5599                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5600                        &self.operator,
5601                    ),
5602                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
5603                        &self.approved,
5604                    ),
5605                )
5606            }
5607            #[inline]
5608            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5609                setApprovalForAllReturn::_tokenize(ret)
5610            }
5611            #[inline]
5612            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5613                <Self::ReturnTuple<
5614                    '_,
5615                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5616                    .map(Into::into)
5617            }
5618            #[inline]
5619            fn abi_decode_returns_validate(
5620                data: &[u8],
5621            ) -> alloy_sol_types::Result<Self::Return> {
5622                <Self::ReturnTuple<
5623                    '_,
5624                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5625                    .map(Into::into)
5626            }
5627        }
5628    };
5629    #[derive(serde::Serialize, serde::Deserialize)]
5630    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5631    /**Function with signature `supportsInterface(bytes4)` and selector `0x01ffc9a7`.
5632```solidity
5633function supportsInterface(bytes4 interfaceId) external view returns (bool);
5634```*/
5635    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5636    #[derive(Clone)]
5637    pub struct supportsInterfaceCall {
5638        #[allow(missing_docs)]
5639        pub interfaceId: alloy::sol_types::private::FixedBytes<4>,
5640    }
5641    #[derive(serde::Serialize, serde::Deserialize)]
5642    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5643    ///Container type for the return parameters of the [`supportsInterface(bytes4)`](supportsInterfaceCall) function.
5644    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5645    #[derive(Clone)]
5646    pub struct supportsInterfaceReturn {
5647        #[allow(missing_docs)]
5648        pub _0: bool,
5649    }
5650    #[allow(
5651        non_camel_case_types,
5652        non_snake_case,
5653        clippy::pub_underscore_fields,
5654        clippy::style
5655    )]
5656    const _: () = {
5657        use alloy::sol_types as alloy_sol_types;
5658        {
5659            #[doc(hidden)]
5660            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<4>,);
5661            #[doc(hidden)]
5662            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<4>,);
5663            #[cfg(test)]
5664            #[allow(dead_code, unreachable_patterns)]
5665            fn _type_assertion(
5666                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5667            ) {
5668                match _t {
5669                    alloy_sol_types::private::AssertTypeEq::<
5670                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5671                    >(_) => {}
5672                }
5673            }
5674            #[automatically_derived]
5675            #[doc(hidden)]
5676            impl ::core::convert::From<supportsInterfaceCall>
5677            for UnderlyingRustTuple<'_> {
5678                fn from(value: supportsInterfaceCall) -> Self {
5679                    (value.interfaceId,)
5680                }
5681            }
5682            #[automatically_derived]
5683            #[doc(hidden)]
5684            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5685            for supportsInterfaceCall {
5686                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5687                    Self { interfaceId: tuple.0 }
5688                }
5689            }
5690        }
5691        {
5692            #[doc(hidden)]
5693            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
5694            #[doc(hidden)]
5695            type UnderlyingRustTuple<'a> = (bool,);
5696            #[cfg(test)]
5697            #[allow(dead_code, unreachable_patterns)]
5698            fn _type_assertion(
5699                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5700            ) {
5701                match _t {
5702                    alloy_sol_types::private::AssertTypeEq::<
5703                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5704                    >(_) => {}
5705                }
5706            }
5707            #[automatically_derived]
5708            #[doc(hidden)]
5709            impl ::core::convert::From<supportsInterfaceReturn>
5710            for UnderlyingRustTuple<'_> {
5711                fn from(value: supportsInterfaceReturn) -> Self {
5712                    (value._0,)
5713                }
5714            }
5715            #[automatically_derived]
5716            #[doc(hidden)]
5717            impl ::core::convert::From<UnderlyingRustTuple<'_>>
5718            for supportsInterfaceReturn {
5719                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5720                    Self { _0: tuple.0 }
5721                }
5722            }
5723        }
5724        #[automatically_derived]
5725        impl alloy_sol_types::SolCall for supportsInterfaceCall {
5726            type Parameters<'a> = (alloy::sol_types::sol_data::FixedBytes<4>,);
5727            type Token<'a> = <Self::Parameters<
5728                'a,
5729            > as alloy_sol_types::SolType>::Token<'a>;
5730            type Return = bool;
5731            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
5732            type ReturnToken<'a> = <Self::ReturnTuple<
5733                'a,
5734            > as alloy_sol_types::SolType>::Token<'a>;
5735            const SIGNATURE: &'static str = "supportsInterface(bytes4)";
5736            const SELECTOR: [u8; 4] = [1u8, 255u8, 201u8, 167u8];
5737            #[inline]
5738            fn new<'a>(
5739                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5740            ) -> Self {
5741                tuple.into()
5742            }
5743            #[inline]
5744            fn tokenize(&self) -> Self::Token<'_> {
5745                (
5746                    <alloy::sol_types::sol_data::FixedBytes<
5747                        4,
5748                    > as alloy_sol_types::SolType>::tokenize(&self.interfaceId),
5749                )
5750            }
5751            #[inline]
5752            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5753                (
5754                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
5755                        ret,
5756                    ),
5757                )
5758            }
5759            #[inline]
5760            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5761                <Self::ReturnTuple<
5762                    '_,
5763                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5764                    .map(|r| {
5765                        let r: supportsInterfaceReturn = r.into();
5766                        r._0
5767                    })
5768            }
5769            #[inline]
5770            fn abi_decode_returns_validate(
5771                data: &[u8],
5772            ) -> alloy_sol_types::Result<Self::Return> {
5773                <Self::ReturnTuple<
5774                    '_,
5775                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5776                    .map(|r| {
5777                        let r: supportsInterfaceReturn = r.into();
5778                        r._0
5779                    })
5780            }
5781        }
5782    };
5783    #[derive(serde::Serialize, serde::Deserialize)]
5784    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5785    /**Function with signature `symbol()` and selector `0x95d89b41`.
5786```solidity
5787function symbol() external view returns (string memory);
5788```*/
5789    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5790    #[derive(Clone)]
5791    pub struct symbolCall;
5792    #[derive(serde::Serialize, serde::Deserialize)]
5793    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5794    ///Container type for the return parameters of the [`symbol()`](symbolCall) function.
5795    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5796    #[derive(Clone)]
5797    pub struct symbolReturn {
5798        #[allow(missing_docs)]
5799        pub _0: alloy::sol_types::private::String,
5800    }
5801    #[allow(
5802        non_camel_case_types,
5803        non_snake_case,
5804        clippy::pub_underscore_fields,
5805        clippy::style
5806    )]
5807    const _: () = {
5808        use alloy::sol_types as alloy_sol_types;
5809        {
5810            #[doc(hidden)]
5811            type UnderlyingSolTuple<'a> = ();
5812            #[doc(hidden)]
5813            type UnderlyingRustTuple<'a> = ();
5814            #[cfg(test)]
5815            #[allow(dead_code, unreachable_patterns)]
5816            fn _type_assertion(
5817                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5818            ) {
5819                match _t {
5820                    alloy_sol_types::private::AssertTypeEq::<
5821                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5822                    >(_) => {}
5823                }
5824            }
5825            #[automatically_derived]
5826            #[doc(hidden)]
5827            impl ::core::convert::From<symbolCall> for UnderlyingRustTuple<'_> {
5828                fn from(value: symbolCall) -> Self {
5829                    ()
5830                }
5831            }
5832            #[automatically_derived]
5833            #[doc(hidden)]
5834            impl ::core::convert::From<UnderlyingRustTuple<'_>> for symbolCall {
5835                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5836                    Self
5837                }
5838            }
5839        }
5840        {
5841            #[doc(hidden)]
5842            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
5843            #[doc(hidden)]
5844            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
5845            #[cfg(test)]
5846            #[allow(dead_code, unreachable_patterns)]
5847            fn _type_assertion(
5848                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5849            ) {
5850                match _t {
5851                    alloy_sol_types::private::AssertTypeEq::<
5852                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5853                    >(_) => {}
5854                }
5855            }
5856            #[automatically_derived]
5857            #[doc(hidden)]
5858            impl ::core::convert::From<symbolReturn> for UnderlyingRustTuple<'_> {
5859                fn from(value: symbolReturn) -> Self {
5860                    (value._0,)
5861                }
5862            }
5863            #[automatically_derived]
5864            #[doc(hidden)]
5865            impl ::core::convert::From<UnderlyingRustTuple<'_>> for symbolReturn {
5866                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5867                    Self { _0: tuple.0 }
5868                }
5869            }
5870        }
5871        #[automatically_derived]
5872        impl alloy_sol_types::SolCall for symbolCall {
5873            type Parameters<'a> = ();
5874            type Token<'a> = <Self::Parameters<
5875                'a,
5876            > as alloy_sol_types::SolType>::Token<'a>;
5877            type Return = alloy::sol_types::private::String;
5878            type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,);
5879            type ReturnToken<'a> = <Self::ReturnTuple<
5880                'a,
5881            > as alloy_sol_types::SolType>::Token<'a>;
5882            const SIGNATURE: &'static str = "symbol()";
5883            const SELECTOR: [u8; 4] = [149u8, 216u8, 155u8, 65u8];
5884            #[inline]
5885            fn new<'a>(
5886                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5887            ) -> Self {
5888                tuple.into()
5889            }
5890            #[inline]
5891            fn tokenize(&self) -> Self::Token<'_> {
5892                ()
5893            }
5894            #[inline]
5895            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5896                (
5897                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
5898                        ret,
5899                    ),
5900                )
5901            }
5902            #[inline]
5903            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5904                <Self::ReturnTuple<
5905                    '_,
5906                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5907                    .map(|r| {
5908                        let r: symbolReturn = r.into();
5909                        r._0
5910                    })
5911            }
5912            #[inline]
5913            fn abi_decode_returns_validate(
5914                data: &[u8],
5915            ) -> alloy_sol_types::Result<Self::Return> {
5916                <Self::ReturnTuple<
5917                    '_,
5918                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5919                    .map(|r| {
5920                        let r: symbolReturn = r.into();
5921                        r._0
5922                    })
5923            }
5924        }
5925    };
5926    #[derive(serde::Serialize, serde::Deserialize)]
5927    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5928    /**Function with signature `tokenByIndex(uint256)` and selector `0x4f6ccce7`.
5929```solidity
5930function tokenByIndex(uint256 index) external view returns (uint256);
5931```*/
5932    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5933    #[derive(Clone)]
5934    pub struct tokenByIndexCall {
5935        #[allow(missing_docs)]
5936        pub index: alloy::sol_types::private::primitives::aliases::U256,
5937    }
5938    #[derive(serde::Serialize, serde::Deserialize)]
5939    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5940    ///Container type for the return parameters of the [`tokenByIndex(uint256)`](tokenByIndexCall) function.
5941    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5942    #[derive(Clone)]
5943    pub struct tokenByIndexReturn {
5944        #[allow(missing_docs)]
5945        pub _0: alloy::sol_types::private::primitives::aliases::U256,
5946    }
5947    #[allow(
5948        non_camel_case_types,
5949        non_snake_case,
5950        clippy::pub_underscore_fields,
5951        clippy::style
5952    )]
5953    const _: () = {
5954        use alloy::sol_types as alloy_sol_types;
5955        {
5956            #[doc(hidden)]
5957            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
5958            #[doc(hidden)]
5959            type UnderlyingRustTuple<'a> = (
5960                alloy::sol_types::private::primitives::aliases::U256,
5961            );
5962            #[cfg(test)]
5963            #[allow(dead_code, unreachable_patterns)]
5964            fn _type_assertion(
5965                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5966            ) {
5967                match _t {
5968                    alloy_sol_types::private::AssertTypeEq::<
5969                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5970                    >(_) => {}
5971                }
5972            }
5973            #[automatically_derived]
5974            #[doc(hidden)]
5975            impl ::core::convert::From<tokenByIndexCall> for UnderlyingRustTuple<'_> {
5976                fn from(value: tokenByIndexCall) -> Self {
5977                    (value.index,)
5978                }
5979            }
5980            #[automatically_derived]
5981            #[doc(hidden)]
5982            impl ::core::convert::From<UnderlyingRustTuple<'_>> for tokenByIndexCall {
5983                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5984                    Self { index: tuple.0 }
5985                }
5986            }
5987        }
5988        {
5989            #[doc(hidden)]
5990            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
5991            #[doc(hidden)]
5992            type UnderlyingRustTuple<'a> = (
5993                alloy::sol_types::private::primitives::aliases::U256,
5994            );
5995            #[cfg(test)]
5996            #[allow(dead_code, unreachable_patterns)]
5997            fn _type_assertion(
5998                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5999            ) {
6000                match _t {
6001                    alloy_sol_types::private::AssertTypeEq::<
6002                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6003                    >(_) => {}
6004                }
6005            }
6006            #[automatically_derived]
6007            #[doc(hidden)]
6008            impl ::core::convert::From<tokenByIndexReturn> for UnderlyingRustTuple<'_> {
6009                fn from(value: tokenByIndexReturn) -> Self {
6010                    (value._0,)
6011                }
6012            }
6013            #[automatically_derived]
6014            #[doc(hidden)]
6015            impl ::core::convert::From<UnderlyingRustTuple<'_>> for tokenByIndexReturn {
6016                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6017                    Self { _0: tuple.0 }
6018                }
6019            }
6020        }
6021        #[automatically_derived]
6022        impl alloy_sol_types::SolCall for tokenByIndexCall {
6023            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6024            type Token<'a> = <Self::Parameters<
6025                'a,
6026            > as alloy_sol_types::SolType>::Token<'a>;
6027            type Return = alloy::sol_types::private::primitives::aliases::U256;
6028            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6029            type ReturnToken<'a> = <Self::ReturnTuple<
6030                'a,
6031            > as alloy_sol_types::SolType>::Token<'a>;
6032            const SIGNATURE: &'static str = "tokenByIndex(uint256)";
6033            const SELECTOR: [u8; 4] = [79u8, 108u8, 204u8, 231u8];
6034            #[inline]
6035            fn new<'a>(
6036                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6037            ) -> Self {
6038                tuple.into()
6039            }
6040            #[inline]
6041            fn tokenize(&self) -> Self::Token<'_> {
6042                (
6043                    <alloy::sol_types::sol_data::Uint<
6044                        256,
6045                    > as alloy_sol_types::SolType>::tokenize(&self.index),
6046                )
6047            }
6048            #[inline]
6049            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6050                (
6051                    <alloy::sol_types::sol_data::Uint<
6052                        256,
6053                    > as alloy_sol_types::SolType>::tokenize(ret),
6054                )
6055            }
6056            #[inline]
6057            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6058                <Self::ReturnTuple<
6059                    '_,
6060                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6061                    .map(|r| {
6062                        let r: tokenByIndexReturn = r.into();
6063                        r._0
6064                    })
6065            }
6066            #[inline]
6067            fn abi_decode_returns_validate(
6068                data: &[u8],
6069            ) -> alloy_sol_types::Result<Self::Return> {
6070                <Self::ReturnTuple<
6071                    '_,
6072                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6073                    .map(|r| {
6074                        let r: tokenByIndexReturn = r.into();
6075                        r._0
6076                    })
6077            }
6078        }
6079    };
6080    #[derive(serde::Serialize, serde::Deserialize)]
6081    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6082    /**Function with signature `tokenOfOwnerByIndex(address,uint256)` and selector `0x2f745c59`.
6083```solidity
6084function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
6085```*/
6086    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6087    #[derive(Clone)]
6088    pub struct tokenOfOwnerByIndexCall {
6089        #[allow(missing_docs)]
6090        pub owner: alloy::sol_types::private::Address,
6091        #[allow(missing_docs)]
6092        pub index: alloy::sol_types::private::primitives::aliases::U256,
6093    }
6094    #[derive(serde::Serialize, serde::Deserialize)]
6095    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6096    ///Container type for the return parameters of the [`tokenOfOwnerByIndex(address,uint256)`](tokenOfOwnerByIndexCall) function.
6097    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6098    #[derive(Clone)]
6099    pub struct tokenOfOwnerByIndexReturn {
6100        #[allow(missing_docs)]
6101        pub _0: alloy::sol_types::private::primitives::aliases::U256,
6102    }
6103    #[allow(
6104        non_camel_case_types,
6105        non_snake_case,
6106        clippy::pub_underscore_fields,
6107        clippy::style
6108    )]
6109    const _: () = {
6110        use alloy::sol_types as alloy_sol_types;
6111        {
6112            #[doc(hidden)]
6113            type UnderlyingSolTuple<'a> = (
6114                alloy::sol_types::sol_data::Address,
6115                alloy::sol_types::sol_data::Uint<256>,
6116            );
6117            #[doc(hidden)]
6118            type UnderlyingRustTuple<'a> = (
6119                alloy::sol_types::private::Address,
6120                alloy::sol_types::private::primitives::aliases::U256,
6121            );
6122            #[cfg(test)]
6123            #[allow(dead_code, unreachable_patterns)]
6124            fn _type_assertion(
6125                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6126            ) {
6127                match _t {
6128                    alloy_sol_types::private::AssertTypeEq::<
6129                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6130                    >(_) => {}
6131                }
6132            }
6133            #[automatically_derived]
6134            #[doc(hidden)]
6135            impl ::core::convert::From<tokenOfOwnerByIndexCall>
6136            for UnderlyingRustTuple<'_> {
6137                fn from(value: tokenOfOwnerByIndexCall) -> Self {
6138                    (value.owner, value.index)
6139                }
6140            }
6141            #[automatically_derived]
6142            #[doc(hidden)]
6143            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6144            for tokenOfOwnerByIndexCall {
6145                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6146                    Self {
6147                        owner: tuple.0,
6148                        index: tuple.1,
6149                    }
6150                }
6151            }
6152        }
6153        {
6154            #[doc(hidden)]
6155            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6156            #[doc(hidden)]
6157            type UnderlyingRustTuple<'a> = (
6158                alloy::sol_types::private::primitives::aliases::U256,
6159            );
6160            #[cfg(test)]
6161            #[allow(dead_code, unreachable_patterns)]
6162            fn _type_assertion(
6163                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6164            ) {
6165                match _t {
6166                    alloy_sol_types::private::AssertTypeEq::<
6167                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6168                    >(_) => {}
6169                }
6170            }
6171            #[automatically_derived]
6172            #[doc(hidden)]
6173            impl ::core::convert::From<tokenOfOwnerByIndexReturn>
6174            for UnderlyingRustTuple<'_> {
6175                fn from(value: tokenOfOwnerByIndexReturn) -> Self {
6176                    (value._0,)
6177                }
6178            }
6179            #[automatically_derived]
6180            #[doc(hidden)]
6181            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6182            for tokenOfOwnerByIndexReturn {
6183                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6184                    Self { _0: tuple.0 }
6185                }
6186            }
6187        }
6188        #[automatically_derived]
6189        impl alloy_sol_types::SolCall for tokenOfOwnerByIndexCall {
6190            type Parameters<'a> = (
6191                alloy::sol_types::sol_data::Address,
6192                alloy::sol_types::sol_data::Uint<256>,
6193            );
6194            type Token<'a> = <Self::Parameters<
6195                'a,
6196            > as alloy_sol_types::SolType>::Token<'a>;
6197            type Return = alloy::sol_types::private::primitives::aliases::U256;
6198            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6199            type ReturnToken<'a> = <Self::ReturnTuple<
6200                'a,
6201            > as alloy_sol_types::SolType>::Token<'a>;
6202            const SIGNATURE: &'static str = "tokenOfOwnerByIndex(address,uint256)";
6203            const SELECTOR: [u8; 4] = [47u8, 116u8, 92u8, 89u8];
6204            #[inline]
6205            fn new<'a>(
6206                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6207            ) -> Self {
6208                tuple.into()
6209            }
6210            #[inline]
6211            fn tokenize(&self) -> Self::Token<'_> {
6212                (
6213                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6214                        &self.owner,
6215                    ),
6216                    <alloy::sol_types::sol_data::Uint<
6217                        256,
6218                    > as alloy_sol_types::SolType>::tokenize(&self.index),
6219                )
6220            }
6221            #[inline]
6222            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6223                (
6224                    <alloy::sol_types::sol_data::Uint<
6225                        256,
6226                    > as alloy_sol_types::SolType>::tokenize(ret),
6227                )
6228            }
6229            #[inline]
6230            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6231                <Self::ReturnTuple<
6232                    '_,
6233                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6234                    .map(|r| {
6235                        let r: tokenOfOwnerByIndexReturn = r.into();
6236                        r._0
6237                    })
6238            }
6239            #[inline]
6240            fn abi_decode_returns_validate(
6241                data: &[u8],
6242            ) -> alloy_sol_types::Result<Self::Return> {
6243                <Self::ReturnTuple<
6244                    '_,
6245                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6246                    .map(|r| {
6247                        let r: tokenOfOwnerByIndexReturn = r.into();
6248                        r._0
6249                    })
6250            }
6251        }
6252    };
6253    #[derive(serde::Serialize, serde::Deserialize)]
6254    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6255    /**Function with signature `tokenURI(uint256)` and selector `0xc87b56dd`.
6256```solidity
6257function tokenURI(uint256 tokenId) external view returns (string memory);
6258```*/
6259    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6260    #[derive(Clone)]
6261    pub struct tokenURICall {
6262        #[allow(missing_docs)]
6263        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
6264    }
6265    #[derive(serde::Serialize, serde::Deserialize)]
6266    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6267    ///Container type for the return parameters of the [`tokenURI(uint256)`](tokenURICall) function.
6268    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6269    #[derive(Clone)]
6270    pub struct tokenURIReturn {
6271        #[allow(missing_docs)]
6272        pub _0: alloy::sol_types::private::String,
6273    }
6274    #[allow(
6275        non_camel_case_types,
6276        non_snake_case,
6277        clippy::pub_underscore_fields,
6278        clippy::style
6279    )]
6280    const _: () = {
6281        use alloy::sol_types as alloy_sol_types;
6282        {
6283            #[doc(hidden)]
6284            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6285            #[doc(hidden)]
6286            type UnderlyingRustTuple<'a> = (
6287                alloy::sol_types::private::primitives::aliases::U256,
6288            );
6289            #[cfg(test)]
6290            #[allow(dead_code, unreachable_patterns)]
6291            fn _type_assertion(
6292                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6293            ) {
6294                match _t {
6295                    alloy_sol_types::private::AssertTypeEq::<
6296                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6297                    >(_) => {}
6298                }
6299            }
6300            #[automatically_derived]
6301            #[doc(hidden)]
6302            impl ::core::convert::From<tokenURICall> for UnderlyingRustTuple<'_> {
6303                fn from(value: tokenURICall) -> Self {
6304                    (value.tokenId,)
6305                }
6306            }
6307            #[automatically_derived]
6308            #[doc(hidden)]
6309            impl ::core::convert::From<UnderlyingRustTuple<'_>> for tokenURICall {
6310                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6311                    Self { tokenId: tuple.0 }
6312                }
6313            }
6314        }
6315        {
6316            #[doc(hidden)]
6317            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
6318            #[doc(hidden)]
6319            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
6320            #[cfg(test)]
6321            #[allow(dead_code, unreachable_patterns)]
6322            fn _type_assertion(
6323                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6324            ) {
6325                match _t {
6326                    alloy_sol_types::private::AssertTypeEq::<
6327                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6328                    >(_) => {}
6329                }
6330            }
6331            #[automatically_derived]
6332            #[doc(hidden)]
6333            impl ::core::convert::From<tokenURIReturn> for UnderlyingRustTuple<'_> {
6334                fn from(value: tokenURIReturn) -> Self {
6335                    (value._0,)
6336                }
6337            }
6338            #[automatically_derived]
6339            #[doc(hidden)]
6340            impl ::core::convert::From<UnderlyingRustTuple<'_>> for tokenURIReturn {
6341                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6342                    Self { _0: tuple.0 }
6343                }
6344            }
6345        }
6346        #[automatically_derived]
6347        impl alloy_sol_types::SolCall for tokenURICall {
6348            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6349            type Token<'a> = <Self::Parameters<
6350                'a,
6351            > as alloy_sol_types::SolType>::Token<'a>;
6352            type Return = alloy::sol_types::private::String;
6353            type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,);
6354            type ReturnToken<'a> = <Self::ReturnTuple<
6355                'a,
6356            > as alloy_sol_types::SolType>::Token<'a>;
6357            const SIGNATURE: &'static str = "tokenURI(uint256)";
6358            const SELECTOR: [u8; 4] = [200u8, 123u8, 86u8, 221u8];
6359            #[inline]
6360            fn new<'a>(
6361                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6362            ) -> Self {
6363                tuple.into()
6364            }
6365            #[inline]
6366            fn tokenize(&self) -> Self::Token<'_> {
6367                (
6368                    <alloy::sol_types::sol_data::Uint<
6369                        256,
6370                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
6371                )
6372            }
6373            #[inline]
6374            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6375                (
6376                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
6377                        ret,
6378                    ),
6379                )
6380            }
6381            #[inline]
6382            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6383                <Self::ReturnTuple<
6384                    '_,
6385                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6386                    .map(|r| {
6387                        let r: tokenURIReturn = r.into();
6388                        r._0
6389                    })
6390            }
6391            #[inline]
6392            fn abi_decode_returns_validate(
6393                data: &[u8],
6394            ) -> alloy_sol_types::Result<Self::Return> {
6395                <Self::ReturnTuple<
6396                    '_,
6397                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6398                    .map(|r| {
6399                        let r: tokenURIReturn = r.into();
6400                        r._0
6401                    })
6402            }
6403        }
6404    };
6405    #[derive(serde::Serialize, serde::Deserialize)]
6406    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6407    /**Function with signature `totalSupply()` and selector `0x18160ddd`.
6408```solidity
6409function totalSupply() external view returns (uint256);
6410```*/
6411    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6412    #[derive(Clone)]
6413    pub struct totalSupplyCall;
6414    #[derive(serde::Serialize, serde::Deserialize)]
6415    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6416    ///Container type for the return parameters of the [`totalSupply()`](totalSupplyCall) function.
6417    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6418    #[derive(Clone)]
6419    pub struct totalSupplyReturn {
6420        #[allow(missing_docs)]
6421        pub _0: alloy::sol_types::private::primitives::aliases::U256,
6422    }
6423    #[allow(
6424        non_camel_case_types,
6425        non_snake_case,
6426        clippy::pub_underscore_fields,
6427        clippy::style
6428    )]
6429    const _: () = {
6430        use alloy::sol_types as alloy_sol_types;
6431        {
6432            #[doc(hidden)]
6433            type UnderlyingSolTuple<'a> = ();
6434            #[doc(hidden)]
6435            type UnderlyingRustTuple<'a> = ();
6436            #[cfg(test)]
6437            #[allow(dead_code, unreachable_patterns)]
6438            fn _type_assertion(
6439                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6440            ) {
6441                match _t {
6442                    alloy_sol_types::private::AssertTypeEq::<
6443                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6444                    >(_) => {}
6445                }
6446            }
6447            #[automatically_derived]
6448            #[doc(hidden)]
6449            impl ::core::convert::From<totalSupplyCall> for UnderlyingRustTuple<'_> {
6450                fn from(value: totalSupplyCall) -> Self {
6451                    ()
6452                }
6453            }
6454            #[automatically_derived]
6455            #[doc(hidden)]
6456            impl ::core::convert::From<UnderlyingRustTuple<'_>> for totalSupplyCall {
6457                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6458                    Self
6459                }
6460            }
6461        }
6462        {
6463            #[doc(hidden)]
6464            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6465            #[doc(hidden)]
6466            type UnderlyingRustTuple<'a> = (
6467                alloy::sol_types::private::primitives::aliases::U256,
6468            );
6469            #[cfg(test)]
6470            #[allow(dead_code, unreachable_patterns)]
6471            fn _type_assertion(
6472                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6473            ) {
6474                match _t {
6475                    alloy_sol_types::private::AssertTypeEq::<
6476                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6477                    >(_) => {}
6478                }
6479            }
6480            #[automatically_derived]
6481            #[doc(hidden)]
6482            impl ::core::convert::From<totalSupplyReturn> for UnderlyingRustTuple<'_> {
6483                fn from(value: totalSupplyReturn) -> Self {
6484                    (value._0,)
6485                }
6486            }
6487            #[automatically_derived]
6488            #[doc(hidden)]
6489            impl ::core::convert::From<UnderlyingRustTuple<'_>> for totalSupplyReturn {
6490                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6491                    Self { _0: tuple.0 }
6492                }
6493            }
6494        }
6495        #[automatically_derived]
6496        impl alloy_sol_types::SolCall for totalSupplyCall {
6497            type Parameters<'a> = ();
6498            type Token<'a> = <Self::Parameters<
6499                'a,
6500            > as alloy_sol_types::SolType>::Token<'a>;
6501            type Return = alloy::sol_types::private::primitives::aliases::U256;
6502            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6503            type ReturnToken<'a> = <Self::ReturnTuple<
6504                'a,
6505            > as alloy_sol_types::SolType>::Token<'a>;
6506            const SIGNATURE: &'static str = "totalSupply()";
6507            const SELECTOR: [u8; 4] = [24u8, 22u8, 13u8, 221u8];
6508            #[inline]
6509            fn new<'a>(
6510                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6511            ) -> Self {
6512                tuple.into()
6513            }
6514            #[inline]
6515            fn tokenize(&self) -> Self::Token<'_> {
6516                ()
6517            }
6518            #[inline]
6519            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6520                (
6521                    <alloy::sol_types::sol_data::Uint<
6522                        256,
6523                    > as alloy_sol_types::SolType>::tokenize(ret),
6524                )
6525            }
6526            #[inline]
6527            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6528                <Self::ReturnTuple<
6529                    '_,
6530                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6531                    .map(|r| {
6532                        let r: totalSupplyReturn = r.into();
6533                        r._0
6534                    })
6535            }
6536            #[inline]
6537            fn abi_decode_returns_validate(
6538                data: &[u8],
6539            ) -> alloy_sol_types::Result<Self::Return> {
6540                <Self::ReturnTuple<
6541                    '_,
6542                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6543                    .map(|r| {
6544                        let r: totalSupplyReturn = r.into();
6545                        r._0
6546                    })
6547            }
6548        }
6549    };
6550    #[derive(serde::Serialize, serde::Deserialize)]
6551    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6552    /**Function with signature `transferFrom(address,address,uint256)` and selector `0x23b872dd`.
6553```solidity
6554function transferFrom(address from, address to, uint256 tokenId) external;
6555```*/
6556    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6557    #[derive(Clone)]
6558    pub struct transferFromCall {
6559        #[allow(missing_docs)]
6560        pub from: alloy::sol_types::private::Address,
6561        #[allow(missing_docs)]
6562        pub to: alloy::sol_types::private::Address,
6563        #[allow(missing_docs)]
6564        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
6565    }
6566    ///Container type for the return parameters of the [`transferFrom(address,address,uint256)`](transferFromCall) function.
6567    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6568    #[derive(Clone)]
6569    pub struct transferFromReturn {}
6570    #[allow(
6571        non_camel_case_types,
6572        non_snake_case,
6573        clippy::pub_underscore_fields,
6574        clippy::style
6575    )]
6576    const _: () = {
6577        use alloy::sol_types as alloy_sol_types;
6578        {
6579            #[doc(hidden)]
6580            type UnderlyingSolTuple<'a> = (
6581                alloy::sol_types::sol_data::Address,
6582                alloy::sol_types::sol_data::Address,
6583                alloy::sol_types::sol_data::Uint<256>,
6584            );
6585            #[doc(hidden)]
6586            type UnderlyingRustTuple<'a> = (
6587                alloy::sol_types::private::Address,
6588                alloy::sol_types::private::Address,
6589                alloy::sol_types::private::primitives::aliases::U256,
6590            );
6591            #[cfg(test)]
6592            #[allow(dead_code, unreachable_patterns)]
6593            fn _type_assertion(
6594                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6595            ) {
6596                match _t {
6597                    alloy_sol_types::private::AssertTypeEq::<
6598                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6599                    >(_) => {}
6600                }
6601            }
6602            #[automatically_derived]
6603            #[doc(hidden)]
6604            impl ::core::convert::From<transferFromCall> for UnderlyingRustTuple<'_> {
6605                fn from(value: transferFromCall) -> Self {
6606                    (value.from, value.to, value.tokenId)
6607                }
6608            }
6609            #[automatically_derived]
6610            #[doc(hidden)]
6611            impl ::core::convert::From<UnderlyingRustTuple<'_>> for transferFromCall {
6612                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6613                    Self {
6614                        from: tuple.0,
6615                        to: tuple.1,
6616                        tokenId: tuple.2,
6617                    }
6618                }
6619            }
6620        }
6621        {
6622            #[doc(hidden)]
6623            type UnderlyingSolTuple<'a> = ();
6624            #[doc(hidden)]
6625            type UnderlyingRustTuple<'a> = ();
6626            #[cfg(test)]
6627            #[allow(dead_code, unreachable_patterns)]
6628            fn _type_assertion(
6629                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6630            ) {
6631                match _t {
6632                    alloy_sol_types::private::AssertTypeEq::<
6633                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6634                    >(_) => {}
6635                }
6636            }
6637            #[automatically_derived]
6638            #[doc(hidden)]
6639            impl ::core::convert::From<transferFromReturn> for UnderlyingRustTuple<'_> {
6640                fn from(value: transferFromReturn) -> Self {
6641                    ()
6642                }
6643            }
6644            #[automatically_derived]
6645            #[doc(hidden)]
6646            impl ::core::convert::From<UnderlyingRustTuple<'_>> for transferFromReturn {
6647                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6648                    Self {}
6649                }
6650            }
6651        }
6652        impl transferFromReturn {
6653            fn _tokenize(
6654                &self,
6655            ) -> <transferFromCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
6656                ()
6657            }
6658        }
6659        #[automatically_derived]
6660        impl alloy_sol_types::SolCall for transferFromCall {
6661            type Parameters<'a> = (
6662                alloy::sol_types::sol_data::Address,
6663                alloy::sol_types::sol_data::Address,
6664                alloy::sol_types::sol_data::Uint<256>,
6665            );
6666            type Token<'a> = <Self::Parameters<
6667                'a,
6668            > as alloy_sol_types::SolType>::Token<'a>;
6669            type Return = transferFromReturn;
6670            type ReturnTuple<'a> = ();
6671            type ReturnToken<'a> = <Self::ReturnTuple<
6672                'a,
6673            > as alloy_sol_types::SolType>::Token<'a>;
6674            const SIGNATURE: &'static str = "transferFrom(address,address,uint256)";
6675            const SELECTOR: [u8; 4] = [35u8, 184u8, 114u8, 221u8];
6676            #[inline]
6677            fn new<'a>(
6678                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6679            ) -> Self {
6680                tuple.into()
6681            }
6682            #[inline]
6683            fn tokenize(&self) -> Self::Token<'_> {
6684                (
6685                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6686                        &self.from,
6687                    ),
6688                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6689                        &self.to,
6690                    ),
6691                    <alloy::sol_types::sol_data::Uint<
6692                        256,
6693                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
6694                )
6695            }
6696            #[inline]
6697            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6698                transferFromReturn::_tokenize(ret)
6699            }
6700            #[inline]
6701            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6702                <Self::ReturnTuple<
6703                    '_,
6704                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6705                    .map(Into::into)
6706            }
6707            #[inline]
6708            fn abi_decode_returns_validate(
6709                data: &[u8],
6710            ) -> alloy_sol_types::Result<Self::Return> {
6711                <Self::ReturnTuple<
6712                    '_,
6713                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6714                    .map(Into::into)
6715            }
6716        }
6717    };
6718    #[derive(serde::Serialize, serde::Deserialize)]
6719    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6720    /**Function with signature `typeAt(uint256)` and selector `0xb5185a88`.
6721```solidity
6722function typeAt(uint256 typeIndex) external view returns (string memory);
6723```*/
6724    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6725    #[derive(Clone)]
6726    pub struct typeAtCall {
6727        #[allow(missing_docs)]
6728        pub typeIndex: alloy::sol_types::private::primitives::aliases::U256,
6729    }
6730    #[derive(serde::Serialize, serde::Deserialize)]
6731    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6732    ///Container type for the return parameters of the [`typeAt(uint256)`](typeAtCall) function.
6733    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6734    #[derive(Clone)]
6735    pub struct typeAtReturn {
6736        #[allow(missing_docs)]
6737        pub _0: alloy::sol_types::private::String,
6738    }
6739    #[allow(
6740        non_camel_case_types,
6741        non_snake_case,
6742        clippy::pub_underscore_fields,
6743        clippy::style
6744    )]
6745    const _: () = {
6746        use alloy::sol_types as alloy_sol_types;
6747        {
6748            #[doc(hidden)]
6749            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6750            #[doc(hidden)]
6751            type UnderlyingRustTuple<'a> = (
6752                alloy::sol_types::private::primitives::aliases::U256,
6753            );
6754            #[cfg(test)]
6755            #[allow(dead_code, unreachable_patterns)]
6756            fn _type_assertion(
6757                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6758            ) {
6759                match _t {
6760                    alloy_sol_types::private::AssertTypeEq::<
6761                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6762                    >(_) => {}
6763                }
6764            }
6765            #[automatically_derived]
6766            #[doc(hidden)]
6767            impl ::core::convert::From<typeAtCall> for UnderlyingRustTuple<'_> {
6768                fn from(value: typeAtCall) -> Self {
6769                    (value.typeIndex,)
6770                }
6771            }
6772            #[automatically_derived]
6773            #[doc(hidden)]
6774            impl ::core::convert::From<UnderlyingRustTuple<'_>> for typeAtCall {
6775                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6776                    Self { typeIndex: tuple.0 }
6777                }
6778            }
6779        }
6780        {
6781            #[doc(hidden)]
6782            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
6783            #[doc(hidden)]
6784            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
6785            #[cfg(test)]
6786            #[allow(dead_code, unreachable_patterns)]
6787            fn _type_assertion(
6788                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6789            ) {
6790                match _t {
6791                    alloy_sol_types::private::AssertTypeEq::<
6792                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6793                    >(_) => {}
6794                }
6795            }
6796            #[automatically_derived]
6797            #[doc(hidden)]
6798            impl ::core::convert::From<typeAtReturn> for UnderlyingRustTuple<'_> {
6799                fn from(value: typeAtReturn) -> Self {
6800                    (value._0,)
6801                }
6802            }
6803            #[automatically_derived]
6804            #[doc(hidden)]
6805            impl ::core::convert::From<UnderlyingRustTuple<'_>> for typeAtReturn {
6806                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6807                    Self { _0: tuple.0 }
6808                }
6809            }
6810        }
6811        #[automatically_derived]
6812        impl alloy_sol_types::SolCall for typeAtCall {
6813            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6814            type Token<'a> = <Self::Parameters<
6815                'a,
6816            > as alloy_sol_types::SolType>::Token<'a>;
6817            type Return = alloy::sol_types::private::String;
6818            type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,);
6819            type ReturnToken<'a> = <Self::ReturnTuple<
6820                'a,
6821            > as alloy_sol_types::SolType>::Token<'a>;
6822            const SIGNATURE: &'static str = "typeAt(uint256)";
6823            const SELECTOR: [u8; 4] = [181u8, 24u8, 90u8, 136u8];
6824            #[inline]
6825            fn new<'a>(
6826                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6827            ) -> Self {
6828                tuple.into()
6829            }
6830            #[inline]
6831            fn tokenize(&self) -> Self::Token<'_> {
6832                (
6833                    <alloy::sol_types::sol_data::Uint<
6834                        256,
6835                    > as alloy_sol_types::SolType>::tokenize(&self.typeIndex),
6836                )
6837            }
6838            #[inline]
6839            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6840                (
6841                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
6842                        ret,
6843                    ),
6844                )
6845            }
6846            #[inline]
6847            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6848                <Self::ReturnTuple<
6849                    '_,
6850                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6851                    .map(|r| {
6852                        let r: typeAtReturn = r.into();
6853                        r._0
6854                    })
6855            }
6856            #[inline]
6857            fn abi_decode_returns_validate(
6858                data: &[u8],
6859            ) -> alloy_sol_types::Result<Self::Return> {
6860                <Self::ReturnTuple<
6861                    '_,
6862                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6863                    .map(|r| {
6864                        let r: typeAtReturn = r.into();
6865                        r._0
6866                    })
6867            }
6868        }
6869    };
6870    #[derive(serde::Serialize, serde::Deserialize)]
6871    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6872    /**Function with signature `typeIndexOf(uint256)` and selector `0x562317c5`.
6873```solidity
6874function typeIndexOf(uint256 tokenId) external view returns (uint256);
6875```*/
6876    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6877    #[derive(Clone)]
6878    pub struct typeIndexOfCall {
6879        #[allow(missing_docs)]
6880        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
6881    }
6882    #[derive(serde::Serialize, serde::Deserialize)]
6883    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6884    ///Container type for the return parameters of the [`typeIndexOf(uint256)`](typeIndexOfCall) function.
6885    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6886    #[derive(Clone)]
6887    pub struct typeIndexOfReturn {
6888        #[allow(missing_docs)]
6889        pub _0: alloy::sol_types::private::primitives::aliases::U256,
6890    }
6891    #[allow(
6892        non_camel_case_types,
6893        non_snake_case,
6894        clippy::pub_underscore_fields,
6895        clippy::style
6896    )]
6897    const _: () = {
6898        use alloy::sol_types as alloy_sol_types;
6899        {
6900            #[doc(hidden)]
6901            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6902            #[doc(hidden)]
6903            type UnderlyingRustTuple<'a> = (
6904                alloy::sol_types::private::primitives::aliases::U256,
6905            );
6906            #[cfg(test)]
6907            #[allow(dead_code, unreachable_patterns)]
6908            fn _type_assertion(
6909                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6910            ) {
6911                match _t {
6912                    alloy_sol_types::private::AssertTypeEq::<
6913                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6914                    >(_) => {}
6915                }
6916            }
6917            #[automatically_derived]
6918            #[doc(hidden)]
6919            impl ::core::convert::From<typeIndexOfCall> for UnderlyingRustTuple<'_> {
6920                fn from(value: typeIndexOfCall) -> Self {
6921                    (value.tokenId,)
6922                }
6923            }
6924            #[automatically_derived]
6925            #[doc(hidden)]
6926            impl ::core::convert::From<UnderlyingRustTuple<'_>> for typeIndexOfCall {
6927                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6928                    Self { tokenId: tuple.0 }
6929                }
6930            }
6931        }
6932        {
6933            #[doc(hidden)]
6934            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6935            #[doc(hidden)]
6936            type UnderlyingRustTuple<'a> = (
6937                alloy::sol_types::private::primitives::aliases::U256,
6938            );
6939            #[cfg(test)]
6940            #[allow(dead_code, unreachable_patterns)]
6941            fn _type_assertion(
6942                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6943            ) {
6944                match _t {
6945                    alloy_sol_types::private::AssertTypeEq::<
6946                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6947                    >(_) => {}
6948                }
6949            }
6950            #[automatically_derived]
6951            #[doc(hidden)]
6952            impl ::core::convert::From<typeIndexOfReturn> for UnderlyingRustTuple<'_> {
6953                fn from(value: typeIndexOfReturn) -> Self {
6954                    (value._0,)
6955                }
6956            }
6957            #[automatically_derived]
6958            #[doc(hidden)]
6959            impl ::core::convert::From<UnderlyingRustTuple<'_>> for typeIndexOfReturn {
6960                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6961                    Self { _0: tuple.0 }
6962                }
6963            }
6964        }
6965        #[automatically_derived]
6966        impl alloy_sol_types::SolCall for typeIndexOfCall {
6967            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6968            type Token<'a> = <Self::Parameters<
6969                'a,
6970            > as alloy_sol_types::SolType>::Token<'a>;
6971            type Return = alloy::sol_types::private::primitives::aliases::U256;
6972            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6973            type ReturnToken<'a> = <Self::ReturnTuple<
6974                'a,
6975            > as alloy_sol_types::SolType>::Token<'a>;
6976            const SIGNATURE: &'static str = "typeIndexOf(uint256)";
6977            const SELECTOR: [u8; 4] = [86u8, 35u8, 23u8, 197u8];
6978            #[inline]
6979            fn new<'a>(
6980                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6981            ) -> Self {
6982                tuple.into()
6983            }
6984            #[inline]
6985            fn tokenize(&self) -> Self::Token<'_> {
6986                (
6987                    <alloy::sol_types::sol_data::Uint<
6988                        256,
6989                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
6990                )
6991            }
6992            #[inline]
6993            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6994                (
6995                    <alloy::sol_types::sol_data::Uint<
6996                        256,
6997                    > as alloy_sol_types::SolType>::tokenize(ret),
6998                )
6999            }
7000            #[inline]
7001            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7002                <Self::ReturnTuple<
7003                    '_,
7004                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7005                    .map(|r| {
7006                        let r: typeIndexOfReturn = r.into();
7007                        r._0
7008                    })
7009            }
7010            #[inline]
7011            fn abi_decode_returns_validate(
7012                data: &[u8],
7013            ) -> alloy_sol_types::Result<Self::Return> {
7014                <Self::ReturnTuple<
7015                    '_,
7016                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7017                    .map(|r| {
7018                        let r: typeIndexOfReturn = r.into();
7019                        r._0
7020                    })
7021            }
7022        }
7023    };
7024    #[derive(serde::Serialize, serde::Deserialize)]
7025    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7026    /**Function with signature `typeOf(uint256)` and selector `0xc588ff8b`.
7027```solidity
7028function typeOf(uint256 tokenId) external view returns (string memory);
7029```*/
7030    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7031    #[derive(Clone)]
7032    pub struct typeOfCall {
7033        #[allow(missing_docs)]
7034        pub tokenId: alloy::sol_types::private::primitives::aliases::U256,
7035    }
7036    #[derive(serde::Serialize, serde::Deserialize)]
7037    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7038    ///Container type for the return parameters of the [`typeOf(uint256)`](typeOfCall) function.
7039    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7040    #[derive(Clone)]
7041    pub struct typeOfReturn {
7042        #[allow(missing_docs)]
7043        pub _0: alloy::sol_types::private::String,
7044    }
7045    #[allow(
7046        non_camel_case_types,
7047        non_snake_case,
7048        clippy::pub_underscore_fields,
7049        clippy::style
7050    )]
7051    const _: () = {
7052        use alloy::sol_types as alloy_sol_types;
7053        {
7054            #[doc(hidden)]
7055            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
7056            #[doc(hidden)]
7057            type UnderlyingRustTuple<'a> = (
7058                alloy::sol_types::private::primitives::aliases::U256,
7059            );
7060            #[cfg(test)]
7061            #[allow(dead_code, unreachable_patterns)]
7062            fn _type_assertion(
7063                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7064            ) {
7065                match _t {
7066                    alloy_sol_types::private::AssertTypeEq::<
7067                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7068                    >(_) => {}
7069                }
7070            }
7071            #[automatically_derived]
7072            #[doc(hidden)]
7073            impl ::core::convert::From<typeOfCall> for UnderlyingRustTuple<'_> {
7074                fn from(value: typeOfCall) -> Self {
7075                    (value.tokenId,)
7076                }
7077            }
7078            #[automatically_derived]
7079            #[doc(hidden)]
7080            impl ::core::convert::From<UnderlyingRustTuple<'_>> for typeOfCall {
7081                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7082                    Self { tokenId: tuple.0 }
7083                }
7084            }
7085        }
7086        {
7087            #[doc(hidden)]
7088            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
7089            #[doc(hidden)]
7090            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
7091            #[cfg(test)]
7092            #[allow(dead_code, unreachable_patterns)]
7093            fn _type_assertion(
7094                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7095            ) {
7096                match _t {
7097                    alloy_sol_types::private::AssertTypeEq::<
7098                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7099                    >(_) => {}
7100                }
7101            }
7102            #[automatically_derived]
7103            #[doc(hidden)]
7104            impl ::core::convert::From<typeOfReturn> for UnderlyingRustTuple<'_> {
7105                fn from(value: typeOfReturn) -> Self {
7106                    (value._0,)
7107                }
7108            }
7109            #[automatically_derived]
7110            #[doc(hidden)]
7111            impl ::core::convert::From<UnderlyingRustTuple<'_>> for typeOfReturn {
7112                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7113                    Self { _0: tuple.0 }
7114                }
7115            }
7116        }
7117        #[automatically_derived]
7118        impl alloy_sol_types::SolCall for typeOfCall {
7119            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
7120            type Token<'a> = <Self::Parameters<
7121                'a,
7122            > as alloy_sol_types::SolType>::Token<'a>;
7123            type Return = alloy::sol_types::private::String;
7124            type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,);
7125            type ReturnToken<'a> = <Self::ReturnTuple<
7126                'a,
7127            > as alloy_sol_types::SolType>::Token<'a>;
7128            const SIGNATURE: &'static str = "typeOf(uint256)";
7129            const SELECTOR: [u8; 4] = [197u8, 136u8, 255u8, 139u8];
7130            #[inline]
7131            fn new<'a>(
7132                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7133            ) -> Self {
7134                tuple.into()
7135            }
7136            #[inline]
7137            fn tokenize(&self) -> Self::Token<'_> {
7138                (
7139                    <alloy::sol_types::sol_data::Uint<
7140                        256,
7141                    > as alloy_sol_types::SolType>::tokenize(&self.tokenId),
7142                )
7143            }
7144            #[inline]
7145            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7146                (
7147                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
7148                        ret,
7149                    ),
7150                )
7151            }
7152            #[inline]
7153            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7154                <Self::ReturnTuple<
7155                    '_,
7156                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7157                    .map(|r| {
7158                        let r: typeOfReturn = r.into();
7159                        r._0
7160                    })
7161            }
7162            #[inline]
7163            fn abi_decode_returns_validate(
7164                data: &[u8],
7165            ) -> alloy_sol_types::Result<Self::Return> {
7166                <Self::ReturnTuple<
7167                    '_,
7168                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7169                    .map(|r| {
7170                        let r: typeOfReturn = r.into();
7171                        r._0
7172                    })
7173            }
7174        }
7175    };
7176    #[derive(serde::Serialize, serde::Deserialize)]
7177    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7178    /**Function with signature `updateBaseURI(string)` and selector `0x931688cb`.
7179```solidity
7180function updateBaseURI(string memory baseTokenURI) external;
7181```*/
7182    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7183    #[derive(Clone)]
7184    pub struct updateBaseURICall {
7185        #[allow(missing_docs)]
7186        pub baseTokenURI: alloy::sol_types::private::String,
7187    }
7188    ///Container type for the return parameters of the [`updateBaseURI(string)`](updateBaseURICall) function.
7189    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7190    #[derive(Clone)]
7191    pub struct updateBaseURIReturn {}
7192    #[allow(
7193        non_camel_case_types,
7194        non_snake_case,
7195        clippy::pub_underscore_fields,
7196        clippy::style
7197    )]
7198    const _: () = {
7199        use alloy::sol_types as alloy_sol_types;
7200        {
7201            #[doc(hidden)]
7202            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
7203            #[doc(hidden)]
7204            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
7205            #[cfg(test)]
7206            #[allow(dead_code, unreachable_patterns)]
7207            fn _type_assertion(
7208                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7209            ) {
7210                match _t {
7211                    alloy_sol_types::private::AssertTypeEq::<
7212                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7213                    >(_) => {}
7214                }
7215            }
7216            #[automatically_derived]
7217            #[doc(hidden)]
7218            impl ::core::convert::From<updateBaseURICall> for UnderlyingRustTuple<'_> {
7219                fn from(value: updateBaseURICall) -> Self {
7220                    (value.baseTokenURI,)
7221                }
7222            }
7223            #[automatically_derived]
7224            #[doc(hidden)]
7225            impl ::core::convert::From<UnderlyingRustTuple<'_>> for updateBaseURICall {
7226                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7227                    Self { baseTokenURI: tuple.0 }
7228                }
7229            }
7230        }
7231        {
7232            #[doc(hidden)]
7233            type UnderlyingSolTuple<'a> = ();
7234            #[doc(hidden)]
7235            type UnderlyingRustTuple<'a> = ();
7236            #[cfg(test)]
7237            #[allow(dead_code, unreachable_patterns)]
7238            fn _type_assertion(
7239                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7240            ) {
7241                match _t {
7242                    alloy_sol_types::private::AssertTypeEq::<
7243                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7244                    >(_) => {}
7245                }
7246            }
7247            #[automatically_derived]
7248            #[doc(hidden)]
7249            impl ::core::convert::From<updateBaseURIReturn> for UnderlyingRustTuple<'_> {
7250                fn from(value: updateBaseURIReturn) -> Self {
7251                    ()
7252                }
7253            }
7254            #[automatically_derived]
7255            #[doc(hidden)]
7256            impl ::core::convert::From<UnderlyingRustTuple<'_>> for updateBaseURIReturn {
7257                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7258                    Self {}
7259                }
7260            }
7261        }
7262        impl updateBaseURIReturn {
7263            fn _tokenize(
7264                &self,
7265            ) -> <updateBaseURICall as alloy_sol_types::SolCall>::ReturnToken<'_> {
7266                ()
7267            }
7268        }
7269        #[automatically_derived]
7270        impl alloy_sol_types::SolCall for updateBaseURICall {
7271            type Parameters<'a> = (alloy::sol_types::sol_data::String,);
7272            type Token<'a> = <Self::Parameters<
7273                'a,
7274            > as alloy_sol_types::SolType>::Token<'a>;
7275            type Return = updateBaseURIReturn;
7276            type ReturnTuple<'a> = ();
7277            type ReturnToken<'a> = <Self::ReturnTuple<
7278                'a,
7279            > as alloy_sol_types::SolType>::Token<'a>;
7280            const SIGNATURE: &'static str = "updateBaseURI(string)";
7281            const SELECTOR: [u8; 4] = [147u8, 22u8, 136u8, 203u8];
7282            #[inline]
7283            fn new<'a>(
7284                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7285            ) -> Self {
7286                tuple.into()
7287            }
7288            #[inline]
7289            fn tokenize(&self) -> Self::Token<'_> {
7290                (
7291                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
7292                        &self.baseTokenURI,
7293                    ),
7294                )
7295            }
7296            #[inline]
7297            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7298                updateBaseURIReturn::_tokenize(ret)
7299            }
7300            #[inline]
7301            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7302                <Self::ReturnTuple<
7303                    '_,
7304                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7305                    .map(Into::into)
7306            }
7307            #[inline]
7308            fn abi_decode_returns_validate(
7309                data: &[u8],
7310            ) -> alloy_sol_types::Result<Self::Return> {
7311                <Self::ReturnTuple<
7312                    '_,
7313                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7314                    .map(Into::into)
7315            }
7316        }
7317    };
7318    ///Container for all the [`HoprBoost`](self) function calls.
7319    #[derive(serde::Serialize, serde::Deserialize)]
7320    #[derive()]
7321    pub enum HoprBoostCalls {
7322        #[allow(missing_docs)]
7323        DEFAULT_ADMIN_ROLE(DEFAULT_ADMIN_ROLECall),
7324        #[allow(missing_docs)]
7325        MINTER_ROLE(MINTER_ROLECall),
7326        #[allow(missing_docs)]
7327        approve(approveCall),
7328        #[allow(missing_docs)]
7329        balanceOf(balanceOfCall),
7330        #[allow(missing_docs)]
7331        batchMint(batchMintCall),
7332        #[allow(missing_docs)]
7333        boostOf(boostOfCall),
7334        #[allow(missing_docs)]
7335        getApproved(getApprovedCall),
7336        #[allow(missing_docs)]
7337        getRoleAdmin(getRoleAdminCall),
7338        #[allow(missing_docs)]
7339        getRoleMember(getRoleMemberCall),
7340        #[allow(missing_docs)]
7341        getRoleMemberCount(getRoleMemberCountCall),
7342        #[allow(missing_docs)]
7343        grantRole(grantRoleCall),
7344        #[allow(missing_docs)]
7345        hasRole(hasRoleCall),
7346        #[allow(missing_docs)]
7347        isApprovedForAll(isApprovedForAllCall),
7348        #[allow(missing_docs)]
7349        mint(mintCall),
7350        #[allow(missing_docs)]
7351        name(nameCall),
7352        #[allow(missing_docs)]
7353        ownerOf(ownerOfCall),
7354        #[allow(missing_docs)]
7355        reclaimErc20Tokens(reclaimErc20TokensCall),
7356        #[allow(missing_docs)]
7357        reclaimErc721Tokens(reclaimErc721TokensCall),
7358        #[allow(missing_docs)]
7359        renounceRole(renounceRoleCall),
7360        #[allow(missing_docs)]
7361        revokeRole(revokeRoleCall),
7362        #[allow(missing_docs)]
7363        safeTransferFrom_0(safeTransferFrom_0Call),
7364        #[allow(missing_docs)]
7365        safeTransferFrom_1(safeTransferFrom_1Call),
7366        #[allow(missing_docs)]
7367        setApprovalForAll(setApprovalForAllCall),
7368        #[allow(missing_docs)]
7369        supportsInterface(supportsInterfaceCall),
7370        #[allow(missing_docs)]
7371        symbol(symbolCall),
7372        #[allow(missing_docs)]
7373        tokenByIndex(tokenByIndexCall),
7374        #[allow(missing_docs)]
7375        tokenOfOwnerByIndex(tokenOfOwnerByIndexCall),
7376        #[allow(missing_docs)]
7377        tokenURI(tokenURICall),
7378        #[allow(missing_docs)]
7379        totalSupply(totalSupplyCall),
7380        #[allow(missing_docs)]
7381        transferFrom(transferFromCall),
7382        #[allow(missing_docs)]
7383        typeAt(typeAtCall),
7384        #[allow(missing_docs)]
7385        typeIndexOf(typeIndexOfCall),
7386        #[allow(missing_docs)]
7387        typeOf(typeOfCall),
7388        #[allow(missing_docs)]
7389        updateBaseURI(updateBaseURICall),
7390    }
7391    #[automatically_derived]
7392    impl HoprBoostCalls {
7393        /// All the selectors of this enum.
7394        ///
7395        /// Note that the selectors might not be in the same order as the variants.
7396        /// No guarantees are made about the order of the selectors.
7397        ///
7398        /// Prefer using `SolInterface` methods instead.
7399        pub const SELECTORS: &'static [[u8; 4usize]] = &[
7400            [1u8, 255u8, 201u8, 167u8],
7401            [6u8, 253u8, 222u8, 3u8],
7402            [8u8, 24u8, 18u8, 252u8],
7403            [9u8, 94u8, 167u8, 179u8],
7404            [24u8, 22u8, 13u8, 221u8],
7405            [35u8, 184u8, 114u8, 221u8],
7406            [36u8, 138u8, 156u8, 163u8],
7407            [41u8, 134u8, 125u8, 172u8],
7408            [47u8, 47u8, 241u8, 93u8],
7409            [47u8, 116u8, 92u8, 89u8],
7410            [54u8, 86u8, 138u8, 190u8],
7411            [66u8, 132u8, 46u8, 14u8],
7412            [72u8, 198u8, 78u8, 65u8],
7413            [79u8, 108u8, 204u8, 231u8],
7414            [86u8, 35u8, 23u8, 197u8],
7415            [96u8, 103u8, 188u8, 21u8],
7416            [99u8, 82u8, 33u8, 30u8],
7417            [112u8, 160u8, 130u8, 49u8],
7418            [137u8, 108u8, 221u8, 244u8],
7419            [144u8, 16u8, 208u8, 124u8],
7420            [145u8, 209u8, 72u8, 84u8],
7421            [147u8, 22u8, 136u8, 203u8],
7422            [147u8, 101u8, 197u8, 51u8],
7423            [149u8, 216u8, 155u8, 65u8],
7424            [162u8, 23u8, 253u8, 223u8],
7425            [162u8, 44u8, 180u8, 101u8],
7426            [181u8, 24u8, 90u8, 136u8],
7427            [184u8, 141u8, 79u8, 222u8],
7428            [197u8, 136u8, 255u8, 139u8],
7429            [200u8, 123u8, 86u8, 221u8],
7430            [202u8, 21u8, 200u8, 115u8],
7431            [213u8, 57u8, 19u8, 147u8],
7432            [213u8, 71u8, 116u8, 31u8],
7433            [233u8, 133u8, 233u8, 197u8],
7434        ];
7435    }
7436    #[automatically_derived]
7437    impl alloy_sol_types::SolInterface for HoprBoostCalls {
7438        const NAME: &'static str = "HoprBoostCalls";
7439        const MIN_DATA_LENGTH: usize = 0usize;
7440        const COUNT: usize = 34usize;
7441        #[inline]
7442        fn selector(&self) -> [u8; 4] {
7443            match self {
7444                Self::DEFAULT_ADMIN_ROLE(_) => {
7445                    <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::SELECTOR
7446                }
7447                Self::MINTER_ROLE(_) => {
7448                    <MINTER_ROLECall as alloy_sol_types::SolCall>::SELECTOR
7449                }
7450                Self::approve(_) => <approveCall as alloy_sol_types::SolCall>::SELECTOR,
7451                Self::balanceOf(_) => {
7452                    <balanceOfCall as alloy_sol_types::SolCall>::SELECTOR
7453                }
7454                Self::batchMint(_) => {
7455                    <batchMintCall as alloy_sol_types::SolCall>::SELECTOR
7456                }
7457                Self::boostOf(_) => <boostOfCall as alloy_sol_types::SolCall>::SELECTOR,
7458                Self::getApproved(_) => {
7459                    <getApprovedCall as alloy_sol_types::SolCall>::SELECTOR
7460                }
7461                Self::getRoleAdmin(_) => {
7462                    <getRoleAdminCall as alloy_sol_types::SolCall>::SELECTOR
7463                }
7464                Self::getRoleMember(_) => {
7465                    <getRoleMemberCall as alloy_sol_types::SolCall>::SELECTOR
7466                }
7467                Self::getRoleMemberCount(_) => {
7468                    <getRoleMemberCountCall as alloy_sol_types::SolCall>::SELECTOR
7469                }
7470                Self::grantRole(_) => {
7471                    <grantRoleCall as alloy_sol_types::SolCall>::SELECTOR
7472                }
7473                Self::hasRole(_) => <hasRoleCall as alloy_sol_types::SolCall>::SELECTOR,
7474                Self::isApprovedForAll(_) => {
7475                    <isApprovedForAllCall as alloy_sol_types::SolCall>::SELECTOR
7476                }
7477                Self::mint(_) => <mintCall as alloy_sol_types::SolCall>::SELECTOR,
7478                Self::name(_) => <nameCall as alloy_sol_types::SolCall>::SELECTOR,
7479                Self::ownerOf(_) => <ownerOfCall as alloy_sol_types::SolCall>::SELECTOR,
7480                Self::reclaimErc20Tokens(_) => {
7481                    <reclaimErc20TokensCall as alloy_sol_types::SolCall>::SELECTOR
7482                }
7483                Self::reclaimErc721Tokens(_) => {
7484                    <reclaimErc721TokensCall as alloy_sol_types::SolCall>::SELECTOR
7485                }
7486                Self::renounceRole(_) => {
7487                    <renounceRoleCall as alloy_sol_types::SolCall>::SELECTOR
7488                }
7489                Self::revokeRole(_) => {
7490                    <revokeRoleCall as alloy_sol_types::SolCall>::SELECTOR
7491                }
7492                Self::safeTransferFrom_0(_) => {
7493                    <safeTransferFrom_0Call as alloy_sol_types::SolCall>::SELECTOR
7494                }
7495                Self::safeTransferFrom_1(_) => {
7496                    <safeTransferFrom_1Call as alloy_sol_types::SolCall>::SELECTOR
7497                }
7498                Self::setApprovalForAll(_) => {
7499                    <setApprovalForAllCall as alloy_sol_types::SolCall>::SELECTOR
7500                }
7501                Self::supportsInterface(_) => {
7502                    <supportsInterfaceCall as alloy_sol_types::SolCall>::SELECTOR
7503                }
7504                Self::symbol(_) => <symbolCall as alloy_sol_types::SolCall>::SELECTOR,
7505                Self::tokenByIndex(_) => {
7506                    <tokenByIndexCall as alloy_sol_types::SolCall>::SELECTOR
7507                }
7508                Self::tokenOfOwnerByIndex(_) => {
7509                    <tokenOfOwnerByIndexCall as alloy_sol_types::SolCall>::SELECTOR
7510                }
7511                Self::tokenURI(_) => <tokenURICall as alloy_sol_types::SolCall>::SELECTOR,
7512                Self::totalSupply(_) => {
7513                    <totalSupplyCall as alloy_sol_types::SolCall>::SELECTOR
7514                }
7515                Self::transferFrom(_) => {
7516                    <transferFromCall as alloy_sol_types::SolCall>::SELECTOR
7517                }
7518                Self::typeAt(_) => <typeAtCall as alloy_sol_types::SolCall>::SELECTOR,
7519                Self::typeIndexOf(_) => {
7520                    <typeIndexOfCall as alloy_sol_types::SolCall>::SELECTOR
7521                }
7522                Self::typeOf(_) => <typeOfCall as alloy_sol_types::SolCall>::SELECTOR,
7523                Self::updateBaseURI(_) => {
7524                    <updateBaseURICall as alloy_sol_types::SolCall>::SELECTOR
7525                }
7526            }
7527        }
7528        #[inline]
7529        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
7530            Self::SELECTORS.get(i).copied()
7531        }
7532        #[inline]
7533        fn valid_selector(selector: [u8; 4]) -> bool {
7534            Self::SELECTORS.binary_search(&selector).is_ok()
7535        }
7536        #[inline]
7537        #[allow(non_snake_case)]
7538        fn abi_decode_raw(
7539            selector: [u8; 4],
7540            data: &[u8],
7541        ) -> alloy_sol_types::Result<Self> {
7542            static DECODE_SHIMS: &[fn(
7543                &[u8],
7544            ) -> alloy_sol_types::Result<HoprBoostCalls>] = &[
7545                {
7546                    fn supportsInterface(
7547                        data: &[u8],
7548                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7549                        <supportsInterfaceCall as alloy_sol_types::SolCall>::abi_decode_raw(
7550                                data,
7551                            )
7552                            .map(HoprBoostCalls::supportsInterface)
7553                    }
7554                    supportsInterface
7555                },
7556                {
7557                    fn name(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7558                        <nameCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7559                            .map(HoprBoostCalls::name)
7560                    }
7561                    name
7562                },
7563                {
7564                    fn getApproved(
7565                        data: &[u8],
7566                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7567                        <getApprovedCall as alloy_sol_types::SolCall>::abi_decode_raw(
7568                                data,
7569                            )
7570                            .map(HoprBoostCalls::getApproved)
7571                    }
7572                    getApproved
7573                },
7574                {
7575                    fn approve(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7576                        <approveCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7577                            .map(HoprBoostCalls::approve)
7578                    }
7579                    approve
7580                },
7581                {
7582                    fn totalSupply(
7583                        data: &[u8],
7584                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7585                        <totalSupplyCall as alloy_sol_types::SolCall>::abi_decode_raw(
7586                                data,
7587                            )
7588                            .map(HoprBoostCalls::totalSupply)
7589                    }
7590                    totalSupply
7591                },
7592                {
7593                    fn transferFrom(
7594                        data: &[u8],
7595                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7596                        <transferFromCall as alloy_sol_types::SolCall>::abi_decode_raw(
7597                                data,
7598                            )
7599                            .map(HoprBoostCalls::transferFrom)
7600                    }
7601                    transferFrom
7602                },
7603                {
7604                    fn getRoleAdmin(
7605                        data: &[u8],
7606                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7607                        <getRoleAdminCall as alloy_sol_types::SolCall>::abi_decode_raw(
7608                                data,
7609                            )
7610                            .map(HoprBoostCalls::getRoleAdmin)
7611                    }
7612                    getRoleAdmin
7613                },
7614                {
7615                    fn mint(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7616                        <mintCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7617                            .map(HoprBoostCalls::mint)
7618                    }
7619                    mint
7620                },
7621                {
7622                    fn grantRole(
7623                        data: &[u8],
7624                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7625                        <grantRoleCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7626                            .map(HoprBoostCalls::grantRole)
7627                    }
7628                    grantRole
7629                },
7630                {
7631                    fn tokenOfOwnerByIndex(
7632                        data: &[u8],
7633                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7634                        <tokenOfOwnerByIndexCall as alloy_sol_types::SolCall>::abi_decode_raw(
7635                                data,
7636                            )
7637                            .map(HoprBoostCalls::tokenOfOwnerByIndex)
7638                    }
7639                    tokenOfOwnerByIndex
7640                },
7641                {
7642                    fn renounceRole(
7643                        data: &[u8],
7644                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7645                        <renounceRoleCall as alloy_sol_types::SolCall>::abi_decode_raw(
7646                                data,
7647                            )
7648                            .map(HoprBoostCalls::renounceRole)
7649                    }
7650                    renounceRole
7651                },
7652                {
7653                    fn safeTransferFrom_0(
7654                        data: &[u8],
7655                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7656                        <safeTransferFrom_0Call as alloy_sol_types::SolCall>::abi_decode_raw(
7657                                data,
7658                            )
7659                            .map(HoprBoostCalls::safeTransferFrom_0)
7660                    }
7661                    safeTransferFrom_0
7662                },
7663                {
7664                    fn reclaimErc721Tokens(
7665                        data: &[u8],
7666                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7667                        <reclaimErc721TokensCall as alloy_sol_types::SolCall>::abi_decode_raw(
7668                                data,
7669                            )
7670                            .map(HoprBoostCalls::reclaimErc721Tokens)
7671                    }
7672                    reclaimErc721Tokens
7673                },
7674                {
7675                    fn tokenByIndex(
7676                        data: &[u8],
7677                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7678                        <tokenByIndexCall as alloy_sol_types::SolCall>::abi_decode_raw(
7679                                data,
7680                            )
7681                            .map(HoprBoostCalls::tokenByIndex)
7682                    }
7683                    tokenByIndex
7684                },
7685                {
7686                    fn typeIndexOf(
7687                        data: &[u8],
7688                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7689                        <typeIndexOfCall as alloy_sol_types::SolCall>::abi_decode_raw(
7690                                data,
7691                            )
7692                            .map(HoprBoostCalls::typeIndexOf)
7693                    }
7694                    typeIndexOf
7695                },
7696                {
7697                    fn reclaimErc20Tokens(
7698                        data: &[u8],
7699                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7700                        <reclaimErc20TokensCall as alloy_sol_types::SolCall>::abi_decode_raw(
7701                                data,
7702                            )
7703                            .map(HoprBoostCalls::reclaimErc20Tokens)
7704                    }
7705                    reclaimErc20Tokens
7706                },
7707                {
7708                    fn ownerOf(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7709                        <ownerOfCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7710                            .map(HoprBoostCalls::ownerOf)
7711                    }
7712                    ownerOf
7713                },
7714                {
7715                    fn balanceOf(
7716                        data: &[u8],
7717                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7718                        <balanceOfCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7719                            .map(HoprBoostCalls::balanceOf)
7720                    }
7721                    balanceOf
7722                },
7723                {
7724                    fn boostOf(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7725                        <boostOfCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7726                            .map(HoprBoostCalls::boostOf)
7727                    }
7728                    boostOf
7729                },
7730                {
7731                    fn getRoleMember(
7732                        data: &[u8],
7733                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7734                        <getRoleMemberCall as alloy_sol_types::SolCall>::abi_decode_raw(
7735                                data,
7736                            )
7737                            .map(HoprBoostCalls::getRoleMember)
7738                    }
7739                    getRoleMember
7740                },
7741                {
7742                    fn hasRole(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7743                        <hasRoleCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7744                            .map(HoprBoostCalls::hasRole)
7745                    }
7746                    hasRole
7747                },
7748                {
7749                    fn updateBaseURI(
7750                        data: &[u8],
7751                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7752                        <updateBaseURICall as alloy_sol_types::SolCall>::abi_decode_raw(
7753                                data,
7754                            )
7755                            .map(HoprBoostCalls::updateBaseURI)
7756                    }
7757                    updateBaseURI
7758                },
7759                {
7760                    fn batchMint(
7761                        data: &[u8],
7762                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7763                        <batchMintCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7764                            .map(HoprBoostCalls::batchMint)
7765                    }
7766                    batchMint
7767                },
7768                {
7769                    fn symbol(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7770                        <symbolCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7771                            .map(HoprBoostCalls::symbol)
7772                    }
7773                    symbol
7774                },
7775                {
7776                    fn DEFAULT_ADMIN_ROLE(
7777                        data: &[u8],
7778                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7779                        <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::abi_decode_raw(
7780                                data,
7781                            )
7782                            .map(HoprBoostCalls::DEFAULT_ADMIN_ROLE)
7783                    }
7784                    DEFAULT_ADMIN_ROLE
7785                },
7786                {
7787                    fn setApprovalForAll(
7788                        data: &[u8],
7789                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7790                        <setApprovalForAllCall as alloy_sol_types::SolCall>::abi_decode_raw(
7791                                data,
7792                            )
7793                            .map(HoprBoostCalls::setApprovalForAll)
7794                    }
7795                    setApprovalForAll
7796                },
7797                {
7798                    fn typeAt(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7799                        <typeAtCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7800                            .map(HoprBoostCalls::typeAt)
7801                    }
7802                    typeAt
7803                },
7804                {
7805                    fn safeTransferFrom_1(
7806                        data: &[u8],
7807                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7808                        <safeTransferFrom_1Call as alloy_sol_types::SolCall>::abi_decode_raw(
7809                                data,
7810                            )
7811                            .map(HoprBoostCalls::safeTransferFrom_1)
7812                    }
7813                    safeTransferFrom_1
7814                },
7815                {
7816                    fn typeOf(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7817                        <typeOfCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7818                            .map(HoprBoostCalls::typeOf)
7819                    }
7820                    typeOf
7821                },
7822                {
7823                    fn tokenURI(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7824                        <tokenURICall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7825                            .map(HoprBoostCalls::tokenURI)
7826                    }
7827                    tokenURI
7828                },
7829                {
7830                    fn getRoleMemberCount(
7831                        data: &[u8],
7832                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7833                        <getRoleMemberCountCall as alloy_sol_types::SolCall>::abi_decode_raw(
7834                                data,
7835                            )
7836                            .map(HoprBoostCalls::getRoleMemberCount)
7837                    }
7838                    getRoleMemberCount
7839                },
7840                {
7841                    fn MINTER_ROLE(
7842                        data: &[u8],
7843                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7844                        <MINTER_ROLECall as alloy_sol_types::SolCall>::abi_decode_raw(
7845                                data,
7846                            )
7847                            .map(HoprBoostCalls::MINTER_ROLE)
7848                    }
7849                    MINTER_ROLE
7850                },
7851                {
7852                    fn revokeRole(
7853                        data: &[u8],
7854                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7855                        <revokeRoleCall as alloy_sol_types::SolCall>::abi_decode_raw(
7856                                data,
7857                            )
7858                            .map(HoprBoostCalls::revokeRole)
7859                    }
7860                    revokeRole
7861                },
7862                {
7863                    fn isApprovedForAll(
7864                        data: &[u8],
7865                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7866                        <isApprovedForAllCall as alloy_sol_types::SolCall>::abi_decode_raw(
7867                                data,
7868                            )
7869                            .map(HoprBoostCalls::isApprovedForAll)
7870                    }
7871                    isApprovedForAll
7872                },
7873            ];
7874            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
7875                return Err(
7876                    alloy_sol_types::Error::unknown_selector(
7877                        <Self as alloy_sol_types::SolInterface>::NAME,
7878                        selector,
7879                    ),
7880                );
7881            };
7882            DECODE_SHIMS[idx](data)
7883        }
7884        #[inline]
7885        #[allow(non_snake_case)]
7886        fn abi_decode_raw_validate(
7887            selector: [u8; 4],
7888            data: &[u8],
7889        ) -> alloy_sol_types::Result<Self> {
7890            static DECODE_VALIDATE_SHIMS: &[fn(
7891                &[u8],
7892            ) -> alloy_sol_types::Result<HoprBoostCalls>] = &[
7893                {
7894                    fn supportsInterface(
7895                        data: &[u8],
7896                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7897                        <supportsInterfaceCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7898                                data,
7899                            )
7900                            .map(HoprBoostCalls::supportsInterface)
7901                    }
7902                    supportsInterface
7903                },
7904                {
7905                    fn name(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7906                        <nameCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7907                                data,
7908                            )
7909                            .map(HoprBoostCalls::name)
7910                    }
7911                    name
7912                },
7913                {
7914                    fn getApproved(
7915                        data: &[u8],
7916                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7917                        <getApprovedCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7918                                data,
7919                            )
7920                            .map(HoprBoostCalls::getApproved)
7921                    }
7922                    getApproved
7923                },
7924                {
7925                    fn approve(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7926                        <approveCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7927                                data,
7928                            )
7929                            .map(HoprBoostCalls::approve)
7930                    }
7931                    approve
7932                },
7933                {
7934                    fn totalSupply(
7935                        data: &[u8],
7936                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7937                        <totalSupplyCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7938                                data,
7939                            )
7940                            .map(HoprBoostCalls::totalSupply)
7941                    }
7942                    totalSupply
7943                },
7944                {
7945                    fn transferFrom(
7946                        data: &[u8],
7947                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7948                        <transferFromCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7949                                data,
7950                            )
7951                            .map(HoprBoostCalls::transferFrom)
7952                    }
7953                    transferFrom
7954                },
7955                {
7956                    fn getRoleAdmin(
7957                        data: &[u8],
7958                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7959                        <getRoleAdminCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7960                                data,
7961                            )
7962                            .map(HoprBoostCalls::getRoleAdmin)
7963                    }
7964                    getRoleAdmin
7965                },
7966                {
7967                    fn mint(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
7968                        <mintCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7969                                data,
7970                            )
7971                            .map(HoprBoostCalls::mint)
7972                    }
7973                    mint
7974                },
7975                {
7976                    fn grantRole(
7977                        data: &[u8],
7978                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7979                        <grantRoleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7980                                data,
7981                            )
7982                            .map(HoprBoostCalls::grantRole)
7983                    }
7984                    grantRole
7985                },
7986                {
7987                    fn tokenOfOwnerByIndex(
7988                        data: &[u8],
7989                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
7990                        <tokenOfOwnerByIndexCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
7991                                data,
7992                            )
7993                            .map(HoprBoostCalls::tokenOfOwnerByIndex)
7994                    }
7995                    tokenOfOwnerByIndex
7996                },
7997                {
7998                    fn renounceRole(
7999                        data: &[u8],
8000                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8001                        <renounceRoleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8002                                data,
8003                            )
8004                            .map(HoprBoostCalls::renounceRole)
8005                    }
8006                    renounceRole
8007                },
8008                {
8009                    fn safeTransferFrom_0(
8010                        data: &[u8],
8011                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8012                        <safeTransferFrom_0Call as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8013                                data,
8014                            )
8015                            .map(HoprBoostCalls::safeTransferFrom_0)
8016                    }
8017                    safeTransferFrom_0
8018                },
8019                {
8020                    fn reclaimErc721Tokens(
8021                        data: &[u8],
8022                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8023                        <reclaimErc721TokensCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8024                                data,
8025                            )
8026                            .map(HoprBoostCalls::reclaimErc721Tokens)
8027                    }
8028                    reclaimErc721Tokens
8029                },
8030                {
8031                    fn tokenByIndex(
8032                        data: &[u8],
8033                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8034                        <tokenByIndexCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8035                                data,
8036                            )
8037                            .map(HoprBoostCalls::tokenByIndex)
8038                    }
8039                    tokenByIndex
8040                },
8041                {
8042                    fn typeIndexOf(
8043                        data: &[u8],
8044                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8045                        <typeIndexOfCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8046                                data,
8047                            )
8048                            .map(HoprBoostCalls::typeIndexOf)
8049                    }
8050                    typeIndexOf
8051                },
8052                {
8053                    fn reclaimErc20Tokens(
8054                        data: &[u8],
8055                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8056                        <reclaimErc20TokensCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8057                                data,
8058                            )
8059                            .map(HoprBoostCalls::reclaimErc20Tokens)
8060                    }
8061                    reclaimErc20Tokens
8062                },
8063                {
8064                    fn ownerOf(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
8065                        <ownerOfCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8066                                data,
8067                            )
8068                            .map(HoprBoostCalls::ownerOf)
8069                    }
8070                    ownerOf
8071                },
8072                {
8073                    fn balanceOf(
8074                        data: &[u8],
8075                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8076                        <balanceOfCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8077                                data,
8078                            )
8079                            .map(HoprBoostCalls::balanceOf)
8080                    }
8081                    balanceOf
8082                },
8083                {
8084                    fn boostOf(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
8085                        <boostOfCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8086                                data,
8087                            )
8088                            .map(HoprBoostCalls::boostOf)
8089                    }
8090                    boostOf
8091                },
8092                {
8093                    fn getRoleMember(
8094                        data: &[u8],
8095                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8096                        <getRoleMemberCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8097                                data,
8098                            )
8099                            .map(HoprBoostCalls::getRoleMember)
8100                    }
8101                    getRoleMember
8102                },
8103                {
8104                    fn hasRole(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
8105                        <hasRoleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8106                                data,
8107                            )
8108                            .map(HoprBoostCalls::hasRole)
8109                    }
8110                    hasRole
8111                },
8112                {
8113                    fn updateBaseURI(
8114                        data: &[u8],
8115                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8116                        <updateBaseURICall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8117                                data,
8118                            )
8119                            .map(HoprBoostCalls::updateBaseURI)
8120                    }
8121                    updateBaseURI
8122                },
8123                {
8124                    fn batchMint(
8125                        data: &[u8],
8126                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8127                        <batchMintCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8128                                data,
8129                            )
8130                            .map(HoprBoostCalls::batchMint)
8131                    }
8132                    batchMint
8133                },
8134                {
8135                    fn symbol(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
8136                        <symbolCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8137                                data,
8138                            )
8139                            .map(HoprBoostCalls::symbol)
8140                    }
8141                    symbol
8142                },
8143                {
8144                    fn DEFAULT_ADMIN_ROLE(
8145                        data: &[u8],
8146                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8147                        <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8148                                data,
8149                            )
8150                            .map(HoprBoostCalls::DEFAULT_ADMIN_ROLE)
8151                    }
8152                    DEFAULT_ADMIN_ROLE
8153                },
8154                {
8155                    fn setApprovalForAll(
8156                        data: &[u8],
8157                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8158                        <setApprovalForAllCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8159                                data,
8160                            )
8161                            .map(HoprBoostCalls::setApprovalForAll)
8162                    }
8163                    setApprovalForAll
8164                },
8165                {
8166                    fn typeAt(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
8167                        <typeAtCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8168                                data,
8169                            )
8170                            .map(HoprBoostCalls::typeAt)
8171                    }
8172                    typeAt
8173                },
8174                {
8175                    fn safeTransferFrom_1(
8176                        data: &[u8],
8177                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8178                        <safeTransferFrom_1Call as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8179                                data,
8180                            )
8181                            .map(HoprBoostCalls::safeTransferFrom_1)
8182                    }
8183                    safeTransferFrom_1
8184                },
8185                {
8186                    fn typeOf(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
8187                        <typeOfCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8188                                data,
8189                            )
8190                            .map(HoprBoostCalls::typeOf)
8191                    }
8192                    typeOf
8193                },
8194                {
8195                    fn tokenURI(data: &[u8]) -> alloy_sol_types::Result<HoprBoostCalls> {
8196                        <tokenURICall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8197                                data,
8198                            )
8199                            .map(HoprBoostCalls::tokenURI)
8200                    }
8201                    tokenURI
8202                },
8203                {
8204                    fn getRoleMemberCount(
8205                        data: &[u8],
8206                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8207                        <getRoleMemberCountCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8208                                data,
8209                            )
8210                            .map(HoprBoostCalls::getRoleMemberCount)
8211                    }
8212                    getRoleMemberCount
8213                },
8214                {
8215                    fn MINTER_ROLE(
8216                        data: &[u8],
8217                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8218                        <MINTER_ROLECall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8219                                data,
8220                            )
8221                            .map(HoprBoostCalls::MINTER_ROLE)
8222                    }
8223                    MINTER_ROLE
8224                },
8225                {
8226                    fn revokeRole(
8227                        data: &[u8],
8228                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8229                        <revokeRoleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8230                                data,
8231                            )
8232                            .map(HoprBoostCalls::revokeRole)
8233                    }
8234                    revokeRole
8235                },
8236                {
8237                    fn isApprovedForAll(
8238                        data: &[u8],
8239                    ) -> alloy_sol_types::Result<HoprBoostCalls> {
8240                        <isApprovedForAllCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8241                                data,
8242                            )
8243                            .map(HoprBoostCalls::isApprovedForAll)
8244                    }
8245                    isApprovedForAll
8246                },
8247            ];
8248            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
8249                return Err(
8250                    alloy_sol_types::Error::unknown_selector(
8251                        <Self as alloy_sol_types::SolInterface>::NAME,
8252                        selector,
8253                    ),
8254                );
8255            };
8256            DECODE_VALIDATE_SHIMS[idx](data)
8257        }
8258        #[inline]
8259        fn abi_encoded_size(&self) -> usize {
8260            match self {
8261                Self::DEFAULT_ADMIN_ROLE(inner) => {
8262                    <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::abi_encoded_size(
8263                        inner,
8264                    )
8265                }
8266                Self::MINTER_ROLE(inner) => {
8267                    <MINTER_ROLECall as alloy_sol_types::SolCall>::abi_encoded_size(
8268                        inner,
8269                    )
8270                }
8271                Self::approve(inner) => {
8272                    <approveCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8273                }
8274                Self::balanceOf(inner) => {
8275                    <balanceOfCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8276                }
8277                Self::batchMint(inner) => {
8278                    <batchMintCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8279                }
8280                Self::boostOf(inner) => {
8281                    <boostOfCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8282                }
8283                Self::getApproved(inner) => {
8284                    <getApprovedCall as alloy_sol_types::SolCall>::abi_encoded_size(
8285                        inner,
8286                    )
8287                }
8288                Self::getRoleAdmin(inner) => {
8289                    <getRoleAdminCall as alloy_sol_types::SolCall>::abi_encoded_size(
8290                        inner,
8291                    )
8292                }
8293                Self::getRoleMember(inner) => {
8294                    <getRoleMemberCall as alloy_sol_types::SolCall>::abi_encoded_size(
8295                        inner,
8296                    )
8297                }
8298                Self::getRoleMemberCount(inner) => {
8299                    <getRoleMemberCountCall as alloy_sol_types::SolCall>::abi_encoded_size(
8300                        inner,
8301                    )
8302                }
8303                Self::grantRole(inner) => {
8304                    <grantRoleCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8305                }
8306                Self::hasRole(inner) => {
8307                    <hasRoleCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8308                }
8309                Self::isApprovedForAll(inner) => {
8310                    <isApprovedForAllCall as alloy_sol_types::SolCall>::abi_encoded_size(
8311                        inner,
8312                    )
8313                }
8314                Self::mint(inner) => {
8315                    <mintCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8316                }
8317                Self::name(inner) => {
8318                    <nameCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8319                }
8320                Self::ownerOf(inner) => {
8321                    <ownerOfCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8322                }
8323                Self::reclaimErc20Tokens(inner) => {
8324                    <reclaimErc20TokensCall as alloy_sol_types::SolCall>::abi_encoded_size(
8325                        inner,
8326                    )
8327                }
8328                Self::reclaimErc721Tokens(inner) => {
8329                    <reclaimErc721TokensCall as alloy_sol_types::SolCall>::abi_encoded_size(
8330                        inner,
8331                    )
8332                }
8333                Self::renounceRole(inner) => {
8334                    <renounceRoleCall as alloy_sol_types::SolCall>::abi_encoded_size(
8335                        inner,
8336                    )
8337                }
8338                Self::revokeRole(inner) => {
8339                    <revokeRoleCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8340                }
8341                Self::safeTransferFrom_0(inner) => {
8342                    <safeTransferFrom_0Call as alloy_sol_types::SolCall>::abi_encoded_size(
8343                        inner,
8344                    )
8345                }
8346                Self::safeTransferFrom_1(inner) => {
8347                    <safeTransferFrom_1Call as alloy_sol_types::SolCall>::abi_encoded_size(
8348                        inner,
8349                    )
8350                }
8351                Self::setApprovalForAll(inner) => {
8352                    <setApprovalForAllCall as alloy_sol_types::SolCall>::abi_encoded_size(
8353                        inner,
8354                    )
8355                }
8356                Self::supportsInterface(inner) => {
8357                    <supportsInterfaceCall as alloy_sol_types::SolCall>::abi_encoded_size(
8358                        inner,
8359                    )
8360                }
8361                Self::symbol(inner) => {
8362                    <symbolCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8363                }
8364                Self::tokenByIndex(inner) => {
8365                    <tokenByIndexCall as alloy_sol_types::SolCall>::abi_encoded_size(
8366                        inner,
8367                    )
8368                }
8369                Self::tokenOfOwnerByIndex(inner) => {
8370                    <tokenOfOwnerByIndexCall as alloy_sol_types::SolCall>::abi_encoded_size(
8371                        inner,
8372                    )
8373                }
8374                Self::tokenURI(inner) => {
8375                    <tokenURICall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8376                }
8377                Self::totalSupply(inner) => {
8378                    <totalSupplyCall as alloy_sol_types::SolCall>::abi_encoded_size(
8379                        inner,
8380                    )
8381                }
8382                Self::transferFrom(inner) => {
8383                    <transferFromCall as alloy_sol_types::SolCall>::abi_encoded_size(
8384                        inner,
8385                    )
8386                }
8387                Self::typeAt(inner) => {
8388                    <typeAtCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8389                }
8390                Self::typeIndexOf(inner) => {
8391                    <typeIndexOfCall as alloy_sol_types::SolCall>::abi_encoded_size(
8392                        inner,
8393                    )
8394                }
8395                Self::typeOf(inner) => {
8396                    <typeOfCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8397                }
8398                Self::updateBaseURI(inner) => {
8399                    <updateBaseURICall as alloy_sol_types::SolCall>::abi_encoded_size(
8400                        inner,
8401                    )
8402                }
8403            }
8404        }
8405        #[inline]
8406        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
8407            match self {
8408                Self::DEFAULT_ADMIN_ROLE(inner) => {
8409                    <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::abi_encode_raw(
8410                        inner,
8411                        out,
8412                    )
8413                }
8414                Self::MINTER_ROLE(inner) => {
8415                    <MINTER_ROLECall as alloy_sol_types::SolCall>::abi_encode_raw(
8416                        inner,
8417                        out,
8418                    )
8419                }
8420                Self::approve(inner) => {
8421                    <approveCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8422                }
8423                Self::balanceOf(inner) => {
8424                    <balanceOfCall as alloy_sol_types::SolCall>::abi_encode_raw(
8425                        inner,
8426                        out,
8427                    )
8428                }
8429                Self::batchMint(inner) => {
8430                    <batchMintCall as alloy_sol_types::SolCall>::abi_encode_raw(
8431                        inner,
8432                        out,
8433                    )
8434                }
8435                Self::boostOf(inner) => {
8436                    <boostOfCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8437                }
8438                Self::getApproved(inner) => {
8439                    <getApprovedCall as alloy_sol_types::SolCall>::abi_encode_raw(
8440                        inner,
8441                        out,
8442                    )
8443                }
8444                Self::getRoleAdmin(inner) => {
8445                    <getRoleAdminCall as alloy_sol_types::SolCall>::abi_encode_raw(
8446                        inner,
8447                        out,
8448                    )
8449                }
8450                Self::getRoleMember(inner) => {
8451                    <getRoleMemberCall as alloy_sol_types::SolCall>::abi_encode_raw(
8452                        inner,
8453                        out,
8454                    )
8455                }
8456                Self::getRoleMemberCount(inner) => {
8457                    <getRoleMemberCountCall as alloy_sol_types::SolCall>::abi_encode_raw(
8458                        inner,
8459                        out,
8460                    )
8461                }
8462                Self::grantRole(inner) => {
8463                    <grantRoleCall as alloy_sol_types::SolCall>::abi_encode_raw(
8464                        inner,
8465                        out,
8466                    )
8467                }
8468                Self::hasRole(inner) => {
8469                    <hasRoleCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8470                }
8471                Self::isApprovedForAll(inner) => {
8472                    <isApprovedForAllCall as alloy_sol_types::SolCall>::abi_encode_raw(
8473                        inner,
8474                        out,
8475                    )
8476                }
8477                Self::mint(inner) => {
8478                    <mintCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8479                }
8480                Self::name(inner) => {
8481                    <nameCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8482                }
8483                Self::ownerOf(inner) => {
8484                    <ownerOfCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8485                }
8486                Self::reclaimErc20Tokens(inner) => {
8487                    <reclaimErc20TokensCall as alloy_sol_types::SolCall>::abi_encode_raw(
8488                        inner,
8489                        out,
8490                    )
8491                }
8492                Self::reclaimErc721Tokens(inner) => {
8493                    <reclaimErc721TokensCall as alloy_sol_types::SolCall>::abi_encode_raw(
8494                        inner,
8495                        out,
8496                    )
8497                }
8498                Self::renounceRole(inner) => {
8499                    <renounceRoleCall as alloy_sol_types::SolCall>::abi_encode_raw(
8500                        inner,
8501                        out,
8502                    )
8503                }
8504                Self::revokeRole(inner) => {
8505                    <revokeRoleCall as alloy_sol_types::SolCall>::abi_encode_raw(
8506                        inner,
8507                        out,
8508                    )
8509                }
8510                Self::safeTransferFrom_0(inner) => {
8511                    <safeTransferFrom_0Call as alloy_sol_types::SolCall>::abi_encode_raw(
8512                        inner,
8513                        out,
8514                    )
8515                }
8516                Self::safeTransferFrom_1(inner) => {
8517                    <safeTransferFrom_1Call as alloy_sol_types::SolCall>::abi_encode_raw(
8518                        inner,
8519                        out,
8520                    )
8521                }
8522                Self::setApprovalForAll(inner) => {
8523                    <setApprovalForAllCall as alloy_sol_types::SolCall>::abi_encode_raw(
8524                        inner,
8525                        out,
8526                    )
8527                }
8528                Self::supportsInterface(inner) => {
8529                    <supportsInterfaceCall as alloy_sol_types::SolCall>::abi_encode_raw(
8530                        inner,
8531                        out,
8532                    )
8533                }
8534                Self::symbol(inner) => {
8535                    <symbolCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8536                }
8537                Self::tokenByIndex(inner) => {
8538                    <tokenByIndexCall as alloy_sol_types::SolCall>::abi_encode_raw(
8539                        inner,
8540                        out,
8541                    )
8542                }
8543                Self::tokenOfOwnerByIndex(inner) => {
8544                    <tokenOfOwnerByIndexCall as alloy_sol_types::SolCall>::abi_encode_raw(
8545                        inner,
8546                        out,
8547                    )
8548                }
8549                Self::tokenURI(inner) => {
8550                    <tokenURICall as alloy_sol_types::SolCall>::abi_encode_raw(
8551                        inner,
8552                        out,
8553                    )
8554                }
8555                Self::totalSupply(inner) => {
8556                    <totalSupplyCall as alloy_sol_types::SolCall>::abi_encode_raw(
8557                        inner,
8558                        out,
8559                    )
8560                }
8561                Self::transferFrom(inner) => {
8562                    <transferFromCall as alloy_sol_types::SolCall>::abi_encode_raw(
8563                        inner,
8564                        out,
8565                    )
8566                }
8567                Self::typeAt(inner) => {
8568                    <typeAtCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8569                }
8570                Self::typeIndexOf(inner) => {
8571                    <typeIndexOfCall as alloy_sol_types::SolCall>::abi_encode_raw(
8572                        inner,
8573                        out,
8574                    )
8575                }
8576                Self::typeOf(inner) => {
8577                    <typeOfCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8578                }
8579                Self::updateBaseURI(inner) => {
8580                    <updateBaseURICall as alloy_sol_types::SolCall>::abi_encode_raw(
8581                        inner,
8582                        out,
8583                    )
8584                }
8585            }
8586        }
8587    }
8588    ///Container for all the [`HoprBoost`](self) events.
8589    #[derive(serde::Serialize, serde::Deserialize)]
8590    #[derive(Debug, PartialEq, Eq, Hash)]
8591    pub enum HoprBoostEvents {
8592        #[allow(missing_docs)]
8593        Approval(Approval),
8594        #[allow(missing_docs)]
8595        ApprovalForAll(ApprovalForAll),
8596        #[allow(missing_docs)]
8597        BoostMinted(BoostMinted),
8598        #[allow(missing_docs)]
8599        RoleAdminChanged(RoleAdminChanged),
8600        #[allow(missing_docs)]
8601        RoleGranted(RoleGranted),
8602        #[allow(missing_docs)]
8603        RoleRevoked(RoleRevoked),
8604        #[allow(missing_docs)]
8605        Transfer(Transfer),
8606    }
8607    #[automatically_derived]
8608    impl HoprBoostEvents {
8609        /// All the selectors of this enum.
8610        ///
8611        /// Note that the selectors might not be in the same order as the variants.
8612        /// No guarantees are made about the order of the selectors.
8613        ///
8614        /// Prefer using `SolInterface` methods instead.
8615        pub const SELECTORS: &'static [[u8; 32usize]] = &[
8616            [
8617                23u8, 48u8, 126u8, 171u8, 57u8, 171u8, 97u8, 7u8, 232u8, 137u8, 152u8,
8618                69u8, 173u8, 61u8, 89u8, 189u8, 150u8, 83u8, 242u8, 0u8, 242u8, 32u8,
8619                146u8, 4u8, 137u8, 202u8, 43u8, 89u8, 55u8, 105u8, 108u8, 49u8,
8620            ],
8621            [
8622                47u8, 135u8, 136u8, 17u8, 126u8, 126u8, 255u8, 29u8, 130u8, 233u8, 38u8,
8623                236u8, 121u8, 73u8, 1u8, 209u8, 124u8, 120u8, 2u8, 74u8, 80u8, 39u8, 9u8,
8624                64u8, 48u8, 69u8, 64u8, 167u8, 51u8, 101u8, 111u8, 13u8,
8625            ],
8626            [
8627                115u8, 94u8, 94u8, 181u8, 175u8, 221u8, 114u8, 204u8, 100u8, 101u8,
8628                125u8, 237u8, 126u8, 93u8, 227u8, 144u8, 175u8, 55u8, 8u8, 175u8, 181u8,
8629                185u8, 168u8, 11u8, 14u8, 92u8, 145u8, 26u8, 4u8, 153u8, 217u8, 143u8,
8630            ],
8631            [
8632                140u8, 91u8, 225u8, 229u8, 235u8, 236u8, 125u8, 91u8, 209u8, 79u8, 113u8,
8633                66u8, 125u8, 30u8, 132u8, 243u8, 221u8, 3u8, 20u8, 192u8, 247u8, 178u8,
8634                41u8, 30u8, 91u8, 32u8, 10u8, 200u8, 199u8, 195u8, 185u8, 37u8,
8635            ],
8636            [
8637                189u8, 121u8, 184u8, 111u8, 254u8, 10u8, 184u8, 232u8, 119u8, 97u8, 81u8,
8638                81u8, 66u8, 23u8, 205u8, 124u8, 172u8, 213u8, 44u8, 144u8, 159u8, 102u8,
8639                71u8, 92u8, 58u8, 244u8, 78u8, 18u8, 159u8, 11u8, 0u8, 255u8,
8640            ],
8641            [
8642                221u8, 242u8, 82u8, 173u8, 27u8, 226u8, 200u8, 155u8, 105u8, 194u8,
8643                176u8, 104u8, 252u8, 55u8, 141u8, 170u8, 149u8, 43u8, 167u8, 241u8, 99u8,
8644                196u8, 161u8, 22u8, 40u8, 245u8, 90u8, 77u8, 245u8, 35u8, 179u8, 239u8,
8645            ],
8646            [
8647                246u8, 57u8, 31u8, 92u8, 50u8, 217u8, 198u8, 157u8, 42u8, 71u8, 234u8,
8648                103u8, 11u8, 68u8, 41u8, 116u8, 181u8, 57u8, 53u8, 209u8, 237u8, 199u8,
8649                253u8, 100u8, 235u8, 33u8, 224u8, 71u8, 168u8, 57u8, 23u8, 27u8,
8650            ],
8651        ];
8652    }
8653    #[automatically_derived]
8654    impl alloy_sol_types::SolEventInterface for HoprBoostEvents {
8655        const NAME: &'static str = "HoprBoostEvents";
8656        const COUNT: usize = 7usize;
8657        fn decode_raw_log(
8658            topics: &[alloy_sol_types::Word],
8659            data: &[u8],
8660        ) -> alloy_sol_types::Result<Self> {
8661            match topics.first().copied() {
8662                Some(<Approval as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
8663                    <Approval as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
8664                        .map(Self::Approval)
8665                }
8666                Some(<ApprovalForAll as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
8667                    <ApprovalForAll as alloy_sol_types::SolEvent>::decode_raw_log(
8668                            topics,
8669                            data,
8670                        )
8671                        .map(Self::ApprovalForAll)
8672                }
8673                Some(<BoostMinted as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
8674                    <BoostMinted as alloy_sol_types::SolEvent>::decode_raw_log(
8675                            topics,
8676                            data,
8677                        )
8678                        .map(Self::BoostMinted)
8679                }
8680                Some(<RoleAdminChanged as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
8681                    <RoleAdminChanged as alloy_sol_types::SolEvent>::decode_raw_log(
8682                            topics,
8683                            data,
8684                        )
8685                        .map(Self::RoleAdminChanged)
8686                }
8687                Some(<RoleGranted as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
8688                    <RoleGranted as alloy_sol_types::SolEvent>::decode_raw_log(
8689                            topics,
8690                            data,
8691                        )
8692                        .map(Self::RoleGranted)
8693                }
8694                Some(<RoleRevoked as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
8695                    <RoleRevoked as alloy_sol_types::SolEvent>::decode_raw_log(
8696                            topics,
8697                            data,
8698                        )
8699                        .map(Self::RoleRevoked)
8700                }
8701                Some(<Transfer as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
8702                    <Transfer as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
8703                        .map(Self::Transfer)
8704                }
8705                _ => {
8706                    alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog {
8707                        name: <Self as alloy_sol_types::SolEventInterface>::NAME,
8708                        log: alloy_sol_types::private::Box::new(
8709                            alloy_sol_types::private::LogData::new_unchecked(
8710                                topics.to_vec(),
8711                                data.to_vec().into(),
8712                            ),
8713                        ),
8714                    })
8715                }
8716            }
8717        }
8718    }
8719    #[automatically_derived]
8720    impl alloy_sol_types::private::IntoLogData for HoprBoostEvents {
8721        fn to_log_data(&self) -> alloy_sol_types::private::LogData {
8722            match self {
8723                Self::Approval(inner) => {
8724                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
8725                }
8726                Self::ApprovalForAll(inner) => {
8727                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
8728                }
8729                Self::BoostMinted(inner) => {
8730                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
8731                }
8732                Self::RoleAdminChanged(inner) => {
8733                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
8734                }
8735                Self::RoleGranted(inner) => {
8736                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
8737                }
8738                Self::RoleRevoked(inner) => {
8739                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
8740                }
8741                Self::Transfer(inner) => {
8742                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
8743                }
8744            }
8745        }
8746        fn into_log_data(self) -> alloy_sol_types::private::LogData {
8747            match self {
8748                Self::Approval(inner) => {
8749                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
8750                }
8751                Self::ApprovalForAll(inner) => {
8752                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
8753                }
8754                Self::BoostMinted(inner) => {
8755                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
8756                }
8757                Self::RoleAdminChanged(inner) => {
8758                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
8759                }
8760                Self::RoleGranted(inner) => {
8761                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
8762                }
8763                Self::RoleRevoked(inner) => {
8764                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
8765                }
8766                Self::Transfer(inner) => {
8767                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
8768                }
8769            }
8770        }
8771    }
8772    use alloy::contract as alloy_contract;
8773    /**Creates a new wrapper around an on-chain [`HoprBoost`](self) contract instance.
8774
8775See the [wrapper's documentation](`HoprBoostInstance`) for more details.*/
8776    #[inline]
8777    pub const fn new<
8778        P: alloy_contract::private::Provider<N>,
8779        N: alloy_contract::private::Network,
8780    >(
8781        address: alloy_sol_types::private::Address,
8782        provider: P,
8783    ) -> HoprBoostInstance<P, N> {
8784        HoprBoostInstance::<P, N>::new(address, provider)
8785    }
8786    /**Deploys this contract using the given `provider` and constructor arguments, if any.
8787
8788Returns a new instance of the contract, if the deployment was successful.
8789
8790For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
8791    #[inline]
8792    pub fn deploy<
8793        P: alloy_contract::private::Provider<N>,
8794        N: alloy_contract::private::Network,
8795    >(
8796        provider: P,
8797        newAdmin: alloy::sol_types::private::Address,
8798        baseTokenURI: alloy::sol_types::private::String,
8799    ) -> impl ::core::future::Future<
8800        Output = alloy_contract::Result<HoprBoostInstance<P, N>>,
8801    > {
8802        HoprBoostInstance::<P, N>::deploy(provider, newAdmin, baseTokenURI)
8803    }
8804    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
8805and constructor arguments, if any.
8806
8807This is a simple wrapper around creating a `RawCallBuilder` with the data set to
8808the bytecode concatenated with the constructor's ABI-encoded arguments.*/
8809    #[inline]
8810    pub fn deploy_builder<
8811        P: alloy_contract::private::Provider<N>,
8812        N: alloy_contract::private::Network,
8813    >(
8814        provider: P,
8815        newAdmin: alloy::sol_types::private::Address,
8816        baseTokenURI: alloy::sol_types::private::String,
8817    ) -> alloy_contract::RawCallBuilder<P, N> {
8818        HoprBoostInstance::<P, N>::deploy_builder(provider, newAdmin, baseTokenURI)
8819    }
8820    /**A [`HoprBoost`](self) instance.
8821
8822Contains type-safe methods for interacting with an on-chain instance of the
8823[`HoprBoost`](self) contract located at a given `address`, using a given
8824provider `P`.
8825
8826If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
8827documentation on how to provide it), the `deploy` and `deploy_builder` methods can
8828be used to deploy a new instance of the contract.
8829
8830See the [module-level documentation](self) for all the available methods.*/
8831    #[derive(Clone)]
8832    pub struct HoprBoostInstance<P, N = alloy_contract::private::Ethereum> {
8833        address: alloy_sol_types::private::Address,
8834        provider: P,
8835        _network: ::core::marker::PhantomData<N>,
8836    }
8837    #[automatically_derived]
8838    impl<P, N> ::core::fmt::Debug for HoprBoostInstance<P, N> {
8839        #[inline]
8840        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
8841            f.debug_tuple("HoprBoostInstance").field(&self.address).finish()
8842        }
8843    }
8844    /// Instantiation and getters/setters.
8845    #[automatically_derived]
8846    impl<
8847        P: alloy_contract::private::Provider<N>,
8848        N: alloy_contract::private::Network,
8849    > HoprBoostInstance<P, N> {
8850        /**Creates a new wrapper around an on-chain [`HoprBoost`](self) contract instance.
8851
8852See the [wrapper's documentation](`HoprBoostInstance`) for more details.*/
8853        #[inline]
8854        pub const fn new(
8855            address: alloy_sol_types::private::Address,
8856            provider: P,
8857        ) -> Self {
8858            Self {
8859                address,
8860                provider,
8861                _network: ::core::marker::PhantomData,
8862            }
8863        }
8864        /**Deploys this contract using the given `provider` and constructor arguments, if any.
8865
8866Returns a new instance of the contract, if the deployment was successful.
8867
8868For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
8869        #[inline]
8870        pub async fn deploy(
8871            provider: P,
8872            newAdmin: alloy::sol_types::private::Address,
8873            baseTokenURI: alloy::sol_types::private::String,
8874        ) -> alloy_contract::Result<HoprBoostInstance<P, N>> {
8875            let call_builder = Self::deploy_builder(provider, newAdmin, baseTokenURI);
8876            let contract_address = call_builder.deploy().await?;
8877            Ok(Self::new(contract_address, call_builder.provider))
8878        }
8879        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
8880and constructor arguments, if any.
8881
8882This is a simple wrapper around creating a `RawCallBuilder` with the data set to
8883the bytecode concatenated with the constructor's ABI-encoded arguments.*/
8884        #[inline]
8885        pub fn deploy_builder(
8886            provider: P,
8887            newAdmin: alloy::sol_types::private::Address,
8888            baseTokenURI: alloy::sol_types::private::String,
8889        ) -> alloy_contract::RawCallBuilder<P, N> {
8890            alloy_contract::RawCallBuilder::new_raw_deploy(
8891                provider,
8892                [
8893                    &BYTECODE[..],
8894                    &alloy_sol_types::SolConstructor::abi_encode(
8895                        &constructorCall {
8896                            newAdmin,
8897                            baseTokenURI,
8898                        },
8899                    )[..],
8900                ]
8901                    .concat()
8902                    .into(),
8903            )
8904        }
8905        /// Returns a reference to the address.
8906        #[inline]
8907        pub const fn address(&self) -> &alloy_sol_types::private::Address {
8908            &self.address
8909        }
8910        /// Sets the address.
8911        #[inline]
8912        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
8913            self.address = address;
8914        }
8915        /// Sets the address and returns `self`.
8916        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
8917            self.set_address(address);
8918            self
8919        }
8920        /// Returns a reference to the provider.
8921        #[inline]
8922        pub const fn provider(&self) -> &P {
8923            &self.provider
8924        }
8925    }
8926    impl<P: ::core::clone::Clone, N> HoprBoostInstance<&P, N> {
8927        /// Clones the provider and returns a new instance with the cloned provider.
8928        #[inline]
8929        pub fn with_cloned_provider(self) -> HoprBoostInstance<P, N> {
8930            HoprBoostInstance {
8931                address: self.address,
8932                provider: ::core::clone::Clone::clone(&self.provider),
8933                _network: ::core::marker::PhantomData,
8934            }
8935        }
8936    }
8937    /// Function calls.
8938    #[automatically_derived]
8939    impl<
8940        P: alloy_contract::private::Provider<N>,
8941        N: alloy_contract::private::Network,
8942    > HoprBoostInstance<P, N> {
8943        /// Creates a new call builder using this contract instance's provider and address.
8944        ///
8945        /// Note that the call can be any function call, not just those defined in this
8946        /// contract. Prefer using the other methods for building type-safe contract calls.
8947        pub fn call_builder<C: alloy_sol_types::SolCall>(
8948            &self,
8949            call: &C,
8950        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
8951            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
8952        }
8953        ///Creates a new call builder for the [`DEFAULT_ADMIN_ROLE`] function.
8954        pub fn DEFAULT_ADMIN_ROLE(
8955            &self,
8956        ) -> alloy_contract::SolCallBuilder<&P, DEFAULT_ADMIN_ROLECall, N> {
8957            self.call_builder(&DEFAULT_ADMIN_ROLECall)
8958        }
8959        ///Creates a new call builder for the [`MINTER_ROLE`] function.
8960        pub fn MINTER_ROLE(
8961            &self,
8962        ) -> alloy_contract::SolCallBuilder<&P, MINTER_ROLECall, N> {
8963            self.call_builder(&MINTER_ROLECall)
8964        }
8965        ///Creates a new call builder for the [`approve`] function.
8966        pub fn approve(
8967            &self,
8968            to: alloy::sol_types::private::Address,
8969            tokenId: alloy::sol_types::private::primitives::aliases::U256,
8970        ) -> alloy_contract::SolCallBuilder<&P, approveCall, N> {
8971            self.call_builder(&approveCall { to, tokenId })
8972        }
8973        ///Creates a new call builder for the [`balanceOf`] function.
8974        pub fn balanceOf(
8975            &self,
8976            owner: alloy::sol_types::private::Address,
8977        ) -> alloy_contract::SolCallBuilder<&P, balanceOfCall, N> {
8978            self.call_builder(&balanceOfCall { owner })
8979        }
8980        ///Creates a new call builder for the [`batchMint`] function.
8981        pub fn batchMint(
8982            &self,
8983            to: alloy::sol_types::private::Vec<alloy::sol_types::private::Address>,
8984            boostType: alloy::sol_types::private::String,
8985            boostRank: alloy::sol_types::private::String,
8986            boostNumerator: alloy::sol_types::private::primitives::aliases::U256,
8987            redeemDeadline: alloy::sol_types::private::primitives::aliases::U256,
8988        ) -> alloy_contract::SolCallBuilder<&P, batchMintCall, N> {
8989            self.call_builder(
8990                &batchMintCall {
8991                    to,
8992                    boostType,
8993                    boostRank,
8994                    boostNumerator,
8995                    redeemDeadline,
8996                },
8997            )
8998        }
8999        ///Creates a new call builder for the [`boostOf`] function.
9000        pub fn boostOf(
9001            &self,
9002            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9003        ) -> alloy_contract::SolCallBuilder<&P, boostOfCall, N> {
9004            self.call_builder(&boostOfCall { tokenId })
9005        }
9006        ///Creates a new call builder for the [`getApproved`] function.
9007        pub fn getApproved(
9008            &self,
9009            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9010        ) -> alloy_contract::SolCallBuilder<&P, getApprovedCall, N> {
9011            self.call_builder(&getApprovedCall { tokenId })
9012        }
9013        ///Creates a new call builder for the [`getRoleAdmin`] function.
9014        pub fn getRoleAdmin(
9015            &self,
9016            role: alloy::sol_types::private::FixedBytes<32>,
9017        ) -> alloy_contract::SolCallBuilder<&P, getRoleAdminCall, N> {
9018            self.call_builder(&getRoleAdminCall { role })
9019        }
9020        ///Creates a new call builder for the [`getRoleMember`] function.
9021        pub fn getRoleMember(
9022            &self,
9023            role: alloy::sol_types::private::FixedBytes<32>,
9024            index: alloy::sol_types::private::primitives::aliases::U256,
9025        ) -> alloy_contract::SolCallBuilder<&P, getRoleMemberCall, N> {
9026            self.call_builder(&getRoleMemberCall { role, index })
9027        }
9028        ///Creates a new call builder for the [`getRoleMemberCount`] function.
9029        pub fn getRoleMemberCount(
9030            &self,
9031            role: alloy::sol_types::private::FixedBytes<32>,
9032        ) -> alloy_contract::SolCallBuilder<&P, getRoleMemberCountCall, N> {
9033            self.call_builder(&getRoleMemberCountCall { role })
9034        }
9035        ///Creates a new call builder for the [`grantRole`] function.
9036        pub fn grantRole(
9037            &self,
9038            role: alloy::sol_types::private::FixedBytes<32>,
9039            account: alloy::sol_types::private::Address,
9040        ) -> alloy_contract::SolCallBuilder<&P, grantRoleCall, N> {
9041            self.call_builder(&grantRoleCall { role, account })
9042        }
9043        ///Creates a new call builder for the [`hasRole`] function.
9044        pub fn hasRole(
9045            &self,
9046            role: alloy::sol_types::private::FixedBytes<32>,
9047            account: alloy::sol_types::private::Address,
9048        ) -> alloy_contract::SolCallBuilder<&P, hasRoleCall, N> {
9049            self.call_builder(&hasRoleCall { role, account })
9050        }
9051        ///Creates a new call builder for the [`isApprovedForAll`] function.
9052        pub fn isApprovedForAll(
9053            &self,
9054            owner: alloy::sol_types::private::Address,
9055            operator: alloy::sol_types::private::Address,
9056        ) -> alloy_contract::SolCallBuilder<&P, isApprovedForAllCall, N> {
9057            self.call_builder(
9058                &isApprovedForAllCall {
9059                    owner,
9060                    operator,
9061                },
9062            )
9063        }
9064        ///Creates a new call builder for the [`mint`] function.
9065        pub fn mint(
9066            &self,
9067            to: alloy::sol_types::private::Address,
9068            boostType: alloy::sol_types::private::String,
9069            boostRank: alloy::sol_types::private::String,
9070            boostNumerator: alloy::sol_types::private::primitives::aliases::U256,
9071            redeemDeadline: alloy::sol_types::private::primitives::aliases::U256,
9072        ) -> alloy_contract::SolCallBuilder<&P, mintCall, N> {
9073            self.call_builder(
9074                &mintCall {
9075                    to,
9076                    boostType,
9077                    boostRank,
9078                    boostNumerator,
9079                    redeemDeadline,
9080                },
9081            )
9082        }
9083        ///Creates a new call builder for the [`name`] function.
9084        pub fn name(&self) -> alloy_contract::SolCallBuilder<&P, nameCall, N> {
9085            self.call_builder(&nameCall)
9086        }
9087        ///Creates a new call builder for the [`ownerOf`] function.
9088        pub fn ownerOf(
9089            &self,
9090            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9091        ) -> alloy_contract::SolCallBuilder<&P, ownerOfCall, N> {
9092            self.call_builder(&ownerOfCall { tokenId })
9093        }
9094        ///Creates a new call builder for the [`reclaimErc20Tokens`] function.
9095        pub fn reclaimErc20Tokens(
9096            &self,
9097            tokenAddress: alloy::sol_types::private::Address,
9098        ) -> alloy_contract::SolCallBuilder<&P, reclaimErc20TokensCall, N> {
9099            self.call_builder(
9100                &reclaimErc20TokensCall {
9101                    tokenAddress,
9102                },
9103            )
9104        }
9105        ///Creates a new call builder for the [`reclaimErc721Tokens`] function.
9106        pub fn reclaimErc721Tokens(
9107            &self,
9108            tokenAddress: alloy::sol_types::private::Address,
9109            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9110        ) -> alloy_contract::SolCallBuilder<&P, reclaimErc721TokensCall, N> {
9111            self.call_builder(
9112                &reclaimErc721TokensCall {
9113                    tokenAddress,
9114                    tokenId,
9115                },
9116            )
9117        }
9118        ///Creates a new call builder for the [`renounceRole`] function.
9119        pub fn renounceRole(
9120            &self,
9121            role: alloy::sol_types::private::FixedBytes<32>,
9122            account: alloy::sol_types::private::Address,
9123        ) -> alloy_contract::SolCallBuilder<&P, renounceRoleCall, N> {
9124            self.call_builder(&renounceRoleCall { role, account })
9125        }
9126        ///Creates a new call builder for the [`revokeRole`] function.
9127        pub fn revokeRole(
9128            &self,
9129            role: alloy::sol_types::private::FixedBytes<32>,
9130            account: alloy::sol_types::private::Address,
9131        ) -> alloy_contract::SolCallBuilder<&P, revokeRoleCall, N> {
9132            self.call_builder(&revokeRoleCall { role, account })
9133        }
9134        ///Creates a new call builder for the [`safeTransferFrom_0`] function.
9135        pub fn safeTransferFrom_0(
9136            &self,
9137            from: alloy::sol_types::private::Address,
9138            to: alloy::sol_types::private::Address,
9139            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9140        ) -> alloy_contract::SolCallBuilder<&P, safeTransferFrom_0Call, N> {
9141            self.call_builder(
9142                &safeTransferFrom_0Call {
9143                    from,
9144                    to,
9145                    tokenId,
9146                },
9147            )
9148        }
9149        ///Creates a new call builder for the [`safeTransferFrom_1`] function.
9150        pub fn safeTransferFrom_1(
9151            &self,
9152            from: alloy::sol_types::private::Address,
9153            to: alloy::sol_types::private::Address,
9154            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9155            _data: alloy::sol_types::private::Bytes,
9156        ) -> alloy_contract::SolCallBuilder<&P, safeTransferFrom_1Call, N> {
9157            self.call_builder(
9158                &safeTransferFrom_1Call {
9159                    from,
9160                    to,
9161                    tokenId,
9162                    _data,
9163                },
9164            )
9165        }
9166        ///Creates a new call builder for the [`setApprovalForAll`] function.
9167        pub fn setApprovalForAll(
9168            &self,
9169            operator: alloy::sol_types::private::Address,
9170            approved: bool,
9171        ) -> alloy_contract::SolCallBuilder<&P, setApprovalForAllCall, N> {
9172            self.call_builder(
9173                &setApprovalForAllCall {
9174                    operator,
9175                    approved,
9176                },
9177            )
9178        }
9179        ///Creates a new call builder for the [`supportsInterface`] function.
9180        pub fn supportsInterface(
9181            &self,
9182            interfaceId: alloy::sol_types::private::FixedBytes<4>,
9183        ) -> alloy_contract::SolCallBuilder<&P, supportsInterfaceCall, N> {
9184            self.call_builder(
9185                &supportsInterfaceCall {
9186                    interfaceId,
9187                },
9188            )
9189        }
9190        ///Creates a new call builder for the [`symbol`] function.
9191        pub fn symbol(&self) -> alloy_contract::SolCallBuilder<&P, symbolCall, N> {
9192            self.call_builder(&symbolCall)
9193        }
9194        ///Creates a new call builder for the [`tokenByIndex`] function.
9195        pub fn tokenByIndex(
9196            &self,
9197            index: alloy::sol_types::private::primitives::aliases::U256,
9198        ) -> alloy_contract::SolCallBuilder<&P, tokenByIndexCall, N> {
9199            self.call_builder(&tokenByIndexCall { index })
9200        }
9201        ///Creates a new call builder for the [`tokenOfOwnerByIndex`] function.
9202        pub fn tokenOfOwnerByIndex(
9203            &self,
9204            owner: alloy::sol_types::private::Address,
9205            index: alloy::sol_types::private::primitives::aliases::U256,
9206        ) -> alloy_contract::SolCallBuilder<&P, tokenOfOwnerByIndexCall, N> {
9207            self.call_builder(
9208                &tokenOfOwnerByIndexCall {
9209                    owner,
9210                    index,
9211                },
9212            )
9213        }
9214        ///Creates a new call builder for the [`tokenURI`] function.
9215        pub fn tokenURI(
9216            &self,
9217            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9218        ) -> alloy_contract::SolCallBuilder<&P, tokenURICall, N> {
9219            self.call_builder(&tokenURICall { tokenId })
9220        }
9221        ///Creates a new call builder for the [`totalSupply`] function.
9222        pub fn totalSupply(
9223            &self,
9224        ) -> alloy_contract::SolCallBuilder<&P, totalSupplyCall, N> {
9225            self.call_builder(&totalSupplyCall)
9226        }
9227        ///Creates a new call builder for the [`transferFrom`] function.
9228        pub fn transferFrom(
9229            &self,
9230            from: alloy::sol_types::private::Address,
9231            to: alloy::sol_types::private::Address,
9232            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9233        ) -> alloy_contract::SolCallBuilder<&P, transferFromCall, N> {
9234            self.call_builder(
9235                &transferFromCall {
9236                    from,
9237                    to,
9238                    tokenId,
9239                },
9240            )
9241        }
9242        ///Creates a new call builder for the [`typeAt`] function.
9243        pub fn typeAt(
9244            &self,
9245            typeIndex: alloy::sol_types::private::primitives::aliases::U256,
9246        ) -> alloy_contract::SolCallBuilder<&P, typeAtCall, N> {
9247            self.call_builder(&typeAtCall { typeIndex })
9248        }
9249        ///Creates a new call builder for the [`typeIndexOf`] function.
9250        pub fn typeIndexOf(
9251            &self,
9252            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9253        ) -> alloy_contract::SolCallBuilder<&P, typeIndexOfCall, N> {
9254            self.call_builder(&typeIndexOfCall { tokenId })
9255        }
9256        ///Creates a new call builder for the [`typeOf`] function.
9257        pub fn typeOf(
9258            &self,
9259            tokenId: alloy::sol_types::private::primitives::aliases::U256,
9260        ) -> alloy_contract::SolCallBuilder<&P, typeOfCall, N> {
9261            self.call_builder(&typeOfCall { tokenId })
9262        }
9263        ///Creates a new call builder for the [`updateBaseURI`] function.
9264        pub fn updateBaseURI(
9265            &self,
9266            baseTokenURI: alloy::sol_types::private::String,
9267        ) -> alloy_contract::SolCallBuilder<&P, updateBaseURICall, N> {
9268            self.call_builder(&updateBaseURICall { baseTokenURI })
9269        }
9270    }
9271    /// Event filters.
9272    #[automatically_derived]
9273    impl<
9274        P: alloy_contract::private::Provider<N>,
9275        N: alloy_contract::private::Network,
9276    > HoprBoostInstance<P, N> {
9277        /// Creates a new event filter using this contract instance's provider and address.
9278        ///
9279        /// Note that the type can be any event, not just those defined in this contract.
9280        /// Prefer using the other methods for building type-safe event filters.
9281        pub fn event_filter<E: alloy_sol_types::SolEvent>(
9282            &self,
9283        ) -> alloy_contract::Event<&P, E, N> {
9284            alloy_contract::Event::new_sol(&self.provider, &self.address)
9285        }
9286        ///Creates a new event filter for the [`Approval`] event.
9287        pub fn Approval_filter(&self) -> alloy_contract::Event<&P, Approval, N> {
9288            self.event_filter::<Approval>()
9289        }
9290        ///Creates a new event filter for the [`ApprovalForAll`] event.
9291        pub fn ApprovalForAll_filter(
9292            &self,
9293        ) -> alloy_contract::Event<&P, ApprovalForAll, N> {
9294            self.event_filter::<ApprovalForAll>()
9295        }
9296        ///Creates a new event filter for the [`BoostMinted`] event.
9297        pub fn BoostMinted_filter(&self) -> alloy_contract::Event<&P, BoostMinted, N> {
9298            self.event_filter::<BoostMinted>()
9299        }
9300        ///Creates a new event filter for the [`RoleAdminChanged`] event.
9301        pub fn RoleAdminChanged_filter(
9302            &self,
9303        ) -> alloy_contract::Event<&P, RoleAdminChanged, N> {
9304            self.event_filter::<RoleAdminChanged>()
9305        }
9306        ///Creates a new event filter for the [`RoleGranted`] event.
9307        pub fn RoleGranted_filter(&self) -> alloy_contract::Event<&P, RoleGranted, N> {
9308            self.event_filter::<RoleGranted>()
9309        }
9310        ///Creates a new event filter for the [`RoleRevoked`] event.
9311        pub fn RoleRevoked_filter(&self) -> alloy_contract::Event<&P, RoleRevoked, N> {
9312            self.event_filter::<RoleRevoked>()
9313        }
9314        ///Creates a new event filter for the [`Transfer`] event.
9315        pub fn Transfer_filter(&self) -> alloy_contract::Event<&P, Transfer, N> {
9316            self.event_filter::<Transfer>()
9317        }
9318    }
9319}