pxfm/bessel/
y1f_coeffs.rs

1/*
2 * // Copyright (c) Radzivon Bartoshyk 7/2025. All rights reserved.
3 * //
4 * // Redistribution and use in source and binary forms, with or without modification,
5 * // are permitted provided that the following conditions are met:
6 * //
7 * // 1.  Redistributions of source code must retain the above copyright notice, this
8 * // list of conditions and the following disclaimer.
9 * //
10 * // 2.  Redistributions in binary form must reproduce the above copyright notice,
11 * // this list of conditions and the following disclaimer in the documentation
12 * // and/or other materials provided with the distribution.
13 * //
14 * // 3.  Neither the name of the copyright holder nor the names of its
15 * // contributors may be used to endorse or promote products derived from
16 * // this software without specific prior written permission.
17 * //
18 * // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 * // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 * // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 * // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 * // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/**
31Y1 zeros and extremum on [0, 52] interval
32Generated by SageMath:
33```python
34R120 = RealField(120)
35
36zeros = []
37
38mp.prec = 150
39
40step = mpf("0.1")
41epsilon = mpf("1e-35")
42x = mpf("1.25")
43
44previous_zero = R120(0)
45y1_zeros = []
46
47while x < mpf("52.0"):
48    f1 = bessely(1, x)
49    f2 = bessely(1, x + step)
50    if f1 * f2 < 0:
51        zero = findroot(lambda t: bessely(1, t), (x, x + step), solver='secant', tol=mp.mpf("1e-41"))
52        previous_zero = zero
53        y1_zeros.append(zero)
54    if previous_zero is not None and abs(x - mpf(f'{round(x)}')) < epsilon:
55        zeros.append(previous_zero)
56    x += step
57
58y1_extrema = []
59
60x = mpf("1.25")
61while x < mpf("52.0"):
62    d1 = mp.diff(lambda t: bessely(1, t), x)
63    d2 = mp.diff(lambda t: bessely(1, t), x + step)
64    if d1 * d2 < 0:
65        extremum = findroot(lambda t: mp.diff(lambda u: bessely(1, u), t), (x, x + step), solver='secant', tol=mp.mpf("1e-41"))
66        y1_extrema.append(extremum)
67    x += step
68
69y1_zeros.extend(y1_extrema)
70
71y1_zeros = sorted(y1_zeros)
72
73print(f"pub(crate) static Y1_ZEROS: [(u64, u64); {len(y1_zeros)}] = [")
74print(f"(0x0, 0x0),")
75for z in y1_zeros:
76    k = split_double_double(z)
77    hi = double_to_hex(k[1])
78    lo = double_to_hex(k[0])
79    print(f"({lo}, {hi}),")
80
81print("];")
82```
83**/
84pub(crate) static Y1_ZEROS: [(u64, u64); 33] = [
85    (0x0, 0x0), // not really used, just a stab to avoid indices messing
86    (0xbc8bd1e50d219bfd, 0x400193bed4dff243),
87    (0x3c53bac0714e4129, 0x400d76d4affba175),
88    (0x3cbdfe7bac228e8c, 0x4015b7fe4e87b02e),
89    (0x3ca7960b6b1c46ac, 0x401bc41890588553),
90    (0x3cb479cc068d9046, 0x40213127ae6169b4),
91    (0x3cc8f4ba5d68e440, 0x40243f2ee51e8c7e),
92    (0x3c80fc786ce06080, 0x40277f9138d43206),
93    (0xbcaf6ef7a3571593, 0x402a924ee4a3e52c),
94    (0xbcc5e091a50f8e05, 0x402dcb7d88de848b),
95    (0x3cc07320221cd5e5, 0x403070a7a43daae6),
96    (0xbcda1ee4c5487ede, 0x40320b1c695f1e3b),
97    (0xbcd2903124fef7e3, 0x4033971a15717510),
98    (0x3cd391b14410528f, 0x40353025492188cd),
99    (0xbcc15ec09721b746, 0x4036bcefd7de87a3),
100    (0x3cb52f75f025b205, 0x403854fa303820ca),
101    (0x3cb6f57f7696f493, 0x4039e262715f12a9),
102    (0xbcbcf130fbea3b24, 0x403b79acee8cfb7d),
103    (0xbc912142b10a5c65, 0x403d079247e8f51b),
104    (0xbc9e7a77047d6166, 0x403e9e480605283c),
105    (0x3cb1452eb07cd937, 0x40401649819af8fa),
106    (0xbce96beabef7ecf4, 0x4040e16907f8fb56),
107    (0x3cec6086fb5dd335, 0x4041a8b8a142d536),
108    (0x3cd2481e87adfe57, 0x404273a7b35a7aff),
109    (0x3cd7df5b6f701c7a, 0x40433b1ac0375e31),
110    (0x3cda8ffacaac8461, 0x404405e18393afb5),
111    (0xbce5b5acaff0a867, 0x4044cd72d2adfb0c),
112    (0x3cbfe463face2c1c, 0x4045981787d668db),
113    (0xbcefcba6ea61df1b, 0x40465fc2f7ca5b81),
114    (0xbce26390f25f01cb, 0x40472a4a85cc317e),
115    (0xbcbba46ca6ef9b6f, 0x4047f20cbfc32967),
116    (0xbcdcc667e557a177, 0x4048bc7b10ed3960),
117    (0x3cea473d4f209faf, 0x4049845158040451),
118];
119
120/**
121Value at zero or extremum of Y1 belongs to [Y1_ZEROS]
122Generated by MPFR:
123```text
124let mut arr = vec![];
125for zeros in Y1_ZEROS.iter() {
126    if zeros.1 == 0 {
127        arr.push(0);
128    } else {
129        let mpfr = Float::with_val(107, f64::from_bits(zeros.1)).y1();
130        arr.push(mpfr.to_f64().to_bits());
131    }
132}
133println!(
134    "arr: [{}]",
135    arr.iter()
136        .map(|x| format!("0x{:016x}", x))
137        .collect::<Vec<_>>()
138        .join(", ")
139);
140```
141**/
142pub(crate) static Y1_ZEROS_VALUES: [u64; 33] = [
143    0x0000000000000000,
144    0x3c7cf9f8d5e1a475,
145    0x3fdaabb4011ed330,
146    0x3ca46a40b234169c,
147    0xbfd36732d4b96094,
148    0xbc963bc010b45f46,
149    0x3fd00ef3745e0e3c,
150    0x3c5f96d32c02f147,
151    0xbfcc075da85beb4f,
152    0x3ca213201464272b,
153    0x3fc931a5a0ae5aa0,
154    0xbcb39d4c41d5839f,
155    0xbfc713fc51664c74,
156    0xbcab20138dd047ec,
157    0x3fc56b97f8091ac5,
158    0x3c8b67dbfd3bd179,
159    0xbfc413644356a52b,
160    0x3c919e290514c619,
161    0x3fc2f4e70d6c7e01,
162    0xbc719366994a86bc,
163    0xbfc20198200b699d,
164    0x3cbbec2345ac18e2,
165    0x3fc12f9870d68e18,
166    0x3ca334eb74fdcfd1,
167    0xbfc077eede4a0d89,
168    0xbcaaca291aee3c35,
169    0x3fbfab0b166d23d8,
170    0x3c8ef92aa9c8e53c,
171    0xbfbe891b327da16d,
172    0x3cb13e3c695ea088,
173    0x3fbd84391bb2748d,
174    0xbcaa1c861fdd1438,
175    0xbfbc97d79918527d,
176];
177
178/**
179Series expansion at point for Y1
180
181Generated by SageMath and Sollya:
182```python
183def compute_intervals(zeros):
184    intervals = []
185    for i in range(0, len(zeros)):
186        if i == 0:
187            a = 2 - zeros[i]
188            b = (zeros[i] + zeros[i + 1]) / 2 + 0.05 - zeros[i]
189            intervals.append((RealField(18)(a), RealField(18)(b), RealField(110)(zeros[i])))
190        elif i + 1 > len(zeros) - 1:
191            a = (zeros[i - 1] + zeros[i]) / 2 - 0.05 - zeros[i]
192            b = (zeros[i]) + 0.83 + 0.05 - zeros[i]
193            intervals.append((RealField(18)(a), RealField(18)(b), RealField(110)(zeros[i])))
194        else:
195            a = (zeros[i - 1] + zeros[i]) / 2 - zeros[i] - 0.05
196            b = (zeros[i] + zeros[i + 1]) / 2 + 0.05  - zeros[i]
197            intervals.append((RealField(18)(a), RealField(18)(b), RealField(110)(zeros[i])))
198    return intervals
199
200intervals = compute_intervals(y1_zeros)
201
202def build_sollya_script(a, b, zero, deg):
203    return f"""
204prec = 250;
205bessel_y1 = library("./notes/bessel_sollya/cmake-build-release/libbessel_sollya.dylib");
206f = bessel_y1(x + {zero});
207d = [{a}, {b}];
208pf = remez(f, {deg}, d);
209for i from 0 to degree(pf) do {{
210    write(coeff(pf, i)) >> "coefficients.txt";
211    write("\\n") >> "coefficients.txt";
212}};
213"""
214
215def load_coefficients(filename):
216    with open(filename, "r") as f:
217        return [RR(line.strip()) for line in f if line.strip()]
218
219def call_sollya_on_interval(a, b, zero, degree=12):
220    sollya_script = build_sollya_script(a, b, zero, degree)
221    with open("tmp_interval.sollya", "w") as f:
222        f.write(sollya_script)
223    import subprocess
224    if os.path.exists("coefficients.txt"):
225        os.remove("coefficients.txt")
226    try:
227        result = subprocess.run(
228            ["sollya", "tmp_interval.sollya"],
229            check=True,
230            capture_output=True,
231            text=True
232        )
233    except subprocess.CalledProcessError as e:
234        return
235
236degree = 18
237
238print(f"pub(crate) static Y1F_COEFFS: [[u64;{degree + 1}]; {len(intervals)}] = [")
239for i in range(0, len(intervals)):
240    interval = intervals[i]
241    call_sollya_on_interval(interval[0], interval[1], interval[2], degree)
242    coeffs = load_coefficients(f"coefficients.txt")
243    print("[")
244    for c in coeffs:
245        print(double_to_hex(c) + ",")
246    print("],")
247print("];")
248```
249**/
250pub(crate) static Y1F_COEFFS: [[u64; 19]; 32] = [
251    [
252        0x3bdca2ee18606a4b,
253        0x3fe0aa48442f014b,
254        0xbfbe56f82217b8f4,
255        0xbfa0d2af4e932400,
256        0xbf73a6dec3726cd5,
257        0x3f7e671c7d12ea48,
258        0xbf65429dc5c0e9d4,
259        0x3f517ab4af4655e4,
260        0xbf40b2d8647a250d,
261        0x3f2eea7b1b675766,
262        0xbf1c3fb728e7d2ff,
263        0x3f09d1da72e12f44,
264        0xbef7964bf8511e22,
265        0x3ee57c2a83e1f972,
266        0xbed33f4211a00375,
267        0x3ec02bcdac2103fd,
268        0xbea6fefcf033ab9d,
269        0x3e874128ed97d3bb,
270        0xbe57d5b1eac16658,
271    ],
272    [
273        0x3fdaabb4011ed330,
274        0x3c54da7c52fcf446,
275        0xbfc8b45babe797b6,
276        0x3f8e147099a6f00d,
277        0x3f88c5af1eeb2143,
278        0xbf4133fa47d8ea48,
279        0xbf3bf8af93e7a2f0,
280        0x3f021d64bd4e2cd8,
281        0x3eb44d2c32fdaf23,
282        0x3eb14c3b9e7960c1,
283        0xbe9b8ee25c629be6,
284        0x3e7a85b5b497dc6c,
285        0xbe5bfa422fb8d949,
286        0x3e3f0ad81d293f5a,
287        0xbe20e6844c6faba7,
288        0x3e0214b2d826d072,
289        0xbde4ff658967d425,
290        0x3dcb549cdc774a83,
291        0xbda6b5df4d9c1682,
292    ],
293    [
294        0x3b7ff35240713789,
295        0xbfd5c7c556f0c19a,
296        0x3fa00b9f8571ca1f,
297        0x3faa15d92dfe3e27,
298        0xbf710a329e2c23f5,
299        0xbf61be6db9923ac9,
300        0x3f2337c7e138eb84,
301        0x3f085b940eb5f37f,
302        0xbec80619146a1e65,
303        0xbea255e6cf4b3254,
304        0x3e5b62ccdc392c5a,
305        0x3e380b1a5a61e6b5,
306        0xbdfa7ec7fd0d2925,
307        0x3d840d04ff01d1b2,
308        0xbd938dc1b2e33eca,
309        0x3d74839c586126ca,
310        0xbd4b045bc7ad769b,
311        0x3d261d10a8575c45,
312        0xbd052a6cc14bcc54,
313    ],
314    [
315        0xbfd36732d4b96094,
316        0x3b3886a5ed6fd628,
317        0x3fc3001c8002caf8,
318        0xbf7bf5a03bab4999,
319        0xbf8751ea028c1953,
320        0x3f423874cd8d0402,
321        0x3f364f6610d6493b,
322        0xbef02978de38394f,
323        0xbed72f0766d0d9c7,
324        0x3e8f2081874e556c,
325        0x3e6defd5dce91973,
326        0xbe2205c70046a2c7,
327        0xbdfb6432eb3ab7ea,
328        0x3db028a1c0572973,
329        0x3d807791dcab03a0,
330        0xbd29778204deee13,
331        0xbd08342db2e7148e,
332        0x3cc898efb37f9dad,
333        0xbc84e2adc305e2ab,
334    ],
335    [
336        0xbac1435819592d4c,
337        0x3fd15f993fceab5c,
338        0xbf902b3933cf21b1,
339        0xbfa6395dfe49fcd4,
340        0x3f63ced2a2e69180,
341        0x3f607a678d6000bb,
342        0xbf1b50d7e1d3201e,
343        0xbf06f7bab104f34b,
344        0x3ec176e72bf94a3a,
345        0x3ea2becb2b6bacd1,
346        0xbe5a384eebfb23c2,
347        0xbe341e7a921f7f66,
348        0x3de9e3284b918a26,
349        0x3dbec40b21f2c78f,
350        0xbd726865da6190a9,
351        0xbd416f4fe7eed351,
352        0x3cf3160bd2bd6c64,
353        0x3cbf6d61c945b95c,
354        0xbc706809636e0aec,
355    ],
356    [
357        0x3fd00ef3745e0e3c,
358        0x3aff192f298c81c3,
359        0xbfbfcdacdda138f2,
360        0x3f706cc34cd829fa,
361        0x3f84641bb10c16cb,
362        0xbf37fac943e2a16d,
363        0xbf34769ed32e14a2,
364        0x3ee80608ecda1508,
365        0x3ed5cc8242d77e23,
366        0xbe888c8f2538feb8,
367        0xbe6ce5908c1e5174,
368        0x3e1ed16257e17417,
369        0x3dfa30d623eda066,
370        0xbdaa5076123e3ecf,
371        0xbd814cd297d2be7e,
372        0x3d306166947e23e9,
373        0x3d01635f73179569,
374        0xbcaeafcf4c2f127b,
375        0xbc7b0828175d92fa,
376    ],
377    [
378        0x3aba1488e1b7782d,
379        0xbfcdc14ea14e89f9,
380        0x3f84429fef5b5fbd,
381        0x3fa367d7d608e4ba,
382        0xbf59d6eb2bc49e35,
383        0xbf5dc4f991b3db86,
384        0x3f1315ec04d6e6bb,
385        0x3f0571814a1aa2f5,
386        0xbeba2977fa42f00f,
387        0xbea1e864230850b8,
388        0x3e54a7b82d3fa1e5,
389        0x3e33906609f9fe4c,
390        0xbde549e8b0e16969,
391        0xbdbe32cf2ce99d6f,
392        0x3d6eff542dd345c3,
393        0x3d415e2a9c2f4933,
394        0xbcf0d48dde3c3ffe,
395        0xbcbeac3c36b4bce2,
396        0x3c6af1612c5ddab0,
397    ],
398    [
399        0xbfcc075da85beb4f,
400        0xbafcfa84f4024782,
401        0x3fbbdeb6ff9f55e1,
402        0xbf661eefb74da882,
403        0xbf8229ea914b846e,
404        0x3f30cbcc6778fd37,
405        0x3f32aa59f5091f7b,
406        0xbee1c15d5251ae54,
407        0xbed4583f15abd654,
408        0x3e831d151a12624a,
409        0x3e6b74e57c21e022,
410        0xbe19044f1339b061,
411        0xbdf93b1ec70c7bbc,
412        0x3da61a4e437e8105,
413        0x3d80d4305f038451,
414        0xbd2c3aad6f3b35c7,
415        0xbd010dec3a02c58c,
416        0x3cab15901b6d0925,
417        0x3c7ab2531f00c501,
418    ],
419    [
420        0xbab392a85abdc950,
421        0x3fca7022be084d99,
422        0xbf7c650b6b83109a,
423        0xbfa163191c30aa62,
424        0x3f526b045287ddca,
425        0x3f5b17602840abf5,
426        0xbf0c0a9cee3c8429,
427        0xbf03e398cbc472de,
428        0x3eb3f35db1ff19f5,
429        0x3ea0e9b612dbc0ea,
430        0xbe5056babcd79a11,
431        0xbe32c1a8c8d768b1,
432        0x3de161b6a84838d0,
433        0x3dbd4ca9d2d67d78,
434        0xbd69fdd67a999eab,
435        0xbd4101919ce84a07,
436        0x3cecd91fa7851496,
437        0x3cbe3f8588ebbfdf,
438        0xbc67a4499c96e38d,
439    ],
440    [
441        0x3fc931a5a0ae5aa0,
442        0x3afa23fd08be9891,
443        0xbfb919c8a3f203fa,
444        0x3f602a38da6262a9,
445        0x3f807ced48910819,
446        0xbf2900f33a00690a,
447        0xbf31278d46fd153c,
448        0x3edb2595529cf19f,
449        0x3ed2f7c2d608e0bb,
450        0xbe7e212d23787793,
451        0xbe69f3fcf3631e9c,
452        0x3e144fbf033f1974,
453        0x3df82268e7ab0cdb,
454        0xbda26cc2714815d4,
455        0xbd80418b35c32375,
456        0x3d28122e50410f0a,
457        0x3d009aba27e11464,
458        0xbca78943175d4e84,
459        0xbc7a379f959c0224,
460    ],
461    [
462        0x3aaf25ce7e30cbc6,
463        0xbfc80781c32422e7,
464        0x3f754eda697a0098,
465        0x3f9fbe6df840847f,
466        0xbf4be318d61276e1,
467        0xbf58efee4094379c,
468        0x3f059145b4f0e4dd,
469        0x3f0282d26a74c382,
470        0xbeaf56c29d9ad6c8,
471        0xbe9fdd03174f6b47,
472        0x3e4a44a7907d0ec6,
473        0x3e31df6533090779,
474        0xbddc96e9cb6ee22b,
475        0xbdbc3439a99213c4,
476        0x3d65d387fc8083e0,
477        0x3d40830db4ec8a6e,
478        0xbce8ad426f9ce3f5,
479        0xbcbd93c0cf35d116,
480        0x3c649b19a5449ffa,
481    ],
482    [
483        0xbfc713fc51664c74,
484        0xbaf73aab14face16,
485        0x3fb7049760cde490,
486        0xbf58ef5f1cbe4874,
487        0xbf7e5f53caf3bead,
488        0x3f237b0b62ddadd1,
489        0x3f2fd3bac08286da,
490        0xbed5789803de3adb,
491        0xbed1c0faa8999393,
492        0x3e7845b49b063dc7,
493        0x3e6886872800e226,
494        0xbe10b03677687883,
495        0xbdf7049d17bd230b,
496        0x3d9edd9ca057f252,
497        0x3d7f445f42a168e6,
498        0xbd24866878075342,
499        0xbd0015a37275b46d,
500        0x3ca463bd3d4059be,
501        0x3c79974848138496,
502    ],
503    [
504        0xbaa9a62f9227c851,
505        0x3fc62d94d97e859c,
506        0xbf70bf614807033c,
507        0xbf9d5f857a2a6107,
508        0x3f46081b0b7fe572,
509        0x3f57307b03e248f8,
510        0xbf0132c0aa83d0db,
511        0xbf0154ed4598d2e4,
512        0x3ea94f64f476e3f5,
513        0x3e9e1272585385c0,
514        0xbe4588c758dd66db,
515        0xbe31021cdd7a4f3a,
516        0x3dd7cfa7a39f5d48,
517        0x3dbb0e00d41ec645,
518        0xbd6276c9a451cdb1,
519        0xbd3fe8cf17671ae1,
520        0x3ce52f1a6f7ae06f,
521        0x3cbcc2eb893d62ce,
522        0xbc61f4c0af8bd0fb,
523    ],
524    [
525        0x3fc56b97f8091ac5,
526        0x3af48a947d2475cd,
527        0xbfb560fcc8c08469,
528        0x3f53fafa39618883,
529        0x3f7c49141623372f,
530        0xbf1f69980694fd17,
531        0xbf2dc5f848aa9d33,
532        0x3ed178fc979b779d,
533        0x3ed0b494a4bafca8,
534        0xbe73fc3884c243a5,
535        0xbe673afb9fb48ff7,
536        0x3e0bd903464b077a,
537        0x3df5f3bafabcdabe,
538        0xbd9a1c27612b5f03,
539        0xbd7e04553366c10e,
540        0x3d219970f1564c7c,
541        0x3cff128fbd867c78,
542        0xbca1b4d2be53f3ad,
543        0xbc78e13fb654b036,
544    ],
545    [
546        0x3aa5951bb8e2b477,
547        0xbfc4b2a38f1ab9b4,
548        0x3f6b3878aadeb34d,
549        0x3f9b750d89a9b35f,
550        0xbf41f6911725a956,
551        0xbf55beee6fd51c8a,
552        0x3efc3625d7a65087,
553        0x3f005375a588a71f,
554        0xbea4ee5e4e7cafc0,
555        0xbe9c7b3d81b5dc31,
556        0x3e41fce14f464e1e,
557        0x3e30346643a98dcb,
558        0xbdd41c86191a49ce,
559        0xbdb9eed9da04017a,
560        0x3d5f8cee5e5b42b4,
561        0x3d3ec41075d33352,
562        0xbce24e44459e28b0,
563        0xbcbbe16f7d769c15,
564        0x3c5f670ad9138f1f,
565    ],
566    [
567        0xbfc413644356a52b,
568        0xbaf22d9ab9060f8f,
569        0x3fb40bb88c6f2b85,
570        0xbf5078d13cfc400e,
571        0xbf7a9191262ab9d5,
572        0x3f1a005297618f35,
573        0x3f2c0cbad847a60e,
574        0xbecd1a72e7c35fa0,
575        0xbecf9a2654099c0b,
576        0x3e70c6b06e20d1c0,
577        0x3e66136d6425acf0,
578        0xbe0797767778226d,
579        0xbdf4f77b30ed58c3,
580        0x3d96572059bf2445,
581        0x3d7cd12649b82d6f,
582        0xbd1e6ce514a88f2d,
583        0xbcfdfabaf5c37514,
584        0x3c9eea8202989176,
585        0x3c782260f7596e02,
586    ],
587    [
588        0xbaa27e57c2b07d4b,
589        0x3fc37aaceac987b9,
590        0xbf66afe4fe0bc0f7,
591        0xbf99de7a33bc3a97,
592        0x3f3e024f567ac487,
593        0x3f548843c426abe0,
594        0xbef7a8e14711c0f4,
595        0xbefeeceb341ad81c,
596        0x3ea1a743e05b383f,
597        0x3e9b143d39c8eb5f,
598        0xbe3e8e00011fabc3,
599        0xbe2ef28e31ff924c,
600        0x3dd137a1bd136742,
601        0x3db8e0878264a773,
602        0xbd5b3dc655a5a5f4,
603        0xbd3da652e8239897,
604        0x3cdfe34eace42448,
605        0x3cbafd0cc7251807,
606        0xbc5b9b0102453020,
607    ],
608    [
609        0x3fc2f4e70d6c7e01,
610        0x3af022defda0ec45,
611        0xbfb2ef24d6f7526a,
612        0x3f4bc33c9dc6ec82,
613        0x3f7920414ee2acbe,
614        0xbf15f9173916a219,
615        0xbf2a94fdbdcec471,
616        0x3ec8b309990f94db,
617        0x3ece087ff4517bd5,
618        0xbe6ca22ab12c685c,
619        0xbe650d1f28632753,
620        0x3e044415529c950b,
621        0x3df411b8a7d9d1bc,
622        0xbd9354e8c7a8bfd7,
623        0xbd7bb16e8ee8c711,
624        0x3d1a881fddcb8d86,
625        0x3cfcecee70233b69,
626        0xbc9b2b6cccd3802a,
627        0xbc77637662fa6ba8,
628    ],
629    [
630        0x3aa00f5dbb23e90b,
631        0xbfc2740819f1caaa,
632        0x3f6349369dc780bb,
633        0x3f98868d7401bf2e,
634        0xbf398cd1bebe1445,
635        0xbf537eef9aadeee2,
636        0x3ef43394c95b2d29,
637        0x3efd6dfcdb026013,
638        0xbe9e448fbc8a1c95,
639        0xbe99d764ee07a6b7,
640        0x3e3a53958c8a71d8,
641        0x3e2da0e1c86368ce,
642        0xbdcdd7f914e496e5,
643        0xbdb7e67ff45daf48,
644        0x3d57c2e32861f41c,
645        0x3d3c96e18ab6db69,
646        0xbcdc0099b11f0478,
647        0xbcba1dfeafeb6e19,
648        0x3c586b4c940f74bc,
649    ],
650    [
651        0xbfc20198200b699d,
652        0xbaecc875d54af9d0,
653        0x3fb1fd242a74e630,
654        0xbf47cf261dfbf19a,
655        0xbf77e4820ec1dde4,
656        0x3f12e1bd281dfcba,
657        0x3f2950bb06c6fdf9,
658        0xbec54a38ab6af51a,
659        0xbecca94f38024fb4,
660        0x3e68c7e75971843f,
661        0x3e6423fc7e24ed40,
662        0xbe019fe1d8a6e0d8,
663        0xbdf34198c7517f5a,
664        0x3d90e78c95f157aa,
665        0x3d7aa74c4042e051,
666        0xbd1756942b9afcaf,
667        0xbcfbedc3e7dae4e4,
668        0x3c980b9567289463,
669        0x3c76a9e024cc6a52,
670    ],
671    [
672        0xba9c33661811b8ff,
673        0x3fc192f2627a74e3,
674        0xbf60a846a83fecf2,
675        0xbf975eceaabf7f86,
676        0x3f3617c581be35b1,
677        0x3f529934b7a84483,
678        0xbef18123e8751889,
679        0xbefc1f05a2d85150,
680        0x3e9a4e0bc09262e9,
681        0x3e98be81ad44b8a4,
682        0xbe36f73795dfb5c7,
683        0xbe2c70ab155167d1,
684        0x3dca26218cc79400,
685        0x3db7011269271056,
686        0xbd54ec138a5f86cd,
687        0xbd3b98bf6fa2fe47,
688        0x3cd8c95d73f0c84c,
689        0x3cb948b2dd021429,
690        0xbc55bd7c63fa9765,
691    ],
692    [
693        0x3fc12f9870d68e18,
694        0x3ae9cd1ac1fa64f9,
695        0xbfb12c11811945f9,
696        0x3f44b638f21f0f76,
697        0x3f76d2a897d58353,
698        0xbf10732e5458ba20,
699        0xbf2835929300df3e,
700        0x3ec297283816a814,
701        0x3ecb73adedf11a1f,
702        0xbe65b455b903b389,
703        0xbe6353f0797a3bf1,
704        0x3dfefc9ac10b87d9,
705        0x3df2853545ffa79d,
706        0xbd8dd8945079a88f,
707        0xbd79b28860cd63f8,
708        0x3d14b29ba2797832,
709        0x3cfaff02f362ca7e,
710        0xbc956d8436ee55ed,
711        0xbc75f881bb0137f5,
712    ],
713    [
714        0x3a9900b85a085cfa,
715        0xbfc0cf3ee98f769b,
716        0x3f5d26e7af251f79,
717        0x3f965d05948a946a,
718        0xbf335959b8482e40,
719        0xbf51cff175d05c2a,
720        0x3eeeb59416879104,
721        0x3efaf7544eeac751,
722        0xbe9720522bb1fa69,
723        0xbe97c41261703475,
724        0x3e343fa0ea5ba663,
725        0x3e2b5e23abb21a5f,
726        0xbdc722397b59adb6,
727        0xbdb62f213532a0b8,
728        0x3d5294a89e377c98,
729        0x3d3aac95aead6ada,
730        0xbcd61abb584f3fc2,
731        0xbcb87f3345758fd5,
732        0x3c537a3b70fc94b7,
733    ],
734    [
735        0xbfc077eede4a0d89,
736        0xbae73fb2e67b1968,
737        0x3fb0751548b2924d,
738        0xbf423b5d46a73864,
739        0xbf75e2467c8fb832,
740        0x3f0cfe5c189d6e4d,
741        0x3f273bbd8c7aef2c,
742        0xbec06974d3d04263,
743        0xbeca6081d36e6a0b,
744        0x3e6334a83cf5d21d,
745        0x3e6299571cb4bb1e,
746        0xbdfb7f5bc046450f,
747        0xbdf1da63b49ed896,
748        0x3d8a92885fb339ae,
749        0x3d78d1d6e93bb23d,
750        0xbd127ea4434f9fb5,
751        0xbcfa20dab6b920e9,
752        0x3c93389d892643a0,
753        0x3c7550b88147fd02,
754    ],
755    [
756        0xba96582ab366c758,
757        0x3fc0230ba90f2871,
758        0xbf59ca16f0c9734e,
759        0xbf9579c1bdbcfc99,
760        0x3f3120ecfac5c017,
761        0x3f511dd26bbe2946,
762        0xbeeb37e7c9a57147,
763        0xbef9f01e7c19098c,
764        0x3e94887fe7a88a4d,
765        0x3e96e3723883fe87,
766        0xbe3204b644d485a1,
767        0xbe2a659b13b69c6b,
768        0x3dc4a40c8498625a,
769        0x3db56f0212f628e4,
770        0xbd50a0fef4ac5a44,
771        0xbd39d1d92cf50973,
772        0x3cd3d93917ae0666,
773        0x3cb7c222c421cbf8,
774        0xbc518e27cddeecfd,
775    ],
776    [
777        0x3fbfab0b166d23d8,
778        0x3ae50cd9856106aa,
779        0xbfafa65c1ce7ebd6,
780        0x3f4035bf503ffc1f,
781        0x3f750d1b04713c41,
782        0xbf09cd14a92842a1,
783        0xbf265d504af5d8fe,
784        0x3ebd3feeb33d9cae,
785        0x3ec96a257062f750,
786        0xbe61254f302b04d0,
787        0xbe61f11585e02bfc,
788        0x3df89a7674827723,
789        0x3df13f0ba458182e,
790        0xbd87d67ae3559fb7,
791        0xbd78038124810666,
792        0x3d10a3cffab7b16e,
793        0x3cf952a4679b4020,
794        0xbc9158ffabf6b26f,
795        0xbc74b2e8c7ca451f,
796    ],
797    [
798        0x3a9422b204fbf27f,
799        0xbfbf13fb0c0e6fcd,
800        0x3f5706ed3d935d00,
801        0x3f94af74cbd77bef,
802        0xbf2e9a9e66e5a792,
803        0xbf507ec9ed824fcb,
804        0x3ee856d4518ab29c,
805        0x3ef9040de830648a,
806        0xbe9262f69c56c4a2,
807        0xbe9618c94a54555e,
808        0x3e3029d2c8bd8b0e,
809        0x3e2983bca06d479e,
810        0xbdc28e29fd7e309a,
811        0xbdb4beea8ebaabe8,
812        0x3d4df87d00b82fa1,
813        0x3d39076f370434b4,
814        0xbcd1ef67bd03c16c,
815        0xbcb7115a994eb5d5,
816        0x3c4fd28ad1effa7c,
817    ],
818    [
819        0xbfbe891b327da16d,
820        0xbae325aba995f36e,
821        0x3fae8533ce07bdb8,
822        0xbf3d1253218e31b0,
823        0xbf744e6826476498,
824        0x3f07271a9b5e3cb4,
825        0x3f2595b697c8ec04,
826        0xbeba46b03ecb3892,
827        0xbec88c173e076203,
828        0x3e5ed9b1754f626a,
829        0x3e615891ef312cd4,
830        0xbdf62ca3527c988f,
831        0xbdf0b14767922479,
832        0x3d85879b58ff9d05,
833        0x3d7745bb7346aea9,
834        0xbd0e20fb122a7c2a,
835        0xbcf89354d05f7b8c,
836        0x3c8f7da941b1f5c8,
837        0x3c741ef462ba56a3,
838    ],
839    [
840        0xba923c4506ec812e,
841        0x3fbe018dac1c17e3,
842        0xbf54b994dd05c1fb,
843        0xbf93f9e0db07e7ef,
844        0x3f2b8e55b75b13ab,
845        0x3f4fdf68a78bb3d2,
846        0xbee5ee9d17106a07,
847        0xbef82ee6dfdfedd8,
848        0x3e90962d7f6d601e,
849        0x3e9560edce7d4b08,
850        0xbe2d34381cff4d39,
851        0xbe28b5a0e715b17d,
852        0x3dc0cab951aa6b0b,
853        0x3db41d218be1cc79,
854        0xbd4b2d2a51de7089,
855        0xbd384c06737cf8d9,
856        0x3cd04c96e113bd0a,
857        0x3cb66c4b3dc74284,
858        0xbc4cfe4908cedcb8,
859    ],
860    [
861        0x3fbd84391bb2748d,
862        0x3ae17f232c3596e7,
863        0xbfad80edb3c4ea05,
864        0x3f3a431f5421f7ef,
865        0x3f73a282fe7b63a8,
866        0xbf04ed653e607bdc,
867        0xbf24e15832bda3c4,
868        0x3eb7c5832dd13719,
869        0x3ec7c2b80da8df7e,
870        0xbe5bf160ccd30135,
871        0xbe60cda2141b0afb,
872        0x3df41d31d25837e8,
873        0x3df02f6ca822716e,
874        0xbd83901f0d351db4,
875        0xbd7696cdd91c27b7,
876        0x3d0b6e1487e46414,
877        0x3cf7e1bb61dba0fc,
878        0xbc8cbb194749390a,
879        0xbc7394699d841c82,
880    ],
881    [
882        0x3a909e71c2163ed3,
883        0xbfbd09b21e36c0bd,
884        0x3f52c84acfb586b4,
885        0x3f9355b904fbf7ee,
886        0xbf28fb570465af0d,
887        0xbf4edc3292ba6cfd,
888        0x3ee3e552ee8c2575,
889        0x3ef76d44f6a83510,
890        0xbe8e1ee2dc4a3910,
891        0xbe94b944bbd4ab57,
892        0x3e2a8c3a4ce04c1b,
893        0x3e27f8c9ef133245,
894        0xbdbe92957079603b,
895        0xbdb388138abed52f,
896        0x3d48c7ca6d80cb32,
897        0x3d379e45475751e8,
898        0xbccdc773f7abde68,
899        0xbcb5d2331c76adb9,
900        0x3c4a8aa5ca753696,
901    ],
902    [
903        0xbfbc97d79918527d,
904        0xbae4d780a21f2057,
905        0x3fac95081ab2b511,
906        0xbf37e0b14f7d7c3f,
907        0xbf730688f6836a76,
908        0x3f030941f6e78e36,
909        0x3f243d5898657a6f,
910        0xbeb5a39a94f2ad1c,
911        0xbec70b18406146b4,
912        0x3e597607f952cd69,
913        0x3e604e788f4f18d9,
914        0xbdf2598918fbb9ee,
915        0xbdef701541acccd2,
916        0x3d81df5bcb47b899,
917        0x3d75f524c73bc009,
918        0xbd0919aede2dcbf2,
919        0xbcf73c65c9ce91ed,
920        0x3c8a553df0f1b569,
921        0x3c72fe9f3f0dcae2,
922    ],
923];