-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmemory_pie.htm
1020 lines (905 loc) · 123 KB
/
memory_pie.htm
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
<!--
MIT License
Copyright (c) 2024 Donald Arthur Kronos, Ph.D. (DAK)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Benevolence Suggested:
While this license permits unrestricted legal use, the original author wishes to request and encourage that this software be used and evolved in ways that are meant to contribute positively to society and avoid causing harm.
-->
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
font-family: monospace;
max-width: 800px;
margin: 40px auto;
padding: 20px;
text-align: center;
background: #f5f5f5;
}
.recipe-button {
padding: 10px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
background: #b8ff00;
color: black;
font-size: 16px;
}
.recipe-button.active {
background: #ff0080;
}
.digits {
font-size: 24px;
margin: 20px 0;
line-height: 1.5;
text-align: left;
word-wrap: break-word;
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
/* Hide the portrait grid by default (landscape mode) */
.digit-grid {
display: none;
}
/* Show the landscape row by default */
.digit-row-landscape {
display: flex;
justify-content: center;
gap: 1px;
margin: 1px 0;
}
.digit-row {
display: flex;
justify-content: center;
gap: 1px;
margin: 1px 0;
}
.digit-button {
padding: 8px 0;
width: 36px;
margin: 0 1px;
border: none;
cursor: pointer;
background: #003048;
color: white;
font-size: 16px;
}
.digit-button.enter {
background: #004868;
}
@media (orientation: portrait) {
/* Previous digit button styles */
.digit-row-landscape {
display: none;
}
.digit-grid {
display: block;
}
.digit-button {
width: calc(14vw - 4px); /* viewport width based, minus small gap */
height: calc(14vw - 4px);
font-size: calc(5vw);
}
/* Scale up UI elements */
h1 {
font-size: 31px;
}
h2 {
font-size: 24px;
}
#recipeButtons {
max-width: 100%;
gap: 5px;
}
.recipe-button {
padding: 10px 15px;
font-size: 22px;
margin: 0;
}
.stats {
font-size: 28px;
}
.phase {
font-size: 28px;
}
.congrats {
font-size: 28px;
}
button.mode, button.afk {
padding: 15px 31px;
font-size: 25px;
}
}
button {
padding: 10px 20px;
margin: 0 10px;
font-size: 16px;
cursor: pointer;
border: none;
border-radius: 4px;
background: #4CAF50;
color: white;
}
button.mode {
background: #9c27b0;
margin-bottom: 20px;
}
button.afk {
background: #2196f3;
}
button.afk.active {
background: #f44336;
}
.stats {
margin: 20px 0;
font-size: 18px;
}
.phase {
font-weight: bold;
color: #2196f3;
margin: 20px 0;
}
.congrats {
color: #4CAF50;
font-weight: bold;
margin: 10px 0;
}
</style>
</head>
<body>
<h1>Memory Pie</h1>
<button onclick="toggleMode()" class="mode">Next Recipe</button>
<div id="recipeButtons" style="margin: 10px 0; display: flex; gap: 10px; justify-content: center;">
<button tabindex="3" class="recipe-button"></button>
<button tabindex="4" class="recipe-button"></button>
<button tabindex="5" class="recipe-button"></button>
<button tabindex="6" class="recipe-button"></button>
<button tabindex="7" class="recipe-button"></button>
</div>
<h2 id="title">π×e Trainer</h2>
<div class="controls">
<button onclick="resetProgress()" tabindex="1">Start New Run</button>
<button id="afkButton" onclick="toggleAFK()" class="afk" tabindex="2">Start AFK Mode</button>
</div>
<div class="stats">
<div>Cycle: <span id="runCount">0</span></div>
<div>Previous Best: <span id="previousBest">0</span> characters</div>
<div>Current Run: <span id="currentCount">0</span> characters</div>
<div>Current Target: <span id="targetLength">3</span> characters</div>
<div>Speed Level: <span id="speedLevel">1</span></div>
<div>Chunk Size: <span id="chunkSize">4</span> characters</div>
</div>
<div class="phase" id="phase">Ready to start</div>
<div id="congrats" class="congrats"></div>
<!-- Landscape layout (single row) -->
<div id="digitButtonsLandscape" class="digit-row-landscape">
<button class="digit-button enter">↵</button>
<button class="digit-button">.</button>
<button class="digit-button">0</button>
<button class="digit-button">1</button>
<button class="digit-button">2</button>
<button class="digit-button">3</button>
<button class="digit-button">4</button>
<button class="digit-button">5</button>
<button class="digit-button">6</button>
<button class="digit-button">7</button>
<button class="digit-button">8</button>
<button class="digit-button">9</button>
<button class="digit-button">0</button>
<button class="digit-button">.</button>
<button class="digit-button enter">↵</button>
</div>
<!-- Portrait layout (grid) -->
<div id="digitButtonsPortrait" class="digit-grid">
<div class="digit-row">
<button class="digit-button enter">↵</button>
<button class="digit-button">.</button>
<button class="digit-button">0</button>
<button class="digit-button">1</button>
<button class="digit-button">2</button>
<button class="digit-button">3</button>
<button class="digit-button enter">↵</button>
</div>
<div class="digit-row">
<button class="digit-button enter">↵</button>
<button class="digit-button">3</button>
<button class="digit-button">4</button>
<button class="digit-button">5</button>
<button class="digit-button">6</button>
<button class="digit-button">7</button>
<button class="digit-button enter">↵</button>
</div>
<div class="digit-row">
<button class="digit-button enter">↵</button>
<button class="digit-button">7</button>
<button class="digit-button">8</button>
<button class="digit-button">9</button>
<button class="digit-button">0</button>
<button class="digit-button">.</button>
<button class="digit-button enter">↵</button>
</div>
</div>
<div class="digits" id="display" tabindex="0"></div>
<script>
const SEQUENCES = {
'pie': "8.53973422267356706546355086954657449503488853576511496187960113017922861115733080757256386971047394391377494251167746764632118759069602399061836345379070414542021599488963342852746700046687766093072711290393507480401055727040348627303998656540644166179229285713708216374412976168471172544672318420340751657873020506707999472076298967964373713900900839870785220633048298035384640173153001978236276770258035741255972055172639898617344959092612412289680764582785420543163215795419510261753326139327091269239274357568312735470622184259342983913191813594440620442770198489377232444615908940370060151390186645874739849823655400651269457195509817518967609862391220148508155545607981568675308586739080896645836366491171197692951525938412546338435876040814802615808583287673599471606966708191549941538446985380682339134628186666645715222960481458039095498952067967593111092538597541522316434620440904327905669010198992873083145479079327160729091948477188491992878937162484609450111652203196731971058211832709336231538251949398510926142750438850908482455431257277861356265114867397731658232289198374727773111695158465972587810000329741873624229923620712202587599094699590040464624319591158102542086129537177924294339770576617165650922379113217960851065792956862982185232418919771948419951864698015292439230706583349211674611155609277272183291558654704961469794355906270234465129223132883716678810091064920511620557569628569622711445864545823007560422382107955234019816469501880652419579034206487408747628701106957435990553220320125711611422213721382074566116348452622815821743290221020783462683275622959445086528114489829543104972972636954839998437938010998380887782568954452643089798722258988037308148878697934681308369634030997216325616455981696424010586563370264659416464674890754789241939704197023753795880835162073945866768085959715258770421371424362115726396848303069220992460868861676752522536132527965660644711620682133720639305960647942025410523614955738115874913244073184136047827210251100940743733846969289316097860986094131251574221313622013609671740313366101381156578501081505790419092339622224977058179015790399847063211602780926099992283449501935441656700040013304770434806573203700090339617696159375821373744110184280276630776265961453947657437648952770691278186935406964493199420071486868971086951759770858158728997291836557159195703159136734315229982496670232034434271701937078973006740833192842496642427682517667998596914339827031310642438600228760100713771932324937334101566918152566896001413131114680840259752254571309295090059533241376638942601730552208531802378024540959432387020558938310731919119831361406225339555214209222377820005179934126102735862473423531463827528807191597321448268040127964998088196712743211490447432404848169698494492100639940941644451748978787394365438687845289843705192273767193589596526446243333940691384417443979679906014511318552942676239638603140284993762192527297469525310466803077581465457178085336696162877461129386656368411331348686059231087479227006093633660953797992091389390953393373231704676012433589434196242757272172899028758725407221677811555390659001041615904173446479688186546062838126909649853550571006119943916447427960869777841565993969169550873103426615352746514154796900298112671424327757003548958033204208897235391303848718921219959107219469613080149354882564619145721262254479480835146256161864493314324716198110331649728988199884167875073030390028810416859654933288253551249245934171642412568599064922857182239580915892168147510494683471467946636903197714932651570436734983947606970361738120522339530881436739439086618751702678306461358983208685618623852330896964577435866836749703785816508826264041393467307258168729485587162445472761060446663269177810932795758092347208351912807942067459122383231992046817854508914058946318292126193183405663201350860941369468741739782998850344972863270816964499380819757222793194339752412077381952213599846553517558114105740138150971960820036565527814684615076547375289140732922939879253007224474332793879573804620717808878693367983590899523984542167078856625256074856121591190472996131141731287928417404809964715904562932793149342637601143769987258048",
'pi': "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900994657640789512694683983525957098258226205224894077267194782684826014769909026401363944374553050682034962524517493996514314298091906592509372216964615157098583874105978859597729754989301617539284681382686838689427741559918559252459539594310499725246808459872736446958486538367362226260991246080512438843904512441365497627807977156914359977001296160894416948685558484063534220722258284886481584560285060168427394522674676788952521385225499546667278239864565961163548862305774564980355936345681743241125150760694794510965960940252288797108931456691368672287489405601015033086179286809208747609178249385890097149096759852613655497818931297848216829989487226588048575640142704775551323796414515237462343645428584447952658678210511413547357395231134271661021359695362314429524849371871101457654035902799344037420073105785390621983874478084784896833214457138687519435064302184531910484810053706146806749192781911979399520614196634287544406437451237181921799983910159195618146751426912397489409071864942319615679452080951465502252316038819301420937621378559566389377870830390697920773467221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595156771577004203378699360072305587631763594218731251471205329281918261861258673215791984148488291644706095752706957220917567116722910981690915280173506712748583222871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570642046752590709154814165498594616371802709819943099244889575712828905923233260972997120844335732654893823911932597463667305836041428138830320382490375898524374417029132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201052652272111660396665573092547110557853763466820653109896526918620564769312570586356620185581007293606598764861179104533488503461136576867532494416680396265797877185560845529654126654085306143444318586769751456614068007002378776591344017127494704205622305389945613140711270004078547332699390814546646458807972708266830634328587856983052358089330657574067954571637752542021149557615814002501262285941302164715509792592309907965473761255176567513575178296664547791745011299614890304639947132962107340437518957359614589019389713111790429782856475032031986915140287080859904801094121472213179476477726224142548545403321571853061422881375850430633217518297986622371721591607716692547487389866549494501146540628433663937900397692656721463853067360965712091807638327166416274888800786925602902284721040317211860820419000422966171196377921337575114959501566049631862947265473642523081770367515906735023507283540567040386743513622224771589150495309844489333096340878076932599397805419341447377441842631298608099888687413260472156951623965864573021631598193195167353812974167729478672422924654366800980676928238280689964004824354037014163149658979409243237896907069779422362508221688957383798623001593776471651228935786015881617557829735233446042815126272037343146531977774160319906655418763979293344195215413418994854447345673831624993419131814809277771038638773431772075456545322077709212019051660962804909263601975988281613323166636528619326686336062735676303544776280350450777235547105859548702790814356240145171806246436267945612753181340783303362542327839449753824372058353114771199260638133467768796959703098339130771098704085913374641442822772634659470474587847787201927715280731767907707157213444730605700733492436931138350493163128404251219256517980694113528013147013047816437885185290928545201165839341965621349143415956258658655705526904965209858033850722426482939728584783163057777560688876446248246857926039535277348030480290058760758251047470916439613626760449256274204208320856611906254543372131535958450687724602901618766795240616342522577195429162991930645537799140373404328752628889639958794757291746426357455254079091451357111369410911939325191076020825202618798531887705842972591677813149699009019211697173727847684726860849003377024242916513005005168323364350389517029893922334517220138128069650117844087451960121228599371623130171144484640903890644954440061986907548516026327505298349187407866808818338510228334508504860825039302133219715518430635455007668282949304137765527939751754613953984683393638304746119966538581538420568533862186725233402830871123282789212507712629463229563989898935821167456270102183564622013496715188190973038119800497340723961036854066431939509790190699639552453005450580685501956730229219139339185680344903982059551002263535361920419947455385938102343955449597783779023742161727111723643435439478221818528624085140066604433258885698670543154706965747458550332323342107301545940516553790686627333799585115625784322988273723198987571415957811196358330059408730681216028764962867446047746491599505497374256269010490377819868359381465741268049256487985561453723478673303904688383436346553794986419270563872931748723320837601123029911367938627089438799362016295154133714248928307220126901475466847653576164773794675200490757155527819653621323926406160136358155907422020203187277605277219005561484255518792530343513984425322341576233610642506390497500865627109535919465897514131034822769306247435363256916078154781811528436679570611086153315044521274739245449454236828860613408414863776700961207151249140430272538607648236341433462351897576645216413767969031495019108575984423919862916421939949072362346468441173940326591840443780513338945257423995082965912285085558215725031071257012668302402929525220118726767562204154205161841634847565169998116141010029960783869092916030288400269104140792886215078424516709087000699282120660418371806535567252532567532861291042487761825829765157959847035622262934860034158722980534989650226291748788202734209222245339856264766914905562842503912757710284027998066365825488926488025456610172967026640765590429099456815065265305371829412703369313785178609040708667114965583434347693385781711386455873678123014587687126603489139095620099393610310291616152881384379099042317473363948045759314931405297634757481193567091101377517210080315590248530906692037671922033229094334676851422144773793937517034436619910403375111735471918550464490263655128162288244625759163330391072253837421821408835086573917715096828874782656995995744906617583441375223970968340800535598491754173818839994469748676265516582765848358845314277568790029095170283529716344562129640435231176006651012412006597558512761785838292041974844236080071930457618932349229279650198751872127267507981255470958904556357921221033346697499235630254947802490114195212382815309114079073860251522742995818072471625916685451333123948049470791191532673430282441860414263639548000448002670496248201792896476697583183271314251702969234889627668440323260927524960357996469256504936818360900323809293459588970695365349406034021665443755890045632882250545255640564482465151875471196218443965825337543885690941130315095261793780029741207665147939425902989695946995565761218656196733786236256125216320862869222103274889218654364802296780705765615144632046927906821207388377814233562823608963208068222468012248261177185896381409183903673672220888321513755600372798394004152970028783076670944474560134556417254370906979396122571429894671543578468788614445812314593571984922528471605049221242470141214780573455105008019086996033027634787081081754501193071412233908663938339529425786905076431006383519834389341596131854347546495569781038293097164651438407007073604112373599843452251610507027056235266012764848308407611830130527932054274628654036036745328651057065874882256981579367897669742205750596834408697350201410206723585020072452256326513410559240190274216248439140359989535394590944070469120914093870012645600162374288021092764579310657922955249887275846101264836999892256959688159205600101655256375678566722796619885782794848855834397518744545512965634434803966420557982936804352202770984294232533022576341807039476994159791594530069752148293366555661567873640053666564165473217043903521329543529169414599041608753201868379370234888689479151071637852902345292440773659495630510074210871426134974595615138498713757047101787957310422969066670214498637464595280824369445789772330048764765241339075920434019634039114732023380715095222010682563427471646024335440051521266932493419673977041595683753555166730273900749729736354964533288869844061196496162773449518273695588220757355176651589855190986665393549481068873206859907540792342402300925900701731960362254756478940647548346647760411463233905651343306844953979070903023460461470961696886885014083470405460742958699138296682468185710318879065287036650832431974404771855678934823089431068287027228097362480939962706074726455399253994428081137369433887294063079261595995462624629707062594845569034711972996409089418059534393251236235508134949004364278527138315912568989295196427287573946914272534366941532361004537304881985517065941217352462589548730167600298865925786628561249665523533829428785425340483083307016537228563559152534784459818313411290019992059813522051173365856407826484942764411376393866924803118364453698589175442647399882284621844900877769776312795722672655562596282542765318300134070922334365779160128093179401718598599933849235495640057099558561134980252499066984233017350358044081168552653117099570899427328709258487894436460050410892266917835258707859512983441729535195378855345737426085902908176515578039059464087350612322611200937310804854852635722825768203416050484662775045003126200800799804925485346941469775164932709504934639382432227188515974054702148289711177792376122578873477188196825462981268685817050740272550263329044976277894423621674119186269439650671515779586756482399391760426017633870454990176143641204692182370764887834196896861181558158736062938603810171215855272668300823834046564758804051380801633638874216371406435495561868964112282140753302655100424104896783528588290243670904887118190909494533144218287661810310073547705498159680772009474696134360928614849417850171807793068108546900094458995279424398139213505586422196483491512639012803832001097738680662877923971801461343244572640097374257007359210031541508936793008169980536520276007277496745840028362405346037263416554259027601834840306811381855105979705664007509426087885735796037324514146786703688098806097164258497595138069309449401515422221943291302173912538355915031003330325111749156969174502714943315155885403922164097229101129035521815762823283182342548326111912800928252561902052630163911477247331485739107775874425387611746578671169414776421441111263583553871361011023267987756410246824032264834641766369806637857681349204530224081972785647198396308781543221166912246415911776732253264335686146186545222681268872684459684424161078540167681420808850280054143613146230821025941737562389942075713627516745731891894562835257044133543758575342698699472547031656613991999682628247270641336222178923903176085428943733935618891651250424404008952719837873864805847268954624388234375178852014395600571048119498842390606136957342315590796703461491434478863604103182350736502778590897578272731305048893989009923913503373250855982655867089242612429473670193907727130706869170926462548423240748550366080136046689511840093668609546325002145852930950000907151058236267293264537382104938724996699339424685516483261134146110680267446637334375340764294026682973865220935701626384648528514903629320199199688285171839536691345222444708045923966028171565515656661113598231122506289058549145097157553900243931535190902107119457300243880176615035270862602537881797519478061013715004489917210022201335013106016391541589578037117792775225978742891917915522417189585361680594741234193398420218745649256443462392531953135103311476394911995072858430658361935369329699289837914941939406085724863968836903265564364216644257607914710869984315733749648835292769328220762947282381537409961545598798259891093717126218283025848112389011968221429457667580718653806506487026133892822994972574530332838963818439447707794022843598834100358385423897354243956475556840952248445541392394100016207693636846776413017819659379971557468541946334893748439129742391433659360410035234377706588867781139498616478747140793263858738624732889645643598774667638479466504074111825658378878454858148962961273998413442726086061872455452360643153710112746809778704464094758280348769758948328241239292960582948619196670918958089833201210318430340128495116203534280144127617285830243559830032042024512072872535581195840149180969253395075778400067465526031446167050827682772223534191102634163157147406123850425845988419907611287258059113935689601431668283176323567325417073420817332230462987992804908514094790368878687894930546955703072619009502076433493359106024545086453628935456862958531315337183868265617862273637169757741830239860065914816164049449650117321313895747062088474802365371031150898427992754426853277974311395143574172219759799359685252285745263796289612691572357986620573408375766873884266405990993505000813375432454635967504844235284874701443545419576258473564216198134073468541117668831186544893776979566517279662326714810338643913751865946730024434500544995399742372328712494834706044063471606325830649829795510109541836235030309453097335834462839476304775645015008507578949548931393944899216125525597701436858943585877526379625597081677643800125436502371412783467926101995585224717220177723700417808419423948725406801556035998390548985723546745642390585850216719031395262944554391316631345308939062046784387785054239390524731362012947691874975191011472315289326772533918146607300089027768963114810902209724520759167297007850580717186381054967973100167870850694207092232908070383263453452038027860990556900134137182368370991949516489600755049341267876436746384902063964019766685592335654639138363185745698147196210841080961884605456039038455343729141446513474940784884423772175154334260306698831768331001133108690421939031080143784334151370924353013677631084913516156422698475074303297167469640666531527035325467112667522460551199581831963763707617991919203579582007595605302346267757943936307463056901080114942714100939136913810725813781357894005599500183542511841721360557275221035268037357265279224173736057511278872181908449006178013889710770822931002797665935838758909395688148560263224393726562472776037890814458837855019702843779362407825052704875816470324581290878395232453237896029841669225489649715606981192186584926770403956481278102179913217416305810554598801300484562997651121241536374515005635070127815926714241342103301566165356024733807843028655257222753049998837015348793008062601809623815161366903341111386538510919367393835229345888322550887064507539473952043968079067086806445096986548801682874343786126453815834280753061845485903798217994599681154419742536344399602902510015888272164745006820704193761584547123183460072629339550548239557137256840232268213012476794522644820910235647752723082081063518899152692889108455571126603965034397896278250016110153235160519655904211844949907789992007329476905868577878720982901352956613978884860509786085957017731298155314951681467176959760994210036183559138777817698458758104466283998806006162298486169353373865787735983361613384133853684211978938900185295691967804554482858483701170967212535338758621582310133103877668272115726949518179589754693992642197915523385766231676275475703546994148929041301863861194391962838870543677743224276809132365449485366768000001065262485473055861598999140170769838548318875014293890899506854530765116803337322265175662207526951791442252808165171667766727930354851542040238174608923283917032754257508676551178593950027933895920576682789677644531840404185540104351348389531201326378369283580827193783126549617459970567450718332065034556644034490453627560011250184335607361222765949278393706478426456763388188075656121689605041611390390639601620221536849410926053876887148379895599991120991646464411918568277004574243434021672276445589330127781586869525069499364610175685060167145354315814801054588605645501332037586454858403240298717093480910556211671546848477803944756979804263180991756422809873998766973237695737015808068229045992123661689025962730430679316531149401764737693873514093361833216142802149763399189835484875625298752423873077559555955465196394401821840998412489826236737714672260616336432964063357281070788758164043814850188411431885988276944901193212968271588841338694346828590066640806314077757725705630729400492940302420498416565479736705485580445865720227637840466823379852827105784319753541795011347273625774080213476826045022851579795797647467022840999561601569108903845824502679265942055503958792298185264800706837650418365620945554346135134152570065974881916341359556719649654032187271602648593049039787489589066127250794828276938953521753621850796297785146188432719223223810158744450528665238022532843891375273845892384422535472653098171578447834215822327020690287232330053862163479885094695472004795231120150432932266282727632177908840087861480221475376578105819702226309717495072127248479478169572961423658595782090830733233560348465318730293026659645013718375428897557971449924654038681799213893469244741985097334626793321072686870768062639919361965044099542167627840914669856925715074315740793805323925239477557441591845821562518192155233709607483329234921034514626437449805596103307994145347784574699992128599999399612281615219314888769388022281083001986016549416542616968586788372609587745676182507275992950893180521872924610867639958916145855058397274209809097817293239301067663868240401113040247007350857828724627134946368531815469690466968693925472519413992914652423857762550047485295476814795467007050347999588867695016124972282040303995463278830695976249361510102436555352230690612949388599015734661023712235478911292547696176005047974928060721268039226911027772261025441492215765045081206771735712027180242968106203776578837166909109418074487814049075517820385653909910477594141321543284406250301802757169650820964273484146957263978842560084531214065935809041271135920041975985136254796160632288736181367373244506079244117639975974619383584574915988097667447093006546342423460634237474666080431701260052055928493695941434081468529815053947178900451835755154125223590590687264878635752541911288877371766374860276606349603536794702692322971868327717393236192007774522126247518698334951510198642698878471719396649769070825217423365662725928440620430214113719922785269984698847702323823840055655517889087661360130477098438611687052310553149162517283732728676007248172987637569816335415074608838663640693470437206688651275688266149730788657015685016918647488541679154596507234287730699853713904300266530783987763850323818215535597323530686043010675760838908627049841888595138091030423595782495143988590113185835840667472370297149785084145853085781339156270760356390763947311455495832266945702494139831634332378975955680856836297253867913275055542524491943589128405045226953812179131914513500993846311774017971512283785460116035955402864405902496466930707769055481028850208085800878115773817191741776017330738554758006056014337743299012728677253043182519757916792969965041460706645712588834697979642931622965520168797300035646304579308840327480771811555330909887025505207680463034608658165394876951960044084820659673794731680864156456505300498816164905788311543454850526600698230931577765003780704661264706021457505793270962047825615247145918965223608396645624105195510522357239739512881816405978591427914816542632892004281609136937773722299983327082082969955737727375667615527113922588055201898876201141680054687365580633471603734291703907986396522961312801782679717289822936070288069087768660593252746378405397691848082041021944719713869256084162451123980620113184541244782050110798760717155683154078865439041210873032402010685341947230476666721749869868547076781205124736792479193150856444775379853799732234456122785843296846647513336573692387201464723679427870042503255589926884349592876124007558756946413705625140011797133166207153715436006876477318675587148783989081074295309410605969443158477539700943988394914432353668539209946879645066533985738887866147629443414010498889931600512076781035886116602029611936396821349607501116498327856353161451684576956871090029997698412632665023477167286573785790857466460772283415403114415294188047825438761770790430001566986776795760909966936075594965152736349811896413043311662774712338817406037317439705406703109676765748695358789670031925866259410510533584384656023391796749267844763708474978333655579007384191473198862713525954625181604342253729962863267496824058060296421146386436864224724887283434170441573482481833301640566959668866769563491416328426414974533349999480002669987588815935073578151958899005395120853510357261373640343675347141048360175464883004078464167452167371904831096767113443494819262681110739948250607394950735031690197318521195526356325843390998224986240670310768318446607291248747540316179699411397387765899868554170318847788675929026070043212666179192235209382278788809886335991160819235355570464634911320859189796132791319756490976000139962344455350143464268604644958624769094347048293294140411146540923988344435159133201077394411184074107684981066347241048239358274019449356651610884631256785297769734684303061462418035852933159734583038455410337010916767763742762102137013548544509263071901147318485749233181672072137279355679528443925481560913728128406333039373562420016045664557414588166052166608738748047243391212955877763906969037078828527753894052460758496231574369171131761347838827194168606625721036851321566478001476752310393578606896111259960281839309548709059073861351914591819510297327875571049729011487171897180046961697770017913919613791417162707018958469214343696762927459109940060084983568425201915593703701011049747339493877885989417433031785348707603221982970579751191440510994235883034546353492349826883624043327267415540301619505680654180939409982020609994140216890900708213307230896621197755306659188141191577836272927461561857103721724710095214236964830864102592887457999322374955191221951903424452307535133806856807354464995127203174487195403976107308060269906258076020292731455252078079914184290638844373499681458273372072663917670201183004648190002413083508846584152148991276106513741539435657211390328574918769094413702090517031487773461652879848235338297260136110984514841823808120540996125274580881099486972216128524897425555516076371675054896173016809613803811914361143992106380050832140987604599309324851025168294467260666138151745712559754953580239983146982203613380828499356705575524712902745397762140493182014658008021566536067765508783804304134310591804606800834591136640834887408005741272586704792258319127415739080914383138456424150940849133918096840251163991936853225557338966953749026620923261318855891580832455571948453875628786128859004106006073746501402627824027346962528217174941582331749239683530136178653673760642166778137739951006589528877427662636841830680190804609849809469763667335662282915132352788806157768278159588669180238940333076441912403412022316368577860357276941541778826435238131905028087018575047046312933353757285386605888904583111450773942935201994321971171642235005644042979892081594307167019857469273848653833436145794634175922573898588001698014757420542995801242958105456510831046297282937584161162532562516572498078492099897990620035936509934721582965174135798491047111660791587436986541222348341887722929446335178653856731962559852026072947674072616767145573649812105677716893484917660771705277187601199908144113058645577910525684304811440261938402322470939249802933550731845890355397133088446174107959162511714864874468611247605428673436709046678468670274091881014249711149657817724279347070216688295610877794405048437528443375108828264771978540006509704033021862556147332117771174413350281608840351781452541964320309576018694649088681545285621346988355444560249556668436602922195124830910605377201980218310103270417838665447181260397190688462370857518080035327047185659499476124248110999288679158969049563947624608424065930948621507690314987020673533848349550836366017848771060809804269247132410009464014373603265645184566792456669551001502298330798496079949882497061723674493612262229617908143114146609412341593593095854079139087208322733549572080757165171876599449856937956238755516175754380917805280294642004472153962807463602113294255916002570735628126387331060058910652457080244749375431841494014821199962764531068006631183823761639663180931444671298615527598201451410275600689297502463040173514891945763607893528555053173314164570504996443890936308438744847839616840518452732884032345202470568516465716477139323775517294795126132398229602394548579754586517458787713318138752959809412174227300352296508089177705068259248822322154938048371454781647213976820963320508305647920482085920475499857320388876391601995240918938945576768749730856955958010659526503036266159750662225084067428898265907510637563569968211510949669744580547288693631020367823250182323708459790111548472087618212477813266330412076216587312970811230758159821248639807212407868878114501655825136178903070860870198975889807456643955157415363193191981070575336633738038272152798849350397480015890519420879711308051233933221903466249917169150948541401871060354603794643379005890957721180804465743962806186717861017156740967662080295766577051291209907944304632892947306159510430902221439371849560634056189342513057268291465783293340524635028929175470872564842600349629611654138230077313327298305001602567240141851520418907011542885799208121984493156999059182011819733500126187728036812481995877070207532406361259313438595542547781961142935163561223496661522614735399674051584998603552953329245752388810136202347624669055816438967863097627365504724348643071218494373485300606387644566272186661701238127715621379746149861328744117714552444708997144522885662942440230184791205478498574521634696448973892062401943518310088283480249249085403077863875165911302873958787098100772718271874529013972836614842142871705531796543076504534324600536361472618180969976933486264077435199928686323835088756683595097265574815431940195576850437248001020413749831872259677387154958399718444907279141965845930083942637020875635398216962055324803212267498911402678528599673405242031091797899905718821949391320753431707980023736590985375520238911643467185582906853711897952626234492483392496342449714656846591248918556629589329909035239233333647435203707701010843880032907598342170185542283861617210417603011645918780539367447472059985023582891833692922337323999480437108419659473162654825748099482509991833006976569367159689364493348864744213500840700660883597235039532340179582557036016936990988671132109798897070517280755855191269930673099250704070245568507786790694766126298082251633136399521170984528092630375922426742575599892892783704744452189363203489415521044597261883800300677617931381399162058062701651024458869247649246891924612125310275731390840470007143561362316992371694848132554200914530410371354532966206392105479824392125172540132314902740585892063217589494345489068463993137570910346332714153162232805522972979538018801628590735729554162788676498274186164218789885741071649069191851162815285486794173638906653885764229158342500673612453849160674137340173572779956341043326883569507814931378007362354180070619180267328551191942676091221035987469241172837493126163395001239599240508454375698507957046222664619000103500490183034153545842833764378111988556318777792537201166718539541835984438305203762819440761594106820716970302285152250573126093046898423433152732131361216582808075212631547730604423774753505952287174402666389148817173086436111389069420279088143119448799417154042103412190847094080254023932942945493878640230512927119097513536000921971105412096683111516328705423028470073120658032626417116165957613272351566662536672718998534199895236884830999302757419916463841427077988708874229277053891227172486322028898425125287217826030500994510824783572905691988555467886079462805371227042466543192145281760741482403827835829719301017888345674167811398954750448339314689630763396657226727043393216745421824557062524797219978668542798977992339579057581890622525473582205236424850783407110144980478726691990186438822932305382318559732869780922253529591017341407334884761005564018242392192695062083183814546983923664613639891012102177095976704908305081854704194664371312299692358895384930136356576186106062228705599423371631021278457446463989738188566746260879482018647487672727222062676465338099801966883680994159075776852639865146253336312450536402610569605513183813174261184420189088853196356986962795036738424313011331753305329802016688817481342988681585577810343231753064784983210629718425184385534427620128234570716988530518326179641178579608888150329602290705614476220915094739035946646916235396809201394578175891088931992112260073928149169481615273842736264298098234063200244024495894456129167049508235812487391799648641133480324757775219708932772262349486015046652681439877051615317026696929704928316285504212898146706195331970269507214378230476875280287354126166391708245925170010714180854800636923259462019002278087409859771921805158532147392653251559035410209284665925299914353791825314545290598415817637058927906909896911164381187809435371521332261443625314490127454772695739393481546916311624928873574718824071503995009446731954316193855485207665738825139639163576723151005556037263394867208207808653734942440115799667507360711159351331959197120948964717553024531364770942094635696982226673775209945168450643623824211853534887989395673187806606107885440005508276570305587448541805778891719207881423351138662929667179643468760077047999537883387870348718021842437342112273940255717690819603092018240188427057046092622564178375265263358324240661253311529423457965569502506810018310900411245379015332966156970522379210325706937051090830789479999004999395322153622748476603613677697978567386584670936679588583788795625946464891376652199588286933801836011932368578558558195556042156250883650203322024513762158204618106705195330653060606501054887167245377942831338871631395596905832083416898476065607118347136218123246227258841990286142087284956879639325464285343075301105285713829643709990356948885285190402956047346131138263878897551788560424998748316382804046848618938189590542039889872650697620201995548412650005394428203930127481638158530396439925470201672759328574366661644110962566337305409219519675148328734808957477775278344221091073111351828046036347198185655572957144747682552857863349342858423118749440003229690697758315903858039353521358860079600342097547392296733310649395601812237812854584317605561733861126734780745850676063048229409653041118306671081893031108871728167519579675347188537229309616143204006381322465841111157758358581135018569047815368938137718472814751998350504781297718599084707621974605887423256995828892535041937958260616211842368768511418316068315867994601652057740529423053601780313357263267054790338401257305912339601880137825421927094767337191987287385248057421248921183470876629667207272325650565129333126059505777727542471241648312832982072361750574673870128209575544305968395555686861188397135522084452852640081252027665557677495969626612604565245684086139238265768583384698",
'e': "2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702761838606261331384583000752044933826560297606737113200709328709127443747047230696977209310141692836819025515108657463772111252389784425056953696770785449969967946864454905987931636889230098793127736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117301238197068416140397019837679320683282376464804295311802328782509819455815301756717361332069811250996181881593041690351598888519345807273866738589422879228499892086805825749279610484198444363463244968487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016768396424378140592714563549061303107208510383750510115747704171898610687396965521267154688957035035402123407849819334321068170121005627880235193033224745015853904730419957777093503660416997329725088687696640355570716226844716256079882651787134195124665201030592123667719432527867539855894489697096409754591856956380236370162112047742722836489613422516445078182442352948636372141740238893441247963574370263755294448337998016125492278509257782562092622648326277933386566481627725164019105900491644998289315056604725802778631864155195653244258698294695930801915298721172556347546396447910145904090586298496791287406870504895858671747985466775757320568128845920541334053922000113786300945560688166740016984205580403363795376452030402432256613527836951177883863874439662532249850654995886234281899707733276171783928034946501434558897071942586398772754710962953741521115136835062752602326484728703920764310059584116612054529703023647254929666938115137322753645098889031360205724817658511806303644281231496550704751025446501172721155519486685080036853228183152196003735625279449515828418829478761085263981395599006737648292244375287184624578036192981971399147564488262603903381441823262515097482798777996437308997038886778227138360577297882412561190717663946507063304527954661855096666185664709711344474016070462621568071748187784437143698821855967095910259686200235371858874856965220005031173439207321139080329363447972735595527734907178379342163701205005451326383544000186323991490705479778056697853358048966906295119432473099587655236812859041383241160722602998330535370876138939639177957454016137223618789365260538155841587186925538606164779834025435128439612946035291332594279490433729908573158029095863138268329147711639633709240031689458636060645845925126994655724839186564209752685082307544254599376917041977780085362730941710163434907696423722294352366125572508814779223151974778060569672538017180776360346245927877846585065605078084421152969752189087401966090665180351650179250461950136658543663271254963990854914420001457476081930221206602433009641270489439039717719518069908699860663658323227870937650226014929101151717763594460202324930028040186772391028809786660565118326004368850881715723866984224220102495055188169480322100251542649463981287367765892768816359831247788652014117411091360116499507662907794364600585194199856016264790761532103872755712699251827568798930276176114616254935649590379804583818232336861201624373656984670378585330527583333793990752166069238053369887956513728559388349989470741618155012539706464817194670834819721448889879067650379590366967249499254527903372963616265897603949857674139735944102374432970935547798262961459144293645142861715858733974679189757121195618738578364475844842355558105002561149239151889309946342841393608038309166281881150371528496705974162562823609216807515017772538740256425347087908913729172282861151591568372524163077225440633787593105982676094420326192428531701878177296023541306067213604600038966109364709514141718577701418060644363681546444005331608778314317444081194942297559931401188868331483280270655383300469329011574414756313999722170380461709289457909627166226074071874997535921275608441473782330327033016823719364800217328573493594756433412994302485023573221459784328264142168487872",
'phi': "1.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408807538689175212663386222353693179318006076672635443338908659593958290563832266131992829026788067520876689250171169620703222104321626954862629631361443814975870122034080588795445474924618569536486444924104432077134494704956584678850987433944221254487706647809158846074998871240076521705751797883416625624940758906970400028121042762177111777805315317141011704666599146697987317613560067087480710131795236894275219484353056783002287856997829778347845878228911097625003026961561700250464338243776486102838312683303724292675263116533924731671112115881863851331620384005222165791286675294654906811317159934323597349498509040947621322298101726107059611645629909816290555208524790352406020172799747175342777592778625619432082750513121815628551222480939471234145170223735805772786160086883829523045926478780178899219902707769038953219681986151437803149974110692608867429622675756052317277752035361393621076738937645560606059216589466759551900400555908950229530942312482355212212415444006470340565734797663972394949946584578873039623090375033993856210242369025138680414577995698122445747178034173126453220416397232134044449487302315417676893752103068737880344170093954409627955898678723209512426893557309704509595684401755519881921802064052905518934947592600734852282101088194644544222318891319294689622002301443770269923007803085261180754519288770502109684249362713592518760777884665836150238913493333122310533923213624319263728910670503399282265263556209029798642472759772565508615487543574826471814145127000602389016207773224499435308899909501680328112194320481964387675863314798571911397815397807476150772211750826945863932045652098969855567814106968372884058746103378105444390943683583581381131168993855576975484149144534150912954070050194775486163075422641729394680367319805861833918328599130396072014455950449779212076124785645916160837059498786006970189409886400764436170933417270919143365013715766011480381430626238051432117348151005590134561011800790506381421527093085880928757034505078081454588199063361298279814117453392731208092897279222132980642946878242748740174505540677875708323731097591511776297844328474790817651809778726841611763250386121129143683437670235037111633072586988325871033632223810980901211019899176841491751233134015273384383723450093478604979294599158220125810459823092552872124137043614910205471855496118087642657651106054588147560443178479858453973128630162544876114852021706440411166076695059775783257039511087823082710647893902111569103927683845386333321565829659773103436032322545743637204124406408882673758433953679593123221343732099574988946995656473600729599983912881031974263125179714143201231127955189477817269141589117799195648125580018455065632952859859100090862180297756378925999164994642819302229355234667475932695165421402109136301819472270789012208728736170734864999815625547281137347987165695274890081443840532748378137824669174442296349147081570073525457070897726754693438226195468615331209533579238014609273510210119190218360675097308957528957746814229543394385493155339630380729169175846101460995055064803679304147236572039860073550760902317312501613204843583648177048481810991602442523271672190189334596378608787528701739359303013359011237102391712659047026349402830766876743638651327106280323174069317334482343564531850581353108549733350759966778712449058363675413289086240632456395357212524261170278028656043234942837301725574405837278267996031739364013287627701243679831144643694767053127249241047167001382478312865650649343418039004101780533950587724586655755229391582397084177298337282311525692609299594224000056062667867435792397245408481765197343626526894488855272027477874733598353672776140759171205132693448375299164998093602461784426757277679001919190703805220461232482391326104327191684512306023627893545432461769975753689041763650254785138246314658336383376023577899267298863216185839590363998183845827644912459809370430555596137973432613483049494968681089535696348281781288625364608420339465381944194571426668237183949183237090857485026656803989744066210536030640026081711266599541993687316",
'gamma': "0.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495146314472498070824809605040144865428362241739976449235362535003337429373377376739427925952582470949160087352039481656708532331517766115286211995015079847937450857057400299213547861466940296043254215190587755352673313992540129674205137541395491116851028079842348775872050384310939973613725530608893312676001724795378367592713515772261027349291394079843010341777177808815495706610750101619166334015227893586796549725203621287922655595366962817638879272680132431010476505963703947394957638906572967929601009015125195950922243501409349871228247949747195646976318506676129063811051824197444867836380861749455169892792301877391072945781554316005002182844096053772434203285478367015177394398700302370339518328690001558193988042707411542227819716523011073565833967348717650491941812300040654693142999297779569303100503086303418569803231083691640025892970890985486825777364288253954925873629596133298574739302373438847070370284412920166417850248733379080562754998434590761643167103146710722370021810745044418664759134803669025532458625442225345181387912434573501361297782278288148945909863846006293169471887149587525492366493520473243641097268276160877595088095126208404544477992299157248292516251278427659657083214610298214617951957959095922704208989627971255363217948873764210660607065982561990102880756125199137511678217643619057058440783573501580056077457934213144988500786415171615194565706170432450750081687052307890937046143066848179164968425491504967243121837838753564894950868454102340601622508515583867234944187880440940770106883795111307872023426395226920971608856908382511378712836820491178925944784861991185293910293099059255266917274468920443869711147174571574573203935209122316085086827558890109451681181016874975470969366671210206304827165895049327314860874940207006742590918248759621373842311442653135029230317517225722162832488381124589574386239870375766285513033143929995401853134141586212788648076110030152119657800681177737635016818389733896639868957932991456388644310370608078174489957958324579418962026049841043922507860460362527726022919682995860988339013787171422691788381952984456079160519727973604759102510995779133515791772251502549293246325028747677948421584050759929040185576459901862692677643726605711768133655908815548107470000623363725288949554636971433012007913085552639595497823023144039149740494746825947320846185246058776694882879530104063491722921858008706770690427926743284446968514971825678095841654491851457533196406331199373821573450874988325560888873528019019155089688554682592454445277281730573010806061770113637731824629246600812771621018677446849595142817901451119489342288344825307531187018609761224623176749775564124619838564014841235871772495542248201615176579940806296834242890572594739269638633838743805471319676429268372490760875073785283702304686503490512034227217436689792848629729088926789777032624623912261888765300577862743606094443603928097708133836934235508583941126709218734414512187803276150509478055466300586845563152454605315113252818891079231491311032344302450933450003076558648742229717700331784539150566940159988492916091140029486902088485381697009551566347055445221764035862939828658131238701325358800625686626926997767737730683226900916085104515002261071802554659284938949277595897540761559933782648241979506418681437881718508854080367996314239540091964388750078900000627997942809886372992591977765040409922037940427616817837156686530669398309165243227059553041766736640116792959012930537449718308004275848635083808042466735093559832324116969214860649892763624432958854873789701489713343538448002890466650902845376896223983048814062730540879591189670574938544324786914808533770264067758081275458731117636478787430739206642011251352727499617545053085582356683068322917676677041035231535032510124656386156706449847132695969330167866138333333441657900605867497103646895174569597181553764078377650184278345991842015995431449047725552306147670165993416390660912054005322158902091340802782251533852899511665452245869185993671220132150144801424230986254604488672569343148870491593044640189164502022405495",
'sqrtpi': "1.772453850905516027298167483341145182797549456122387128213807789852911284591032181374950656738544665416226823624282570666236152865724422602525093709602787068462037698653105122849925173028950826228932095379267962800174639015351479720516700190185234018585446974494912640313921775525906216405419332500906398407613733477475153433667989789365851836408795451165161738760059067393431791332809854846248184902054654852195613251561647467515042738761056107996127107210060372044483672365296613708094323498831668424213845709609120420427785778068694766570005218305685125413396636944654181510716693883321942929357062268865224420542149948049920756486398874838505930640218214029285811233064978945203621149078962287389403245978198513134871266512506293260044656382109675026812496930595420461560761952217391525070207792758099054332900662223067614469661248188743069978835205061464443854185307973574257179185635959749959952263849242203889103966406447293972841345043002140564233433039261756134176336320017037654163476320669276541812835762490326904508485320134192435989730871193799482938730111262561658818884785977875963761363218634246546641333954355703201522654193952186030497310513829498439659165614245955421226615102478536098095510395600789402188099613382854025016800745802729119366425192820510001936350073914643295493433951928853735459200563766502880540575532123189009126322819150914980836695624483100852221923973646324842863261145766932425371577377894414090544573595351225626391080239236909732127905807617134603914574791879794124850218445145811341888880413220955332184646709727491028565262707845453262227848800982385836300754950954764062377083388357225436621567481327668384244972420874516161833205077991480184666814236693651902845463857614827857037774388376297479982737705431583682410998683228503805526355369722293133805264428410372312043967004307612454138311792278275363715598398376884537027842985707090511223840536779013385414585316208073043138069739987436693166013817079272056041954882858063093111636297047867814026963272962701226135985897754505289483113016684001532074851982402463337555851713568019341228975980719568740250571502141783792543643030365928211250925880618903117074543127903953553660682611001188965742048727593919976995538352115086696255596441370503829244953590310636234530564717116216858725458687440029611757921723190554057198681727588419089649657906696515601728351482903856551169807210795330916130843598524389465440682165500327537996023866503798886481521186579995857186563775113315974753596043413776645119143460134292508116324806409073773212629335747472967679341271602966512080989809057799660305102181625557978907487076211076238026267854297015027109153504985351492390832484280828987595575678848892608420885521269510357370208661259115541320440373560864338837123962064293902378666311632616788841922798194995240394245784220443030420430420710969273392946085104969289739161855607837870336428902342932718872968029721581659426129728366395905041130374745743509749058016326916537576909810974856253778503428799421922377185844318327937312980065870368619230102174545052030845533038619506602364334115320597412242642653542165581500364726919463825441245572594739007192271870979605498972460282260242910507740208123756748076276377437063450463147737694803316835707620587495781733509967628733873967029688190661426144573713228228039354446083776010586467389438557768872039717670592731663009031126081448843086241142922479654540261637551586587351984372175505527295064150435768758381493594010556591215037704419738803705680971434631636054341365076699975762119811842587422520814043640621172309197439455245967781742191464333506714636462259479231949700349660256352103378066038052703165245454647364062083029827349433672847735302022470529009956981567058640398856368349564952882878519644755574256014599268525818563085380581552199702923480294821795700392954768767378746756147454505258517116754152028266227999770386933422500122977316212394924627075833168064640739293784578214185498332786764818792567950132845112600154788298303970941227955902739831214814542270184266024781981043333772958400258388865676834533309029610949987493741347827363468214661024873730434936857350647979436639913666636603",
'sqrt2': "1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132226659275055927557999505011527820605714701095599716059702745345968620147285174186408891986095523292304843087143214508397626036279952514079896872533965463318088296406206152583523950547457502877599617298355752203375318570113543746034084988471603868999706990048150305440277903164542478230684929369186215805784631115966687130130156185689872372352885092648612494977154218334204285686060146824720771435854874155657069677653720226485447015858801620758474922657226002085584466521458398893944370926591800311388246468157082630100594858704003186480342194897278290641045072636881313739855256117322040245091227700226941127573627280495738108967504018369868368450725799364729060762996941380475654823728997180326802474420629269124859052181004459842150591120249441341728531478105803603371077309182869314710171111683916581726889419758716582152128229518488472089694633862891562882765952635140542267653239694617511291602408715510135150455381287560052631468017127402653969470240300517495318862925631385188163478001569369176881852378684052287837629389214300655869568685964595155501644724509836896036887323114389415576651040883914292338113206052433629485317049915771756228549741438999188021762430965206564211827316726257539594717255934637238632261482742622208671155839599926521176252698917540988159348640083457085181472231814204070426509056532333398436457865796796519267292399875366617215982578860263363617827495994219403777753681426217738799194551397231274066898329989895386728822856378697749662519966583525776198939322845344735694794962952168891485492538904755828834526096524096542889394538646625744927556381964410316979833061852019379384940057156333720548068540575867999670121372239475821426306585132217408832382947287617393647467837431960001592188807347857617252211867490424977366929207311096369721608933708661156734585334833295254675851644710757848602463600834449114818587655554286455123314219926311332517970608436559704352856410087918500760361009159465670676883605571740076756905096136719401324935605240185999105062108163597726431380605467010293569971042425105781749531057255934984451126922780344913506637568747760283162829605532422426957534529028838768446429173282770888318087025339852338122749990812371892540726475367850304821591801886167108972869229201197599880703818543332536460211082299279293072871780799888099176741774108983060800326311816427988231171543638696617029999341616148786860180455055539869131151860103863753250045581860448040750241195184305674533683613674597374423988553285179308960373898915173195874134428817842125021916951875593444387396189314549999906107587049090260883517636224749757858858368037457931157339802099986622186949922595913276423619410592100328026149874566599688874067956167391859572888642473463585886864496822386006983352642799056283165613913942557649062065186021647263033362975075697870606606856498160092718709292153132368281356988937097416504474590960537472796524477094099241238710614470543986743647338477454819100872886222149589529591187892149179833981083788278153065562315810360648675873036014502273208829351341387227684176678436905294286984908384557445794095986260742499549168028530773989382960362133539875320509199893607513906444495768456993471276364507163279154701597733548638939423257277540038260274785674172580951416307159597849818009443560379390985590168272154034581581521004936662953448827107292396602321638238266612626830502572781169451035379371568823365932297823192986064679789864092085609558142614363631004615594332550474493975933999125419532300932175304476533964706627611661753518754646209676345587386164880198848497479264045065444896910040794211816925796857563784881498986416854994916357614484047021033989215342377037233353115645944389703653166721949049351882905806307401346862641672470110653463493916407146285567980177933814424045269137066609777638784866238003392324370474115331872531906019165996455381157888413808433232105337674618121780142960928324113627525408873729051294073394794330619439569367020794295158782283493219316664111301549594698378977674344435393",
'cbrt2': "1.2599210498948731647672106072782283505702514647015079800819751121552996765139594837293965624362550941543102560356156652593990240406137372284591103042693552469606426166250009774745265654803068671854055186892458725167641993737096950983827831613991551293136953661839474634485765703031190958959847411059811629070535908164780114735213254847712978802422085820532579725266622026690056656081994715628176405060664826773572670419486207621442965694205079319172441480920448232840127470321964282081201905714188996459998317503801888689594202055922021154729973848802607363697417887792157984675099539630078260959624203483238660139857363433909737126527995991969968377913168168154428850279651529278107679714002040605674803938561251718357006907984996341976291474044834540269715476228513178020643878047649322579052898467085805286258130005429388560720609747223040631357234936458406575916916916727060124402896700001069081035313852902700415084232336239889386496782194149838027072957176812879001445746227147702348357151905506722084818485009287239209282646606717174247753709737030012742918094054425696592075036357570375189603707473993461014490145157635960471111973845299132965726258904860978856180138677383615773009865983660805975756012787121486856242684556411651558179353228015896291299445004012084254141601575258416298814230973582153060405772425383645325335659551172522855795622772403665628468759015430667535190854845118181752042912412337809631725213575411418114661273660457830360574402651309607096816400688818565723100900842845260864140595033690030791869935569133518342856938262554313558973544502333028531493224551341219554578211965008339577142668506332841961968651210925578955885089968619015467004389687866554530985450576376503600894330651035693577753724954843682137031716216218349580935620872600962678518341834565223974454000447602177889420818380278666530653266326186411600740074747547355852770168950206375413223232969424370174234349161769060072385390222768112977741387207982343039103162854645208311112254682835318304706133509962996445533176594892140511655701885058163377590259584598049542071162429490576805263439895630988409486763457284597918921017669484572485203669942687124101217752777129173164203840634909211658342720961771514093995247275502565412069568839797390390503283375386656354367809315086212227096396854740102722937553501106226207425048107640266578918892733990559108087812393964457811599167981885750617262691783203340901304190770727178294964571676007190205761952153152463863673213027383187903669558934250623625706579967117913543123735636030762433940938027808477164788989025290657428920778378231770868998907264609607150820659106986462371166018854708077164228284038386367665419587251062673265886635040876410319525385833853885760877283954893064374389798078358344491391903395471320680820789089909131084864106470477955708458988574848587272284371841200735447944731521287944073647503423467231749861256967123497954181692526525498381000981011778294993697050401103004806315713402625786014024766248360368191652629827685288013466937510911228515764875914753482517795806733863738829372918270740878258080531275399760057190853405085475806044214250997208002457396885383919946099671195502690165387968195603485138116556598204146209493463790579858456294410572579528120095491493350022958607475059227442420693600224526789537696336777576420743840960718400649235412598773170021287475791240357548857708109419314944268676717439487233248511095872910843847907798603919808443272568443177768557928311165779859916093169919662619865944385754924210135514376676013370968129266672422081213356211731481057220004193640248076837721407820186328246454164398395713266972580231148063010911093931406495070908905524088747299737598150870518233878180349197513536657687113295354768500645212289336840859093472665163929891513843472917269916799344584254162057132103966395449120612414451514574576162347478888166743276523271347651697724877390170213972551914620380258489116289669176868884009698080931118816143267002965414925822275810784847519151766681454837897668571505231660146881659012718803207153976130495524344131359735629054967066207866164935124752482384590083770413898191125988761812621373879454655021733729466784",
'sqrt3': "1.732050807568877293527446341505872366942805253810380628055806979451933016908800037081146186757248575675626141415406703029969945094998952478811655512094373648528093231902305582067974820101084674923265015312343266903322886650672254668921837971227047131660367861588019049986537379859389467650347506576050756618348129606100947602187190325083145829523959832997789824508288714463832917347224163984587855397667958063818353666110843173780894378316102088305524901670023520711144288695990956365797087168498072899493296484283020786408603988738697537582317317831395992983007838702877053913369563312103707264019249106768231199288375641141422016742752102372994270831059898459475987664288897796147837958390228854852903576033852808064381972344661059689722872865264153822664698420021195484155278441181286534507035191650016689294415480846071277143999762926834629577438361895110127148638746976545982451788550975379013880664961911962222957110555242923723192197738262561631468842032853716682938649611917049738836395495938145757671853373633125910899655424624834787197605235997769192323570220305302840385915414971072429559206706202509520175963185872766359975283663431080150665853710647328538625922260582220510403680270297504798728079461658100417052681940019095733462175943893670249320422691034369812463720111185261084268910299720311202100063507176374582405203847555197279933797614906107894985544223326004018851303631561144886847281589288163245187265066645384877599162576642872111240842068016763517100102943180715515190961642460907039408129216903517492961364004139670431041253632327030922577327960292376597745537095469115742140424230781992327617401906424512454877516862696105333694216213605394604245654140128533007813633449856736406703977342229811961042925534501601405940479547154534548407271737656262366549166640233006013265744070107836858468452313160467754480500402240639911970362218602920238867150711017169400296868759663500040895316214233425227956834067013470185902028360716762147743493449563595808082130442586469468522610908263353008756612603460672195404055984128912975994810000772057440230047673258800091514371489475444879157191294659083570873961515537797640262068370848046072969382719585689759759626104159152657577790782334980567840022901532052138935373775536566427046826874289963441395743666073744445583086477893212985302148197395341478170516614952551763291993699565744522639112519093541386989366817430938226424736926202072990967831154131946484377915459915923928287714695149274026409213645654041644581490201945749419305269002613972646081065071439603206077510594187798284793986195249964165213139715293599421897416647075187235788629466108560170428869605798394052906407430811833388677881562635867156008396760245349229943938867059754315442943430957258470988215463111260766774067864571578060647447499750354544559313286549189849336572747626297414738235686914837831363361283627903824840163806671607179848728555842931349226093240565957553651136754644387834283313466644554180390821898983294626345016171122016929619460169320621033039744866231656003566781813443100896568706742965658177445572685015631594412507361198063472886466241327193669426712951450397518928313486192841303255188431169014671423794374728334344652482043796059732870616274910941596862625302558889768470417502003140262284691048046984032437906606737749627102512710602060862662843666050192890893838320006091228691881836842361693903523126930368613796811526946997891926635284389927016519825502252923579366281634568108913074112678378199449772765448294920438801301783546499213574032791577507786002296423504275996997626918738414847394773851563552091220963315839034567189415294357040653076085290174249768185502885276344949577449110422502453723156063618103504871759158032791798367510067136100066217566049573766777112925287302479926720158996418937762016114118289899682955902511656391422364995062850030696812973507251727918598301115277542298851885311763594786003123063726098369850308310852145595748359555715739356633680864821078791247051031631569581604348748829614894154585355561974999296877955099285527423590251810323766861609592552544319954907420679739157072614245328950428097351037967736660135917522627061232312589450697634813",
'epi': "23.1406926327792690057290863679485473802661062426002119934450464095243423506904527835169719970675492196759527048010877731444280444146938358447174458796098493653279658636692422302689910137417646844014103951838684772430680595881624498444914309667784136716319634147840382165112876377314703473538331628212940478919362248202210060320654433627365572718237449896188580595916848726454790133978340265951014996437924229681607995653814235362069576007705904608998830022543048712117913008493273795807294273019310426016919393258532034289686618952832905217111571851855068022541972045663708655683868305447992781704074977685403675565349572188678825639943847182245858894285352472605682102710760184915345184680648873867744396305140051694405406652654309688690639373153598373110421744330239678966900350411814860533902872037599185868868974873243217215855960743346764261678561173533364212656319156654548922896922457738895709053618038361975103265679436240883599064223471284653343731487170651789463742734126947968043210414766682302864293444678745830362189635239213293243755202331263478244147508006278312829271519365166830929625226829715521257410938286330034118971425070391618800155505038035538437188616032888861442508998810031974483391223037725293617273075741343627590442699540628922579087577052911014876302601020524780042062772351397195078304488762383981639411744468279747308024865885436962719627238805466185534197293736373684191486910270353281537243867487551172142583108474101692253984340389808534917403844507215114087612125811908321332649238355934917541679622823221912280111532781552042190180259088917653839536745028909022479704096924057850827510369135603544208717065086204071098076047649664498373161636034508279370165340440974416420237034108061228615353051387461832740115304528010717090104902166216353776464990332649322806627870287611322232688033427394797582978304281719406896832618691897922043723469526795425107815716933037512860984747114576499938529395531729931852240363585166643234602066917538936869124225070335206733586335473588758256850741538420330943088931313457057160330883815388005044529078637039815981719709217179025118876967240286328417036256724947916513202388951545960884080501862908385804810358430851895943585321681613963935178074540634463399687496501730577777442581165354642577307714200294541234047878473162484667451523610508829057036044982303767033402402265042353894659002230997833476496149103565822903565507317668539759119107462026889083887451356154032392880222217254559205126910439744730137913216438620470115114019522523314566160957301152751981057949213890575818996040695963120184003481811694939005006327629234752432779219383282163850212701642636815028969706923971186759142043460252095673705874849396864817368353098908861787570553500981902333825999804557278524343992712833056873647086397718936217601001241752977056641417921793648556773969085635894654173484907689699235686616405182248846030947905695910224958660120114456050138709304890923841144723660389575076366880162409278743823737448149166506149644178354996904405783592272449312365151857668060208695502537664466940822518351207778925990013272229571193618291435308464020914157263456922135175714018221462050281704560343714036872691585763405457398290983522830770292876670932250042639130900507396828477037798566254168427924325502034024134285412947899090008980986934618581866886070607620909535003394646065167345018114836282422525856328087316732562574345985327674862707958291934951905390360887594113693182234777731616845256804811570156580811936002735622491816579310765740497624713371491534882850553749844029718072653245986615278182412765249399914522937453466707437252313418764844563952256982157249416303621197671945601383264040674535436454501777292977403513868006945507776845713132829411454624566135577514039660047151915332367971068593676533130877051558249665891543356052754103653006114261293609044429544861821594431586395682866897520244092153128021085837283369534968820317147281354511946253912317302681142099678170739104958447779137060212931155304862813013822666252294581627184560284638658790044832022304068316819963160395364281567585204826901039827420294549800479030341461499217933833636782359812210608935347180839",
'ln2': "0.693147180559945309417232121458176568075500134360255254120680009493393621969694715605863326996418687542001481020570685733685520235758130557032670751635075961930727570828371435190307038623891673471123350115364497955239120475172681574932065155524734139525882950453007095326366642654104239157814952043740430385500801944170641671518644712839968171784546957026271631064546150257207402481637773389638550695260668341137273873722928956493547025762652098859693201965058554764703306793654432547632744951250406069438147104689946506220167720424524529612687946546193165174681392672504103802546259656869144192871608293803172714367782654877566485085674077648451464439940461422603193096735402574446070308096085047486638523138181676751438667476647890881437141985494231519973548803751658612753529166100071053558249879414729509293113897155998205654392871700072180857610252368892132449713893203784393530887748259701715591070882368362758984258918535302436342143670611892367891923723146723217205340164925687274778234453534764811494186423867767744060695626573796008670762571991847340226514628379048830620330611446300737194890027436439650025809365194430411911506080948793067865158870900605203468429736193841289652556539686022194122924207574321757489097706752687115817051137009158942665478595964890653058460258668382940022833005382074005677053046787001841624044188332327983863490015631218895606505531512721993983320307514084260914790012651682434438935724727882054862715527418772430024897945401961872339808608316648114909306675193393128904316413706813977764981769748689038877899912965036192707108892641052309247839173735012298424204995689359922066022046549415106139187885744245577510206837030866619480896412186807790208181588580001688115973056186676199187395200766719214592236720602539595436541655311295175989940056000366513567569051245926825743946483168332624901803824240824231452306140963805700702551387702681785163069025513703234053802145019015374029509942262995779647427138157363801729873940704242179972266962979939312706935747240493386530879758721699645129446491883771156701678598804981838896784134938314014073166472765327635919233511233389338709513209059272185471328975470797891384445466676192702885533423429899321803769154973340267546758873236778342916191810430116091695265547859732891763545556742863877463987101912431754255888301206779210280341206879759143081283307230300883494705792496591005860012341561757413272465943068435465211135021544341539955381856522750221424566440006276183303206472725721975152908278568421320795988638967277119552218819046603957009774706512619505278932296088931405625433442552392062030343941777357945592125901992559114844024239012554259003129537051922061506434583787873002035414421785758013236451660709914383145004985896688577222148652882169418127048860758972203216663128378329156763074987298574638928269373509840778049395004933998762647550703162216139034845299424917248373406136622638349368111684167056925214751383930638455371862687797328895558871634429756244755392366369488877823890174981027356552405051854773061944052423221255902483308277888889059629119729954574415624512485926831126074679728163809025000565599914612833254358111404848206064082422479240385576476235031100324259709142501114615584830670012583182191534720747411194009835573272826144273821397070477956259670579023033848061713455553685537581065749734447922511196546161827896010068512965395479658663783522473624546093585036050678414391144523145778033591792112795570505555451438788818815351948593446724642949864050626518424475395663783373482207533294481306493360354610101774649326787716719861207396832012359607729024683045940313056377631324010804202854359026945094030740014933950767316028502869730318718239984335257435499560850256608978339556421149480733936260751023818331411004708903950134330297413474840540615877539688838154076980177673036999107492469784784312843036411289202801227256346839162335478772734006395865717981906935812738703433531318905038384561644444292796906383796909244130396560098766358462776607605348697490859381193930925179119885552776535666076243935687719423316664283820074481630786522923565982658627591874752087509144760901697356935723182424991947549443163146339227",
'sin1': "0.841470984807896506652502321630298999622563060798371065672751709991910404391239668948639743543052695854349037907920674293259118920991898881193410327729212409480791955826766606999907764011978408782732566347484802870298656157017962455394893572924670127086486281053382030561377218203868449667761674266239013382753397956764255565477963989764824328690275696429120630058303651523031278255289853264851398193452135970955962062172114814441781057601075674136648055008916726605804140078062393070371877956261288804636081734524656391420252404187763420749206952007713347809814279021452682556632082335215441609164420905892987022473384460448972371397991274081924725048855487311931035068190815153260745739291118331962821508973486881142145283822986512570166738407445519237561432212906059248273970368180158563090543266784643107531263812173256701985601106836028901895019421516166551917914517200466865959716910721978058854064600199401370140530958085520528052531711332305461638363601816994797150048515079398383039567816794816122140220891698710974393121190476626755660862943920712754026403595142681940742515405097606281738246115454618877240138930330976557107209233833000379622236868837011390028787809931893180425891866673507645748718328032132397560834052825458913396704650916929840894981876233125113331750607363469930284473581007929120020265941241512662095259587425117533708749259325431288480955686605107851758251186974372038582300745657893092617926259659895926317135353774917134456923962280471954122887217901254475420293631458462894257339643475927704675577133878705419172631157812221212263628563836937183438963701194854496382353699937278406169086554288247196791003275534086547730477984981606905048871929125405755086600116043085455475652131385216595746609364940939361158605368611562158791568322829266534978770819889777103965683551168454736884312106633481311519307962491913785074669524811584375231931470932070207611660535350649561943246838125028944898638080551253922228177596047774124645106497920434041781010295463802660488668016034296858404355924254730971698968121175487941079117789265154278099212292041176324565743832394099197783505361646163562341893510176841870106676159926443786131669703921721224846106073385577893501151546284405349917481226202555744722079863496910108503598442081323676176634732211131392826721634746213687957637679641518154601248455327285721981284548383082352949204777310319921700337625753552112766792561223391366681293180271683555227590729023266504742896709496072912831435860758941811738248191879423906721114941733551100275340613777071840507209287983248851808905225871844391473032678611673856761718353605486040313922541214247160553511326448435163433725224521731648360754158218160872429420887334457065266681286848094419978228090189362888242687073248808490778629801593835551674823529459998461354005314635285350938177051730555489913301208984611555234114650735523082222050542319345759232018623148086517006826847456257805658225201500535773494764356150063348831701253071510538170487328913854238696217256894541268147313078992272759083087225762644806952089989363340091028532263846957637218168158214278093536407078272031252960642721436761345269936451371742370647588368531916727430799722657658202806038133956170238799882317962758096322705958714877238332406719809823457065629020403430575457456081813691946339054974161950246612928587268419375660015873834266101509923584323838621759818808849633063919792647777622107346865953447898171642358992085626731104165433279454762208841198760992118632119659903019329746145141595203311479697163625372655786312486952807572147489345048666144576542054932489762914119582411684576154679229704829935767013162736987008164003962621199429336517302011351062741834206724249002960866640144697428119564274120469909599516418546318348377715965703372821289606254297716535594020518309129244077521447795691727251260606810333268415197573926416618940117186520594295191697664986290243550915991948376972686320417958990054018494052302284897468845344891427576985145508763303443320718415674018420731694776605274641638342924637250979371534930297735386608700821487271881747844893576011431737804293802294026317794504372911485499703264932251140792534270755935018",
'cos1': "0.5403023058681397174009366074429766037323104206179222276700972553811003947744717645179518560871830893435717311600300890978606337600216634564065122654173185847179711644744794942331179245513932543359435177567028925963757361543275496417544917751151312227301006313570782322367714015174689959366787306742276202450776374406758749816178427202164558511156329688905710812427293316986852471456894904342375433094423024093596239583182454728173664078071243433621748100322027129757882291764468359872699426491344391826569453515750762782513804991607306380317214450349861294883363356557799097930152879278840389800974548251049924537987740061453776371387833594234524168164283618828482374896327390556260912017589827502528599917438580692485584232217826858271088291564683006796875955130036108120336747472749181033673515093458888304203217596594052703934762502487370752661313369842416059710595606599978691384415574414466420012839398870926323453338868626299654709768054836830358211823411732418465771864116514294188326444690783859132110896575103960705960759221332366017786351492108205031065654198794845342017738385811357962354018296001175873376777852901258204259025237801504060850882908795025225744358569522018258768695317863095186263553823892782567518042536874340334484199139641778109368480626361114606753938337594269939033747098325755240476386598977329707201667247126563752900306614605034281563800013282179562451658510170996813309651893664177301806828049421820641100444091566454469055725174820481156994870221599884671417958562941577542388092255751817018402663922330264744915311249040626763443721829862038955693079887700215358516762915693662888093919609600859581638921425897858816243951817851611667933712763680952332214049464665936950210847510020316452379289892665115747800659173062123849623725802989257237931441835058753878309972646823726580622798038628635208077956499890432246165047690917246182413083324891792728497713533003385774380265119951502197736917437683461375008667832145218733803677835349407026635061759307974507672539979761843049908552558874235559639398356369600887013892504200482717508196199314484076091604599557361497158468685092036403668611591081932468700588426400680678544483192646041937141026365902641117429146053931658289491358831490560327765635632278617967549188239925783966919252217631746594197159140881211600832933631510838475192970551626998486566507621788067407801446653817084773593447750536760726328181846148796735281641093010591779831932642219726102078053842871797524259180462260941347187607861143528753408648553226664594566167144004035493598747058262464028921086677063744238054117036026474424200669404040541741089488952450333186352920506992966354233867486847040227511411739650410428484934690894425346298530522431869715501231981300211144292964679233711023126030591090133988165902354715190666968671746666183188500137158378218853216403335436055238620198781335330412497413090531383125003929619623015718918635569148152161493775816765140180383757181549555324756622159986417789936790275550342255130919744077294673324496031598671136550458836408297648862986919505877181344933661036061866778633857773609283628335501953977282925470457826051717580217573278485914618162532212468650508935894429369169284841856773426700536920457919241947861719828211200564147738663559973490681449868966622073849773278441660202394122312871921977719000821975530198967738745420928939407061776019288639278708514814787667220691339580656592648449223676776398907965477924979285895121809407143759534281575448431548983689217661646540116246613156313909317523287060114774737857412102853202214178809166950137228490783824868499424727037174988995477892014951342707294696218807486131289503431732462933097139789790785226917238810581983920404047253119118934897436463616596092443412885343901773764440701234369495020473923889155153601298790896055258085916442494498462191524156056831244802532894350415832054342105308267841988928717502814692556635906072024523806202790920943373197955499631087820775872092477099935889970262483605069767218270326385171402038099406478111301521057879489366810145504023393157396449194043678744646828243693802778337474474413895423034167391892154362511850015098853226271980339083813",
'tan1': "1.557407724654902230506974807458360173087250772381520038383946605698861397151727289555099965202242983804633821411748166613323554618124558937606071684548904439293586043167147908036824613274706955597341640610775535247302506796850507041352385144917621481627570027886022450772014016185772130673941664322369016675671795096261088233022485213114835059162969258761611173265010045945634821564335385053259780863154982428906189221075884887892422138520905365610443447236286192544657877827351485077390888070037215907030879143251705820913626961953437747894016600745631615788169568161461436186656729228633097709676920371691601726377851286722603752440285158731927907827373385857833413004954321710467619326436490003044570244221748445925216001466870637778559548657399002472178504979563330119946188334439864023802697735949828863610802812017131116315237374209653111681319993776046600356584588428198573672765446789419846002299652151294651408159731386909100279357875497921097424539149526556627755848704769021018003549619740582596030630411930328179256346064034568806584376247159361387977557503626537707113718302799753143243295515324353917534134963007340266486882362521259339056569903894957415630631232121188864972642397622846820858401162109081359809437214889731022008434044657933358018330187400146491553718263907029247457299851112765201984866526439565014881186451537089781962173305156234843425069549140648084360538899957820237283322498822424779033358140612050260593023684442696436297963820737196060480403848202315985249662079530378163819099197063810866365504297009489823614796228403405869054325760982345543433126142945187517372711540440884577346253534259581826033794185248086206316977311461468599430131183394634315912977536101215014157560566420406821592001491559264507892280616970471073746392574018706626115013014679553292668241825550287948175868618294645259080421291891931336236746933249627598211870746439755787922744181437150312302286237355463558140789200771087749140339212098797963177258610428042951849103934959142047380521217581388904873054330965993019381928988172307369094130411247941172019832836021213140824551208755490269989291507589522004208674997125666468192954192634696290838945936910546491016047265195993829573789724131347055607909809331783186839732675792723852213350603920784170700603961920930464028125239977542721518460060179115259556739490761074909163516904407294907733082628827948420295702301203022298140006158286108894865994552998935858943999694288409574184788745523731935964115910095125230432253494229913543620606656366556808776457946206477240930435725591974580174380470670469894500723914171201367745083822356532499233413345516147423630035908818359153313797725762602677789776127512243560881489065175413749267788432879828792264370659482121131151239998015687117102420837837599844586945057966164174894430584801275004159998731017555856165210226069759787780673780031946637762885260514926717658657861090786843534447837103487143869871080040496420923010114349026708877629963974626606657945972638041915426550684236732917907518639128194148200947006747409332945853964848930486160168230847832209261678869912312899086988036720510551952827720378468421149506506012210210923623699914292082561108346670101315960303471359170136937353464067196821327203481938785218178076239296541664491100957469447587359423665443710279581772172378178644590100082547422800288475533376984557789242776035787735823148884954455215763404818190842013159547922328595178714546694080082833061992119129499440905559508334448759082330968594767287119994269392193987182838644041486531912649414077077063550382361439279048256252478690847449053592703610440821282606095728584198295174794059687813102080660486248058236441344375782818980777761145955347284071829842125236733090263422503078826002333398205860592437252103438860108849250825654020260159484670232250958993692750405750864002064708548967573017992363573694976275783244843230226450627626395630133554252317193459628122173555126985752481008192921014345634851843597302850087963266867343334352452959864355199165253154170702745902792837375947210242020196589276712740171146348260656473420370577368948135963011255903491326237000978744039906136184005373389201"
};
const MODES = ['pie', 'pi', 'e', 'phi', 'gamma', 'sqrtpi', 'sqrt2', 'cbrt2', 'sqrt3', 'epi', 'ln2', 'sin1', 'cos1', 'tan1'];
const TITLES = {
'pie': 'π×e',
'pi': 'π',
'e': 'e',
'phi': 'φ',
'gamma': 'γ',
'sqrtpi': '√π',
'sqrt2': '√2',
'cbrt2': '∛2',
'sqrt3': '√3',
'epi': 'e↑π',
'ln2': 'ln(2)',
'sin1': 'sin(1)',
'cos1': 'cos(1)',
'tan1': 'tan(1)'
};
const SPOKEN_TITLES = {
'pie': 'The product of pi and e',
'pi': 'The circumference of a circle divided by its diameter, known as pi',
'e': 'The natural base of exponential growth, known as e',
'phi': 'The golden ratio, known as phi',
'gamma': 'The Euler-Mascheroni constant, known as gamma',
'sqrtpi': 'The square root of pi',
'sqrt2': 'The square root of two',
'cbrt2': 'The cube root of two',
'sqrt3': 'The square root of three',
'epi': 'e raised to the power of pi',
'ln2': 'The natural logarithm of two',
'sin1': 'The sine of one radian',
'cos1': 'The cosine of one radian',
'tan1': 'The tangent of one radian'
};
const SHORT_SPOKEN_TITLES = {
'pie': 'pi times e',
'pi': 'pi',
'e': 'e',
'phi': 'phi',
'gamma': 'gamma',
'sqrtpi': 'root pi',
'sqrt2': 'root two',
'cbrt2': 'cube root two',
'sqrt3': 'root three',
'epi': 'e to pi',
'ln2': 'log two',
'sin1': 'sine one',
'cos1': 'cosine one',
'tan1': 'tangent one'
};
const AFK_EXTRA_DIGITS = 10;
const sequenceStates = {
'pie': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'pi': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'e': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'phi': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'gamma': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'sqrtpi': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'sqrt2': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'cbrt2': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'sqrt3': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'epi': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'ln2': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'sin1': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'cos1': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
},
'tan1': {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
}
};
let currentMode = 'pie';
let currentSequence = SEQUENCES[currentMode];
const numberWords = {
'0': 'zero',
'1': 'one',
'2': 'two',
'3': 'three',
'4': 'four',
'5': 'five',
'6': 'six',
'7': 'seven',
'8': 'eight',
'9': 'nine',
'.': 'point',
',': 'point'
};
let currentRun = 0;
let currentCount = 0;
let isShowPhase = false;
let isRecallPhase = false;
let speedIncreaseEarned = false;
let isAFKMode = false;
let currentChunkSize = 4;
let afkModeCounter = 0; // 0: tones, 1: speech, 2: grouped tones, 3: singing
let correctVoice = null;
let errorVoice = null;
let audioContext = null;
let noteFrequencies = null;
function initializeAudio() {
audioContext = new (window.AudioContext || window.webkitAudioContext)();
// Frequencies for notes in the circle of fifths starting from C4
noteFrequencies = {
'0': 146.83238, // C3
'1': 195.99772, // F3
'2': 261.62557, // B♭3
'3': 349.22823, // E♭4
'4': 466.16376, // A♭4
'5': 622.25397, // D♭5
'6': 830.60940, // G♭5 (F♯5)
'7': 1108.73052, // B5
'8': 1479.97769, // E6
'9': 1975.53321, // A6
'.': [110.00000, 2637.02046] // A2 + D7? chord for decimal point
};
}
function calculateGain(frequency) {
// Example formula: higher frequencies get lower gain
// You might need to adjust these numbers to get the right balance
return 0.10 + 0.20 * (1000 / frequency); // This will give higher gain to lower frequencies
}
function calculateChunkPitch(chunk) {
// Filter to just digits and convert to numbers
const digits = chunk.filter(char => /[0-9]/.test(char))
.map(Number);
if (digits.length === 0) return 1.0; // Default pitch for chunks with no digits
// Average the digits
const avg = digits.reduce((sum, digit) => sum + digit, 0) / digits.length;
// Convert 0-9 range to 0-2 range
return (avg / 9) * 2;
}
function playNote(digit) {
if (!audioContext) {
initializeAudio();
}
const time = audioContext.currentTime;
const frequencies = Array.isArray(noteFrequencies[digit]) ?
noteFrequencies[digit] : [noteFrequencies[digit]];
frequencies.forEach(freq => {
const oscillator = audioContext.createOscillator();
const gainNode = audioContext.createGain();
oscillator.type = 'sine';
oscillator.frequency.value = freq;
const adjustedGain = calculateGain(freq);
gainNode.gain.setValueAtTime(adjustedGain, time);
gainNode.gain.exponentialRampToValueAtTime(adjustedGain * 0.033, time + 0.2); // Still fade out to 1/30th
oscillator.connect(gainNode);
gainNode.connect(audioContext.destination);
oscillator.start(time);
oscillator.stop(time + 0.2);
});
}
function initializeVoices() {
const voices = speechSynthesis.getVoices();
correctVoice = voices.find(v => v.name.includes('Google')) || voices[0];
errorVoice = voices.find(v => v.name !== correctVoice.name) || correctVoice;
}
speechSynthesis.onvoiceschanged = initializeVoices;
function returnFocus() {
document.getElementById('display').focus();
}
function handleFirstDigit(key) {
const firstChar = currentSequence[0];
if (key === firstChar || (firstChar === '.' && key === ',')) {
playNote(firstChar);
returnFocus(); // Move this earlier!
speechSynthesis.cancel();
isAFKMode = false;
document.getElementById('afkButton').textContent = 'Start AFK Mode';
document.getElementById('afkButton').classList.remove('active');
currentCount = 1; // Count the first digit as already entered
isShowPhase = false;
isRecallPhase = true;
updateDisplay();
return true;
}
return false;
}
function speakError() {
speechSynthesis.cancel();
const utterance = new SpeechSynthesisUtterance("Oops");
utterance.voice = errorVoice;
speechSynthesis.speak(utterance);
}
function speakNextCycle() {
speechSynthesis.cancel();
const utterance = new SpeechSynthesisUtterance("Next cycle");
utterance.voice = correctVoice;
speechSynthesis.speak(utterance);
}
function speakConfirmation(text, thenDo) {
speechSynthesis.cancel();
const utterance = new SpeechSynthesisUtterance(text);
if (thenDo) {
utterance.onend = thenDo;
}
speechSynthesis.speak(utterance);
}
function getTargetLength() {
return sequenceStates[currentMode].targetLength;
}
function setTargetLength(value) {
sequenceStates[currentMode].targetLength = value;
}
function getSpeedLevel() {
return sequenceStates[currentMode].speedLevel;
}
function setSpeedLevel(value) {
sequenceStates[currentMode].speedLevel = value;
}
function getCycleStartTarget() {
return sequenceStates[currentMode].cycleStartTarget;
}
function setCycleStartTarget(value) {
sequenceStates[currentMode].cycleStartTarget = value;
}
function toggleMode(toggleDirection = 1) {
speechSynthesis.cancel();
const currentIndex = MODES.indexOf(currentMode);
const nextMode = MODES[(currentIndex + toggleDirection + MODES.length) % MODES.length];
currentMode = nextMode;
currentSequence = SEQUENCES[currentMode];
document.getElementById('title').textContent = TITLES[currentMode];
// Start a new run but preserve the state
currentCount = 0;
isShowPhase = true;
isRecallPhase = false;
speedIncreaseEarned = false;
updateDisplay();
returnFocus();
if (isAFKMode) {
speakAFKCycle();
} else {
speakConfirmation(`Switching to ${SPOKEN_TITLES[currentMode]}`, () => speakDigits());
}
updateRecipeButtons();
}
function getValidDivisors(n) {
const divisors = [];
for (let i = 3; i <= 10; i++) {
if (n % i === 0) {
divisors.push(i);
}
}
return divisors;
}
function setChunkSize(length) {
const divisors = getValidDivisors(length);
if (divisors.length > 0) {
currentChunkSize = divisors[Math.floor(Math.random() * divisors.length)];
} else {
currentChunkSize = 4;
}
document.getElementById('chunkSize').textContent = currentChunkSize;
}
function createSpeechText(digits) {
if (digits.length <= 2) return digits.map(d => numberWords[d]).join(' ');
let text = '';
for (let i = 0; i < digits.length; i += currentChunkSize) {
if (i > 0) text += ', ';
const group = digits.slice(i, i + currentChunkSize);
text += group.map(d => numberWords[d]).join(' ');
}
return text;
}
function updateRecipeButtons() {
const currentIndex = MODES.indexOf(currentMode);
const numModes = MODES.length;
const buttons = document.getElementsByClassName('recipe-button');
// Calculate indices with wraparound
const indices = [
(currentIndex - 2 + numModes) % numModes,
(currentIndex - 1 + numModes) % numModes,
currentIndex,
(currentIndex + 1) % numModes,
(currentIndex + 2) % numModes
];
// Helper to check if index wrapped
const didWrap = (index) => {
if (index < currentIndex - 2) return true; // Wrapped from end
if (index > currentIndex + 2) return true; // Wrapped from beginning
return false;
};
// Update each button
indices.forEach((modeIndex, buttonIndex) => {
const button = buttons[buttonIndex];
const mode = MODES[modeIndex];
button.textContent = TITLES[mode];
button.onclick = () => {
speechSynthesis.cancel();
currentMode = mode;
currentSequence = SEQUENCES[mode];
document.getElementById('title').textContent = TITLES[mode];
currentRun--;
startRun();
};
if (modeIndex === currentIndex) {
button.className = 'recipe-button active';
} else if (didWrap(modeIndex)) {
button.style.backgroundColor = '#ffb800'; // Amber for wrapped
} else {
button.style.backgroundColor = '#b8ff00'; // Original green
}
});
}
function updateDisplay() {
const display = document.getElementById('display');
const phase = document.getElementById('phase');
const congrats = document.getElementById('congrats');
if (isShowPhase || isAFKMode) {
const length = Math.min(isAFKMode ? getTargetLength() + AFK_EXTRA_DIGITS : getTargetLength(), currentSequence.length);
display.textContent = currentSequence.slice(0, length);
phase.textContent = isAFKMode ? "AFK Mode - Listening Practice" : "Study Phase - Look and Listen";
} else if (isRecallPhase) {
display.textContent = currentSequence.slice(0, currentCount);
phase.textContent = "Recall Phase - Type from memory";
} else {
display.textContent = "";
phase.textContent = "Ready to start";
}
if (currentCount >= currentSequence.length) {
congrats.textContent = `Congratulations! You've entered ${currentSequence.length} digits! Ready to play again?`;
} else {
congrats.textContent = '';
}
document.getElementById('runCount').textContent = currentRun;
document.getElementById('previousBest').textContent = sequenceStates[currentMode].previousBest;
document.getElementById('currentCount').textContent = currentCount;
document.getElementById('targetLength').textContent = getTargetLength();
document.getElementById('speedLevel').textContent = getSpeedLevel();
}
function speakDigits(extraDigits = 0, speakMode = 1) {
const length = Math.min(getTargetLength() + extraDigits, currentSequence.length);
setChunkSize(length);
const digits = currentSequence.slice(0, length).split('');
const words = createSpeechText(digits);
if (speakMode === 1 || speakMode === 3) { // Speech modes
const introText = `${SHORT_SPOKEN_TITLES[currentMode]} is approximately equal to `;
const utterance = new SpeechSynthesisUtterance(introText + words);
utterance.rate = 0.75 + (getSpeedLevel() - 1) * 0.1;
if (!isAFKMode) {
utterance.onend = () => {
isShowPhase = false;
isRecallPhase = true;
updateDisplay();
};
}
if (speakMode === 3) { // Combined mode
return new Promise((resolve) => {
let delay = 0;
const toneInterval = isAFKMode ? 300 : 600;
// Process in chunks
for (let i = 0; i < digits.length; i += currentChunkSize) {
const chunk = digits.slice(i, i + currentChunkSize);
const chunkWords = chunk.map(d => numberWords[d]).join(' ');
const chunkUtterance = new SpeechSynthesisUtterance(chunkWords);
chunkUtterance.pitch = calculateChunkPitch(chunk);
setTimeout(() => {
// Play tones for this chunk
chunk.forEach((digit, idx) => {
setTimeout(() => playNote(digit), idx * toneInterval);
});
// Speak the chunk
speechSynthesis.speak(chunkUtterance);
}, delay);
delay += chunk.length * toneInterval * 2.2; // Extra time for both tones and speech
}
setTimeout(resolve, delay + toneInterval);
});
}
speechSynthesis.speak(utterance);
return utterance;
} else { // Tone modes (0 or 2)
return new Promise((resolve) => {
let delay = 0;
const toneInterval = isAFKMode ? 300 : 600;
const chunkPause = toneInterval * 2;
const finalDelay = toneInterval;
if (speakMode === 2) { // Grouped tones mode
// Play tones in chunks based on currentChunkSize
for (let i = 0; i < digits.length; i += currentChunkSize) {
const chunk = digits.slice(i, i + currentChunkSize);
// Play each tone in this chunk
chunk.forEach((digit) => {
setTimeout(() => {
playNote(digit);
}, delay);
delay += toneInterval;
});
// Add extra pause after chunk (unless it's the last chunk)
if (i + currentChunkSize < digits.length) {
delay += chunkPause;
}
}
} else { // Regular ungrouped tones
digits.forEach((digit) => {
setTimeout(() => {
playNote(digit);
}, delay);
delay += toneInterval;
});
}
// Only resolve after all notes have played plus final delay
setTimeout(resolve, delay + finalDelay);
});
}
}
async function speakAFKCycle() {
try {
// Get result from speakDigits (either a Promise for tones or an utterance for speech)
const result = speakDigits(AFK_EXTRA_DIGITS, afkModeCounter);
if (result instanceof Promise) {
// For tones: wait for the Promise to resolve
await result;
} else {
// For speech: create and wait for a Promise that resolves when speech ends
await new Promise(resolve => {
result.onend = resolve;
});
}
// Only start next cycle if still in AFK mode
if (isAFKMode) {
afkModeCounter = (afkModeCounter + 1) % 4;
setTimeout(speakAFKCycle, 1077);
}
} catch (error) {
console.error('Error in AFK cycle:', error);
}
}
function startAFKMode() {
speechSynthesis.cancel();
isAFKMode = true;
isShowPhase = false;
isRecallPhase = false;
afkModeCounter = 0;
document.getElementById('afkButton').textContent = 'Stop AFK Mode';
document.getElementById('afkButton').classList.add('active');
updateRecipeButtons();
updateDisplay();
speakConfirmation('Starting listening practice', () => {
speakAFKCycle();
});
}
function stopAFKMode() {
speechSynthesis.cancel();
isAFKMode = false;
document.getElementById('afkButton').textContent = 'Start AFK Mode';
document.getElementById('afkButton').classList.remove('active');
speakConfirmation('Stopping listening practice', () => startRun());
}
function toggleAFK() {
if (isAFKMode) {
stopAFKMode();
} else {
startAFKMode();
}
}
function startRun() {
currentRun++;
currentCount = 0;
isShowPhase = true;
isRecallPhase = false;
setCycleStartTarget(getTargetLength());
speedIncreaseEarned = false;
updateRecipeButtons();
updateDisplay();
returnFocus();
speakDigits();
}
function resetProgress() {
speechSynthesis.cancel();
sequenceStates[currentMode] = {
previousBest: 0,
targetLength: 3,
speedLevel: 1,
cycleStartTarget: 3
};
currentRun = 0;
currentCount = 0;
isShowPhase = false;
isRecallPhase = false;
speedIncreaseEarned = false;
isAFKMode = false;
currentChunkSize = 4;
document.getElementById('afkButton').textContent = 'Start AFK Mode';
document.getElementById('afkButton').classList.remove('active');
document.getElementById('chunkSize').textContent = currentChunkSize;
updateDisplay();
returnFocus();
speakConfirmation('Starting new run', () => startRun());
}
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowLeft') {
toggleMode(-1);
return;
} else if (e.key === 'ArrowRight') {
toggleMode();
return;
}
const isDigitOrDecimal = /^[0-9.,]$/.test(e.key);
if ((isAFKMode || isShowPhase) && isDigitOrDecimal) {
// In AFK mode, only accept correct first digit
handleFirstDigit(e.key);
return;
}
if (!isRecallPhase) return;
const expectedChar = currentSequence[currentCount];
if ((e.key === expectedChar) || (expectedChar === '.' && e.key === ',')) {
playNote(expectedChar);
returnFocus();
currentCount++;
if (currentCount >= getTargetLength() - 3) {
if (getTargetLength() < currentSequence.length) {
setTargetLength(getTargetLength() + 1);
}
if (!speedIncreaseEarned && currentCount >= getCycleStartTarget()) {
setSpeedLevel(getSpeedLevel() + 1);
speedIncreaseEarned = true;
}
}
if (currentCount > sequenceStates[currentMode].previousBest) {
sequenceStates[currentMode].previousBest = currentCount;
// Check if we should move up in rankings
for (let i = 0; i < MODES.length; i++) {
currentIndex = MODES.indexOf(currentMode);
if (currentIndex > 0) { // If not already at the top
const prevMode = MODES[currentIndex - 1];
if (currentCount > sequenceStates[prevMode].previousBest) {
// Swap positions in MODES array
MODES[currentIndex] = prevMode;
MODES[currentIndex - 1] = currentMode;
updateRecipeButtons();
} else {
// If the previous position has a higher previousBest, stop the loop
break;
}
} else {
// If already at the top, stop the loop
break;
}
}
}
updateDisplay();
returnFocus(); // Add here after updateDisplay()
} else if (isDigitOrDecimal) {
speakError();
if (currentCount < getCycleStartTarget() - 1) {
setTargetLength(Math.max(3, getTargetLength() - 1));
setSpeedLevel(Math.max(1, getSpeedLevel() - 1));
}
isRecallPhase = false;
updateDisplay();
returnFocus(); // Add here after updateDisplay()
setTimeout(startRun, 1000);
} else if (e.key === 'Enter' || e.key === ' ') {
speakNextCycle();
isRecallPhase = false;
updateDisplay();
returnFocus(); // Add here after updateDisplay()
setTimeout(startRun, 1000);
}
});
// Set up digit button click handlers
document.querySelectorAll('.digit-button').forEach(button => {
button.onclick = () => {