forked from LexiccLabs/SemiotNet
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathBancorFormula.json
9549 lines (9549 loc) · 448 KB
/
BancorFormula.json
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
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"contractName": "BancorFormula",
"abi": [
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_supply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_reserveBalance",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_reserveRatio",
"type": "uint32"
},
{
"internalType": "uint256",
"name": "_depositAmount",
"type": "uint256"
}
],
"name": "calculatePurchaseReturn",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_supply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_reserveBalance",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_reserveRatio",
"type": "uint32"
},
{
"internalType": "uint256",
"name": "_sellAmount",
"type": "uint256"
}
],
"name": "calculateSaleReturn",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_supply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_reserveRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_depositAmount\",\"type\":\"uint256\"}],\"name\":\"calculatePurchaseReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_supply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_reserveRatio\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_sellAmount\",\"type\":\"uint256\"}],\"name\":\"calculateSaleReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"calculatePurchaseReturn(uint256,uint256,uint32,uint256)\":{\"details\":\"given a continuous token supply, reserve token balance, reserve ratio, and a deposit amount (in the reserve token), calculates the return for a given conversion (in the continuous token) Formula: Return = _supply * ((1 + _depositAmount / _reserveBalance) ^ (_reserveRatio / MAX_RESERVE_RATIO) - 1)\",\"params\":{\"_depositAmount\":\"deposit amount, in reserve token\",\"_reserveBalance\":\"total reserve token balance\",\"_reserveRatio\":\"reserve ratio, represented in ppm, 1-1000000\",\"_supply\":\"continuous token total supply\"},\"returns\":{\"_0\":\"purchase return amount\"}},\"calculateSaleReturn(uint256,uint256,uint32,uint256)\":{\"details\":\"given a continuous token supply, reserve token balance, reserve ratio and a sell amount (in the continuous token), calculates the return for a given conversion (in the reserve token) Formula: Return = _reserveBalance * (1 - (1 - _sellAmount / _supply) ^ (1 / (_reserveRatio / MAX_RESERVE_RATIO)))\",\"params\":{\"_reserveBalance\":\"total reserve token balance\",\"_reserveRatio\":\"constant reserve ratio, represented in ppm, 1-1000000\",\"_sellAmount\":\"sell amount, in the continuous token itself\",\"_supply\":\"continuous token total supply\"},\"returns\":{\"_0\":\"sale return amount\"}}},\"title\":\"Bancor formula by Bancor Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements; and to You under the Apache License, Version 2.0. \\\"\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/gokulalex/Apps/eth_apps/SiddhiNet/contracts/BancorFormula.sol\":\"BancorFormula\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/gokulalex/Apps/eth_apps/SiddhiNet/contracts/BancorFormula.sol\":{\"keccak256\":\"0x00a19bb1161d82ef171a5c745ead4a1ac6d0ac3a0b6a2efcea37cc7589d2a3e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e91da09044eb8f241fa184260695af91b5ca5630869c00745a8b7269f9c34c3\",\"dweb:/ipfs/QmeZH1Dm8F8NqLi9EdD8zyQBJuDuEUv29YkXi4jPS6VoC7\"]},\"/Users/gokulalex/Apps/eth_apps/SiddhiNet/contracts/Power.sol\":{\"keccak256\":\"0x307f95ceae292caadea9dbfa9e797123938ba7293739b04ed765e33af5e12d41\",\"license\":\"Apache License 2.0\",\"urls\":[\"bzz-raw://ab766ff8f143d8a26b15dddb4ad9a0e3939c4080fa274e045cc0128d25fd21fa\",\"dweb:/ipfs/Qme5xAg4dEt2GQPqgEnh1XYzqGrzC1qKgNrMg2MgZ5PGY3\"]},\"/Users/gokulalex/Apps/eth_apps/SiddhiNet/contracts/SafeMath.sol\":{\"keccak256\":\"0xcfa633b45188202cbdca631a44be85297c46bef8dd0706f8f2ad7b6d52c77d98\",\"license\":\"Apache License 2.0\",\"urls\":[\"bzz-raw://c64173215d1292ffbf8c4574a9559c699baf9cfd76c311bb86b12c74be98c95c\",\"dweb:/ipfs/QmQBQf8Cr9FhApNx1Sg5YeTsYddxNDmLucTnoJrZpM4gex\"]}},\"version\":1}",
"bytecode": "0x60806040526040518060400160405280600381526020017f302e330000000000000000000000000000000000000000000000000000000000815250600090805190602001906200005192919062000e96565b503480156200005f57600080fd5b50701c35fedd14ffffffffffffffffffffffff60016020608081106200008157fe5b0181905550701b0ce43b323fffffffffffffffffffffff6001602160808110620000a757fe5b01819055507019f0028ec1ffffffffffffffffffffffff6001602260808110620000cd57fe5b01819055507018ded91f0e7fffffffffffffffffffffff6001602360808110620000f357fe5b01819055507017d8ec7f0417ffffffffffffffffffffff60016024608081106200011957fe5b01819055507016ddc6556cdbffffffffffffffffffffff60016025608081106200013f57fe5b01819055507015ecf52776a1ffffffffffffffffffffff60016026608081106200016557fe5b01819055507015060c256cb2ffffffffffffffffffffff60016027608081106200018b57fe5b0181905550701428a2f98d72ffffffffffffffffffffff6001602860808110620001b157fe5b01819055507013545598e5c23fffffffffffffffffffff6001602960808110620001d757fe5b0181905550701288c4161ce1dfffffffffffffffffffff6001602a60808110620001fd57fe5b01819055507011c592761c666fffffffffffffffffffff6001602b608081106200022357fe5b018190555070110a688680a757ffffffffffffffffffff6001602c608081106200024957fe5b0181905550701056f1b5bedf77ffffffffffffffffffff6001602d608081106200026f57fe5b0181905550700faadceceeff8bffffffffffffffffffff6001602e608081106200029557fe5b0181905550700f05dc6b27edadffffffffffffffffffff6001602f60808110620002bb57fe5b0181905550700e67a5a25da4107fffffffffffffffffff6001603060808110620002e157fe5b0181905550700dcff115b14eedffffffffffffffffffff60016031608081106200030757fe5b0181905550700d3e7a392431239fffffffffffffffffff60016032608081106200032d57fe5b0181905550700cb2ff529eb71e4fffffffffffffffffff60016033608081106200035357fe5b0181905550700c2d415c3db974afffffffffffffffffff60016034608081106200037957fe5b0181905550700bad03e7d883f69bffffffffffffffffff60016035608081106200039f57fe5b0181905550700b320d03b2c343d5ffffffffffffffffff6001603660808110620003c557fe5b0181905550700abc25204e02828dffffffffffffffffff6001603760808110620003eb57fe5b0181905550700a4b16f74ee4bb207fffffffffffffffff60016038608081106200041157fe5b01819055507009deaf736ac1f569ffffffffffffffffff60016039608081106200043757fe5b0181905550700976bd9952c7aa957fffffffffffffffff6001603a608081106200045d57fe5b01819055507009131271922eaa606fffffffffffffffff6001603b608081106200048357fe5b01819055507008b380f3558668c46fffffffffffffffff6001603c60808110620004a957fe5b0181905550700857ddf0117efa215bffffffffffffffff6001603d60808110620004cf57fe5b01819055507007ffffffffffffffffffffffffffffffff6001603e60808110620004f557fe5b01819055507007abbf6f6abb9d087fffffffffffffffff6001603f608081106200051b57fe5b018190555070075af62cbac95f7dfa7fffffffffffffff60016040608081106200054157fe5b018190555070070d7fb7452e187ac13fffffffffffffff60016041608081106200056757fe5b01819055507006c3390ecc8af379295fffffffffffffff60016042608081106200058d57fe5b018190555070067c00a3b07ffc01fd6fffffffffffffff6001604360808110620005b357fe5b0181905550700637b647c39cbb9d3d27ffffffffffffff6001604460808110620005d957fe5b01819055507005f63b1fc104dbd39587ffffffffffffff6001604560808110620005ff57fe5b01819055507005b771955b36e12f7235ffffffffffffff60016046608081106200062557fe5b018190555070057b3d49dda84556d6f6ffffffffffffff60016047608081106200064b57fe5b018190555070054183095b2c8ececf30ffffffffffffff60016048608081106200067157fe5b018190555070050a28be635ca2b888f77fffffffffffff60016049608081106200069757fe5b01819055507004d5156639708c9db33c3fffffffffffff6001604a60808110620006bd57fe5b01819055507004a23105873875bd52dfdfffffffffffff6001604b60808110620006e357fe5b0181905550700471649d87199aa990756fffffffffffff6001604c608081106200070957fe5b01819055507004429a21a029d4c1457cfbffffffffffff6001604d608081106200072f57fe5b0181905550700415bc6d6fb7dd71af2cb3ffffffffffff6001604e608081106200075557fe5b01819055507003eab73b3bbfe282243ce1ffffffffffff6001604f608081106200077b57fe5b01819055507003c1771ac9fb6b4c18e229ffffffffffff6001605060808110620007a157fe5b0181905550700399e96897690418f785257fffffffffff6001605160808110620007c757fe5b0181905550700373fc456c53bb779bf0ea9fffffffffff6001605260808110620007ed57fe5b018190555070034f9e8e490c48e67e6ab8bfffffffffff60016053608081106200081357fe5b018190555070032cbfd4a7adc790560b3337ffffffffff60016054608081106200083957fe5b018190555070030b50570f6e5d2acca94613ffffffffff60016055608081106200085f57fe5b01819055507002eb40f9f620fda6b56c2861ffffffffff60016056608081106200088557fe5b01819055507002cc8340ecb0d0f520a6af58ffffffffff6001605760808110620008ab57fe5b01819055507002af09481380a0a35cf1ba02ffffffffff6001605860808110620008d157fe5b0181905550700292c5bdd3b92ec810287b1b3fffffffff6001605960808110620008f757fe5b0181905550700277abdcdab07d5a77ac6d6b9fffffffff6001605a608081106200091d57fe5b018190555070025daf6654b1eaa55fd64df5efffffffff6001605b608081106200094357fe5b0181905550700244c49c648baa98192dce88b7ffffffff6001605c608081106200096957fe5b018190555070022ce03cd5619a311b2471268bffffffff6001605d608081106200098f57fe5b0181905550700215f77c045fbe885654a44a0fffffffff6001605e60808110620009b557fe5b01819055507001ffffffffffffffffffffffffffffffff6001605f60808110620009db57fe5b01819055507001eaefdbdaaee7421fc4d3ede5ffffffff600160606080811062000a0157fe5b01819055507001d6bd8b2eb257df7e8ca57b09bfffffff600160616080811062000a2757fe5b01819055507001c35fedd14b861eb0443f7f133fffffff600160626080811062000a4d57fe5b01819055507001b0ce43b322bcde4a56e8ada5afffffff600160636080811062000a7357fe5b018190555070019f0028ec1fff007f5a195a39dfffffff600160646080811062000a9957fe5b018190555070018ded91f0e72ee74f49b15ba527ffffff600160656080811062000abf57fe5b018190555070017d8ec7f04136f4e5615fd41a63ffffff600160666080811062000ae557fe5b018190555070016ddc6556cdb84bdc8d12d22e6fffffff600160676080811062000b0b57fe5b018190555070015ecf52776a1155b5bd8395814f7fffff600160686080811062000b3157fe5b018190555070015060c256cb23b3b3cc3754cf40ffffff600160696080811062000b5757fe5b01819055507001428a2f98d728ae223ddab715be3fffff6001606a6080811062000b7d57fe5b018190555070013545598e5c23276ccf0ede68034fffff6001606b6080811062000ba357fe5b01819055507001288c4161ce1d6f54b7f61081194fffff6001606c6080811062000bc957fe5b018190555070011c592761c666aa641d5a01a40f17ffff6001606d6080811062000bef57fe5b0181905550700110a688680a7530515f3e6e6cfdcdffff6001606e6080811062000c1557fe5b01819055507001056f1b5bedf75c6bcb2ce8aed428ffff6001606f6080811062000c3b57fe5b01819055506ffaadceceeff8a0890f3875f008277fff600160706080811062000c6057fe5b01819055506ff05dc6b27edad306388a600f6ba0bfff600160716080811062000c8557fe5b01819055506fe67a5a25da41063de1495d5b18cdbfff600160726080811062000caa57fe5b01819055506fdcff115b14eedde6fc3aa5353f2e4fff600160736080811062000ccf57fe5b01819055506fd3e7a3924312399f9aae2e0f868f8fff600160746080811062000cf457fe5b01819055506fcb2ff529eb71e41582cccd5a1ee26fff600160756080811062000d1957fe5b01819055506fc2d415c3db974ab32a51840c0b67edff600160766080811062000d3e57fe5b01819055506fbad03e7d883f69ad5b0a186184e06bff600160776080811062000d6357fe5b01819055506fb320d03b2c343d4829abd6075f0cc5ff600160786080811062000d8857fe5b01819055506fabc25204e02828d73c6e80bcdb1a95bf600160796080811062000dad57fe5b01819055506fa4b16f74ee4bb2040a1ec6c15fbbf2df6001607a6080811062000dd257fe5b01819055506f9deaf736ac1f569deb1b5ae3f36c130f6001607b6080811062000df757fe5b01819055506f976bd9952c7aa957f5937d790ef650376001607c6080811062000e1c57fe5b01819055506f9131271922eaa6064b73a22d0bd4f2bf6001607d6080811062000e4157fe5b01819055506f8b380f3558668c46c91c49a2f8e967b96001607e6080811062000e6657fe5b01819055506f857ddf0117efa215952912839f6473e66001607f6080811062000e8b57fe5b018190555062000f4c565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000ece576000855562000f1a565b82601f1062000ee957805160ff191683800117855562000f1a565b8280016001018555821562000f1a579182015b8281111562000f1957825182559160200191906001019062000efc565b5b50905062000f29919062000f2d565b5090565b5b8082111562000f4857600081600090555060010162000f2e565b5090565b611c978062000f5c6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806329a00e7c1461004657806349f9b0f71461007657806354fd4d50146100a6575b600080fd5b610060600480360381019061005b91906118cb565b6100c4565b60405161006d9190611b9e565b60405180910390f35b610090600480360381019061008b91906118cb565b610206565b60405161009d9190611b9e565b60405180910390f35b6100ae61037c565b6040516100bb9190611adc565b60405180910390f35b600080851180156100d55750600084115b80156100e7575060008363ffffffff16115b80156101025750620f424063ffffffff168363ffffffff1611155b610141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013890611b7e565b60405180910390fd5b600082141561015357600090506101fe565b620f424063ffffffff168363ffffffff1614156101965761018f84610181848861041a90919063ffffffff16565b61048a90919063ffffffff16565b90506101fe565b60008060006101ae87866104d490919063ffffffff16565b90506101bf818888620f4240610529565b809350819450505060008260ff166101e0858b61041a90919063ffffffff16565b901c90506101f7898261069790919063ffffffff16565b9450505050505b949350505050565b600080851180156102175750600084115b8015610229575060008363ffffffff16115b80156102445750620f424063ffffffff168363ffffffff1611155b80156102505750848211155b61028f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028690611b7e565b60405180910390fd5b60008214156102a15760009050610374565b848214156102b157839050610374565b620f424063ffffffff168363ffffffff1614156102f4576102ed856102df848761041a90919063ffffffff16565b61048a90919063ffffffff16565b9050610374565b600080600061030c858961069790919063ffffffff16565b905061031d8882620f424089610529565b8093508194505050600061033a848961041a90919063ffffffff16565b905060008360ff1689901b905061036c8561035e838561069790919063ffffffff16565b61048a90919063ffffffff16565b955050505050505b949350505050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104125780601f106103e757610100808354040283529160200191610412565b820191906000526020600020905b8154815290600101906020018083116103f557829003601f168201915b505050505081565b60008083141561042d5760009050610484565b600082840290508284828161043e57fe5b041461047f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047690611b1e565b60405180910390fd5b809150505b92915050565b60006104cc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506106e1565b905092915050565b60008082840190508381101561051f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051690611afe565b60405180910390fd5b8091505092915050565b600080700200000000000000000000000000000000861061057f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057690611b5e565b60405180910390fd5b848610156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b990611b3e565b60405180910390fd5b600080866f800000000000000000000000000000008902816105e057fe5b04905070015bf0a8b1457695355fb8ac404e7a79e381101561060c5761060581610742565b9150610618565b61061581610cd2565b91505b60008563ffffffff168763ffffffff1684028161063157fe5b0490507008000000000000000000000000000000008110156106645761065681610dfa565b607f9450945050505061068e565b600061066f82611374565b905061068481607f0360ff1683901c82611429565b8195509550505050505b94509492505050565b60006106d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117c4565b905092915050565b60008083118290610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f9190611adc565b60405180910390fd5b50600083858161073457fe5b049050809150509392505050565b6000806000905060008060006fd3094c70f034de4b96ff7d5b6f99fcd886106107a9576f40000000000000000000000000000000840193506fd3094c70f034de4b96ff7d5b6f99fcd86f800000000000000000000000000000008702816107a557fe5b0495505b6fa45af1e1f40c333b3de1db4dd55f29a78610610804576f20000000000000000000000000000000840193506fa45af1e1f40c333b3de1db4dd55f29a76f8000000000000000000000000000000087028161080057fe5b0495505b6f910b022db7ae67ce76b441c27035c6a1861061085f576f10000000000000000000000000000000840193506f910b022db7ae67ce76b441c27035c6a16f8000000000000000000000000000000087028161085b57fe5b0495505b6f88415abbe9a76bead8d00cf112e4d4a886106108ba576f08000000000000000000000000000000840193506f88415abbe9a76bead8d00cf112e4d4a86f800000000000000000000000000000008702816108b657fe5b0495505b6f84102b00893f64c705e841d5d4064bd38610610915576f04000000000000000000000000000000840193506f84102b00893f64c705e841d5d4064bd36f8000000000000000000000000000000087028161091157fe5b0495505b6f8204055aaef1c8bd5c3259f4822735a28610610970576f02000000000000000000000000000000840193506f8204055aaef1c8bd5c3259f4822735a26f8000000000000000000000000000000087028161096c57fe5b0495505b6f810100ab00222d861931c15e39b44e9986106109cb576f01000000000000000000000000000000840193506f810100ab00222d861931c15e39b44e996f800000000000000000000000000000008702816109c757fe5b0495505b6f808040155aabbbe9451521693554f7338610610a25576e800000000000000000000000000000840193506f808040155aabbbe9451521693554f7336f80000000000000000000000000000000870281610a2157fe5b0495505b6f80000000000000000000000000000000860392508291506f8000000000000000000000000000000083840281610a5857fe5b0490507001000000000000000000000000000000008370010000000000000000000000000000000003830281610a8a57fe5b04840193506f8000000000000000000000000000000081830281610aaa57fe5b049150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa03830281610adb57fe5b04840193506f8000000000000000000000000000000081830281610afb57fe5b049150700300000000000000000000000000000000836f9999999999999999999999999999999903830281610b2c57fe5b04840193506f8000000000000000000000000000000081830281610b4c57fe5b049150700400000000000000000000000000000000836f9249249249249249249249249249249203830281610b7d57fe5b04840193506f8000000000000000000000000000000081830281610b9d57fe5b049150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e03830281610bce57fe5b04840193506f8000000000000000000000000000000081830281610bee57fe5b049150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b03830281610c1f57fe5b04840193506f8000000000000000000000000000000081830281610c3f57fe5b049150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d8903830281610c7057fe5b04840193506f8000000000000000000000000000000081830281610c9057fe5b049150700800000000000000000000000000000000836f8888888888888888888888888888888803830281610cc157fe5b048401935083945050505050919050565b6000806000905060008390507001000000000000000000000000000000008110610d3f576000610d1a6f800000000000000000000000000000008381610d1457fe5b0461181f565b90508060ff1682901c91506f800000000000000000000000000000008160ff16029250505b6f80000000000000000000000000000000811115610dc5576000607f90505b60008160ff161115610dc3576f8000000000000000000000000000000082830281610d8557fe5b0491507001000000000000000000000000000000008210610db757600182901c91506001810360ff166001901b830192505b80600190039050610d5e565b505b6f05b9de1d10bf4103d647b0955897ba806f03f80fe03f80fe03f80fe03f80fe03f8830281610df057fe5b0492505050919050565b600080600090506000806f100000000000000000000000000000008581610e1d57fe5b0691508190506f8000000000000000000000000000000082820281610e3e57fe5b0490506710e1b3be415a00008102830192506f8000000000000000000000000000000082820281610e6b57fe5b0490506705a0913f6b1e00008102830192506f8000000000000000000000000000000082820281610e9857fe5b049050670168244fdac780008102830192506f8000000000000000000000000000000082820281610ec557fe5b049050664807432bc180008102830192506f8000000000000000000000000000000082820281610ef157fe5b049050660c0135dca040008102830192506f8000000000000000000000000000000082820281610f1d57fe5b0490506601b707b1cdc0008102830192506f8000000000000000000000000000000082820281610f4957fe5b0490506536e0f639b8008102830192506f8000000000000000000000000000000082820281610f7457fe5b049050650618fee9f8008102830192506f8000000000000000000000000000000082820281610f9f57fe5b049050649c197dcc008102830192506f8000000000000000000000000000000082820281610fc957fe5b049050640e30dce4008102830192506f8000000000000000000000000000000082820281610ff357fe5b04905064012ebd13008102830192506f800000000000000000000000000000008282028161101d57fe5b0490506317499f008102830192506f800000000000000000000000000000008282028161104657fe5b0490506301a9d4808102830192506f800000000000000000000000000000008282028161106f57fe5b049050621c63808102830192506f800000000000000000000000000000008282028161109757fe5b0490506201c6388102830192506f80000000000000000000000000000000828202816110bf57fe5b049050611ab88102830192506f80000000000000000000000000000000828202816110e657fe5b04905061017c8102830192506f800000000000000000000000000000008282028161110d57fe5b04905060148102830192506f800000000000000000000000000000008282028161113357fe5b04905060018102830192506f80000000000000000000000000000000826721c3677c82b40000858161116157fe5b040101925060006f100000000000000000000000000000008616146111b15770018ebef9eac820ae8682b9793ac6d1e7767001c3d6a24ed82218787d624d3e5eba95f98402816111ad57fe5b0492505b60006f200000000000000000000000000000008616146111fc577001368b2fc6f9609fe7aceb46aa619baed470018ebef9eac820ae8682b9793ac6d1e7788402816111f857fe5b0492505b60006f40000000000000000000000000000000861614611246576fbc5ab1b16779be3575bd8f0520a9f21f7001368b2fc6f9609fe7aceb46aa619baed584028161124257fe5b0492505b60006f8000000000000000000000000000000086161461128f576f454aaa8efe072e7f6ddbab84b40a55c96fbc5ab1b16779be3575bd8f0520a9f21e84028161128b57fe5b0492505b60007001000000000000000000000000000000008616146112d9576f0960aadc109e7a3bf4578099615711ea6f454aaa8efe072e7f6ddbab84b40a55c58402816112d557fe5b0492505b6000700200000000000000000000000000000000861614611322576e2bf84208204f5977f9a8cf01fdce3d6f0960aadc109e7a3bf4578099615711d784028161131e57fe5b0492505b6000700400000000000000000000000000000000861614611369576d03c6ab775dd0b95b4cbee7e65d116e2bf84208204f5977f9a8cf01fdc30784028161136557fe5b0492505b829350505050919050565b600080602090506000607f90505b8060ff166001830160ff1610156113d1576000600282840160ff16816113a457fe5b0490508460018260ff16608081106113b857fe5b0154106113c7578092506113cb565b8091505b50611382565b8360018260ff16608081106113e257fe5b0154106113f3578092505050611424565b8360018360ff166080811061140457fe5b015410611415578192505050611424565b600061141d57fe5b6000925050505b919050565b60008083905060008360ff16858302901c91506f03442c4e6074a82f1797f72ac00000008202810190508360ff16858302901c91506f0116b96f757c380fb287fd0e400000008202810190508360ff16858302901c91506e45ae5bdd5f0e03eca1ff43900000008202810190508360ff16858302901c91506e0defabf91302cd95b9ffda500000008202810190508360ff16858302901c91506e02529ca9832b22439efff9b80000008202810190508360ff16858302901c91506d54f1cf12bd04e516b6da880000008202810190508360ff16858302901c91506d0a9e39e257a09ca2d6db510000008202810190508360ff16858302901c91506d012e066e7b839fa050c3090000008202810190508360ff16858302901c91506c1e33d7d926c329a1ad1a8000008202810190508360ff16858302901c91506c02bee513bdb4a6b19b5f8000008202810190508360ff16858302901c91506b3a9316fa79b88eccf2a000008202810190508360ff16858302901c91506b048177ebe1fa8123752000008202810190508360ff16858302901c91506a5263fe90242dcbacf000008202810190508360ff16858302901c91506a057e22099c030d941000008202810190508360ff16858302901c91506957e22099c030d94100008202810190508360ff16858302901c915069052b6b545699763100008202810190508360ff16858302901c9150684985f67696bf7480008202810190508360ff16858302901c91506803dea12ea99e4980008202810190508360ff16858302901c91506731880f2214b6e0008202810190508360ff16858302901c915067025bcff56eb360008202810190508360ff16858302901c9150661b722e10ab10008202810190508360ff16858302901c91506601317c700770008202810190508360ff16858302901c9150650cba84aafa008202810190508360ff16858302901c91506482573a0a008202810190508360ff16858302901c91506405035ad9008202810190508360ff16858302901c9150632f881b008202810190508360ff16858302901c91506301b293408202810190508360ff16858302901c9150620efc408202810190508360ff16858302901c9150617fe08202810190508360ff16858302901c91506104208202810190508360ff16858302901c915060218202810190508360ff16858302901c915060018202810190508360ff166001901b856f0688589cc0e9505e2f2fee558000000083816117b757fe5b0401019250505092915050565b600083831115829061180c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118039190611adc565b60405180910390fd5b5060008385039050809150509392505050565b600080600090506000839050610100811015611856575b600181111561185157600181901c9050600182019150611836565b611897565b6000608090505b60008160ff161115611895578060ff166001901b8210611886578060ff1682901c915080831792505b60018160ff16901c905061185d565b505b8192505050919050565b6000813590506118b081611c33565b92915050565b6000813590506118c581611c4a565b92915050565b600080600080608085870312156118e157600080fd5b60006118ef878288016118a1565b9450506020611900878288016118a1565b9350506040611911878288016118b6565b9250506060611922878288016118a1565b91505092959194509250565b600061193982611bb9565b6119438185611bc4565b9350611953818560208601611bef565b61195c81611c22565b840191505092915050565b6000611974601b83611bc4565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006119b4602183611bc4565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611a1a601c83611bc4565b91507f4261736573203c203120617265206e6f7420737570706f727465642e000000006000830152602082019050919050565b6000611a5a601883611bc4565b91507f626173654e2065786365656473206d61782076616c75652e00000000000000006000830152602082019050919050565b6000611a9a600f83611bc4565b91507f496e76616c696420696e707574732e00000000000000000000000000000000006000830152602082019050919050565b611ad681611bd5565b82525050565b60006020820190508181036000830152611af6818461192e565b905092915050565b60006020820190508181036000830152611b1781611967565b9050919050565b60006020820190508181036000830152611b37816119a7565b9050919050565b60006020820190508181036000830152611b5781611a0d565b9050919050565b60006020820190508181036000830152611b7781611a4d565b9050919050565b60006020820190508181036000830152611b9781611a8d565b9050919050565b6000602082019050611bb36000830184611acd565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b600063ffffffff82169050919050565b60005b83811015611c0d578082015181840152602081019050611bf2565b83811115611c1c576000848401525b50505050565b6000601f19601f8301169050919050565b611c3c81611bd5565b8114611c4757600080fd5b50565b611c5381611bdf565b8114611c5e57600080fd5b5056fea264697066735822122068c715e4aadfea59f61d87cb2cffcf5620cf40d2c8c5fff13078a5f98e5112d664736f6c63430007060033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806329a00e7c1461004657806349f9b0f71461007657806354fd4d50146100a6575b600080fd5b610060600480360381019061005b91906118cb565b6100c4565b60405161006d9190611b9e565b60405180910390f35b610090600480360381019061008b91906118cb565b610206565b60405161009d9190611b9e565b60405180910390f35b6100ae61037c565b6040516100bb9190611adc565b60405180910390f35b600080851180156100d55750600084115b80156100e7575060008363ffffffff16115b80156101025750620f424063ffffffff168363ffffffff1611155b610141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013890611b7e565b60405180910390fd5b600082141561015357600090506101fe565b620f424063ffffffff168363ffffffff1614156101965761018f84610181848861041a90919063ffffffff16565b61048a90919063ffffffff16565b90506101fe565b60008060006101ae87866104d490919063ffffffff16565b90506101bf818888620f4240610529565b809350819450505060008260ff166101e0858b61041a90919063ffffffff16565b901c90506101f7898261069790919063ffffffff16565b9450505050505b949350505050565b600080851180156102175750600084115b8015610229575060008363ffffffff16115b80156102445750620f424063ffffffff168363ffffffff1611155b80156102505750848211155b61028f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028690611b7e565b60405180910390fd5b60008214156102a15760009050610374565b848214156102b157839050610374565b620f424063ffffffff168363ffffffff1614156102f4576102ed856102df848761041a90919063ffffffff16565b61048a90919063ffffffff16565b9050610374565b600080600061030c858961069790919063ffffffff16565b905061031d8882620f424089610529565b8093508194505050600061033a848961041a90919063ffffffff16565b905060008360ff1689901b905061036c8561035e838561069790919063ffffffff16565b61048a90919063ffffffff16565b955050505050505b949350505050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104125780601f106103e757610100808354040283529160200191610412565b820191906000526020600020905b8154815290600101906020018083116103f557829003601f168201915b505050505081565b60008083141561042d5760009050610484565b600082840290508284828161043e57fe5b041461047f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047690611b1e565b60405180910390fd5b809150505b92915050565b60006104cc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506106e1565b905092915050565b60008082840190508381101561051f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051690611afe565b60405180910390fd5b8091505092915050565b600080700200000000000000000000000000000000861061057f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057690611b5e565b60405180910390fd5b848610156105c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b990611b3e565b60405180910390fd5b600080866f800000000000000000000000000000008902816105e057fe5b04905070015bf0a8b1457695355fb8ac404e7a79e381101561060c5761060581610742565b9150610618565b61061581610cd2565b91505b60008563ffffffff168763ffffffff1684028161063157fe5b0490507008000000000000000000000000000000008110156106645761065681610dfa565b607f9450945050505061068e565b600061066f82611374565b905061068481607f0360ff1683901c82611429565b8195509550505050505b94509492505050565b60006106d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117c4565b905092915050565b60008083118290610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f9190611adc565b60405180910390fd5b50600083858161073457fe5b049050809150509392505050565b6000806000905060008060006fd3094c70f034de4b96ff7d5b6f99fcd886106107a9576f40000000000000000000000000000000840193506fd3094c70f034de4b96ff7d5b6f99fcd86f800000000000000000000000000000008702816107a557fe5b0495505b6fa45af1e1f40c333b3de1db4dd55f29a78610610804576f20000000000000000000000000000000840193506fa45af1e1f40c333b3de1db4dd55f29a76f8000000000000000000000000000000087028161080057fe5b0495505b6f910b022db7ae67ce76b441c27035c6a1861061085f576f10000000000000000000000000000000840193506f910b022db7ae67ce76b441c27035c6a16f8000000000000000000000000000000087028161085b57fe5b0495505b6f88415abbe9a76bead8d00cf112e4d4a886106108ba576f08000000000000000000000000000000840193506f88415abbe9a76bead8d00cf112e4d4a86f800000000000000000000000000000008702816108b657fe5b0495505b6f84102b00893f64c705e841d5d4064bd38610610915576f04000000000000000000000000000000840193506f84102b00893f64c705e841d5d4064bd36f8000000000000000000000000000000087028161091157fe5b0495505b6f8204055aaef1c8bd5c3259f4822735a28610610970576f02000000000000000000000000000000840193506f8204055aaef1c8bd5c3259f4822735a26f8000000000000000000000000000000087028161096c57fe5b0495505b6f810100ab00222d861931c15e39b44e9986106109cb576f01000000000000000000000000000000840193506f810100ab00222d861931c15e39b44e996f800000000000000000000000000000008702816109c757fe5b0495505b6f808040155aabbbe9451521693554f7338610610a25576e800000000000000000000000000000840193506f808040155aabbbe9451521693554f7336f80000000000000000000000000000000870281610a2157fe5b0495505b6f80000000000000000000000000000000860392508291506f8000000000000000000000000000000083840281610a5857fe5b0490507001000000000000000000000000000000008370010000000000000000000000000000000003830281610a8a57fe5b04840193506f8000000000000000000000000000000081830281610aaa57fe5b049150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa03830281610adb57fe5b04840193506f8000000000000000000000000000000081830281610afb57fe5b049150700300000000000000000000000000000000836f9999999999999999999999999999999903830281610b2c57fe5b04840193506f8000000000000000000000000000000081830281610b4c57fe5b049150700400000000000000000000000000000000836f9249249249249249249249249249249203830281610b7d57fe5b04840193506f8000000000000000000000000000000081830281610b9d57fe5b049150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e03830281610bce57fe5b04840193506f8000000000000000000000000000000081830281610bee57fe5b049150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b03830281610c1f57fe5b04840193506f8000000000000000000000000000000081830281610c3f57fe5b049150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d8903830281610c7057fe5b04840193506f8000000000000000000000000000000081830281610c9057fe5b049150700800000000000000000000000000000000836f8888888888888888888888888888888803830281610cc157fe5b048401935083945050505050919050565b6000806000905060008390507001000000000000000000000000000000008110610d3f576000610d1a6f800000000000000000000000000000008381610d1457fe5b0461181f565b90508060ff1682901c91506f800000000000000000000000000000008160ff16029250505b6f80000000000000000000000000000000811115610dc5576000607f90505b60008160ff161115610dc3576f8000000000000000000000000000000082830281610d8557fe5b0491507001000000000000000000000000000000008210610db757600182901c91506001810360ff166001901b830192505b80600190039050610d5e565b505b6f05b9de1d10bf4103d647b0955897ba806f03f80fe03f80fe03f80fe03f80fe03f8830281610df057fe5b0492505050919050565b600080600090506000806f100000000000000000000000000000008581610e1d57fe5b0691508190506f8000000000000000000000000000000082820281610e3e57fe5b0490506710e1b3be415a00008102830192506f8000000000000000000000000000000082820281610e6b57fe5b0490506705a0913f6b1e00008102830192506f8000000000000000000000000000000082820281610e9857fe5b049050670168244fdac780008102830192506f8000000000000000000000000000000082820281610ec557fe5b049050664807432bc180008102830192506f8000000000000000000000000000000082820281610ef157fe5b049050660c0135dca040008102830192506f8000000000000000000000000000000082820281610f1d57fe5b0490506601b707b1cdc0008102830192506f8000000000000000000000000000000082820281610f4957fe5b0490506536e0f639b8008102830192506f8000000000000000000000000000000082820281610f7457fe5b049050650618fee9f8008102830192506f8000000000000000000000000000000082820281610f9f57fe5b049050649c197dcc008102830192506f8000000000000000000000000000000082820281610fc957fe5b049050640e30dce4008102830192506f8000000000000000000000000000000082820281610ff357fe5b04905064012ebd13008102830192506f800000000000000000000000000000008282028161101d57fe5b0490506317499f008102830192506f800000000000000000000000000000008282028161104657fe5b0490506301a9d4808102830192506f800000000000000000000000000000008282028161106f57fe5b049050621c63808102830192506f800000000000000000000000000000008282028161109757fe5b0490506201c6388102830192506f80000000000000000000000000000000828202816110bf57fe5b049050611ab88102830192506f80000000000000000000000000000000828202816110e657fe5b04905061017c8102830192506f800000000000000000000000000000008282028161110d57fe5b04905060148102830192506f800000000000000000000000000000008282028161113357fe5b04905060018102830192506f80000000000000000000000000000000826721c3677c82b40000858161116157fe5b040101925060006f100000000000000000000000000000008616146111b15770018ebef9eac820ae8682b9793ac6d1e7767001c3d6a24ed82218787d624d3e5eba95f98402816111ad57fe5b0492505b60006f200000000000000000000000000000008616146111fc577001368b2fc6f9609fe7aceb46aa619baed470018ebef9eac820ae8682b9793ac6d1e7788402816111f857fe5b0492505b60006f40000000000000000000000000000000861614611246576fbc5ab1b16779be3575bd8f0520a9f21f7001368b2fc6f9609fe7aceb46aa619baed584028161124257fe5b0492505b60006f8000000000000000000000000000000086161461128f576f454aaa8efe072e7f6ddbab84b40a55c96fbc5ab1b16779be3575bd8f0520a9f21e84028161128b57fe5b0492505b60007001000000000000000000000000000000008616146112d9576f0960aadc109e7a3bf4578099615711ea6f454aaa8efe072e7f6ddbab84b40a55c58402816112d557fe5b0492505b6000700200000000000000000000000000000000861614611322576e2bf84208204f5977f9a8cf01fdce3d6f0960aadc109e7a3bf4578099615711d784028161131e57fe5b0492505b6000700400000000000000000000000000000000861614611369576d03c6ab775dd0b95b4cbee7e65d116e2bf84208204f5977f9a8cf01fdc30784028161136557fe5b0492505b829350505050919050565b600080602090506000607f90505b8060ff166001830160ff1610156113d1576000600282840160ff16816113a457fe5b0490508460018260ff16608081106113b857fe5b0154106113c7578092506113cb565b8091505b50611382565b8360018260ff16608081106113e257fe5b0154106113f3578092505050611424565b8360018360ff166080811061140457fe5b015410611415578192505050611424565b600061141d57fe5b6000925050505b919050565b60008083905060008360ff16858302901c91506f03442c4e6074a82f1797f72ac00000008202810190508360ff16858302901c91506f0116b96f757c380fb287fd0e400000008202810190508360ff16858302901c91506e45ae5bdd5f0e03eca1ff43900000008202810190508360ff16858302901c91506e0defabf91302cd95b9ffda500000008202810190508360ff16858302901c91506e02529ca9832b22439efff9b80000008202810190508360ff16858302901c91506d54f1cf12bd04e516b6da880000008202810190508360ff16858302901c91506d0a9e39e257a09ca2d6db510000008202810190508360ff16858302901c91506d012e066e7b839fa050c3090000008202810190508360ff16858302901c91506c1e33d7d926c329a1ad1a8000008202810190508360ff16858302901c91506c02bee513bdb4a6b19b5f8000008202810190508360ff16858302901c91506b3a9316fa79b88eccf2a000008202810190508360ff16858302901c91506b048177ebe1fa8123752000008202810190508360ff16858302901c91506a5263fe90242dcbacf000008202810190508360ff16858302901c91506a057e22099c030d941000008202810190508360ff16858302901c91506957e22099c030d94100008202810190508360ff16858302901c915069052b6b545699763100008202810190508360ff16858302901c9150684985f67696bf7480008202810190508360ff16858302901c91506803dea12ea99e4980008202810190508360ff16858302901c91506731880f2214b6e0008202810190508360ff16858302901c915067025bcff56eb360008202810190508360ff16858302901c9150661b722e10ab10008202810190508360ff16858302901c91506601317c700770008202810190508360ff16858302901c9150650cba84aafa008202810190508360ff16858302901c91506482573a0a008202810190508360ff16858302901c91506405035ad9008202810190508360ff16858302901c9150632f881b008202810190508360ff16858302901c91506301b293408202810190508360ff16858302901c9150620efc408202810190508360ff16858302901c9150617fe08202810190508360ff16858302901c91506104208202810190508360ff16858302901c915060218202810190508360ff16858302901c915060018202810190508360ff166001901b856f0688589cc0e9505e2f2fee558000000083816117b757fe5b0401019250505092915050565b600083831115829061180c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118039190611adc565b60405180910390fd5b5060008385039050809150509392505050565b600080600090506000839050610100811015611856575b600181111561185157600181901c9050600182019150611836565b611897565b6000608090505b60008160ff161115611895578060ff166001901b8210611886578060ff1682901c915080831792505b60018160ff16901c905061185d565b505b8192505050919050565b6000813590506118b081611c33565b92915050565b6000813590506118c581611c4a565b92915050565b600080600080608085870312156118e157600080fd5b60006118ef878288016118a1565b9450506020611900878288016118a1565b9350506040611911878288016118b6565b9250506060611922878288016118a1565b91505092959194509250565b600061193982611bb9565b6119438185611bc4565b9350611953818560208601611bef565b61195c81611c22565b840191505092915050565b6000611974601b83611bc4565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006119b4602183611bc4565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611a1a601c83611bc4565b91507f4261736573203c203120617265206e6f7420737570706f727465642e000000006000830152602082019050919050565b6000611a5a601883611bc4565b91507f626173654e2065786365656473206d61782076616c75652e00000000000000006000830152602082019050919050565b6000611a9a600f83611bc4565b91507f496e76616c696420696e707574732e00000000000000000000000000000000006000830152602082019050919050565b611ad681611bd5565b82525050565b60006020820190508181036000830152611af6818461192e565b905092915050565b60006020820190508181036000830152611b1781611967565b9050919050565b60006020820190508181036000830152611b37816119a7565b9050919050565b60006020820190508181036000830152611b5781611a0d565b9050919050565b60006020820190508181036000830152611b7781611a4d565b9050919050565b60006020820190508181036000830152611b9781611a8d565b9050919050565b6000602082019050611bb36000830184611acd565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b600063ffffffff82169050919050565b60005b83811015611c0d578082015181840152602081019050611bf2565b83811115611c1c576000848401525b50505050565b6000601f19601f8301169050919050565b611c3c81611bd5565b8114611c4757600080fd5b50565b611c5381611bdf565b8114611c5e57600080fd5b5056fea264697066735822122068c715e4aadfea59f61d87cb2cffcf5620cf40d2c8c5fff13078a5f98e5112d664736f6c63430007060033",
"immutableReferences": {},
"generatedSources": [],
"deployedGeneratedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:6978:25",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "59:87:25",
"statements": [
{
"nodeType": "YulAssignment",
"src": "69:29:25",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "91:6:25"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "78:12:25"
},
"nodeType": "YulFunctionCall",
"src": "78:20:25"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "69:5:25"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "134:5:25"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nodeType": "YulIdentifier",
"src": "107:26:25"
},
"nodeType": "YulFunctionCall",
"src": "107:33:25"
},
"nodeType": "YulExpressionStatement",
"src": "107:33:25"
}
]
},
"name": "abi_decode_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "37:6:25",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "45:3:25",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "53:5:25",
"type": ""
}
],
"src": "7:139:25"
},
{
"body": {
"nodeType": "YulBlock",
"src": "203:86:25",
"statements": [
{
"nodeType": "YulAssignment",
"src": "213:29:25",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "235:6:25"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "222:12:25"
},
"nodeType": "YulFunctionCall",
"src": "222:20:25"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "213:5:25"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "277:5:25"
}
],
"functionName": {
"name": "validator_revert_t_uint32",
"nodeType": "YulIdentifier",
"src": "251:25:25"
},
"nodeType": "YulFunctionCall",
"src": "251:32:25"
},
"nodeType": "YulExpressionStatement",
"src": "251:32:25"
}
]
},
"name": "abi_decode_t_uint32",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "181:6:25",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "189:3:25",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "197:5:25",
"type": ""
}
],
"src": "152:137:25"
},
{
"body": {
"nodeType": "YulBlock",
"src": "411:580:25",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "458:16:25",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "467:1:25",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "470:1:25",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "460:6:25"
},
"nodeType": "YulFunctionCall",
"src": "460:12:25"
},
"nodeType": "YulExpressionStatement",
"src": "460:12:25"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "432:7:25"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "441:9:25"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "428:3:25"
},
"nodeType": "YulFunctionCall",
"src": "428:23:25"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "453:3:25",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "424:3:25"
},
"nodeType": "YulFunctionCall",
"src": "424:33:25"
},
"nodeType": "YulIf",
"src": "421:2:25"
},
{
"nodeType": "YulBlock",
"src": "484:117:25",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "499:15:25",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "513:1:25",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "503:6:25",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "528:63:25",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "563:9:25"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "574:6:25"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "559:3:25"
},
"nodeType": "YulFunctionCall",
"src": "559:22:25"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "583:7:25"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nodeType": "YulIdentifier",
"src": "538:20:25"
},
"nodeType": "YulFunctionCall",
"src": "538:53:25"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "528:6:25"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "611:118:25",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "626:16:25",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "640:2:25",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "630:6:25",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "656:63:25",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "691:9:25"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "702:6:25"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "687:3:25"
},
"nodeType": "YulFunctionCall",
"src": "687:22:25"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "711:7:25"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nodeType": "YulIdentifier",
"src": "666:20:25"
},
"nodeType": "YulFunctionCall",
"src": "666:53:25"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "656:6:25"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "739:117:25",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "754:16:25",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "768:2:25",
"type": "",
"value": "64"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "758:6:25",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "784:62:25",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "818:9:25"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "829:6:25"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "814:3:25"
},
"nodeType": "YulFunctionCall",
"src": "814:22:25"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "838:7:25"
}
],
"functionName": {
"name": "abi_decode_t_uint32",
"nodeType": "YulIdentifier",
"src": "794:19:25"
},
"nodeType": "YulFunctionCall",
"src": "794:52:25"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "784:6:25"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "866:118:25",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "881:16:25",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "895:2:25",
"type": "",
"value": "96"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "885:6:25",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "911:63:25",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "946:9:25"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "957:6:25"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "942:3:25"
},
"nodeType": "YulFunctionCall",
"src": "942:22:25"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "966:7:25"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nodeType": "YulIdentifier",
"src": "921:20:25"
},
"nodeType": "YulFunctionCall",
"src": "921:53:25"
},
"variableNames": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "911:6:25"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256t_uint256t_uint32t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "357:9:25",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "368:7:25",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "380:6:25",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "388:6:25",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "396:6:25",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "404:6:25",
"type": ""
}
],
"src": "295:696:25"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1089:272:25",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1099:53:25",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1146:5:25"
}
],
"functionName": {
"name": "array_length_t_string_memory_ptr",
"nodeType": "YulIdentifier",
"src": "1113:32:25"
},
"nodeType": "YulFunctionCall",
"src": "1113:39:25"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "1103:6:25",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1161:78:25",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1227:3:25"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "1232:6:25"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "1168:58:25"
},
"nodeType": "YulFunctionCall",
"src": "1168:71:25"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1161:3:25"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1274:5:25"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1281:4:25",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1270:3:25"
},
"nodeType": "YulFunctionCall",
"src": "1270:16:25"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1288:3:25"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "1293:6:25"
}
],
"functionName": {
"name": "copy_memory_to_memory",
"nodeType": "YulIdentifier",
"src": "1248:21:25"
},
"nodeType": "YulFunctionCall",
"src": "1248:52:25"
},
"nodeType": "YulExpressionStatement",
"src": "1248:52:25"
},
{
"nodeType": "YulAssignment",
"src": "1309:46:25",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1320:3:25"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "1347:6:25"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "1325:21:25"
},
"nodeType": "YulFunctionCall",
"src": "1325:29:25"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1316:3:25"
},
"nodeType": "YulFunctionCall",
"src": "1316:39:25"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "1309:3:25"
}
]
}
]
},
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1070:5:25",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "1077:3:25",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "1085:3:25",
"type": ""
}
],
"src": "997:364:25"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1513:179:25",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1523:74:25",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1589:3:25"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1594:2:25",
"type": "",
"value": "27"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "1530:58:25"
},
"nodeType": "YulFunctionCall",
"src": "1530:67:25"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1523:3:25"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1618:3:25"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1623:1:25",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1614:3:25"
},
"nodeType": "YulFunctionCall",
"src": "1614:11:25"
},
{
"kind": "string",
"nodeType": "YulLiteral",
"src": "1627:29:25",
"type": "",
"value": "SafeMath: addition overflow"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1607:6:25"
},
"nodeType": "YulFunctionCall",
"src": "1607:50:25"
},
"nodeType": "YulExpressionStatement",
"src": "1607:50:25"
},
{
"nodeType": "YulAssignment",
"src": "1667:19:25",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1678:3:25"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1683:2:25",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1674:3:25"
},
"nodeType": "YulFunctionCall",
"src": "1674:12:25"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "1667:3:25"
}
]
}
]
},
"name": "abi_encode_t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "1501:3:25",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "1509:3:25",
"type": ""
}
],
"src": "1367:325:25"