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,r4,s1,s2,s3,s4
99.66666666666667,100.275,100.55,100.825,101.65,99.725,99.45,99.175,98.35
103.16267454598328,103.7780337561168,104.10086544562022,104.42369713512362,105.39219220363384,103.13237037710999,102.80953868760658,102.48670699810317,101.51821192959295
106.46632396532765,106.96961867057054,107.29281260719073,107.61600654381093,108.58558835367148,106.32323079733017,106.00003686070998,105.67684292408978,104.70726111422923
109.30969002905226,109.60221419837052,109.8711593004662,110.14010440256189,110.94693970884894,109.06432399417915,108.79537889208346,108.52643378998778,107.71959848370072
111.45910647185464,111.57257823345337,111.82476560723448,112.0769529810156,112.83351510235893,111.06820348589115,110.81601611211003,110.56382873832892,109.80726661698559
112.74199773788952,112.76387649333724,113.05280312063391,113.3417297479306,114.20850962982065,112.18602323874386,111.89709661144718,111.60816998415049,110.74139010226044
113.06847380764877,113.09245340010824,113.44643049143453,113.80040758276081,114.86233885673968,112.38449921745567,112.03052212612938,111.6765450348031,110.61461376082423
112.44424589558567,112.49132701898097,112.85056037147318,113.2097937239654,114.28749378144207,111.77286031399652,111.4136269615043,111.05439360901208,109.97669355153542
110.97251301246604,111.05574857922898,111.35686535294643,111.6579821266639,112.56133244781628,110.45351503179404,110.15239825807659,109.85128148435912,108.94793116320673
108.84406406881523,108.97799635816386,109.18219391398941,109.38639146981497,109.99898413729163,108.56960124651275,108.3654036906872,108.16120613486164,107.54861346738498
106.3166460187776,106.68075955248203,106.95031902436538,107.21987849624873,108.02855691189879,106.14164060871532,105.87208113683197,105.60252166494863,104.79384324929856
103.68631980047041,104.26141987598294,104.60029669339836,104.93917351081379,105.95580396306005,103.58366624115209,103.24478942373666,102.90591260632124,101.88928215407498
101.25473880483469,101.92448274323586,102.27416991942023,102.6238570956046,103.67291862415775,101.2251083908671,100.87542121468273,100.52573403849836,99.47667250994522
99.29680919958425,99.92444295706736,100.22654750597445,100.52865205488155,101.43496570160283,99.32023385925316,99.01812931034607,98.71602476143897,97.80971111471769
98.03294152441634,98.57027723602701,98.8563121961899,99.1423471563528,100.0004520368415,97.99820731570122,97.71217235553833,97.42613739537543,96.56803251488674
97.60915371740403,98.02044583881464,98.31619285428026,98.61193986974587,99.4991809161427,97.42895180788342,97.1332047924178,96.83745777695219,95.95021673055535
98.08685392291113,98.32478270657958,98.61121150151759,98.89764029645558,99.75692668126956,97.7519251167036,97.4654963217656,97.17906752682761,96.31978114201362
99.44252381095095,99.53703350309051,99.83221382945834,100.12739415582618,101.01293513492969,98.94667285035483,98.651492523987,98.35631219761916,97.47077121851565
101.57606521173501,101.5422908444415,101.81222656444285,102.08216228444422,102.89196944444832,101.00241940443875,100.7324836844374,100.46254796443603,99.65274080443193
104.32553529275576,104.32926258320965,104.66538059239568,105.0014986015817,106.00985262913977,103.65702656483761,103.32090855565158,102.98479054646556,101.97643651890749
107.48553552770288,107.55689891578143,107.90795281355214,108.25900671132284,109.31216840463496,106.85479112024004,106.50373722246933,106.15268332469863,105.09952163138651
110.82665131417549,110.9725900160979,111.2770410273523,111.5814920386067,112.49484507236991,110.3636879935891,110.0592369823347,109.7547859710803,108.84143293731708
114.11393840247109,114.3269385068177,114.53846337850163,114.74998825018555,115.38456286523734,113.90388876344986,113.69236389176592,113.480839020082,112.84626440503021
117.12329605763098,117.54705712667621,117.80971660947044,118.07237609226466,118.86035454064734,117.02173816108777,116.75907867829353,116.49641919549931,115.70844074711664
119.6553939855807,120.27872556278697,120.62077248708242,120.96281941137788,121.98896018426422,119.59463171419608,119.25258478990064,118.91053786560518,117.88439709271884
121.54740034135453,122.24423032717334,122.60846088659929,122.97269144602525,124.0653831243031,121.51576920832144,121.1515386488955,120.78730808946953,119.69461641119169
122.68295119326267,123.3073924174329,123.62935138111975,123.95131034480659,124.91718723586712,122.66347449005922,122.34151552637236,122.01955656268552,121.05367967162499
123.0005912206809,123.44138791563655,123.68387772282226,123.92636753000795,124.65383695156505,122.95640830126517,122.71391849407946,122.47142868689377,121.74395926533667
122.50041000814686,122.8043699910581,123.0627509012334,123.32113181140869,124.09627454193458,122.28760817070751,122.02922726053221,121.77084635035692,120.99570361983103
121.2480003897514,121.43656394581242,121.743435590803,122.0503072357936,122.97092217076536,120.82282065583124,120.51594901084066,120.20907736585006,119.2884624308783
119.37441415670385,119.4508496779621,119.78051450350664,120.11017932905116,121.09917380568476,118.79152002687304,118.4618552013285,118.13219037578398,117.14319589915038
117.0706953893436,117.04388229553408,117.34322035599752,117.64255841646096,118.54057259785128,116.4452061746072,116.14586811414375,115.84653005368031,114.94851587228999
114.57595201454465,114.56429357775264,114.87185496773508,115.17941635771751,116.10210052766485,113.94917079778776,113.64160940780532,113.33404801782288,112.41136384787555
112.1587734147477,112.25441963456801,112.58419820688923,112.91397677921046,113.90331249617411,111.59486248992557,111.26508391760436,110.93530534528313,109.94596962831947
110.09297423674845,110.29889128757917,110.59652945109374,110.89416761460834,111.78708210515208,109.70361496054998,109.40597679703541,109.10833863352082,108.21542414297707
108.62989574587948,108.96069883714864,109.218355274014,109.47601171087935,110.24898102147542,108.44538596341795,108.18772952655259,107.93007308968724,107.15710377909117
107.97053212992039,108.44066080423896,108.69068390914283,108.94070701404672,109.69077632875835,107.94061459443121,107.69059148952734,107.44056838462345,106.69049906991182
108.24129915337737,108.88756232781016,109.2206505376602,109.55373874751025,110.55300337706038,108.22138590811007,107.88829769826002,107.55520948840997,106.55594485885985
109.47714653729103,110.17185510429249,110.53699546523174,110.90213582617098,111.99755690898873,109.44157438241399,109.07643402147474,108.7112936605355,107.61587257771775
111.61489250420503,112.21228559059719,112.54440702038471,112.87652845017223,113.8728927395348,111.54804273102215,111.21592130123463,110.88379987144711,109.88743558208454
114.49824346605784,114.87984470625676,115.12541859251787,115.37099247877899,116.10771413756234,114.38869693373454,114.14312304747342,113.89754916121231,113.16082750242896
117.8942032754348,118.09616043868955,118.32463879103715,118.55311714338472,119.23855220042748,117.63920373399439,117.4107253816468,117.18224702929922,116.49681197225647
121.51880689228612,121.65250649348452,121.96878251475769,122.28505853603085,123.23388659985032,121.01995445093822,120.70367842966505,120.38740240839189,119.43857434457242
125.06867496722403,125.12761411184715,125.48048383231736,125.83335355278759,126.89196271419824,124.4218746709067,124.0690049504365,123.71613522996627,122.65752606855561
128.2540554225371,128.24868876856593,128.57664239005965,128.90459601155334,129.88845687603444,127.59278152557853,127.26482790408484,126.93687428259113,125.95301341811003
130.82894581221407,130.80892818262987,131.08001209974353,131.35109601685716,132.16434776819813,130.26676034840256,129.9956764312889,129.72459251417527,128.9113407628343
132.61456770121885,132.73386525487982,133.03077381531858,133.32768237575732,134.21840805707362,132.14004813400228,131.84313957356352,131.54623101312478,130.65550533180848
133.51372898547731,133.7734240495645,134.05375421164987,134.3340843737352,135.17507485999127,133.21276372539384,132.93243356330848,132.65210340122314,131.81111291496708
133.51518476304713,133.9537560811636,134.2509343968344,134.54811271250523,135.43964765951765,133.35939944982198,133.06222113415117,132.76504281848034,131.87350787146792
132.68866514679192,133.23806839554868,133.518668479668,133.79926856378734,134.6410688161453,132.67686822731002,132.3962681431907,132.11566805907137,131.2738678067134
131.17247746428333,131.8163220706958,132.12976573982044,132.44320940894505,133.38354041631897,131.18943473244653,130.8759910633219,130.56254739419728,129.62221638682337
129.1563006939515,129.81967906149674,130.17195239168734,130.52422572187794,131.58104571244974,129.11513240111555,128.76285907092495,128.41058574073435,127.35376575016255
126.86189674888487,127.40847514811799,127.73941377324154,128.0703523983651,129.06316827373576,126.74659789787088,126.41565927274733,126.08472064762378,125.09190477225312
124.52403581279573,124.84496825109156,125.09852231592498,125.35207638075842,126.11273857525872,124.33786012142468,124.08430605659126,123.83075199175782,123.07008979725752
122.37315973892662,122.49512526070693,122.7144703853985,122.93381551009008,123.59185088416483,122.05643501132376,121.83708988663219,121.6177447619406,120.95970938786586
120.62044223256866,120.6968255527843,121.01150452925984,121.32618350573539,122.27022043516199,120.06746759983324,119.7527886233577,119.43810964688215,118.49407271745555
119.44519828628948,119.48734463199692,119.85035959980887,120.21337456762083,121.30241947105671,118.76131469637299,118.39829972856104,118.03528476074908,116.9462398573132
118.98423170775713,119.00608999479411,119.35283004040464,119.69957008601519,120.73979022284678,118.31260990357305,117.96586985796252,117.61912981235197,116.57890967552038
119.32275870519,119.34716359875881,119.62092100222395,119.89467840568909,120.71595061608453,118.79964879182853,118.52589138836339,118.25213398489825,117.43086177450282
120.48694857241185,120.6291587967551,120.88414209142206,121.13912538608902,121.9040752700899,120.1191922074212,119.86420891275424,119.60922561808728,118.8442757340864
122.4387103823207,122.77161505708187,123.0531025818805,123.33459010667913,124.179052681075,122.2086400074846,121.92715248268598,121.64566495788735,120.80120238349147
125.07389544503057,125.6039558312047,125.93099755867671,126.25803928614873,127.23916446856478,124.94987237626066,124.62283064878865,124.29578892131663,123.31466373890058
128.2253492633656,128.84785962930889,129.16545587598398,129.4830521226591,130.43584086268444,128.21266713595864,127.89507088928353,127.57747464260842,126.62468590258308
131.67207090888238,132.2896676353533,132.57510839263853,132.86054914992377,133.71687142177942,131.71878612078288,131.43334536349766,131.14790460621242,130.29158233435678
135.15507483469676,135.7598309638397,136.08651263948047,136.41319431512125,137.3932393420436,135.10646761255816,134.7797859369174,134.45310426127662,133.47305923435428
138.3994880837803,138.8731449458564,139.1908911945168,139.5086374431772,140.46187618915837,138.2376524485356,137.91990619987521,137.60215995121482,136.64892120523365
141.1411629574787,141.39443335426606,141.6521293334611,141.9098253126561,142.68291325024117,140.87904139587604,140.621345416681,140.363649437486,139.59056149990093
143.154923777789,143.23994258729024,143.48863963810155,143.73733668891285,144.48342784134675,142.74254848566764,142.49385143485634,142.24515438404504,141.49906323161113
144.28078575968826,144.3010611099437,144.60419321846072,144.9073253269777,145.81672165252874,143.69479689290972,143.3916647843927,143.0885326758757,142.17913635032468
144.44430932083742,144.4709947348903,144.83046222475943,145.18992971462856,146.26833218423596,143.75205975515203,143.3925922652829,143.03312477541377,141.95472230580637
143.66778712039107,143.72015549733024,144.0737546092999,144.42735372126958,145.4881510571786,143.01295727339087,142.6593581614212,142.30575904945152,141.2449617135425
142.07015356602253,142.16055651565432,142.44688706980628,142.7332176239582,143.59220928641403,141.58789540735046,141.3015648531985,141.01523429904657,140.15624263659075
139.85515947975856,140.01986187563278,140.22721883471613,140.4345757937995,141.05664667104958,139.60514795746604,139.3977909983827,139.19043403929933,138.56836316204925
137.28916235919314,137.69477198042676,137.97931979885507,138.26386761728335,139.11751107256825,137.1256763435702,136.8411285251419,136.55658070671362,135.70293725142872
134.6714977766173,135.27173843175984,135.6168410695873,135.96194370741475,136.9972516208971,134.58153315610497,134.2364305182775,133.89132788045006,132.85601996696772
132.3015073284582,132.97365009660936,133.31904531782385,133.6644405390383,134.70062620268175,132.28285965418044,131.93746443296595,131.5920692117515,130.55588354810806
130.44669455820846,131.05478070846547,131.34450897737338,131.6342372462813,132.503422053005,130.47532417064966,130.18559590174175,129.89586763283384,129.02668282611012
129.31610321851522,129.83864309660322,130.12915987140326,130.41967664620327,131.2912269706034,129.25760954700314,128.9670927722031,128.6765759974031,127.80502567300299
129.04196344134022,129.4238197929536,129.7167951671137,130.00977054127378,130.88869666375405,128.83786904463344,128.54489367047333,128.25191829631325,127.37299217383298
129.6711671025228,129.8863359319469,130.17752707286533,130.4687182137838,131.3422916365392,129.30395365010995,129.0127625091915,128.72157136827303,127.84799794551763
1 pp r1 r2 r3 r4 s1 s2 s3 s4
2 99.66666666666667 100.275 100.55 100.825 101.65 99.725 99.45 99.175 98.35
3 103.16267454598328 103.7780337561168 104.10086544562022 104.42369713512362 105.39219220363384 103.13237037710999 102.80953868760658 102.48670699810317 101.51821192959295
4 106.46632396532765 106.96961867057054 107.29281260719073 107.61600654381093 108.58558835367148 106.32323079733017 106.00003686070998 105.67684292408978 104.70726111422923
5 109.30969002905226 109.60221419837052 109.8711593004662 110.14010440256189 110.94693970884894 109.06432399417915 108.79537889208346 108.52643378998778 107.71959848370072
6 111.45910647185464 111.57257823345337 111.82476560723448 112.0769529810156 112.83351510235893 111.06820348589115 110.81601611211003 110.56382873832892 109.80726661698559
7 112.74199773788952 112.76387649333724 113.05280312063391 113.3417297479306 114.20850962982065 112.18602323874386 111.89709661144718 111.60816998415049 110.74139010226044
8 113.06847380764877 113.09245340010824 113.44643049143453 113.80040758276081 114.86233885673968 112.38449921745567 112.03052212612938 111.6765450348031 110.61461376082423
9 112.44424589558567 112.49132701898097 112.85056037147318 113.2097937239654 114.28749378144207 111.77286031399652 111.4136269615043 111.05439360901208 109.97669355153542
10 110.97251301246604 111.05574857922898 111.35686535294643 111.6579821266639 112.56133244781628 110.45351503179404 110.15239825807659 109.85128148435912 108.94793116320673
11 108.84406406881523 108.97799635816386 109.18219391398941 109.38639146981497 109.99898413729163 108.56960124651275 108.3654036906872 108.16120613486164 107.54861346738498
12 106.3166460187776 106.68075955248203 106.95031902436538 107.21987849624873 108.02855691189879 106.14164060871532 105.87208113683197 105.60252166494863 104.79384324929856
13 103.68631980047041 104.26141987598294 104.60029669339836 104.93917351081379 105.95580396306005 103.58366624115209 103.24478942373666 102.90591260632124 101.88928215407498
14 101.25473880483469 101.92448274323586 102.27416991942023 102.6238570956046 103.67291862415775 101.2251083908671 100.87542121468273 100.52573403849836 99.47667250994522
15 99.29680919958425 99.92444295706736 100.22654750597445 100.52865205488155 101.43496570160283 99.32023385925316 99.01812931034607 98.71602476143897 97.80971111471769
16 98.03294152441634 98.57027723602701 98.8563121961899 99.1423471563528 100.0004520368415 97.99820731570122 97.71217235553833 97.42613739537543 96.56803251488674
17 97.60915371740403 98.02044583881464 98.31619285428026 98.61193986974587 99.4991809161427 97.42895180788342 97.1332047924178 96.83745777695219 95.95021673055535
18 98.08685392291113 98.32478270657958 98.61121150151759 98.89764029645558 99.75692668126956 97.7519251167036 97.4654963217656 97.17906752682761 96.31978114201362
19 99.44252381095095 99.53703350309051 99.83221382945834 100.12739415582618 101.01293513492969 98.94667285035483 98.651492523987 98.35631219761916 97.47077121851565
20 101.57606521173501 101.5422908444415 101.81222656444285 102.08216228444422 102.89196944444832 101.00241940443875 100.7324836844374 100.46254796443603 99.65274080443193
21 104.32553529275576 104.32926258320965 104.66538059239568 105.0014986015817 106.00985262913977 103.65702656483761 103.32090855565158 102.98479054646556 101.97643651890749
22 107.48553552770288 107.55689891578143 107.90795281355214 108.25900671132284 109.31216840463496 106.85479112024004 106.50373722246933 106.15268332469863 105.09952163138651
23 110.82665131417549 110.9725900160979 111.2770410273523 111.5814920386067 112.49484507236991 110.3636879935891 110.0592369823347 109.7547859710803 108.84143293731708
24 114.11393840247109 114.3269385068177 114.53846337850163 114.74998825018555 115.38456286523734 113.90388876344986 113.69236389176592 113.480839020082 112.84626440503021
25 117.12329605763098 117.54705712667621 117.80971660947044 118.07237609226466 118.86035454064734 117.02173816108777 116.75907867829353 116.49641919549931 115.70844074711664
26 119.6553939855807 120.27872556278697 120.62077248708242 120.96281941137788 121.98896018426422 119.59463171419608 119.25258478990064 118.91053786560518 117.88439709271884
27 121.54740034135453 122.24423032717334 122.60846088659929 122.97269144602525 124.0653831243031 121.51576920832144 121.1515386488955 120.78730808946953 119.69461641119169
28 122.68295119326267 123.3073924174329 123.62935138111975 123.95131034480659 124.91718723586712 122.66347449005922 122.34151552637236 122.01955656268552 121.05367967162499
29 123.0005912206809 123.44138791563655 123.68387772282226 123.92636753000795 124.65383695156505 122.95640830126517 122.71391849407946 122.47142868689377 121.74395926533667
30 122.50041000814686 122.8043699910581 123.0627509012334 123.32113181140869 124.09627454193458 122.28760817070751 122.02922726053221 121.77084635035692 120.99570361983103
31 121.2480003897514 121.43656394581242 121.743435590803 122.0503072357936 122.97092217076536 120.82282065583124 120.51594901084066 120.20907736585006 119.2884624308783
32 119.37441415670385 119.4508496779621 119.78051450350664 120.11017932905116 121.09917380568476 118.79152002687304 118.4618552013285 118.13219037578398 117.14319589915038
33 117.0706953893436 117.04388229553408 117.34322035599752 117.64255841646096 118.54057259785128 116.4452061746072 116.14586811414375 115.84653005368031 114.94851587228999
34 114.57595201454465 114.56429357775264 114.87185496773508 115.17941635771751 116.10210052766485 113.94917079778776 113.64160940780532 113.33404801782288 112.41136384787555
35 112.1587734147477 112.25441963456801 112.58419820688923 112.91397677921046 113.90331249617411 111.59486248992557 111.26508391760436 110.93530534528313 109.94596962831947
36 110.09297423674845 110.29889128757917 110.59652945109374 110.89416761460834 111.78708210515208 109.70361496054998 109.40597679703541 109.10833863352082 108.21542414297707
37 108.62989574587948 108.96069883714864 109.218355274014 109.47601171087935 110.24898102147542 108.44538596341795 108.18772952655259 107.93007308968724 107.15710377909117
38 107.97053212992039 108.44066080423896 108.69068390914283 108.94070701404672 109.69077632875835 107.94061459443121 107.69059148952734 107.44056838462345 106.69049906991182
39 108.24129915337737 108.88756232781016 109.2206505376602 109.55373874751025 110.55300337706038 108.22138590811007 107.88829769826002 107.55520948840997 106.55594485885985
40 109.47714653729103 110.17185510429249 110.53699546523174 110.90213582617098 111.99755690898873 109.44157438241399 109.07643402147474 108.7112936605355 107.61587257771775
41 111.61489250420503 112.21228559059719 112.54440702038471 112.87652845017223 113.8728927395348 111.54804273102215 111.21592130123463 110.88379987144711 109.88743558208454
42 114.49824346605784 114.87984470625676 115.12541859251787 115.37099247877899 116.10771413756234 114.38869693373454 114.14312304747342 113.89754916121231 113.16082750242896
43 117.8942032754348 118.09616043868955 118.32463879103715 118.55311714338472 119.23855220042748 117.63920373399439 117.4107253816468 117.18224702929922 116.49681197225647
44 121.51880689228612 121.65250649348452 121.96878251475769 122.28505853603085 123.23388659985032 121.01995445093822 120.70367842966505 120.38740240839189 119.43857434457242
45 125.06867496722403 125.12761411184715 125.48048383231736 125.83335355278759 126.89196271419824 124.4218746709067 124.0690049504365 123.71613522996627 122.65752606855561
46 128.2540554225371 128.24868876856593 128.57664239005965 128.90459601155334 129.88845687603444 127.59278152557853 127.26482790408484 126.93687428259113 125.95301341811003
47 130.82894581221407 130.80892818262987 131.08001209974353 131.35109601685716 132.16434776819813 130.26676034840256 129.9956764312889 129.72459251417527 128.9113407628343
48 132.61456770121885 132.73386525487982 133.03077381531858 133.32768237575732 134.21840805707362 132.14004813400228 131.84313957356352 131.54623101312478 130.65550533180848
49 133.51372898547731 133.7734240495645 134.05375421164987 134.3340843737352 135.17507485999127 133.21276372539384 132.93243356330848 132.65210340122314 131.81111291496708
50 133.51518476304713 133.9537560811636 134.2509343968344 134.54811271250523 135.43964765951765 133.35939944982198 133.06222113415117 132.76504281848034 131.87350787146792
51 132.68866514679192 133.23806839554868 133.518668479668 133.79926856378734 134.6410688161453 132.67686822731002 132.3962681431907 132.11566805907137 131.2738678067134
52 131.17247746428333 131.8163220706958 132.12976573982044 132.44320940894505 133.38354041631897 131.18943473244653 130.8759910633219 130.56254739419728 129.62221638682337
53 129.1563006939515 129.81967906149674 130.17195239168734 130.52422572187794 131.58104571244974 129.11513240111555 128.76285907092495 128.41058574073435 127.35376575016255
54 126.86189674888487 127.40847514811799 127.73941377324154 128.0703523983651 129.06316827373576 126.74659789787088 126.41565927274733 126.08472064762378 125.09190477225312
55 124.52403581279573 124.84496825109156 125.09852231592498 125.35207638075842 126.11273857525872 124.33786012142468 124.08430605659126 123.83075199175782 123.07008979725752
56 122.37315973892662 122.49512526070693 122.7144703853985 122.93381551009008 123.59185088416483 122.05643501132376 121.83708988663219 121.6177447619406 120.95970938786586
57 120.62044223256866 120.6968255527843 121.01150452925984 121.32618350573539 122.27022043516199 120.06746759983324 119.7527886233577 119.43810964688215 118.49407271745555
58 119.44519828628948 119.48734463199692 119.85035959980887 120.21337456762083 121.30241947105671 118.76131469637299 118.39829972856104 118.03528476074908 116.9462398573132
59 118.98423170775713 119.00608999479411 119.35283004040464 119.69957008601519 120.73979022284678 118.31260990357305 117.96586985796252 117.61912981235197 116.57890967552038
60 119.32275870519 119.34716359875881 119.62092100222395 119.89467840568909 120.71595061608453 118.79964879182853 118.52589138836339 118.25213398489825 117.43086177450282
61 120.48694857241185 120.6291587967551 120.88414209142206 121.13912538608902 121.9040752700899 120.1191922074212 119.86420891275424 119.60922561808728 118.8442757340864
62 122.4387103823207 122.77161505708187 123.0531025818805 123.33459010667913 124.179052681075 122.2086400074846 121.92715248268598 121.64566495788735 120.80120238349147
63 125.07389544503057 125.6039558312047 125.93099755867671 126.25803928614873 127.23916446856478 124.94987237626066 124.62283064878865 124.29578892131663 123.31466373890058
64 128.2253492633656 128.84785962930889 129.16545587598398 129.4830521226591 130.43584086268444 128.21266713595864 127.89507088928353 127.57747464260842 126.62468590258308
65 131.67207090888238 132.2896676353533 132.57510839263853 132.86054914992377 133.71687142177942 131.71878612078288 131.43334536349766 131.14790460621242 130.29158233435678
66 135.15507483469676 135.7598309638397 136.08651263948047 136.41319431512125 137.3932393420436 135.10646761255816 134.7797859369174 134.45310426127662 133.47305923435428
67 138.3994880837803 138.8731449458564 139.1908911945168 139.5086374431772 140.46187618915837 138.2376524485356 137.91990619987521 137.60215995121482 136.64892120523365
68 141.1411629574787 141.39443335426606 141.6521293334611 141.9098253126561 142.68291325024117 140.87904139587604 140.621345416681 140.363649437486 139.59056149990093
69 143.154923777789 143.23994258729024 143.48863963810155 143.73733668891285 144.48342784134675 142.74254848566764 142.49385143485634 142.24515438404504 141.49906323161113
70 144.28078575968826 144.3010611099437 144.60419321846072 144.9073253269777 145.81672165252874 143.69479689290972 143.3916647843927 143.0885326758757 142.17913635032468
71 144.44430932083742 144.4709947348903 144.83046222475943 145.18992971462856 146.26833218423596 143.75205975515203 143.3925922652829 143.03312477541377 141.95472230580637
72 143.66778712039107 143.72015549733024 144.0737546092999 144.42735372126958 145.4881510571786 143.01295727339087 142.6593581614212 142.30575904945152 141.2449617135425
73 142.07015356602253 142.16055651565432 142.44688706980628 142.7332176239582 143.59220928641403 141.58789540735046 141.3015648531985 141.01523429904657 140.15624263659075
74 139.85515947975856 140.01986187563278 140.22721883471613 140.4345757937995 141.05664667104958 139.60514795746604 139.3977909983827 139.19043403929933 138.56836316204925
75 137.28916235919314 137.69477198042676 137.97931979885507 138.26386761728335 139.11751107256825 137.1256763435702 136.8411285251419 136.55658070671362 135.70293725142872
76 134.6714977766173 135.27173843175984 135.6168410695873 135.96194370741475 136.9972516208971 134.58153315610497 134.2364305182775 133.89132788045006 132.85601996696772
77 132.3015073284582 132.97365009660936 133.31904531782385 133.6644405390383 134.70062620268175 132.28285965418044 131.93746443296595 131.5920692117515 130.55588354810806
78 130.44669455820846 131.05478070846547 131.34450897737338 131.6342372462813 132.503422053005 130.47532417064966 130.18559590174175 129.89586763283384 129.02668282611012
79 129.31610321851522 129.83864309660322 130.12915987140326 130.41967664620327 131.2912269706034 129.25760954700314 128.9670927722031 128.6765759974031 127.80502567300299
80 129.04196344134022 129.4238197929536 129.7167951671137 130.00977054127378 130.88869666375405 128.83786904463344 128.54489367047333 128.25191829631325 127.37299217383298
81 129.6711671025228 129.8863359319469 130.17752707286533 130.4687182137838 131.3422916365392 129.30395365010995 129.0127625091915 128.72157136827303 127.84799794551763