@evergonlabs/tmi-protocol-api 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,943 @@
1
- import erc20 from "@evergonlabs/token-library/artifacts/contracts/ERC20WhitelistGatedUpgradeable.sol/ERC20WhitelistGatedUpgradeable.json";
2
- // @todo abi must be exposed as const object
3
- export const erc20GatedAbi = erc20.abi;
4
- export const erc20GatedBytecode = erc20.bytecode;
1
+ export const erc20GatedAbi = [
2
+ {
3
+ inputs: [],
4
+ name: "AccessControlBadConfirmation",
5
+ type: "error",
6
+ },
7
+ {
8
+ inputs: [
9
+ {
10
+ internalType: "address",
11
+ name: "account",
12
+ type: "address",
13
+ },
14
+ {
15
+ internalType: "bytes32",
16
+ name: "neededRole",
17
+ type: "bytes32",
18
+ },
19
+ ],
20
+ name: "AccessControlUnauthorizedAccount",
21
+ type: "error",
22
+ },
23
+ {
24
+ inputs: [],
25
+ name: "ArrayLengthMismatch",
26
+ type: "error",
27
+ },
28
+ {
29
+ inputs: [],
30
+ name: "BlockExpired",
31
+ type: "error",
32
+ },
33
+ {
34
+ inputs: [
35
+ {
36
+ internalType: "uint256",
37
+ name: "increasedSupply",
38
+ type: "uint256",
39
+ },
40
+ {
41
+ internalType: "uint256",
42
+ name: "cap",
43
+ type: "uint256",
44
+ },
45
+ ],
46
+ name: "ERC20ExceededCap",
47
+ type: "error",
48
+ },
49
+ {
50
+ inputs: [
51
+ {
52
+ internalType: "address",
53
+ name: "spender",
54
+ type: "address",
55
+ },
56
+ {
57
+ internalType: "uint256",
58
+ name: "allowance",
59
+ type: "uint256",
60
+ },
61
+ {
62
+ internalType: "uint256",
63
+ name: "needed",
64
+ type: "uint256",
65
+ },
66
+ ],
67
+ name: "ERC20InsufficientAllowance",
68
+ type: "error",
69
+ },
70
+ {
71
+ inputs: [
72
+ {
73
+ internalType: "address",
74
+ name: "sender",
75
+ type: "address",
76
+ },
77
+ {
78
+ internalType: "uint256",
79
+ name: "balance",
80
+ type: "uint256",
81
+ },
82
+ {
83
+ internalType: "uint256",
84
+ name: "needed",
85
+ type: "uint256",
86
+ },
87
+ ],
88
+ name: "ERC20InsufficientBalance",
89
+ type: "error",
90
+ },
91
+ {
92
+ inputs: [
93
+ {
94
+ internalType: "address",
95
+ name: "approver",
96
+ type: "address",
97
+ },
98
+ ],
99
+ name: "ERC20InvalidApprover",
100
+ type: "error",
101
+ },
102
+ {
103
+ inputs: [
104
+ {
105
+ internalType: "uint256",
106
+ name: "cap",
107
+ type: "uint256",
108
+ },
109
+ ],
110
+ name: "ERC20InvalidCap",
111
+ type: "error",
112
+ },
113
+ {
114
+ inputs: [
115
+ {
116
+ internalType: "address",
117
+ name: "receiver",
118
+ type: "address",
119
+ },
120
+ ],
121
+ name: "ERC20InvalidReceiver",
122
+ type: "error",
123
+ },
124
+ {
125
+ inputs: [
126
+ {
127
+ internalType: "address",
128
+ name: "sender",
129
+ type: "address",
130
+ },
131
+ ],
132
+ name: "ERC20InvalidSender",
133
+ type: "error",
134
+ },
135
+ {
136
+ inputs: [
137
+ {
138
+ internalType: "address",
139
+ name: "spender",
140
+ type: "address",
141
+ },
142
+ ],
143
+ name: "ERC20InvalidSpender",
144
+ type: "error",
145
+ },
146
+ {
147
+ inputs: [
148
+ {
149
+ internalType: "address",
150
+ name: "to",
151
+ type: "address",
152
+ },
153
+ ],
154
+ name: "IncorrectTransferTarget",
155
+ type: "error",
156
+ },
157
+ {
158
+ inputs: [],
159
+ name: "InvalidInitialization",
160
+ type: "error",
161
+ },
162
+ {
163
+ inputs: [],
164
+ name: "InvalidSignature",
165
+ type: "error",
166
+ },
167
+ {
168
+ inputs: [],
169
+ name: "MissingSignatureAndBlockNumber",
170
+ type: "error",
171
+ },
172
+ {
173
+ inputs: [],
174
+ name: "NotInitializing",
175
+ type: "error",
176
+ },
177
+ {
178
+ inputs: [],
179
+ name: "ZeroAddress",
180
+ type: "error",
181
+ },
182
+ {
183
+ anonymous: false,
184
+ inputs: [
185
+ {
186
+ indexed: true,
187
+ internalType: "address",
188
+ name: "owner",
189
+ type: "address",
190
+ },
191
+ {
192
+ indexed: true,
193
+ internalType: "address",
194
+ name: "spender",
195
+ type: "address",
196
+ },
197
+ {
198
+ indexed: false,
199
+ internalType: "uint256",
200
+ name: "value",
201
+ type: "uint256",
202
+ },
203
+ ],
204
+ name: "Approval",
205
+ type: "event",
206
+ },
207
+ {
208
+ anonymous: false,
209
+ inputs: [
210
+ {
211
+ indexed: true,
212
+ internalType: "address",
213
+ name: "sender",
214
+ type: "address",
215
+ },
216
+ {
217
+ indexed: false,
218
+ internalType: "uint256",
219
+ name: "totalValue",
220
+ type: "uint256",
221
+ },
222
+ ],
223
+ name: "BatchMint",
224
+ type: "event",
225
+ },
226
+ {
227
+ anonymous: false,
228
+ inputs: [
229
+ {
230
+ indexed: false,
231
+ internalType: "uint64",
232
+ name: "version",
233
+ type: "uint64",
234
+ },
235
+ ],
236
+ name: "Initialized",
237
+ type: "event",
238
+ },
239
+ {
240
+ anonymous: false,
241
+ inputs: [
242
+ {
243
+ indexed: false,
244
+ internalType: "uint256",
245
+ name: "chainID",
246
+ type: "uint256",
247
+ },
248
+ {
249
+ indexed: false,
250
+ internalType: "uint256",
251
+ name: "nonce",
252
+ type: "uint256",
253
+ },
254
+ {
255
+ indexed: false,
256
+ internalType: "uint256",
257
+ name: "blockExpiration",
258
+ type: "uint256",
259
+ },
260
+ {
261
+ indexed: false,
262
+ internalType: "address",
263
+ name: "contractAddress",
264
+ type: "address",
265
+ },
266
+ {
267
+ indexed: false,
268
+ internalType: "address",
269
+ name: "userAddress",
270
+ type: "address",
271
+ },
272
+ {
273
+ indexed: false,
274
+ internalType: "bytes",
275
+ name: "functionCallData",
276
+ type: "bytes",
277
+ },
278
+ ],
279
+ name: "NexeraIDSignatureVerified",
280
+ type: "event",
281
+ },
282
+ {
283
+ anonymous: false,
284
+ inputs: [
285
+ {
286
+ indexed: true,
287
+ internalType: "bytes32",
288
+ name: "role",
289
+ type: "bytes32",
290
+ },
291
+ {
292
+ indexed: true,
293
+ internalType: "bytes32",
294
+ name: "previousAdminRole",
295
+ type: "bytes32",
296
+ },
297
+ {
298
+ indexed: true,
299
+ internalType: "bytes32",
300
+ name: "newAdminRole",
301
+ type: "bytes32",
302
+ },
303
+ ],
304
+ name: "RoleAdminChanged",
305
+ type: "event",
306
+ },
307
+ {
308
+ anonymous: false,
309
+ inputs: [
310
+ {
311
+ indexed: true,
312
+ internalType: "bytes32",
313
+ name: "role",
314
+ type: "bytes32",
315
+ },
316
+ {
317
+ indexed: true,
318
+ internalType: "address",
319
+ name: "account",
320
+ type: "address",
321
+ },
322
+ {
323
+ indexed: true,
324
+ internalType: "address",
325
+ name: "sender",
326
+ type: "address",
327
+ },
328
+ ],
329
+ name: "RoleGranted",
330
+ type: "event",
331
+ },
332
+ {
333
+ anonymous: false,
334
+ inputs: [
335
+ {
336
+ indexed: true,
337
+ internalType: "bytes32",
338
+ name: "role",
339
+ type: "bytes32",
340
+ },
341
+ {
342
+ indexed: true,
343
+ internalType: "address",
344
+ name: "account",
345
+ type: "address",
346
+ },
347
+ {
348
+ indexed: true,
349
+ internalType: "address",
350
+ name: "sender",
351
+ type: "address",
352
+ },
353
+ ],
354
+ name: "RoleRevoked",
355
+ type: "event",
356
+ },
357
+ {
358
+ anonymous: false,
359
+ inputs: [
360
+ {
361
+ indexed: true,
362
+ internalType: "address",
363
+ name: "newSigner",
364
+ type: "address",
365
+ },
366
+ ],
367
+ name: "SignerChanged",
368
+ type: "event",
369
+ },
370
+ {
371
+ anonymous: false,
372
+ inputs: [
373
+ {
374
+ indexed: true,
375
+ internalType: "address",
376
+ name: "from",
377
+ type: "address",
378
+ },
379
+ {
380
+ indexed: true,
381
+ internalType: "address",
382
+ name: "to",
383
+ type: "address",
384
+ },
385
+ {
386
+ indexed: false,
387
+ internalType: "uint256",
388
+ name: "value",
389
+ type: "uint256",
390
+ },
391
+ ],
392
+ name: "Transfer",
393
+ type: "event",
394
+ },
395
+ {
396
+ inputs: [],
397
+ name: "DEFAULT_ADMIN_ROLE",
398
+ outputs: [
399
+ {
400
+ internalType: "bytes32",
401
+ name: "",
402
+ type: "bytes32",
403
+ },
404
+ ],
405
+ stateMutability: "view",
406
+ type: "function",
407
+ },
408
+ {
409
+ inputs: [],
410
+ name: "MINTER_ROLE",
411
+ outputs: [
412
+ {
413
+ internalType: "bytes32",
414
+ name: "",
415
+ type: "bytes32",
416
+ },
417
+ ],
418
+ stateMutability: "view",
419
+ type: "function",
420
+ },
421
+ {
422
+ inputs: [],
423
+ name: "WHITELISTED_SPENDER_ROLE",
424
+ outputs: [
425
+ {
426
+ internalType: "bytes32",
427
+ name: "",
428
+ type: "bytes32",
429
+ },
430
+ ],
431
+ stateMutability: "view",
432
+ type: "function",
433
+ },
434
+ {
435
+ inputs: [
436
+ {
437
+ internalType: "address",
438
+ name: "owner",
439
+ type: "address",
440
+ },
441
+ {
442
+ internalType: "address",
443
+ name: "spender",
444
+ type: "address",
445
+ },
446
+ ],
447
+ name: "allowance",
448
+ outputs: [
449
+ {
450
+ internalType: "uint256",
451
+ name: "",
452
+ type: "uint256",
453
+ },
454
+ ],
455
+ stateMutability: "view",
456
+ type: "function",
457
+ },
458
+ {
459
+ inputs: [
460
+ {
461
+ internalType: "address",
462
+ name: "spender",
463
+ type: "address",
464
+ },
465
+ {
466
+ internalType: "uint256",
467
+ name: "amount",
468
+ type: "uint256",
469
+ },
470
+ ],
471
+ name: "approve",
472
+ outputs: [
473
+ {
474
+ internalType: "bool",
475
+ name: "",
476
+ type: "bool",
477
+ },
478
+ ],
479
+ stateMutability: "nonpayable",
480
+ type: "function",
481
+ },
482
+ {
483
+ inputs: [
484
+ {
485
+ internalType: "address",
486
+ name: "account",
487
+ type: "address",
488
+ },
489
+ ],
490
+ name: "balanceOf",
491
+ outputs: [
492
+ {
493
+ internalType: "uint256",
494
+ name: "",
495
+ type: "uint256",
496
+ },
497
+ ],
498
+ stateMutability: "view",
499
+ type: "function",
500
+ },
501
+ {
502
+ inputs: [
503
+ {
504
+ internalType: "address[]",
505
+ name: "recipients",
506
+ type: "address[]",
507
+ },
508
+ {
509
+ internalType: "uint256[]",
510
+ name: "values",
511
+ type: "uint256[]",
512
+ },
513
+ ],
514
+ name: "batchMint",
515
+ outputs: [],
516
+ stateMutability: "nonpayable",
517
+ type: "function",
518
+ },
519
+ {
520
+ inputs: [
521
+ {
522
+ internalType: "uint256",
523
+ name: "value",
524
+ type: "uint256",
525
+ },
526
+ ],
527
+ name: "burn",
528
+ outputs: [],
529
+ stateMutability: "nonpayable",
530
+ type: "function",
531
+ },
532
+ {
533
+ inputs: [
534
+ {
535
+ internalType: "address",
536
+ name: "account",
537
+ type: "address",
538
+ },
539
+ {
540
+ internalType: "uint256",
541
+ name: "value",
542
+ type: "uint256",
543
+ },
544
+ ],
545
+ name: "burnFrom",
546
+ outputs: [],
547
+ stateMutability: "nonpayable",
548
+ type: "function",
549
+ },
550
+ {
551
+ inputs: [],
552
+ name: "cap",
553
+ outputs: [
554
+ {
555
+ internalType: "uint256",
556
+ name: "",
557
+ type: "uint256",
558
+ },
559
+ ],
560
+ stateMutability: "view",
561
+ type: "function",
562
+ },
563
+ {
564
+ inputs: [],
565
+ name: "decimals",
566
+ outputs: [
567
+ {
568
+ internalType: "uint8",
569
+ name: "",
570
+ type: "uint8",
571
+ },
572
+ ],
573
+ stateMutability: "view",
574
+ type: "function",
575
+ },
576
+ {
577
+ inputs: [
578
+ {
579
+ components: [
580
+ {
581
+ internalType: "uint256",
582
+ name: "chainID",
583
+ type: "uint256",
584
+ },
585
+ {
586
+ internalType: "uint256",
587
+ name: "nonce",
588
+ type: "uint256",
589
+ },
590
+ {
591
+ internalType: "uint256",
592
+ name: "blockExpiration",
593
+ type: "uint256",
594
+ },
595
+ {
596
+ internalType: "address",
597
+ name: "contractAddress",
598
+ type: "address",
599
+ },
600
+ {
601
+ internalType: "address",
602
+ name: "userAddress",
603
+ type: "address",
604
+ },
605
+ {
606
+ internalType: "bytes",
607
+ name: "functionCallData",
608
+ type: "bytes",
609
+ },
610
+ ],
611
+ internalType: "struct BaseTxAuthDataVerifier.TxAuthData",
612
+ name: "_txAuthData",
613
+ type: "tuple",
614
+ },
615
+ ],
616
+ name: "getMessageHash",
617
+ outputs: [
618
+ {
619
+ internalType: "bytes32",
620
+ name: "",
621
+ type: "bytes32",
622
+ },
623
+ ],
624
+ stateMutability: "pure",
625
+ type: "function",
626
+ },
627
+ {
628
+ inputs: [
629
+ {
630
+ internalType: "bytes32",
631
+ name: "role",
632
+ type: "bytes32",
633
+ },
634
+ ],
635
+ name: "getRoleAdmin",
636
+ outputs: [
637
+ {
638
+ internalType: "bytes32",
639
+ name: "",
640
+ type: "bytes32",
641
+ },
642
+ ],
643
+ stateMutability: "view",
644
+ type: "function",
645
+ },
646
+ {
647
+ inputs: [
648
+ {
649
+ internalType: "bytes32",
650
+ name: "role",
651
+ type: "bytes32",
652
+ },
653
+ {
654
+ internalType: "address",
655
+ name: "account",
656
+ type: "address",
657
+ },
658
+ ],
659
+ name: "grantRole",
660
+ outputs: [],
661
+ stateMutability: "nonpayable",
662
+ type: "function",
663
+ },
664
+ {
665
+ inputs: [
666
+ {
667
+ internalType: "bytes32",
668
+ name: "role",
669
+ type: "bytes32",
670
+ },
671
+ {
672
+ internalType: "address",
673
+ name: "account",
674
+ type: "address",
675
+ },
676
+ ],
677
+ name: "hasRole",
678
+ outputs: [
679
+ {
680
+ internalType: "bool",
681
+ name: "",
682
+ type: "bool",
683
+ },
684
+ ],
685
+ stateMutability: "view",
686
+ type: "function",
687
+ },
688
+ {
689
+ inputs: [
690
+ {
691
+ internalType: "string",
692
+ name: "name",
693
+ type: "string",
694
+ },
695
+ {
696
+ internalType: "string",
697
+ name: "symbol",
698
+ type: "string",
699
+ },
700
+ {
701
+ internalType: "uint256",
702
+ name: "cap",
703
+ type: "uint256",
704
+ },
705
+ {
706
+ internalType: "address",
707
+ name: "defaultAdmin",
708
+ type: "address",
709
+ },
710
+ {
711
+ internalType: "address",
712
+ name: "minter",
713
+ type: "address",
714
+ },
715
+ {
716
+ internalType: "address",
717
+ name: "gatingSigner",
718
+ type: "address",
719
+ },
720
+ ],
721
+ name: "init",
722
+ outputs: [],
723
+ stateMutability: "nonpayable",
724
+ type: "function",
725
+ },
726
+ {
727
+ inputs: [
728
+ {
729
+ internalType: "address",
730
+ name: "to",
731
+ type: "address",
732
+ },
733
+ {
734
+ internalType: "uint256",
735
+ name: "amount",
736
+ type: "uint256",
737
+ },
738
+ ],
739
+ name: "mint",
740
+ outputs: [],
741
+ stateMutability: "nonpayable",
742
+ type: "function",
743
+ },
744
+ {
745
+ inputs: [],
746
+ name: "name",
747
+ outputs: [
748
+ {
749
+ internalType: "string",
750
+ name: "",
751
+ type: "string",
752
+ },
753
+ ],
754
+ stateMutability: "view",
755
+ type: "function",
756
+ },
757
+ {
758
+ inputs: [
759
+ {
760
+ internalType: "address",
761
+ name: "",
762
+ type: "address",
763
+ },
764
+ ],
765
+ name: "nonces",
766
+ outputs: [
767
+ {
768
+ internalType: "uint256",
769
+ name: "",
770
+ type: "uint256",
771
+ },
772
+ ],
773
+ stateMutability: "view",
774
+ type: "function",
775
+ },
776
+ {
777
+ inputs: [
778
+ {
779
+ internalType: "bytes32",
780
+ name: "role",
781
+ type: "bytes32",
782
+ },
783
+ {
784
+ internalType: "address",
785
+ name: "callerConfirmation",
786
+ type: "address",
787
+ },
788
+ ],
789
+ name: "renounceRole",
790
+ outputs: [],
791
+ stateMutability: "nonpayable",
792
+ type: "function",
793
+ },
794
+ {
795
+ inputs: [
796
+ {
797
+ internalType: "bytes32",
798
+ name: "role",
799
+ type: "bytes32",
800
+ },
801
+ {
802
+ internalType: "address",
803
+ name: "account",
804
+ type: "address",
805
+ },
806
+ ],
807
+ name: "revokeRole",
808
+ outputs: [],
809
+ stateMutability: "nonpayable",
810
+ type: "function",
811
+ },
812
+ {
813
+ inputs: [
814
+ {
815
+ internalType: "bytes4",
816
+ name: "interfaceId",
817
+ type: "bytes4",
818
+ },
819
+ ],
820
+ name: "supportsInterface",
821
+ outputs: [
822
+ {
823
+ internalType: "bool",
824
+ name: "",
825
+ type: "bool",
826
+ },
827
+ ],
828
+ stateMutability: "view",
829
+ type: "function",
830
+ },
831
+ {
832
+ inputs: [],
833
+ name: "symbol",
834
+ outputs: [
835
+ {
836
+ internalType: "string",
837
+ name: "",
838
+ type: "string",
839
+ },
840
+ ],
841
+ stateMutability: "view",
842
+ type: "function",
843
+ },
844
+ {
845
+ inputs: [],
846
+ name: "totalSupply",
847
+ outputs: [
848
+ {
849
+ internalType: "uint256",
850
+ name: "",
851
+ type: "uint256",
852
+ },
853
+ ],
854
+ stateMutability: "view",
855
+ type: "function",
856
+ },
857
+ {
858
+ inputs: [
859
+ {
860
+ internalType: "address",
861
+ name: "to",
862
+ type: "address",
863
+ },
864
+ {
865
+ internalType: "uint256",
866
+ name: "amount",
867
+ type: "uint256",
868
+ },
869
+ ],
870
+ name: "transfer",
871
+ outputs: [
872
+ {
873
+ internalType: "bool",
874
+ name: "",
875
+ type: "bool",
876
+ },
877
+ ],
878
+ stateMutability: "nonpayable",
879
+ type: "function",
880
+ },
881
+ {
882
+ inputs: [
883
+ {
884
+ internalType: "address",
885
+ name: "from",
886
+ type: "address",
887
+ },
888
+ {
889
+ internalType: "address",
890
+ name: "to",
891
+ type: "address",
892
+ },
893
+ {
894
+ internalType: "uint256",
895
+ name: "amount",
896
+ type: "uint256",
897
+ },
898
+ ],
899
+ name: "transferFrom",
900
+ outputs: [
901
+ {
902
+ internalType: "bool",
903
+ name: "",
904
+ type: "bool",
905
+ },
906
+ ],
907
+ stateMutability: "nonpayable",
908
+ type: "function",
909
+ },
910
+ {
911
+ inputs: [],
912
+ name: "txAuthDataSignerAddress",
913
+ outputs: [
914
+ {
915
+ internalType: "address",
916
+ name: "",
917
+ type: "address",
918
+ },
919
+ ],
920
+ stateMutability: "view",
921
+ type: "function",
922
+ },
923
+ {
924
+ inputs: [
925
+ {
926
+ internalType: "address",
927
+ name: "user",
928
+ type: "address",
929
+ },
930
+ ],
931
+ name: "txAuthDataUserNonce",
932
+ outputs: [
933
+ {
934
+ internalType: "uint256",
935
+ name: "",
936
+ type: "uint256",
937
+ },
938
+ ],
939
+ stateMutability: "view",
940
+ type: "function",
941
+ },
942
+ ];
943
+ export const erc20GatedBytecode = "0x60808060405234601557611ea6908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146110a05750806306fdde0314610fe3578063095ea7b314610eee57806318160ddd14610ec557806318c718da1461052557806323b872dd14610e36578063248a9ca314610dff5780632f2ff15d14610db5578063313ce56714610d9a578063355274ea14610d7157806336568abe14610d2d578063374eb0b314610d065780633b2157801461075757806340c10f191461072a57806342966c681461070d57806368573107146105d157806370a082311461058d57806379cc67901461055d5780637ecebe0014610525578063801954a81461045f57806391d148541461040a57806395d89b4114610310578063a217fddf146102f6578063a9059cbb14610260578063d539139314610226578063d547741f146101d5578063dd62ed3e1461018e5763f07110ae14610150575f80fd5b3461018a575f36600319011261018a5760206040517ff22b7eb5c001a6b83f4aca67f4a65677e68472a384450810f1b240158b7940428152f35b5f80fd5b3461018a57604036600319011261018a576101a7611117565b6101b86101b261112d565b91611232565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461018a57604036600319011261018a576102246004356101f461112d565b9061021f61021a825f525f516020611e315f395f51905f52602052600160405f20015490565b61156a565b6117cf565b005b3461018a575f36600319011261018a5760206040517f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68152f35b3461018a57604036600319011261018a57610279611117565b335f9081527f2b09e1c0c59fe9385b5a82c53989de8d40269d43d57b25f2a335ba398b6dc6ed602052604090205460ff16156102c9575b6102be906024359033611bc6565b602060405160018152f35b606536106102e7576102be906102df333661134e565b5090506102b0565b637687a3b960e11b5f5260045ffd5b3461018a575f36600319011261018a5760206040515f8152f35b3461018a575f36600319011261018a576040515f5f516020611df15f395f51905f525461033c8161126a565b80845290600181169081156103e6575060011461037c575b6103788361036481850382611172565b6040519182916020835260208301906110f3565b0390f35b5f516020611df15f395f51905f525f9081527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa939250905b8082106103cc57509091508101602001610364610354565b9192600181602092548385880101520191019092916103b4565b60ff191660208086019190915291151560051b840190910191506103649050610354565b3461018a57604036600319011261018a5761042361112d565b6004355f525f516020611e315f395f51905f5260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461018a57602036600319011261018a576004356001600160401b03811161018a5760c0600319823603011261018a576040519061049c82611157565b8060040135825260248101356020830152604481013560408301526104c360648201611143565b60608301526104d460848201611143565b608083015260a4810135906001600160401b03821161018a57013660238201121561018a5760209161051361051d9236906024600482013591016111ae565b60a08201526112c6565b604051908152f35b3461018a57602036600319011261018a576001600160a01b03610546611117565b165f526001602052602060405f2054604051908152f35b3461018a57604036600319011261018a57610224610579611117565b60243590610588823383611a26565b611944565b3461018a57602036600319011261018a576001600160a01b036105ae611117565b165f525f516020611dd15f395f51905f52602052602060405f2054604051908152f35b3461018a57604036600319011261018a576004356001600160401b03811161018a57610601903690600401611202565b906024356001600160401b03811161018a57610621903690600401611202565b919061062b6114fb565b8284036106fe579291905f935f935b8085106106ac57855f516020611e115f395f51905f52545f516020611d915f395f51905f52549081811161069757826040519081527f4b6dcabdeaeb0ec6121e2e093c11a74bd84844268dc1131fd8ba3b363a82d7e860203392a2005b63279e7e1560e21b5f5260045260245260445ffd5b90919293946106bc8683866112a2565b35906001600160a01b038216820361018a576106e66001926106df8989886112a2565b359061186b565b6106f18787866112a2565b350195019392919061063a565b63512509d360e11b5f5260045ffd5b3461018a57602036600319011261018a5761022460043533611944565b3461018a57604036600319011261018a57610224610746611117565b61074e6114fb565b6024359061186b565b3461018a5760c036600319011261018a576004356001600160401b03811161018a576107879036906004016111e4565b6024356001600160401b03811161018a576107a69036906004016111e4565b906064356044356001600160a01b038216820361018a57608435906001600160a01b038216820361018a5760a4356001600160a01b038116959086900361018a575f516020611e515f395f51905f52549460ff8660401c1615956001600160401b03811680159081610cfe575b6001149081610cf4575b159081610ceb575b50610cdc5767ffffffffffffffff1981166001175f516020611e515f395f51905f525586610cb0575b50610857611c9e565b61085f611c9e565b610867611c9e565b8051906001600160401b038211610b995781906108915f516020611db15f395f51905f525461126a565b601f8111610c36575b50602090601f8311600114610bb8575f92610bad575b50508160011b915f199060031b1c1916175f516020611db15f395f51905f52555b8051906001600160401b038211610b995781906108fb5f516020611df15f395f51905f525461126a565b601f8111610b1f575b50602090601f8311600114610aa1575f92610a96575b50508160011b915f199060031b1c1916175f516020611df15f395f51905f52555b610943611c9e565b61094b611c9e565b610953611c9e565b8015610a83576109839261097d915f516020611d915f395f51905f5255610978611c9e565b6115b0565b5061165f565b508115610a1f57816001600160601b0360a01b5f5416175f55604051917f5719a5656c5cfdaafa148ecf366fd3b0a7fae06449ce2a46225977fb7417e29d5f80a26109ca57005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29168ff0000000000000000195f516020611e515f395f51905f5254165f516020611e515f395f51905f525560018152a1005b60405162461bcd60e51b815260206004820152603660248201527f426173655478417574684461746156657269666965723a206e6577207369676e604482015275657220697320746865207a65726f206164647265737360501b6064820152608490fd5b63392e1e2760e01b5f525f60045260245ffd5b01519050878061091a565b5f516020611df15f395f51905f525f9081528281209350601f198516905b818110610b075750908460019594939210610aef575b505050811b015f516020611df15f395f51905f525561093b565b01515f1960f88460031b161c19169055878080610ad5565b92936020600181928786015181550195019301610abf565b5f516020611df15f395f51905f525f529091507f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f840160051c81019160208510610b8f575b90601f859493920160051c01905b818110610b815750610904565b5f8155849350600101610b74565b9091508190610b66565b634e487b7160e01b5f52604160045260245ffd5b0151905088806108b0565b5f516020611db15f395f51905f525f9081528281209350601f198516905b818110610c1e5750908460019594939210610c06575b505050811b015f516020611db15f395f51905f52556108d1565b01515f1960f88460031b161c19169055888080610bec565b92936020600181928786015181550195019301610bd6565b5f516020611db15f395f51905f525f529091507f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f840160051c81019160208510610ca6575b90601f859493920160051c01905b818110610c98575061089a565b5f8155849350600101610c8b565b9091508190610c7d565b68ffffffffffffffffff191668010000000000000001175f516020611e515f395f51905f52558761084e565b63f92ee8a960e01b5f5260045ffd5b90501589610825565b303b15915061081d565b889150610813565b3461018a575f36600319011261018a575f546040516001600160a01b039091168152602090f35b3461018a57604036600319011261018a57610d4661112d565b336001600160a01b03821603610d6257610224906004356117cf565b63334bd91960e11b5f5260045ffd5b3461018a575f36600319011261018a5760205f516020611d915f395f51905f5254604051908152f35b3461018a575f36600319011261018a57602060405160128152f35b3461018a57604036600319011261018a57610224600435610dd461112d565b90610dfa61021a825f525f516020611e315f395f51905f52602052600160405f20015490565b61172b565b3461018a57602036600319011261018a57602061051d6004355f525f516020611e315f395f51905f52602052600160405f20015490565b3461018a57606036600319011261018a57610e4f611117565b610e5761112d565b335f9081527f2b09e1c0c59fe9385b5a82c53989de8d40269d43d57b25f2a335ba398b6dc6ed6020526040902054604435919060ff1615610ea7575b6102be92610ea2833383611a26565b611bc6565b606536106102e7576102be92610ebd333661134e565b509250610e93565b3461018a575f36600319011261018a5760205f516020611e115f395f51905f5254604051908152f35b3461018a57604036600319011261018a57610f07611117565b335f9081527f2b09e1c0c59fe9385b5a82c53989de8d40269d43d57b25f2a335ba398b6dc6ed6020526040902054602435919060ff1615610fcb575b3315610fb8576001600160a01b0316908115610fa557610f6233611232565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b606536106102e757610fdd333661134e565b50610f43565b3461018a575f36600319011261018a576040515f5f516020611db15f395f51905f525461100f8161126a565b80845290600181169081156103e65750600114611036576103788361036481850382611172565b5f516020611db15f395f51905f525f9081527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0939250905b80821061108657509091508101602001610364610354565b91926001816020925483858801015201910190929161106e565b3461018a57602036600319011261018a576004359063ffffffff60e01b821680920361018a57602091637965db0b60e01b81149081156110e2575b5015158152f35b6301ffc9a760e01b149050836110db565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361018a57565b602435906001600160a01b038216820361018a57565b35906001600160a01b038216820361018a57565b60c081019081106001600160401b03821117610b9957604052565b90601f801991011681019081106001600160401b03821117610b9957604052565b6001600160401b038111610b9957601f01601f191660200190565b9291926111ba82611193565b916111c86040519384611172565b82948184528183011161018a578281602093845f960137010152565b9080601f8301121561018a578160206111ff933591016111ae565b90565b9181601f8401121561018a578235916001600160401b03831161018a576020808501948460051b01011161018a57565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b90600182811c92168015611298575b602083101461128457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611279565b91908110156112b25760051b0190565b634e487b7160e01b5f52603260045260245ffd5b80519061134860a86020830151602060408501519460608101519060a06080820151910151916040519788958587019a8b52604087015260608601526001600160601b03199060601b1660808501526001600160601b03199060601b1660948401528051918291018484015e81015f838201520301601f198101835282611172565b51902090565b90606182038281116114e75782811161018a578281116114e7576040198301918383116114e75782821161018a5781359382810360401901602081106114d2575b50831161018a57834310156114c3576114aa9360e07f457734c71a6a3ef35a45b3a9aed14e0158cca171cd87330ecd1de4d4d61dc8f39260018060a01b031693845f52600160205260405f209081549160018301905561141a6040516113f481611157565b46815283602082015285604082015230606082015287608082015261051336845f6111ae565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f52601c52603c5f209560405194859346855260208501526040840152306060840152608083015260c060a08301528060c0830152805f848401375f828201840152601f01601f19168101030190a15f546001600160a01b0316916114a49036906041906111ae565b91611ac4565b156114b457600190565b638baa579f60e01b5f5260045ffd5b6378fd448d60e01b5f5260045ffd5b5f959195199060200360031b1b16935f61138f565b634e487b7160e01b5f52601160045260245ffd5b335f9081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090205460ff161561153357565b63e2517d3f60e01b5f52336004527f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a660245260445ffd5b5f8181525f516020611e315f395f51905f526020908152604080832033845290915290205460ff161561159a5750565b63e2517d3f60e01b5f523360045260245260445ffd5b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1661165a576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b6001600160a01b0381165f9081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090205460ff1661165a576001600160a01b03165f8181527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d460205260408120805460ff191660011790553391907f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5f8181525f516020611e315f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff166117c9575f8181525f516020611e315f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f8181525f516020611e315f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff16156117c9575f8181525f516020611e315f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b6001600160a01b03169081156119315730821461191e575f516020611e115f395f51905f5254908082018092116114e75760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f935f516020611e115f395f51905f52558484525f516020611dd15f395f51905f52825260408420818154019055604051908152a35f516020611d915f395f51905f52545f516020611e115f395f51905f5254818111610697575050565b50632e8e416360e21b5f5260045260245ffd5b63ec442f0560e01b5f525f60045260245ffd5b9091906001600160a01b03168015611a13573015611a0057805f525f516020611dd15f395f51905f5260205260405f20548381106119e6576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587525f516020611dd15f395f51905f528452036040862055805f516020611e115f395f51905f5254035f516020611e115f395f51905f5255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b632e8e416360e21b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b9190611a3183611232565b60018060a01b0382165f5260205260405f2054925f198410611a54575b50505050565b828410611aa1576001600160a01b03811615610fb8576001600160a01b03821615610fa557611a8290611232565b9060018060a01b03165f5260205260405f20910390555f808080611a4e565b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b9190823b611b135790611ad691611cc9565b506004811015611aff57159182611aec57505090565b6001600160a01b03918216911614919050565b634e487b7160e01b5f52602160045260245ffd5b915f92611b49611b5785946040519283916020830195630b135d3f60e11b875260248401526040604484015260648301906110f3565b03601f198101835282611172565b51915afa3d15611bbf573d611b6b81611193565b90611b796040519283611172565b81523d5f602083013e5b81611bb1575b81611b92575090565b905060208180518101031261018a5760200151630b135d3f60e11b1490565b905060208151101590611b89565b6060611b83565b6001600160a01b0316908115611a13576001600160a01b031691821561193157308314611c8b57815f525f516020611dd15f395f51905f5260205260405f2054818110611c7257817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f516020611dd15f395f51905f5284520360405f2055845f525f516020611dd15f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b82632e8e416360e21b5f5260045260245ffd5b60ff5f516020611e515f395f51905f525460401c1615611cba57565b631afcd79f60e31b5f5260045ffd5b8151919060418303611cf957611cf29250602082015190606060408401519301515f1a90611d03565b9192909190565b50505f9160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611d85579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611d7a575f516001600160a01b03811615611d7057905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f916003919056fe0f070392f17d5f958cc1ac31867dabecfc5c9758b4a419a200803226d7155d0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0452c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0202dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220a280fbb0f2acb2e77512cf66c815cb20331bcac216419164fd049d563d63e5ad64736f6c634300081c0033";