test: golden-pin the four de-duplicated indicators across all bindings (#305)

* test: golden-pin the four de-duplicated indicators across all C-ABI bindings

Extend gen_golden to emit reference fixtures for AdOscillator (ADOSC),
IntradayIntensity, AwesomeOscillatorHistogram and AverageDrawdown, and replay
them through the Go / C# / Java / R golden harnesses so their corrected
definitions stay bit-identical to the Rust core in every binding. Go suite
verified locally (gcc 13 + cgo): all 9 golden tests pass; C#/Java/R use the
same fixtures and harness pattern (CI-verified). First step of extending the
golden coverage beyond the seven archetype representatives.

* test: golden-pin the scalar-output tranche (308 indicators) against Rust

Extend gen_golden with a generated emit_scalar that writes reference fixtures
for every single-f64-output indicator (scalar / candle / pairwise input) using
valid constructor params, and add a manifest-driven generic Python golden
replay that reconstructs each by its native name and checks it bit-for-bit
against the Rust output. 308 indicators now value-tied to the Rust core in
Python (pytest: 308/308). Takes golden coverage from the 7 archetype
representatives to 308+ of the catalogue.

22 scalar indicators with non-default constructor constraints are skipped by
gen_golden for now (logged), as are non-f64-output ones; multi-output, exotic
inputs and the per-indicator arg arities of the C-ABI/Node replays follow.
Generated + verified locally with the full toolchain.

* test: golden-pin the multi-output tranche (70 indicators) in Python

Add a generated emit_multi to gen_golden (per-indicator Output-field access,
one CSV column per field) and a manifest-driven generic Python replay that
checks every field of each multi-output indicator against the Rust reference.
70 multi-output indicators now value-tied to Rust in Python; combined with the
scalar tranche, 378 indicators are golden-pinned. 8 multi with non-default
param constraints and 5 with non-f64 Output fields (Option/Vec/i64) are
deferred. pytest green.

* test(golden): add 30 constraint-tuned indicators to scalar/multi golden suite

Emit golden fixtures for 22 scalar-output and 8 multi-output indicators
whose constructors need non-default parameters (Alma, Jma, Psar, T3, Mama,
DoubleBollinger, ZigZag, ...). All 408 fixtures replay bit-for-bit through
the Python binding.

* test(golden): cover 36 missed scalar/multi indicators

Add 26 single-output (LinearRegression family, HT cycle, Candle
volatility estimators, DrawdownDuration) and 10 multi-output
(BollingerBands, MACD/MACDEXT/MACDFIX, Camarilla, VWAP bands, ...)
indicators to the golden suite. 444 fixtures replay bit-for-bit
through the Python binding.

* test(golden): cover 50 exotic-input indicators

Add deterministic synthetic feeders for the DerivativesTick (17),
CrossSection (15), Trade (8), TradeQuote (3) and OrderBook (7)
families, derived from the shared OHLCV input series in both
gen_golden and a new Python replay harness (test_golden_exotic).
All 494 fixtures replay bit-for-bit through the Python binding.

* test(golden): complete 514-indicator golden coverage

Add the final tranches: 3 mixed multi-output indicators (Ichimoku,
WilliamsFractals, LeadLagCrossCorrelation), 6 histogram profiles
(time/volume seasonality + TPO/volume price profiles), 10 alt-chart
bar builders and the footprint. Every one of the 514 distinct
indicators now has a Rust-generated g_<Canonical>.csv fixture and a
generic Python replay (scalar/multi/exotic/profile/bars), all passing
bit-for-bit.

* test(golden): add generic Node replay for all 514 indicators

A manifest-driven node:test harness reconstructs every indicator by its
native class, feeds the same synthetic stream derived from the shared
golden input, and checks output bit-for-bit against the Rust reference
fixtures (scalar/multi/exotic/profile/bars). node_manifest.json is
generated from index.d.ts plus the Python-side manifests. 514/514 pass.

* test(golden): add generated Go replay for all 514 indicators

golden_all_test.go (generated by gen_golden_test.py) reconstructs every
Go indicator, feeds the shared synthetic stream and checks output
bit-for-bit against the Rust reference fixtures. A reflection-based
comparator flattens multi-output structs, profiles and bar slices so one
path covers all archetypes. This is the first C-ABI binding verified
across the full catalogue. 514/514 pass.

* test(golden): add generated C# replay for all 514 indicators

GoldenAllTests.g.cs (generated by gen_golden_test.py) reconstructs every
C# indicator, feeds the shared synthetic stream and checks output
bit-for-bit against the Rust reference fixtures via a reflection-based
flatten covering scalar/multi/profile/bar archetypes. 514/514 pass.

Also add the '#nullable enable' directive the compiler requires to the
generated Indicators.g.cs, clearing the four CS8669 warnings on the
nullable double[] profile return types.

* fix(java): marshal C ABI bool params correctly; add 514 golden replay

The Java FFM binding marshalled the cross-section state flags (newHigh,
newLow, aboveMa, onBuySignal) as JAVA_DOUBLE arrays, but the C ABI takes
them as const bool* (one byte each), so the native side read the low byte
of each 8-byte double and saw every flag as false. Add WickraNative.
boolSegment and use it across the 15 cross-section indicators. Also pass
the MacdExt MaType arguments as byte to match the uint8_t downcall
descriptor (was int, throwing WrongMethodTypeException).

Add GoldenAllTest.java (generated by gen_golden_test.py): a reflection
runner replaying all 514 indicators against the Rust reference fixtures.
The bugs above were found by this test; 514/514 now pass.

* fix(r): marshal C ABI bool flags correctly; add 514 golden replay

The R wrapper passed the cross-section state flags as (bool *)REAL(x),
reinterpreting the 8-byte doubles as 1-byte bools so the native side read
every flag as false. Add wk_bool_vec to convert each flag vector into a
real C bool buffer and use it for all 15 cross-section update wrappers.

Add test-golden-all.R + generated golden_specs.R: a reflective runner
replaying all 514 indicators against the Rust reference fixtures. The bug
above was found by this test; verified 514/514 pass locally.

* test(golden): add WASM replay for all 514 indicators

A manifest-driven node:test harness loads the nodejs-target wasm-pack
build, reconstructs every indicator by its JS class, feeds the shared
synthetic stream and checks output bit-for-bit against the Rust
reference fixtures. wasm_manifest.json is generated from the wasm .d.ts
plus the shared manifests; a recursive flattener covers scalar, multi
(Reflect objects), profile and bar shapes. 514/514 pass locally
(wasm-pack build --target nodejs, then node --test).

* test(golden): add C and C++ replay for all 514 indicators

golden_test.c (generated by gen_golden_test.py) drives every indicator
through the C ABI (wickra.h) and checks output bit-for-bit against the
Rust reference fixtures. golden_test.cpp #includes the same source so the
identical runner is compiled and run under both gcc (C) and g++ (C++) via
the CMake targets golden_test / golden_test_cpp — proving the extern "C"
header is consumable from each language. Both 514/514 (verified via ctest).

* test(golden): gofmt the generated Go golden replay

* test(golden): make the Node fixture reader CRLF-safe and pin fixtures to LF
This commit is contained in:
kingchenc
2026-06-15 04:48:51 +02:00
committed by GitHub
parent de1112ea91
commit 4f708d410d
573 changed files with 102337 additions and 77 deletions
+81
View File
@@ -0,0 +1,81 @@
pp,r1,r2,r3,s1,s2,s3
99.66666666666667,101.33333333333334,102.66666666666667,104.33333333333334,98.33333333333334,96.66666666666667,95.33333333333334
103.16267454598328,105.06983843086239,106.68447479511136,108.59163867999047,101.54803818173431,99.6408742968552,98.02623793260624
106.46632396532765,108.3192503675673,109.99207600118424,111.8450024034239,104.79349833171071,102.94057192947105,101.26774629585411
109.30969002905226,110.78845284682183,112.24363659736883,113.7223994151384,107.85450627850526,106.37574346073569,104.92055971018868
111.45910647185464,112.76531615911497,114.21024145855769,115.51645114581802,110.01418117241192,108.70797148515159,107.26304618570887
112.74199773788952,114.1844372235833,115.89392458112607,117.33636406681985,111.03251038034675,109.59007089465297,107.8805835371102
113.06847380764877,114.83425919272239,116.93004207666282,118.69582746173643,110.97269092370834,109.20690553863473,107.1111226546943
112.44424589558567,114.24762443099476,116.36315519550081,118.1665337309099,110.32871513107962,108.52533659567052,106.40980583116448
110.97251301246604,112.50602753835673,114.25742327120199,115.79093779709268,109.22111727962078,107.68760275373009,105.93620702088484
108.84406406881523,109.92273628553433,111.07167376873036,112.15034598544946,107.69512658561919,106.6164543689001,105.46751688570406
106.3166460187776,107.83424744177915,109.25729480295962,110.77489622596117,104.89359865759714,103.37599723459559,101.95294987341512
103.68631980047041,105.65285043360308,107.38315780863867,109.34968844177133,101.95601242543482,99.98948179230216,98.25917441726656
101.25473880483469,103.3221517833124,105.06950799957335,107.13692097805107,99.50738258857375,97.43996961009603,95.69261339383509
99.29680919958425,101.10741679791094,102.59249518766164,104.40310278598834,97.81173080983355,96.00112321150685,94.51604482175615
98.03294152441634,99.71878259193784,101.15332290801157,102.83916397553307,96.59840120834261,94.91256014082111,93.47801982474738
97.60915371740403,99.28009180927988,100.83548479521072,102.50642288708657,96.05376073147319,94.38282263959734,92.8274296536665
98.08685392291113,99.62494279875634,101.21153168587108,102.74962056171628,96.50026503579639,94.96217615995118,93.37558727283644
99.44252381095095,100.95226300129774,102.6626728258728,104.1724120162196,97.73211398637588,96.22237479602909,94.51196497145402
101.57606521173501,102.89658682264047,104.52081852084083,105.84134013174629,99.95183351353465,98.6313119026292,97.00708020442883
104.32553529275576,105.99271089258619,107.99227721114875,109.65945281097918,102.3259689741932,100.65879337436277,98.65922705580022
107.48553552770288,109.26052971524246,111.31521441247419,113.09020860001377,105.43085083047114,103.65585664293157,101.60117194569983
110.82665131417549,112.40803703907896,114.14793507331443,115.7293207982179,109.08675327994003,107.50536755503656,105.76546952080109
114.11393840247109,115.26844804616931,116.42148245720485,117.57599210090306,112.96090399143556,111.80639434773734,110.6533599367018
117.12329605763098,118.63653493872498,119.98867223356798,121.50191111466198,115.77115876278798,114.25791988169398,112.90578258685098
119.6553939855807,121.66174680819312,123.38681497789469,125.3931678005071,117.93032581587913,115.92397299326672,114.19890482356514
121.54740034135453,123.70041219687434,125.52082462600127,127.67383648152108,119.7269879122276,117.57397605670779,115.75356362758086
122.68295119326267,124.59033212543261,126.19523079711914,128.1026117292891,121.07805252157614,119.1706715894062,117.56577291771967
123.0005912206809,124.42241634012424,125.64593457179761,127.06775969124095,121.77707298900754,120.3552478695642,119.13172963789083
122.50041000814686,123.9325499636528,125.31911084642282,126.75125080192876,121.11384912537684,119.6817091698709,118.29514828710089
121.2480003897514,122.86269168159892,124.595691062376,126.21038235422353,119.51500100897431,117.90030971712679,116.1673103363497
119.37441415670385,121.04597128025816,122.97075770809873,124.64231483165304,117.44962772886328,115.77807060530897,113.8532841774684
117.0706953893436,118.54037286928043,120.33620150349023,121.80587898342706,115.2748667551338,113.80518927519697,112.00936064098717
114.57595201454465,116.09394968287982,117.93116717798947,119.44916484632463,112.73873451943501,111.22073685109984,109.3835193559902
112.1587734147477,113.84049945115845,115.7563578400701,117.43808387648085,110.24291502583606,108.5611889894253,106.64533060051366
110.09297423674845,111.67059457230425,113.33993602054392,114.91755635609972,108.42363278850878,106.84601245295298,105.17667100471331
108.62989574587948,110.07186781961968,111.44069323895606,112.88266531269626,107.2610703265431,105.8190982528029,104.45027283346653
107.97053212992039,109.44434730501251,110.69805691068996,112.17187208578208,106.71682252424294,105.24300734915082,103.98929774347337
108.24129915337737,110.214731416669,111.87498871537785,113.84842097866948,106.58104185466851,104.60760959137689,102.94735229266803
109.47714653729103,111.63360533635442,113.46049592935555,115.61695472841893,107.65025594428991,105.49379714522652,103.6669065522254
111.61489250420503,113.55909976771203,115.23803537461436,117.18224263812135,109.9359568973027,107.9917496337957,106.31281402689338
114.49824346605784,115.90575106808735,117.17723131617909,118.5847389182086,113.22676321796611,111.8192556159366,110.54777536784486
117.8942032754348,119.12718823914791,120.3866943919539,121.619679355667,116.63469712262882,115.40171215891571,114.14220600610973
121.51880689228612,123.15266061646597,124.96909076072058,126.60294448490042,119.70237674803151,118.06852302385167,116.25209287959706
125.06867496722403,126.84645360913802,128.91816282689916,130.69594146881315,122.9969657494629,121.2191871075489,119.14747788978778
128.2540554225371,129.87623322022483,131.83173129337746,133.4539090910652,126.29855734938448,124.67637955169674,122.72088147854411
130.82894581221407,132.1620345867578,133.78622490799935,135.1193136825431,129.20475549097253,127.87166671642879,126.24747639518725
132.61456770121885,134.14526343658682,135.85357017873258,137.38426591410055,130.90626095907308,129.3755652237051,127.66725848155934
133.51372898547731,135.03248504785287,136.57187620822657,138.09063227060213,131.97433782510362,130.45558176272806,128.91619060235436
133.51518476304713,135.20685389520168,136.75713002491054,138.44879915706508,131.96490863333827,130.27323950118372,128.72296337147486
132.68866514679192,134.35361264248874,135.7497569735482,137.414704469245,131.29252081573247,129.62757332003565,128.2314289889762
131.17247746428333,133.04737067360705,134.59186294564296,136.46675615496667,129.62798519224742,127.7530919829237,126.2085997108878
129.1563006939515,131.23334410457753,132.99928247784894,135.07632588847497,127.39036232068008,125.31331891005405,123.54738053678264
126.86189674888487,128.77483640934082,130.47213629568728,132.38507595614323,125.16459686253845,123.25165720208248,121.55435731573606
124.52403581279573,125.94074717134566,127.29008015643319,128.70679151498314,123.1747028277082,121.75799146915827,120.40865848407074
122.37315973892662,123.52089789033414,124.76601564465295,125.91375379606048,121.1280419846078,119.98030383320028,118.73518607888147
120.62044223256866,122.21772518521438,124.05330379411997,125.65058674676568,118.78486362366307,117.18758067101736,115.35200206211177
119.44519828628948,121.26484561784791,123.40536157151085,125.22500890306928,117.30468233262654,115.48503500106811,113.34451904740517
118.98423170775713,120.71310016816417,122.76685038714477,124.49571884755181,116.93048148877654,115.2016130283695,113.1478628093889
119.32275870519,120.69130465096077,122.3092031066279,123.67774905239868,117.70486024952287,116.33631430375209,114.71841584808496
120.48694857241185,121.8213800081607,123.26858451423321,124.60301594998207,119.03974406633934,117.70531263059048,116.25810812451797
122.4387103823207,123.99980545620357,125.50948338012392,127.07057845400679,120.92903245840036,119.36793738451749,117.85825946059714
125.07389544503057,126.95926874241083,128.64162338108895,130.52699667846917,123.39154080635247,121.50616750897221,119.8238128702941
128.2253492633656,130.11014948668213,131.69003559073047,133.574835814047,126.64546315931725,124.76066293600071,123.18077683195237
131.67207090888238,133.39509847866734,134.7859700792666,136.50899764905157,130.2811993082831,128.55817173849815,127.16730013789888
135.15507483469676,137.07601211039753,138.71887493259612,140.6398122082969,133.51221201249817,131.5912747367974,129.9484119145988
138.3994880837803,140.21060474681758,141.86581079643918,143.67692745947645,136.74428203415872,134.93316537112145,133.27795932149985
141.1411629574787,142.5445645982477,143.95239182142438,145.35579346219336,139.73333573430202,138.32993409353304,136.92210687035634
143.154923777789,144.4296140251956,145.8679825139123,147.1426727613189,141.71655528907232,140.44186504166572,139.00349655294903
144.28078575968826,145.7928052451957,147.58768148896465,149.09970097447209,142.4859095159193,140.97389003041187,139.1790137866429
144.44430932083742,146.23865004585184,148.3657728466825,150.1601135716969,142.31718652000677,140.52284579499235,138.3957229941617
143.66778712039107,145.44589418180132,147.52523197824206,149.30333903965231,141.58844932395033,139.81034226254008,137.73100446609934
142.07015356602253,143.5339927864094,145.1937596113164,146.6575988317033,140.41038674111553,138.94654752072864,137.28678069582165
139.85515947975856,140.9648701567905,142.11723539703158,143.22694607406353,138.7027942395175,137.59308356248553,136.44071832224446
137.28916235919314,138.9017722702047,140.3933203784109,142.00593028942245,135.79761425098695,134.1850043399754,132.6934562317692
134.6714977766173,136.6814448097882,138.43625382564397,140.44620085881488,132.9166887607615,130.9067417275906,129.15193271173482
132.3015073284582,134.34885503582368,136.06945519625245,138.11680290361792,130.58090716802943,128.53355946066395,126.81295930023518
130.44669455820846,132.18620951110796,133.60736658265836,135.34688153555786,129.02553748665807,127.28602253375857,125.86486546220817
129.31610321851522,131.01675172361394,132.4853771254247,134.1860256305234,127.8474778167045,126.14682931160577,124.67820390979504
129.04196344134022,130.68445142548555,132.23805843217755,133.8805464163229,127.48835643464821,125.84586845050288,124.29226144381087
129.6711671025228,131.2214712608763,132.8477977307242,134.39810188907774,128.0448406326749,126.49453647432136,124.86821000447347
1 pp r1 r2 r3 s1 s2 s3
2 99.66666666666667 101.33333333333334 102.66666666666667 104.33333333333334 98.33333333333334 96.66666666666667 95.33333333333334
3 103.16267454598328 105.06983843086239 106.68447479511136 108.59163867999047 101.54803818173431 99.6408742968552 98.02623793260624
4 106.46632396532765 108.3192503675673 109.99207600118424 111.8450024034239 104.79349833171071 102.94057192947105 101.26774629585411
5 109.30969002905226 110.78845284682183 112.24363659736883 113.7223994151384 107.85450627850526 106.37574346073569 104.92055971018868
6 111.45910647185464 112.76531615911497 114.21024145855769 115.51645114581802 110.01418117241192 108.70797148515159 107.26304618570887
7 112.74199773788952 114.1844372235833 115.89392458112607 117.33636406681985 111.03251038034675 109.59007089465297 107.8805835371102
8 113.06847380764877 114.83425919272239 116.93004207666282 118.69582746173643 110.97269092370834 109.20690553863473 107.1111226546943
9 112.44424589558567 114.24762443099476 116.36315519550081 118.1665337309099 110.32871513107962 108.52533659567052 106.40980583116448
10 110.97251301246604 112.50602753835673 114.25742327120199 115.79093779709268 109.22111727962078 107.68760275373009 105.93620702088484
11 108.84406406881523 109.92273628553433 111.07167376873036 112.15034598544946 107.69512658561919 106.6164543689001 105.46751688570406
12 106.3166460187776 107.83424744177915 109.25729480295962 110.77489622596117 104.89359865759714 103.37599723459559 101.95294987341512
13 103.68631980047041 105.65285043360308 107.38315780863867 109.34968844177133 101.95601242543482 99.98948179230216 98.25917441726656
14 101.25473880483469 103.3221517833124 105.06950799957335 107.13692097805107 99.50738258857375 97.43996961009603 95.69261339383509
15 99.29680919958425 101.10741679791094 102.59249518766164 104.40310278598834 97.81173080983355 96.00112321150685 94.51604482175615
16 98.03294152441634 99.71878259193784 101.15332290801157 102.83916397553307 96.59840120834261 94.91256014082111 93.47801982474738
17 97.60915371740403 99.28009180927988 100.83548479521072 102.50642288708657 96.05376073147319 94.38282263959734 92.8274296536665
18 98.08685392291113 99.62494279875634 101.21153168587108 102.74962056171628 96.50026503579639 94.96217615995118 93.37558727283644
19 99.44252381095095 100.95226300129774 102.6626728258728 104.1724120162196 97.73211398637588 96.22237479602909 94.51196497145402
20 101.57606521173501 102.89658682264047 104.52081852084083 105.84134013174629 99.95183351353465 98.6313119026292 97.00708020442883
21 104.32553529275576 105.99271089258619 107.99227721114875 109.65945281097918 102.3259689741932 100.65879337436277 98.65922705580022
22 107.48553552770288 109.26052971524246 111.31521441247419 113.09020860001377 105.43085083047114 103.65585664293157 101.60117194569983
23 110.82665131417549 112.40803703907896 114.14793507331443 115.7293207982179 109.08675327994003 107.50536755503656 105.76546952080109
24 114.11393840247109 115.26844804616931 116.42148245720485 117.57599210090306 112.96090399143556 111.80639434773734 110.6533599367018
25 117.12329605763098 118.63653493872498 119.98867223356798 121.50191111466198 115.77115876278798 114.25791988169398 112.90578258685098
26 119.6553939855807 121.66174680819312 123.38681497789469 125.3931678005071 117.93032581587913 115.92397299326672 114.19890482356514
27 121.54740034135453 123.70041219687434 125.52082462600127 127.67383648152108 119.7269879122276 117.57397605670779 115.75356362758086
28 122.68295119326267 124.59033212543261 126.19523079711914 128.1026117292891 121.07805252157614 119.1706715894062 117.56577291771967
29 123.0005912206809 124.42241634012424 125.64593457179761 127.06775969124095 121.77707298900754 120.3552478695642 119.13172963789083
30 122.50041000814686 123.9325499636528 125.31911084642282 126.75125080192876 121.11384912537684 119.6817091698709 118.29514828710089
31 121.2480003897514 122.86269168159892 124.595691062376 126.21038235422353 119.51500100897431 117.90030971712679 116.1673103363497
32 119.37441415670385 121.04597128025816 122.97075770809873 124.64231483165304 117.44962772886328 115.77807060530897 113.8532841774684
33 117.0706953893436 118.54037286928043 120.33620150349023 121.80587898342706 115.2748667551338 113.80518927519697 112.00936064098717
34 114.57595201454465 116.09394968287982 117.93116717798947 119.44916484632463 112.73873451943501 111.22073685109984 109.3835193559902
35 112.1587734147477 113.84049945115845 115.7563578400701 117.43808387648085 110.24291502583606 108.5611889894253 106.64533060051366
36 110.09297423674845 111.67059457230425 113.33993602054392 114.91755635609972 108.42363278850878 106.84601245295298 105.17667100471331
37 108.62989574587948 110.07186781961968 111.44069323895606 112.88266531269626 107.2610703265431 105.8190982528029 104.45027283346653
38 107.97053212992039 109.44434730501251 110.69805691068996 112.17187208578208 106.71682252424294 105.24300734915082 103.98929774347337
39 108.24129915337737 110.214731416669 111.87498871537785 113.84842097866948 106.58104185466851 104.60760959137689 102.94735229266803
40 109.47714653729103 111.63360533635442 113.46049592935555 115.61695472841893 107.65025594428991 105.49379714522652 103.6669065522254
41 111.61489250420503 113.55909976771203 115.23803537461436 117.18224263812135 109.9359568973027 107.9917496337957 106.31281402689338
42 114.49824346605784 115.90575106808735 117.17723131617909 118.5847389182086 113.22676321796611 111.8192556159366 110.54777536784486
43 117.8942032754348 119.12718823914791 120.3866943919539 121.619679355667 116.63469712262882 115.40171215891571 114.14220600610973
44 121.51880689228612 123.15266061646597 124.96909076072058 126.60294448490042 119.70237674803151 118.06852302385167 116.25209287959706
45 125.06867496722403 126.84645360913802 128.91816282689916 130.69594146881315 122.9969657494629 121.2191871075489 119.14747788978778
46 128.2540554225371 129.87623322022483 131.83173129337746 133.4539090910652 126.29855734938448 124.67637955169674 122.72088147854411
47 130.82894581221407 132.1620345867578 133.78622490799935 135.1193136825431 129.20475549097253 127.87166671642879 126.24747639518725
48 132.61456770121885 134.14526343658682 135.85357017873258 137.38426591410055 130.90626095907308 129.3755652237051 127.66725848155934
49 133.51372898547731 135.03248504785287 136.57187620822657 138.09063227060213 131.97433782510362 130.45558176272806 128.91619060235436
50 133.51518476304713 135.20685389520168 136.75713002491054 138.44879915706508 131.96490863333827 130.27323950118372 128.72296337147486
51 132.68866514679192 134.35361264248874 135.7497569735482 137.414704469245 131.29252081573247 129.62757332003565 128.2314289889762
52 131.17247746428333 133.04737067360705 134.59186294564296 136.46675615496667 129.62798519224742 127.7530919829237 126.2085997108878
53 129.1563006939515 131.23334410457753 132.99928247784894 135.07632588847497 127.39036232068008 125.31331891005405 123.54738053678264
54 126.86189674888487 128.77483640934082 130.47213629568728 132.38507595614323 125.16459686253845 123.25165720208248 121.55435731573606
55 124.52403581279573 125.94074717134566 127.29008015643319 128.70679151498314 123.1747028277082 121.75799146915827 120.40865848407074
56 122.37315973892662 123.52089789033414 124.76601564465295 125.91375379606048 121.1280419846078 119.98030383320028 118.73518607888147
57 120.62044223256866 122.21772518521438 124.05330379411997 125.65058674676568 118.78486362366307 117.18758067101736 115.35200206211177
58 119.44519828628948 121.26484561784791 123.40536157151085 125.22500890306928 117.30468233262654 115.48503500106811 113.34451904740517
59 118.98423170775713 120.71310016816417 122.76685038714477 124.49571884755181 116.93048148877654 115.2016130283695 113.1478628093889
60 119.32275870519 120.69130465096077 122.3092031066279 123.67774905239868 117.70486024952287 116.33631430375209 114.71841584808496
61 120.48694857241185 121.8213800081607 123.26858451423321 124.60301594998207 119.03974406633934 117.70531263059048 116.25810812451797
62 122.4387103823207 123.99980545620357 125.50948338012392 127.07057845400679 120.92903245840036 119.36793738451749 117.85825946059714
63 125.07389544503057 126.95926874241083 128.64162338108895 130.52699667846917 123.39154080635247 121.50616750897221 119.8238128702941
64 128.2253492633656 130.11014948668213 131.69003559073047 133.574835814047 126.64546315931725 124.76066293600071 123.18077683195237
65 131.67207090888238 133.39509847866734 134.7859700792666 136.50899764905157 130.2811993082831 128.55817173849815 127.16730013789888
66 135.15507483469676 137.07601211039753 138.71887493259612 140.6398122082969 133.51221201249817 131.5912747367974 129.9484119145988
67 138.3994880837803 140.21060474681758 141.86581079643918 143.67692745947645 136.74428203415872 134.93316537112145 133.27795932149985
68 141.1411629574787 142.5445645982477 143.95239182142438 145.35579346219336 139.73333573430202 138.32993409353304 136.92210687035634
69 143.154923777789 144.4296140251956 145.8679825139123 147.1426727613189 141.71655528907232 140.44186504166572 139.00349655294903
70 144.28078575968826 145.7928052451957 147.58768148896465 149.09970097447209 142.4859095159193 140.97389003041187 139.1790137866429
71 144.44430932083742 146.23865004585184 148.3657728466825 150.1601135716969 142.31718652000677 140.52284579499235 138.3957229941617
72 143.66778712039107 145.44589418180132 147.52523197824206 149.30333903965231 141.58844932395033 139.81034226254008 137.73100446609934
73 142.07015356602253 143.5339927864094 145.1937596113164 146.6575988317033 140.41038674111553 138.94654752072864 137.28678069582165
74 139.85515947975856 140.9648701567905 142.11723539703158 143.22694607406353 138.7027942395175 137.59308356248553 136.44071832224446
75 137.28916235919314 138.9017722702047 140.3933203784109 142.00593028942245 135.79761425098695 134.1850043399754 132.6934562317692
76 134.6714977766173 136.6814448097882 138.43625382564397 140.44620085881488 132.9166887607615 130.9067417275906 129.15193271173482
77 132.3015073284582 134.34885503582368 136.06945519625245 138.11680290361792 130.58090716802943 128.53355946066395 126.81295930023518
78 130.44669455820846 132.18620951110796 133.60736658265836 135.34688153555786 129.02553748665807 127.28602253375857 125.86486546220817
79 129.31610321851522 131.01675172361394 132.4853771254247 134.1860256305234 127.8474778167045 126.14682931160577 124.67820390979504
80 129.04196344134022 130.68445142548555 132.23805843217755 133.8805464163229 127.48835643464821 125.84586845050288 124.29226144381087
81 129.6711671025228 131.2214712608763 132.8477977307242 134.39810188907774 128.0448406326749 126.49453647432136 124.86821000447347