-
Notifications
You must be signed in to change notification settings - Fork 62
Expand file tree
/
Copy pathStableSurgeHook.json
More file actions
985 lines (985 loc) · 52 KB
/
Copy pathStableSurgeHook.json
File metadata and controls
985 lines (985 loc) · 52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
{
"_format": "hh-sol-artifact-1",
"contractName": "StableSurgeHook",
"sourceName": "contracts/StableSurgeHook.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IVault",
"name": "vault",
"type": "address"
},
{
"internalType": "uint256",
"name": "defaultMaxSurgeFeePercentage",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "defaultSurgeThresholdPercentage",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "InputLengthMismatch",
"type": "error"
},
{
"inputs": [],
"name": "InvalidPercentage",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint8",
"name": "bits",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "SafeCastOverflowedUintDowncast",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "SenderIsNotVault",
"type": "error"
},
{
"inputs": [],
"name": "SenderNotAllowed",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newMaxSurgeFeePercentage",
"type": "uint256"
}
],
"name": "MaxSurgeFeePercentageChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "factory",
"type": "address"
}
],
"name": "StableSurgeHookRegistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newSurgeThresholdPercentage",
"type": "uint256"
}
],
"name": "ThresholdSurgePercentageChanged",
"type": "event"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "selector",
"type": "bytes4"
}
],
"name": "getActionId",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getAllowedPoolFactory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getAuthorizer",
"outputs": [
{
"internalType": "contract IAuthorizer",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDefaultMaxSurgeFeePercentage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDefaultSurgeThresholdPercentage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getHookFlags",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "enableHookAdjustedAmounts",
"type": "bool"
},
{
"internalType": "bool",
"name": "shouldCallBeforeInitialize",
"type": "bool"
},
{
"internalType": "bool",
"name": "shouldCallAfterInitialize",
"type": "bool"
},
{
"internalType": "bool",
"name": "shouldCallComputeDynamicSwapFee",
"type": "bool"
},
{
"internalType": "bool",
"name": "shouldCallBeforeSwap",
"type": "bool"
},
{
"internalType": "bool",
"name": "shouldCallAfterSwap",
"type": "bool"
},
{
"internalType": "bool",
"name": "shouldCallBeforeAddLiquidity",
"type": "bool"
},
{
"internalType": "bool",
"name": "shouldCallAfterAddLiquidity",
"type": "bool"
},
{
"internalType": "bool",
"name": "shouldCallBeforeRemoveLiquidity",
"type": "bool"
},
{
"internalType": "bool",
"name": "shouldCallAfterRemoveLiquidity",
"type": "bool"
}
],
"internalType": "struct HookFlags",
"name": "hookFlags",
"type": "tuple"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
}
],
"name": "getMaxSurgeFeePercentage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "enum SwapKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "amountGivenScaled18",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "balancesScaled18",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "indexIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "indexOut",
"type": "uint256"
},
{
"internalType": "address",
"name": "router",
"type": "address"
},
{
"internalType": "bytes",
"name": "userData",
"type": "bytes"
}
],
"internalType": "struct PoolSwapParams",
"name": "params",
"type": "tuple"
},
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "uint256",
"name": "staticSwapFeePercentage",
"type": "uint256"
}
],
"name": "getSurgeFeePercentage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
}
],
"name": "getSurgeThresholdPercentage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getVault",
"outputs": [
{
"internalType": "contract IVault",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "enum AddLiquidityKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "uint256[]",
"name": "amountsInScaled18",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amountsInRaw",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "balancesScaled18",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onAfterAddLiquidity",
"outputs": [
{
"internalType": "bool",
"name": "success",
"type": "bool"
},
{
"internalType": "uint256[]",
"name": "hookAdjustedAmountsInRaw",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onAfterInitialize",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "enum RemoveLiquidityKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "amountsOutScaled18",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amountsOutRaw",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "balancesScaled18",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onAfterRemoveLiquidity",
"outputs": [
{
"internalType": "bool",
"name": "success",
"type": "bool"
},
{
"internalType": "uint256[]",
"name": "hookAdjustedAmountsOutRaw",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "enum SwapKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "contract IERC20",
"name": "tokenIn",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "tokenOut",
"type": "address"
},
{
"internalType": "uint256",
"name": "amountInScaled18",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountOutScaled18",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenInBalanceScaled18",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenOutBalanceScaled18",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountCalculatedScaled18",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountCalculatedRaw",
"type": "uint256"
},
{
"internalType": "address",
"name": "router",
"type": "address"
},
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "bytes",
"name": "userData",
"type": "bytes"
}
],
"internalType": "struct AfterSwapParams",
"name": "",
"type": "tuple"
}
],
"name": "onAfterSwap",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "enum AddLiquidityKind",
"name": "",
"type": "uint8"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onBeforeAddLiquidity",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onBeforeInitialize",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "enum RemoveLiquidityKind",
"name": "",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onBeforeRemoveLiquidity",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "enum SwapKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "amountGivenScaled18",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "balancesScaled18",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "indexIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "indexOut",
"type": "uint256"
},
{
"internalType": "address",
"name": "router",
"type": "address"
},
{
"internalType": "bytes",
"name": "userData",
"type": "bytes"
}
],
"internalType": "struct PoolSwapParams",
"name": "",
"type": "tuple"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "onBeforeSwap",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "enum SwapKind",
"name": "kind",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "amountGivenScaled18",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "balancesScaled18",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "indexIn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "indexOut",
"type": "uint256"
},
{
"internalType": "address",
"name": "router",
"type": "address"
},
{
"internalType": "bytes",
"name": "userData",
"type": "bytes"
}
],
"internalType": "struct PoolSwapParams",
"name": "params",
"type": "tuple"
},
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "uint256",
"name": "staticSwapFeePercentage",
"type": "uint256"
}
],
"name": "onComputeDynamicSwapFeePercentage",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "factory",
"type": "address"
},
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"components": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "enum TokenType",
"name": "tokenType",
"type": "uint8"
},
{
"internalType": "contract IRateProvider",
"name": "rateProvider",
"type": "address"
},
{
"internalType": "bool",
"name": "paysYieldFees",
"type": "bool"
}
],
"internalType": "struct TokenConfig[]",
"name": "",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "bool",
"name": "disableUnbalancedLiquidity",
"type": "bool"
},
{
"internalType": "bool",
"name": "enableAddLiquidityCustom",
"type": "bool"
},
{
"internalType": "bool",
"name": "enableRemoveLiquidityCustom",
"type": "bool"
},
{
"internalType": "bool",
"name": "enableDonation",
"type": "bool"
}
],
"internalType": "struct LiquidityManagement",
"name": "",
"type": "tuple"
}
],
"name": "onRegister",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "uint256",
"name": "newMaxSurgeSurgeFeePercentage",
"type": "uint256"
}
],
"name": "setMaxSurgeFeePercentage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "uint256",
"name": "newSurgeThresholdPercentage",
"type": "uint256"
}
],
"name": "setSurgeThresholdPercentage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x610140346100ee57601f611e2f38819003918201601f19168301916001600160401b038311848410176100f2578084926060946040528339810103126100ee5780516001600160a01b03811681036100ee576040602083015192015190806080523060a05260c05261007081610106565b61007982610106565b6101209081526101009182523360e05260405190611d0992836101268439608051838181611519015261196d015260a051836113b0015260c05183818161098b015261149a015260e05183818161075e0152610cdd015251828181610b1d0152610d0f01525181818161093c0152610d390152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b670de0b6b3a76400001061011657565b631f3b85d360e01b5f5260045ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630b89f1821461017457806318b6eb551461016f5780631a4a64be1461016a5780631c149e2814610165578063249d6761146101605780632754888d1461015b57806338be241d1461015657806345347f9c1461015157806345421ec71461014c5780634e493cfd146101475780635211fa771461014257806359f004661461013d578063851c1bb3146101385780638bc694ad146101335780638d928af81461012e578063976907cc14610129578063a0e8f5ac14610124578063aaabadc51461011f578063ba5f9f401461011a578063c17ef2cc14610115578063d77153a7146101105763e23816021461010b575f80fd5b610c3d565b610bc1565b610b06565b610ab7565b610a7f565b610a50565b6109af565b61095f565b610925565b6108dd565b6108a2565b61085b565b61081e565b610791565b610732565b6106e7565b610636565b6105c3565b610520565b610409565b6103c9565b6102ab565b73ffffffffffffffffffffffffffffffffffffffff81160361019757565b5f80fd5b600435906101a882610179565b565b602435906101a882610179565b35906101a882610179565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761020b57604052565b6101c2565b610140810190811067ffffffffffffffff82111761020b57604052565b90601f601f19910116810190811067ffffffffffffffff82111761020b57604052565b67ffffffffffffffff811161020b5760051b60200190565b6002111561019757565b8015150361019757565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c608091011261019757606490565b346101975760e0600319360112610197576004356102c881610179565b602435906102d582610179565b60443567ffffffffffffffff811161019757366023820112156101975780600401359061030182610250565b604092610311604051928361022d565b808252602460208093019160071b8401019236841161019757602401905b8382106103635761035f61034d88886103473661027c565b50610c8f565b60405190151581529081906020820190565b0390f35b6080823603126101975782608091865161037c816101ef565b843561038781610179565b81528285013561039681610268565b83820152878501356103a781610179565b88820152606080860135906103bb82610272565b82015281520191019061032f565b3461019757600319602081360112610197576004359067ffffffffffffffff821161019757610180913603011261019757604080515f81525f6020820152f35b346101975760206003193601126101975773ffffffffffffffffffffffffffffffffffffffff60043561043b81610179565b165f525f602052602067ffffffffffffffff60405f205460401c16604051908152f35b929161046982610250565b91610477604051938461022d565b829481845260208094019160051b810192831161019757905b82821061049d5750505050565b81358152908301908301610490565b9080601f83011215610197578160206104c79335910161045e565b90565b81601f820112156101975780359067ffffffffffffffff821161020b57604051926104ff6020601f19601f860116018561022d565b8284526020838301011161019757815f926020809301838601378301015290565b346101975760406003193601126101975767ffffffffffffffff600435818111610197576105529036906004016104ac565b506024359081116101975761056b9036906004016104ca565b5060206040515f8152f35b908160e09103126101975790565b6060600319820112610197576004359067ffffffffffffffff8211610197576105af91600401610576565b906024356105bc81610179565b9060443590565b346101975760206105dc6105d636610584565b91611139565b604051908152f35b60443590600482101561019757565b906040820190151582526020606081936040838201528551809452019301915f5b828110610622575050505090565b835185529381019392810192600101610614565b34610197576101006003193601126101975761065061019b565b506106596101aa565b6106616105e4565b67ffffffffffffffff9190608435838111610197576106849036906004016104ac565b60a4358481116101975761069c9036906004016104ac565b9160c435858111610197576106b59036906004016104ac565b9360e435958611610197576106d16106d79636906004016104ca565b506112d1565b9061035f604051928392836105f3565b346101975760606003193601126101975767ffffffffffffffff600435818111610197576107199036906004016104ac565b506044359081116101975761056b9036906004016104ca565b34610197575f60031936011261019757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60443590600582101561019757565b346101975760e0600319360112610197576107ad600435610179565b6107b56101aa565b506107be610782565b5067ffffffffffffffff606435818111610197576107e09036906004016104ac565b5060a435818111610197576107f99036906004016104ac565b5060c435908111610197576108129036906004016104ca565b506040515f8152602090f35b346101975760406003193601126101975761085960043561083e81610179565b6024359061084b8261188a565b61085481611921565b61156d565b005b346101975760406003193601126101975760043567ffffffffffffffff81116101975761088c903690600401610576565b50610898602435610179565b60206040515f8152f35b34610197576040600319360112610197576108596004356108c281610179565b602435906108cf8261188a565b6108d881611921565b611605565b34610197576020600319360112610197576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610197576105dc602091611385565b34610197575f6003193601126101975760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610197575f60031936011261019757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461019757610100600319360112610197576109c961019b565b506109d26101aa565b6109da610782565b67ffffffffffffffff9190606435838111610197576109fd9036906004016104ac565b60843584811161019757610a159036906004016104ac565b9160c43585811161019757610a2e9036906004016104ac565b9360e43595861161019757610a4a6106d79636906004016104ca565b506113fb565b34610197576040610a71610a6336610584565b91610a6c611502565b611139565b815190600182526020820152f35b34610197575f600319360112610197576020610a99611457565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101975760e060031936011261019757610ad3600435610179565b610adb6101aa565b50610ae46105e4565b5067ffffffffffffffff608435818111610197576107e09036906004016104ac565b34610197575f6003193601126101975760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b815115158152610140810192916101a8919060208181015115159083015260408181015115159083015260608181015115159083015260808181015115159083015260a08181015115159083015260c08181015115159083015260e08181015115159083015261010081810151151590830152610120908101511515910152565b34610197575f6003193601126101975761035f604051610be081610210565b5f81525f60208201525f60408201525f60808201525f60a08201525f60c0820152610c3160e082015f81525f610100840152610c2b6101208401915f83526001606086015260019052565b60019052565b60405191829182610b40565b346101975760206003193601126101975773ffffffffffffffffffffffffffffffffffffffff600435610c6f81610179565b165f525f602052602067ffffffffffffffff60405f205416604051908152f35b906104c791610c9c611502565b610cc1565b9081602091031261019757516104c781610272565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff80911691817f000000000000000000000000000000000000000000000000000000000000000016831480610d8f575b15610d8857610d347f00000000000000000000000000000000000000000000000000000000000000008261156d565b610d5e7f000000000000000000000000000000000000000000000000000000000000000082611605565b167ffd42028b1ab0233596a5bfda7bb185da4a89e41288da447e5135765d4b50d46b5f80a3600190565b5050505f90565b506040517f6634b75300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602081602481875afa908115610e1e575f91610def575b50610d05565b610e11915060203d602011610e17575b610e09818361022d565b810190610ca1565b5f610de9565b503d610dff565b610cb6565b90816020910312610197575190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610e6957565b610e32565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019757016020813591019167ffffffffffffffff8211610197578160051b3603831361019757565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116101975760209260051b809284830137010190565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019757016020813591019167ffffffffffffffff821161019757813603831361019757565b601f8260209493601f1993818652868601375f8582860101520116010190565b9060208252803591610f7f83610268565b6002831015610e69576104c79260208201526020820135604082015261100b610fc0610fae6040850185610e6e565b60e06060860152610100850191610ec1565b9260608101356080840152608081013560a0840152611001610fe460a083016101b7565b73ffffffffffffffffffffffffffffffffffffffff1660c0850152565b60c0810190610efe565b9160e0601f1982860301910152610f4e565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610197570180359067ffffffffffffffff821161019757602001918160051b3603831361019757565b9061107b82610250565b611088604051918261022d565b828152601f196110988294610250565b0190602036910137565b356104c781610268565b80518210156110c05760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820180921161112757565b6110ed565b9190820391821161112757565b91604051917f72c98186000000000000000000000000000000000000000000000000000000008352602083806111728760048301610f6e565b038173ffffffffffffffffffffffffffffffffffffffff85165afa938415610e1e576104c7946111cb945f9161126f575b506111d7604083016111d26111c26111bb838761101d565b9050611071565b9788928661101d565b369161045e565b611690565b6111e0826110a2565b6111e981610e5f565b61123e57606082013561121461120d6020850135611207848a6110ac565b5161111a565b91876110ac565b5261123861123160808401359261122b84896110ac565b5161112c565b91866110ac565b526116d1565b61125461123160608401359261120784896110ac565b526080810135611238611231602084013561122b84896110ac565b611291915060203d602011611297575b611289818361022d565b810190610e23565b5f6111a3565b503d61127f565b906040516040810167ffffffffffffffff8282108183111761020b57602091604052829454818116845260401c16910152565b939192906004811015610e69571561137a576112ed8251611071565b945f5b835181101561132d5761130381856110ac565b519061130f81876110ac565b51820180921161112757600191611326828a6110ac565b52016112f0565b5093611375935061136961136461136f9297939773ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b61129e565b926117ce565b9161185b565b159190565b939250505060019190565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761020b5760405251902090565b939192906005811015610e69571561137a576114178251611071565b945f5b835181101561132d5761142d81856110ac565b519061143981876110ac565b51820391821161112757600191611450828a6110ac565b520161141a565b6040517faaabadc500000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610e1e575f916114cd575090565b90506020813d6020116114fa575b816114e86020938361022d565b8101031261019757516104c781610179565b3d91506114db565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361154157565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b9060207fcc7585f1dd40a0def67658a884745a1eca326ed902fe084d36e9e040842120329173ffffffffffffffffffffffffffffffffffffffff6115b082611a67565b941693845f525f835260405f20907fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b169116179055604051908152a2565b9060207f3b64afdb883fd4fa590572fb2db0b4d199d8ffb9703f5d32f4d87d1d468c026c9173ffffffffffffffffffffffffffffffffffffffff61164882611a67565b941693845f525f835267ffffffffffffffff60405f2091167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055604051908152a2565b908151815181036116a9576020809160051b930191015e565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b929073ffffffffffffffffffffffffffffffffffffffff165f525f6020526116fb60405f2061129e565b906020820167ffffffffffffffff918483835116106117c5576111cb9561173461172761173a936117ce565b978260408a94019061101d565b8561185b565b156117bd575116828103908111611127576117b1826117ab61179961177761178a6104c7996117846117776117b79a5167ffffffffffffffff1690565b67ffffffffffffffff1690565b9061112c565b935167ffffffffffffffff1690565b670de0b6b3a764000081810391100290565b90611ad9565b90611afd565b9061111a565b505050905090565b50505050905090565b906117d882611b1b565b5f9283805b825186101561182d576117f086846110ac565b51810180911161112757908361180687856110ac565b518181111561182657035b810180911161112757600190950194906117dd565b9003611811565b939450670de0b6b3a7640000808202935081159184041417159050611127578115611856570490565b611aac565b91908115610d885761186c906117ce565b8111918261187957505090565b5167ffffffffffffffff1610919050565b670de0b6b3a76400001061189a57565b7f1f3b85d3000000000000000000000000000000000000000000000000000000005f5260045ffd5b908160609103126101975760405190606082019082821067ffffffffffffffff83111761020b57604091825280516118f981610179565b8352602081015161190981610179565b6020840152015161191981610179565b604082015290565b6040517fe9ddeb2600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152906060816024817f000000000000000000000000000000000000000000000000000000000000000086165afa908115610e1e576119c1916020915f91611a38575b50015173ffffffffffffffffffffffffffffffffffffffff1690565b169081611a2f57611a0091506119f97fffffffff000000000000000000000000000000000000000000000000000000005f3516611385565b3390611b9c565b15611a0757565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b503303611a0757565b611a5a915060603d606011611a60575b611a52818361022d565b8101906118c2565b5f6119a5565b503d611a48565b67ffffffffffffffff90818111611a7c571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b670de0b6b3a764000090818102918183041490151715611127578115611856570490565b81810291818304149015171561112757670de0b6b3a7640000900490565b611b3360016020835160051b84010160208401611c2c565b8051600181811c9116611b8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019080821161112757611b78611b7f92846110ac565b51926110ac565b5181018091116111275760011c90565b611b98916110ac565b5190565b90606460209273ffffffffffffffffffffffffffffffffffffffff948580611bc2611457565b169160405197889687957f9be2a88400000000000000000000000000000000000000000000000000000000875260048701521660248501521660448301525afa908115610e1e575f91611c13575090565b6104c7915060203d602011610e1757610e09818361022d565b9190604083820310611cce5782519282818095602090602085015b868110611c6e575050835182518552825250611c6292611c2c565b60206101a89301611c2c565b9193509150805186600114611caa577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b8211611cbd575b82019186918693611c47565b958201805187518252875295611cb1565b50505056fea2646970667358221220c8f19e352d719ca3b5eda1fd3e5b683efb990ac40f3a22ab9dcf77543fe6059364736f6c634300081b0033",
"deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c80630b89f1821461017457806318b6eb551461016f5780631a4a64be1461016a5780631c149e2814610165578063249d6761146101605780632754888d1461015b57806338be241d1461015657806345347f9c1461015157806345421ec71461014c5780634e493cfd146101475780635211fa771461014257806359f004661461013d578063851c1bb3146101385780638bc694ad146101335780638d928af81461012e578063976907cc14610129578063a0e8f5ac14610124578063aaabadc51461011f578063ba5f9f401461011a578063c17ef2cc14610115578063d77153a7146101105763e23816021461010b575f80fd5b610c3d565b610bc1565b610b06565b610ab7565b610a7f565b610a50565b6109af565b61095f565b610925565b6108dd565b6108a2565b61085b565b61081e565b610791565b610732565b6106e7565b610636565b6105c3565b610520565b610409565b6103c9565b6102ab565b73ffffffffffffffffffffffffffffffffffffffff81160361019757565b5f80fd5b600435906101a882610179565b565b602435906101a882610179565b35906101a882610179565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761020b57604052565b6101c2565b610140810190811067ffffffffffffffff82111761020b57604052565b90601f601f19910116810190811067ffffffffffffffff82111761020b57604052565b67ffffffffffffffff811161020b5760051b60200190565b6002111561019757565b8015150361019757565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c608091011261019757606490565b346101975760e0600319360112610197576004356102c881610179565b602435906102d582610179565b60443567ffffffffffffffff811161019757366023820112156101975780600401359061030182610250565b604092610311604051928361022d565b808252602460208093019160071b8401019236841161019757602401905b8382106103635761035f61034d88886103473661027c565b50610c8f565b60405190151581529081906020820190565b0390f35b6080823603126101975782608091865161037c816101ef565b843561038781610179565b81528285013561039681610268565b83820152878501356103a781610179565b88820152606080860135906103bb82610272565b82015281520191019061032f565b3461019757600319602081360112610197576004359067ffffffffffffffff821161019757610180913603011261019757604080515f81525f6020820152f35b346101975760206003193601126101975773ffffffffffffffffffffffffffffffffffffffff60043561043b81610179565b165f525f602052602067ffffffffffffffff60405f205460401c16604051908152f35b929161046982610250565b91610477604051938461022d565b829481845260208094019160051b810192831161019757905b82821061049d5750505050565b81358152908301908301610490565b9080601f83011215610197578160206104c79335910161045e565b90565b81601f820112156101975780359067ffffffffffffffff821161020b57604051926104ff6020601f19601f860116018561022d565b8284526020838301011161019757815f926020809301838601378301015290565b346101975760406003193601126101975767ffffffffffffffff600435818111610197576105529036906004016104ac565b506024359081116101975761056b9036906004016104ca565b5060206040515f8152f35b908160e09103126101975790565b6060600319820112610197576004359067ffffffffffffffff8211610197576105af91600401610576565b906024356105bc81610179565b9060443590565b346101975760206105dc6105d636610584565b91611139565b604051908152f35b60443590600482101561019757565b906040820190151582526020606081936040838201528551809452019301915f5b828110610622575050505090565b835185529381019392810192600101610614565b34610197576101006003193601126101975761065061019b565b506106596101aa565b6106616105e4565b67ffffffffffffffff9190608435838111610197576106849036906004016104ac565b60a4358481116101975761069c9036906004016104ac565b9160c435858111610197576106b59036906004016104ac565b9360e435958611610197576106d16106d79636906004016104ca565b506112d1565b9061035f604051928392836105f3565b346101975760606003193601126101975767ffffffffffffffff600435818111610197576107199036906004016104ac565b506044359081116101975761056b9036906004016104ca565b34610197575f60031936011261019757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60443590600582101561019757565b346101975760e0600319360112610197576107ad600435610179565b6107b56101aa565b506107be610782565b5067ffffffffffffffff606435818111610197576107e09036906004016104ac565b5060a435818111610197576107f99036906004016104ac565b5060c435908111610197576108129036906004016104ca565b506040515f8152602090f35b346101975760406003193601126101975761085960043561083e81610179565b6024359061084b8261188a565b61085481611921565b61156d565b005b346101975760406003193601126101975760043567ffffffffffffffff81116101975761088c903690600401610576565b50610898602435610179565b60206040515f8152f35b34610197576040600319360112610197576108596004356108c281610179565b602435906108cf8261188a565b6108d881611921565b611605565b34610197576020600319360112610197576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610197576105dc602091611385565b34610197575f6003193601126101975760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610197575f60031936011261019757602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461019757610100600319360112610197576109c961019b565b506109d26101aa565b6109da610782565b67ffffffffffffffff9190606435838111610197576109fd9036906004016104ac565b60843584811161019757610a159036906004016104ac565b9160c43585811161019757610a2e9036906004016104ac565b9360e43595861161019757610a4a6106d79636906004016104ca565b506113fb565b34610197576040610a71610a6336610584565b91610a6c611502565b611139565b815190600182526020820152f35b34610197575f600319360112610197576020610a99611457565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101975760e060031936011261019757610ad3600435610179565b610adb6101aa565b50610ae46105e4565b5067ffffffffffffffff608435818111610197576107e09036906004016104ac565b34610197575f6003193601126101975760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b815115158152610140810192916101a8919060208181015115159083015260408181015115159083015260608181015115159083015260808181015115159083015260a08181015115159083015260c08181015115159083015260e08181015115159083015261010081810151151590830152610120908101511515910152565b34610197575f6003193601126101975761035f604051610be081610210565b5f81525f60208201525f60408201525f60808201525f60a08201525f60c0820152610c3160e082015f81525f610100840152610c2b6101208401915f83526001606086015260019052565b60019052565b60405191829182610b40565b346101975760206003193601126101975773ffffffffffffffffffffffffffffffffffffffff600435610c6f81610179565b165f525f602052602067ffffffffffffffff60405f205416604051908152f35b906104c791610c9c611502565b610cc1565b9081602091031261019757516104c781610272565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff80911691817f000000000000000000000000000000000000000000000000000000000000000016831480610d8f575b15610d8857610d347f00000000000000000000000000000000000000000000000000000000000000008261156d565b610d5e7f000000000000000000000000000000000000000000000000000000000000000082611605565b167ffd42028b1ab0233596a5bfda7bb185da4a89e41288da447e5135765d4b50d46b5f80a3600190565b5050505f90565b506040517f6634b75300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602081602481875afa908115610e1e575f91610def575b50610d05565b610e11915060203d602011610e17575b610e09818361022d565b810190610ca1565b5f610de9565b503d610dff565b610cb6565b90816020910312610197575190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610e6957565b610e32565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019757016020813591019167ffffffffffffffff8211610197578160051b3603831361019757565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116101975760209260051b809284830137010190565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019757016020813591019167ffffffffffffffff821161019757813603831361019757565b601f8260209493601f1993818652868601375f8582860101520116010190565b9060208252803591610f7f83610268565b6002831015610e69576104c79260208201526020820135604082015261100b610fc0610fae6040850185610e6e565b60e06060860152610100850191610ec1565b9260608101356080840152608081013560a0840152611001610fe460a083016101b7565b73ffffffffffffffffffffffffffffffffffffffff1660c0850152565b60c0810190610efe565b9160e0601f1982860301910152610f4e565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610197570180359067ffffffffffffffff821161019757602001918160051b3603831361019757565b9061107b82610250565b611088604051918261022d565b828152601f196110988294610250565b0190602036910137565b356104c781610268565b80518210156110c05760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820180921161112757565b6110ed565b9190820391821161112757565b91604051917f72c98186000000000000000000000000000000000000000000000000000000008352602083806111728760048301610f6e565b038173ffffffffffffffffffffffffffffffffffffffff85165afa938415610e1e576104c7946111cb945f9161126f575b506111d7604083016111d26111c26111bb838761101d565b9050611071565b9788928661101d565b369161045e565b611690565b6111e0826110a2565b6111e981610e5f565b61123e57606082013561121461120d6020850135611207848a6110ac565b5161111a565b91876110ac565b5261123861123160808401359261122b84896110ac565b5161112c565b91866110ac565b526116d1565b61125461123160608401359261120784896110ac565b526080810135611238611231602084013561122b84896110ac565b611291915060203d602011611297575b611289818361022d565b810190610e23565b5f6111a3565b503d61127f565b906040516040810167ffffffffffffffff8282108183111761020b57602091604052829454818116845260401c16910152565b939192906004811015610e69571561137a576112ed8251611071565b945f5b835181101561132d5761130381856110ac565b519061130f81876110ac565b51820180921161112757600191611326828a6110ac565b52016112f0565b5093611375935061136961136461136f9297939773ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b61129e565b926117ce565b9161185b565b159190565b939250505060019190565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff82111761020b5760405251902090565b939192906005811015610e69571561137a576114178251611071565b945f5b835181101561132d5761142d81856110ac565b519061143981876110ac565b51820391821161112757600191611450828a6110ac565b520161141a565b6040517faaabadc500000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610e1e575f916114cd575090565b90506020813d6020116114fa575b816114e86020938361022d565b8101031261019757516104c781610179565b3d91506114db565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361154157565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b9060207fcc7585f1dd40a0def67658a884745a1eca326ed902fe084d36e9e040842120329173ffffffffffffffffffffffffffffffffffffffff6115b082611a67565b941693845f525f835260405f20907fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b169116179055604051908152a2565b9060207f3b64afdb883fd4fa590572fb2db0b4d199d8ffb9703f5d32f4d87d1d468c026c9173ffffffffffffffffffffffffffffffffffffffff61164882611a67565b941693845f525f835267ffffffffffffffff60405f2091167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055604051908152a2565b908151815181036116a9576020809160051b930191015e565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b929073ffffffffffffffffffffffffffffffffffffffff165f525f6020526116fb60405f2061129e565b906020820167ffffffffffffffff918483835116106117c5576111cb9561173461172761173a936117ce565b978260408a94019061101d565b8561185b565b156117bd575116828103908111611127576117b1826117ab61179961177761178a6104c7996117846117776117b79a5167ffffffffffffffff1690565b67ffffffffffffffff1690565b9061112c565b935167ffffffffffffffff1690565b670de0b6b3a764000081810391100290565b90611ad9565b90611afd565b9061111a565b505050905090565b50505050905090565b906117d882611b1b565b5f9283805b825186101561182d576117f086846110ac565b51810180911161112757908361180687856110ac565b518181111561182657035b810180911161112757600190950194906117dd565b9003611811565b939450670de0b6b3a7640000808202935081159184041417159050611127578115611856570490565b611aac565b91908115610d885761186c906117ce565b8111918261187957505090565b5167ffffffffffffffff1610919050565b670de0b6b3a76400001061189a57565b7f1f3b85d3000000000000000000000000000000000000000000000000000000005f5260045ffd5b908160609103126101975760405190606082019082821067ffffffffffffffff83111761020b57604091825280516118f981610179565b8352602081015161190981610179565b6020840152015161191981610179565b604082015290565b6040517fe9ddeb2600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152906060816024817f000000000000000000000000000000000000000000000000000000000000000086165afa908115610e1e576119c1916020915f91611a38575b50015173ffffffffffffffffffffffffffffffffffffffff1690565b169081611a2f57611a0091506119f97fffffffff000000000000000000000000000000000000000000000000000000005f3516611385565b3390611b9c565b15611a0757565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b503303611a0757565b611a5a915060603d606011611a60575b611a52818361022d565b8101906118c2565b5f6119a5565b503d611a48565b67ffffffffffffffff90818111611a7c571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b670de0b6b3a764000090818102918183041490151715611127578115611856570490565b81810291818304149015171561112757670de0b6b3a7640000900490565b611b3360016020835160051b84010160208401611c2c565b8051600181811c9116611b8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019080821161112757611b78611b7f92846110ac565b51926110ac565b5181018091116111275760011c90565b611b98916110ac565b5190565b90606460209273ffffffffffffffffffffffffffffffffffffffff948580611bc2611457565b169160405197889687957f9be2a88400000000000000000000000000000000000000000000000000000000875260048701521660248501521660448301525afa908115610e1e575f91611c13575090565b6104c7915060203d602011610e1757610e09818361022d565b9190604083820310611cce5782519282818095602090602085015b868110611c6e575050835182518552825250611c6292611c2c565b60206101a89301611c2c565b9193509150805186600114611caa577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b8211611cbd575b82019186918693611c47565b958201805187518252875295611cb1565b50505056fea2646970667358221220c8f19e352d719ca3b5eda1fd3e5b683efb990ac40f3a22ab9dcf77543fe6059364736f6c634300081b0033",
"linkReferences": {},
"deployedLinkReferences": {}
}