Codebase list flint-arb / 3fe893a
New upstream version 2.21.0 Julien Puydt 2 years ago
113 changed file(s) with 14576 addition(s) and 3528 deletion(s). Raw diff Collapse all Expand all
1414 BUILD_DIRS = fmpr arf mag arb arb_mat arb_poly arb_calc acb acb_mat acb_poly \
1515 acb_dft acb_calc acb_hypgeom acb_elliptic acb_modular dirichlet acb_dirichlet \
1616 arb_hypgeom bernoulli hypgeom fmpz_extras bool_mat partitions dlog \
17 arb_fmpz_poly \
17 arb_fmpz_poly arb_fpwrap \
1818 $(EXTRA_BUILD_DIRS)
1919
2020 TEMPLATE_DIRS =
107107 void
108108 acb_barnes_g(acb_t res, const acb_t z, slong prec)
109109 {
110 int real;
111
112 real = acb_is_real(z);
113
110114 if (acb_is_int(z))
111115 {
112116 if (arb_is_nonpositive(acb_realref(z)))
125129
126130 _acb_log_barnes_g_zeta(res, z, prec);
127131 acb_exp(res, res, prec);
132
133 if (real)
134 arb_zero(acb_imagref(res));
128135 }
129136
1010
1111 #include "acb.h"
1212
13 void acb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
13 void acb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1414 const acb_t x, int use_reflect, int digamma, slong prec);
1515
1616 void acb_gamma_stirling_eval(acb_t s, const acb_t z, slong nterms, int digamma, slong prec);
3131
3232 wp = prec + FLINT_BIT_COUNT(prec);
3333
34 acb_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 1, wp);
34 acb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 1, wp);
3535
3636 acb_init(t);
3737 acb_init(u);
1010
1111 #include "bernoulli.h"
1212 #include "acb.h"
13 #include "acb_hypgeom.h"
1314
1415 void
1516 acb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1819 void acb_gamma_stirling_bound(mag_ptr err, const acb_t z, slong k0, slong knum, slong n);
1920
2021 void arb_gamma_stirling_coeff(arb_t b, ulong k, int digamma, slong prec);
22
2123
2224 void
2325 acb_gamma_stirling_eval(acb_t s, const acb_t z, slong nterms, int digamma, slong prec)
109111 arb_clear(b);
110112 }
111113
112 static void
113 _acb_gamma(acb_t y, const acb_t x, slong prec, int inverse)
114 {
115 int reflect;
116 slong r, n, wp;
117 acb_t t, u, v;
118 double acc;
119
120 wp = prec + FLINT_BIT_COUNT(prec);
121
122 /* todo: for large x (if exact or accurate enough), increase precision */
123 acc = acb_rel_accuracy_bits(x);
124 acc = FLINT_MAX(acc, 0);
125 wp = FLINT_MIN(prec, acc + 20);
126 wp = FLINT_MAX(wp, 2);
127 wp = wp + FLINT_BIT_COUNT(wp);
128
129 if (acc < 3) /* try to avoid divisions blowing up */
130 {
131 if (arf_cmp_d(arb_midref(acb_realref(x)), -0.5) < 0)
132 {
133 reflect = 1;
134 r = 0;
135 }
136 else if (arf_cmp_si(arb_midref(acb_realref(x)), 1) < 0)
137 {
138 reflect = 0;
139 r = 1;
140 }
141 else
142 {
143 reflect = 0;
144 r = 0;
145 }
146
147 n = 1;
148 }
149 else
150 {
151 acb_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 0, wp);
152 }
153
154 acb_init(t);
155 acb_init(u);
156 acb_init(v);
157
158 if (reflect)
159 {
160 acb_sub_ui(t, x, 1, wp);
161 acb_neg(t, t);
162 acb_rising_ui_rec(u, t, r, wp);
163 arb_const_pi(acb_realref(v), wp);
164 acb_mul_arb(u, u, acb_realref(v), wp);
165 acb_add_ui(t, t, r, wp);
166 acb_gamma_stirling_eval(v, t, n, 0, wp);
167
168 if (inverse)
169 {
170 /* rgamma(x) = gamma(1-x+r) sin(pi x) / ((rf(1-x, r) * pi) */
171 acb_exp(v, v, wp);
172 acb_sin_pi(t, x, wp);
173 acb_mul(v, v, t, wp);
174 acb_mul(y, u, v, wp);
175 acb_div(y, v, u, prec);
176 }
177 else
178 {
179 /* gamma(x) = (rf(1-x, r) * pi) rgamma(1-x+r) csc(pi x) */
180 acb_neg(v, v);
181 acb_exp(v, v, wp);
182 acb_csc_pi(t, x, wp);
183 acb_mul(v, v, t, wp);
184 acb_mul(y, v, u, prec);
185 }
186 }
187 else
188 {
189 acb_add_ui(t, x, r, wp);
190 acb_gamma_stirling_eval(u, t, n, 0, wp);
191
192 if (inverse)
193 {
194 /* rgamma(x) = rf(x,r) rgamma(x+r) */
195 acb_neg(u, u);
196 acb_exp(u, u, prec);
197 acb_rising_ui_rec(v, x, r, wp);
198 acb_mul(y, v, u, prec);
199 }
200 else
201 {
202 /* gamma(x) = gamma(x+r) / rf(x,r) */
203 acb_exp(u, u, prec);
204 acb_rising_ui_rec(v, x, r, wp);
205 acb_div(y, u, v, prec);
206 }
207 }
208
209 acb_clear(t);
210 acb_clear(u);
211 acb_clear(v);
212 }
213
214114 void
215115 acb_gamma(acb_t y, const acb_t x, slong prec)
216116 {
217 if (acb_is_real(x))
218 {
219 arb_gamma(acb_realref(y), acb_realref(x), prec);
220 arb_zero(acb_imagref(y));
221 return;
222 }
223
224 _acb_gamma(y, x, prec, 0);
117 acb_hypgeom_gamma(y, x, prec);
225118 }
226119
227120 void
228121 acb_rgamma(acb_t y, const acb_t x, slong prec)
229122 {
230 if (acb_is_real(x))
231 {
232 arb_rgamma(acb_realref(y), acb_realref(x), prec);
233 arb_zero(acb_imagref(y));
234 return;
235 }
236
237 _acb_gamma(y, x, prec, 1);
238 }
239
240 /* corrects branch cut of sum_{k=0}^{r-1} log(z+k), given the
241 logarithm of the product */
242 void
243 _acb_log_rising_correct_branch(acb_t t,
244 const acb_t t_wrong, const acb_t z, ulong r, slong prec)
245 {
246 acb_t f;
247 arb_t pi, u, v;
248 fmpz_t pi_mult;
249 slong i, argprec;
250
251 acb_init(f);
252
253 arb_init(u);
254 arb_init(pi);
255 arb_init(v);
256
257 fmpz_init(pi_mult);
258
259 argprec = FLINT_MIN(prec, 40);
260
261 arb_zero(u);
262 for (i = 0; i < r; i++)
263 {
264 acb_add_ui(f, z, i, argprec);
265 acb_arg(v, f, argprec);
266 arb_add(u, u, v, argprec);
267 }
268
269 if (argprec == prec)
270 {
271 arb_set(acb_imagref(t), u);
272 }
273 else
274 {
275 arb_sub(v, u, acb_imagref(t), argprec);
276 arb_const_pi(pi, argprec);
277 arb_div(v, v, pi, argprec);
278
279 if (arb_get_unique_fmpz(pi_mult, v))
280 {
281 arb_const_pi(v, prec);
282 arb_mul_fmpz(v, v, pi_mult, prec);
283 arb_add(acb_imagref(t), acb_imagref(t), v, prec);
284 }
285 else
286 {
287 arb_zero(u);
288 for (i = 0; i < r; i++)
289 {
290 acb_add_ui(f, z, i, prec);
291 acb_arg(v, f, prec);
292 arb_add(u, u, v, prec);
293 }
294 arb_set(acb_imagref(t), u);
295 }
296 }
297
298 acb_clear(f);
299
300 arb_clear(u);
301 arb_clear(v);
302 arb_clear(pi);
303
304 fmpz_clear(pi_mult);
123 acb_hypgeom_rgamma(y, x, prec);
305124 }
306125
307126 void
308127 acb_lgamma(acb_t y, const acb_t x, slong prec)
309128 {
310 int reflect;
311 slong r, n, wp;
312 acb_t t, u, v;
313
314 if (acb_is_real(x) && arb_is_positive(acb_realref(x)))
315 {
316 arb_lgamma(acb_realref(y), acb_realref(x), prec);
317 arb_zero(acb_imagref(y));
318 return;
319 }
320
321 wp = prec + FLINT_BIT_COUNT(prec);
322
323 acb_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 0, wp);
324
325 acb_init(t);
326 acb_init(u);
327 acb_init(v);
328
329 if (reflect)
330 {
331 /* log gamma(x) = log rf(1-x, r) - log gamma(1-x+r) - log sin(pi x) + log(pi) */
332 acb_sub_ui(u, x, 1, wp);
333 acb_neg(u, u);
334
335 acb_rising_ui_rec(t, u, r, prec);
336 acb_log(t, t, wp);
337 _acb_log_rising_correct_branch(t, t, u, r, wp);
338
339 acb_add_ui(u, u, r, wp);
340 acb_gamma_stirling_eval(v, u, n, 0, wp);
341 acb_sub(t, t, v, wp);
342
343 acb_log_sin_pi(u, x, wp);
344 acb_sub(t, t, u, wp);
345
346 acb_const_pi(u, wp);
347 acb_log(u, u, wp);
348
349 acb_add(y, t, u, wp);
350 }
351 else
352 {
353 /* log gamma(x) = log gamma(x+r) - log rf(x,r) */
354
355 acb_add_ui(t, x, r, wp);
356 acb_gamma_stirling_eval(u, t, n, 0, wp);
357
358 acb_rising_ui_rec(t, x, r, prec);
359 acb_log(t, t, wp);
360 _acb_log_rising_correct_branch(t, t, x, r, wp);
361
362 acb_sub(y, u, t, prec);
363 }
364
365 acb_clear(t);
366 acb_clear(u);
367 acb_clear(v);
129 acb_hypgeom_lgamma(y, x, prec);
368130 }
369
99 */
1010
1111 #include "acb.h"
12 #include "acb_hypgeom.h"
1213
1314 void
1415 acb_rising2_ui(acb_t u, acb_t v, const acb_t x, ulong n, slong prec)
1516 {
16 if (prec < 256 || n < 8 || acb_bits(x) < prec / 8)
17 acb_rising2_ui_bs(u, v, x, n, prec);
17 if (x == u || x == v)
18 {
19 acb_t t;
20 acb_init(t);
21 acb_set(t, x);
22 acb_rising2_ui(u, v, t, n, prec);
23 acb_clear(t);
24 }
1825 else
19 acb_rising2_ui_rs(u, v, x, n, 0, prec);
26 {
27 acb_struct tmp[2];
28
29 tmp[0] = *u;
30 tmp[1] = *v;
31
32 acb_hypgeom_rising_ui_jet(tmp, x, n, 2, prec);
33
34 *u = tmp[0];
35 *v = tmp[1];
36 }
2037 }
2138
+0
-83
acb/rising2_ui_bs.c less more
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb.h"
12
13 static void
14 bsplit(acb_t p, acb_t q, const acb_t x, ulong a, ulong b, slong prec)
15 {
16 if (b - a < 8)
17 {
18 ulong k;
19 acb_t t;
20
21 acb_one(p);
22 acb_add_ui(q, x, a, prec);
23
24 acb_init(t);
25
26 for (k = a + 1; k < b; k++)
27 {
28 acb_add_ui(t, x, k, prec);
29 acb_mul(p, p, t, prec);
30 acb_add(p, p, q, prec);
31 acb_mul(q, q, t, prec);
32 }
33
34 acb_clear(t);
35 }
36 else
37 {
38 acb_t r, s;
39 ulong m;
40
41 acb_init(r);
42 acb_init(s);
43
44 m = a + (b - a) / 2;
45 bsplit(p, q, x, a, m, prec);
46 bsplit(r, s, x, m, b, prec);
47
48 acb_mul(p, p, s, prec);
49 acb_mul(r, r, q, prec);
50 acb_add(p, p, r, prec);
51 acb_mul(q, q, s, prec);
52
53 acb_clear(r);
54 acb_clear(s);
55 }
56 }
57
58 void
59 acb_rising2_ui_bs(acb_t u, acb_t v, const acb_t x, ulong n, slong prec)
60 {
61 if (n == 0)
62 {
63 acb_zero(v);
64 acb_one(u);
65 }
66 else if (n == 1)
67 {
68 acb_set(u, x);
69 acb_one(v);
70 }
71 else
72 {
73 acb_t t;
74 slong wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
75
76 acb_init(t); /* support aliasing */
77 acb_set(t, x);
78 bsplit(v, u, t, 0, n, wp);
79 acb_clear(t);
80 }
81 }
82
+0
-113
acb/rising2_ui_rs.c less more
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "flint/fmpz_poly.h"
12 #include "acb.h"
13
14 void _gamma_rf_bsplit(fmpz * A, ulong a, ulong b);
15
16 void
17 acb_rising2_ui_rs(acb_t u, acb_t v,
18 const acb_t x, ulong n, ulong m, slong prec)
19 {
20 if (n == 0)
21 {
22 acb_zero(v);
23 acb_one(u);
24 }
25 else if (n == 1)
26 {
27 acb_set(u, x);
28 acb_one(v);
29 }
30 else
31 {
32 slong wp;
33 ulong i, j, a, b;
34 acb_ptr xs;
35 acb_t S, T, U, V;
36 fmpz *A, *B;
37
38 wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
39
40 if (m == 0)
41 {
42 ulong m1, m2;
43 m1 = 0.6 * pow(wp, 0.4);
44 m2 = n_sqrt(n);
45 m = FLINT_MIN(m1, m2);
46 }
47
48 m = FLINT_MAX(m, 1);
49
50 xs = _acb_vec_init(m + 1);
51 A = _fmpz_vec_init(2 * m + 1);
52 B = A + (m + 1);
53
54 acb_init(S);
55 acb_init(T);
56 acb_init(U);
57 acb_init(V);
58 _acb_vec_set_powers(xs, x, m + 1, wp);
59
60 for (i = 0; i < n; i += m)
61 {
62 a = i;
63 b = FLINT_MIN(n, a + m);
64
65 if (a == 0 || b != a + m)
66 {
67 _gamma_rf_bsplit(A, a, b);
68 }
69 else
70 {
71 fmpz tt = m;
72 _fmpz_poly_taylor_shift(A, &tt, m + 1);
73 }
74
75 _fmpz_poly_derivative(B, A, b - a + 1);
76
77 acb_set_fmpz(S, A);
78
79 for (j = 1; j <= b - a; j++)
80 acb_addmul_fmpz(S, xs + j, A + j, wp);
81
82 acb_set_fmpz(T, B);
83
84 for (j = 1; j < b - a; j++)
85 acb_addmul_fmpz(T, xs + j, B + j, wp);
86
87 if (i == 0)
88 {
89 acb_set(U, S);
90 acb_set(V, T);
91 }
92 else
93 {
94 acb_mul(V, V, S, wp);
95 acb_addmul(V, U, T, wp);
96 acb_mul(U, U, S, wp);
97 }
98 }
99
100 acb_set(u, U);
101 acb_set(v, V);
102
103 _acb_vec_clear(xs, m + 1);
104 _fmpz_vec_clear(A, 2 * m + 1);
105
106 acb_clear(S);
107 acb_clear(T);
108 acb_clear(U);
109 acb_clear(V);
110 }
111 }
112
99 */
1010
1111 #include "acb.h"
12 #include "acb_hypgeom.h"
1213
1314 void
1415 acb_rising_ui(acb_t y, const acb_t x, ulong n, slong prec)
1516 {
16 if (n < FLINT_MAX(prec, 100))
17 {
18 acb_rising_ui_rec(y, x, n, prec);
19 }
20 else
21 {
22 acb_t t;
23 acb_init(t);
24 acb_add_ui(t, x, n, prec);
25 acb_gamma(t, t, prec);
26 acb_rgamma(y, x, prec);
27 acb_mul(y, y, t, prec);
28 acb_clear(t);
29 }
17 acb_hypgeom_rising_ui(y, x, n, prec);
3018 }
3119
3220 void
3321 acb_rising(acb_t y, const acb_t x, const acb_t n, slong prec)
3422 {
35 if (acb_is_int(n) && arf_sgn(arb_midref(acb_realref(n))) >= 0 &&
36 arf_cmpabs_ui(arb_midref(acb_realref(n)), FLINT_MAX(prec, 100)) < 0)
37 {
38 acb_rising_ui_rec(y, x,
39 arf_get_si(arb_midref(acb_realref(n)), ARF_RND_DOWN), prec);
40 }
41 else
42 {
43 acb_t t;
44 acb_init(t);
45 acb_add(t, x, n, prec);
46 acb_gamma(t, t, prec);
47 acb_rgamma(y, x, prec);
48 acb_mul(y, y, t, prec);
49 acb_clear(t);
50 }
23 acb_hypgeom_rising(y, x, n, prec);
5124 }
5225
+0
-80
acb/rising_ui_bs.c less more
0 /*
1 Copyright (C) 2014 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb.h"
12
13 /* assumes y and x are not aliased */
14 static void
15 bsplit(acb_t y, const acb_t x, ulong a, ulong b, slong prec)
16 {
17 if (b - a == 1)
18 {
19 acb_set_round(y, x, prec);
20 }
21 else if (b - a <= 10)
22 {
23 slong i;
24 acb_t t;
25 acb_init(t);
26
27 acb_add_ui(t, x, a, prec);
28 acb_add_ui(y, x, a + 1, prec);
29 acb_mul(y, y, t, prec);
30
31 for (i = a + 2; i < b; i++)
32 {
33 acb_add_ui(t, x, i, prec);
34 acb_mul(y, y, t, prec);
35 }
36
37 acb_clear(t);
38 }
39 else
40 {
41 acb_t t, u;
42 ulong m = a + (b - a) / 2;
43
44 acb_init(t);
45 acb_init(u);
46
47 bsplit(t, x, a, m, prec);
48 bsplit(u, x, m, b, prec);
49
50 acb_mul(y, t, u, prec);
51
52 acb_clear(t);
53 acb_clear(u);
54 }
55 }
56
57 void
58 acb_rising_ui_bs(acb_t y, const acb_t x, ulong n, slong prec)
59 {
60 if (n == 0)
61 {
62 acb_one(y);
63 }
64 else if (n == 1)
65 {
66 acb_set_round(y, x, prec);
67 }
68 else
69 {
70 acb_t t;
71 slong wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
72
73 acb_init(t);
74 bsplit(t, x, 0, n, wp);
75 acb_set_round(y, t, prec);
76 acb_clear(t);
77 }
78 }
79
+0
-22
acb/rising_ui_rec.c less more
0 /*
1 Copyright (C) 2014 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb.h"
12
13 void
14 acb_rising_ui_rec(acb_t y, const acb_t x, ulong n, slong prec)
15 {
16 if (prec < 256 || n < 8 || acb_bits(x) < prec / 8)
17 acb_rising_ui_bs(y, x, n, prec);
18 else
19 acb_rising_ui_rs(y, x, n, 0, prec);
20 }
21
+0
-115
acb/rising_ui_rs.c less more
0 /*
1 Copyright (C) 2014 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "flint/fmpz_poly.h"
12 #include "acb.h"
13
14 void rising_difference_polynomial(fmpz * s, fmpz * c, ulong m);
15
16 void
17 acb_rising_ui_rs(acb_t y, const acb_t x, ulong n, ulong m, slong prec)
18 {
19 acb_ptr xs;
20 acb_t t, u, v;
21 ulong i, k, rem;
22 fmpz_t c, h;
23 fmpz *s, *d;
24 slong wp;
25
26 if (n == 0)
27 {
28 acb_one(y);
29 return;
30 }
31
32 if (n == 1)
33 {
34 acb_set_round(y, x, prec);
35 return;
36 }
37
38 wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
39
40 acb_init(t);
41 acb_init(u);
42 acb_init(v);
43 fmpz_init(c);
44 fmpz_init(h);
45
46 if (m == 0)
47 {
48 ulong m1, m2;
49 m1 = 0.2 * pow(2.0 * wp, 0.4);
50 m2 = n_sqrt(n);
51 m = FLINT_MIN(m1, m2);
52 }
53
54 m = FLINT_MIN(m, n);
55 m = FLINT_MAX(m, 1);
56
57 xs = _acb_vec_init(m + 1);
58 d = _fmpz_vec_init(m * m);
59 s = _fmpz_vec_init(m + 1);
60
61 _acb_vec_set_powers(xs, x, m + 1, wp);
62
63 rising_difference_polynomial(s, d, m);
64
65 /* tail */
66 rem = m;
67 while (rem + m <= n)
68 rem += m;
69 acb_one(y);
70 for (k = rem; k < n; k++)
71 {
72 acb_add_ui(t, xs + 1, k, wp);
73 acb_mul(y, y, t, wp);
74 }
75
76 /* initial rising factorial */
77 acb_zero(t);
78 for (i = 1; i <= m; i++)
79 acb_addmul_fmpz(t, xs + i, s + i, wp);
80
81 acb_mul(y, y, t, wp);
82
83 /* the leading coefficient is always the same */
84 acb_mul_fmpz(xs + m - 1, xs + m - 1, d + m - 1 + 0, wp);
85
86 for (k = 0; k + 2 * m <= n; k += m)
87 {
88 for (i = 0; i < m - 1; i++)
89 {
90 fmpz_set_ui(h, k);
91 _fmpz_poly_evaluate_horner_fmpz(c, d + i * m, m - i, h);
92
93 if (i == 0)
94 acb_add_fmpz(t, t, c, wp);
95 else
96 acb_addmul_fmpz(t, xs + i, c, wp);
97 }
98
99 acb_add(t, t, xs + m - 1, wp);
100 acb_mul(y, y, t, wp);
101 }
102
103 acb_set_round(y, y, prec);
104
105 acb_clear(t);
106 acb_clear(u);
107 acb_clear(v);
108 _acb_vec_clear(xs, m + 1);
109 _fmpz_vec_clear(d, m * m);
110 _fmpz_vec_clear(s, m + 1);
111 fmpz_clear(c);
112 fmpz_clear(h);
113 }
114
+0
-110
acb/test/t-rising2_ui_bs.c less more
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "flint/arith.h"
12 #include "acb_poly.h"
13
14 int main()
15 {
16 slong iter;
17 flint_rand_t state;
18
19 flint_printf("rising2_ui_bs....");
20 fflush(stdout);
21
22 flint_randinit(state);
23
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 acb_t a, u, v, u2, v2;
27 fmpz *f;
28 acb_ptr g;
29 ulong n;
30 slong i, prec;
31
32 acb_init(a);
33 acb_init(u);
34 acb_init(v);
35 acb_init(u2);
36 acb_init(v2);
37
38 acb_randtest(a, state, 1 + n_randint(state, 4000), 10);
39 acb_randtest(u, state, 1 + n_randint(state, 4000), 10);
40 acb_randtest(v, state, 1 + n_randint(state, 4000), 10);
41 n = n_randint(state, 120);
42
43 f = _fmpz_vec_init(n + 1);
44 g = _acb_vec_init(n + 1);
45
46 prec = 2 + n_randint(state, 4000);
47 acb_rising2_ui_bs(u, v, a, n, prec);
48
49 arith_stirling_number_1u_vec(f, n, n + 1);
50 for (i = 0; i <= n; i++)
51 acb_set_fmpz(g + i, f + i);
52 _acb_poly_evaluate(u2, g, n + 1, a, prec);
53
54 _acb_poly_derivative(g, g, n + 1, prec);
55 _acb_poly_evaluate(v2, g, n, a, prec);
56
57 if (!acb_overlaps(u, u2) || !acb_overlaps(v, v2))
58 {
59 flint_printf("FAIL: overlap\n\n");
60 flint_printf("n = %wu\n", n);
61 flint_printf("a = "); acb_printd(a, 15); flint_printf("\n\n");
62 flint_printf("u = "); acb_printd(u, 15); flint_printf("\n\n");
63 flint_printf("u2 = "); acb_printd(u2, 15); flint_printf("\n\n");
64 flint_printf("v = "); acb_printd(v, 15); flint_printf("\n\n");
65 flint_printf("v2 = "); acb_printd(v2, 15); flint_printf("\n\n");
66 flint_abort();
67 }
68
69 acb_set(u2, a);
70 acb_rising2_ui_bs(u2, v, u2, n, prec);
71
72 if (!acb_equal(u2, u))
73 {
74 flint_printf("FAIL: aliasing 1\n\n");
75 flint_printf("a = "); acb_printd(a, 15); flint_printf("\n\n");
76 flint_printf("u = "); acb_printd(u, 15); flint_printf("\n\n");
77 flint_printf("u2 = "); acb_printd(u2, 15); flint_printf("\n\n");
78 flint_printf("n = %wu\n", n);
79 flint_abort();
80 }
81
82 acb_set(v2, a);
83 acb_rising2_ui_bs(u, v2, v2, n, prec);
84
85 if (!acb_equal(v2, v))
86 {
87 flint_printf("FAIL: aliasing 2\n\n");
88 flint_printf("a = "); acb_printd(a, 15); flint_printf("\n\n");
89 flint_printf("v = "); acb_printd(v, 15); flint_printf("\n\n");
90 flint_printf("v2 = "); acb_printd(v2, 15); flint_printf("\n\n");
91 flint_printf("n = %wu\n", n);
92 flint_abort();
93 }
94
95 acb_clear(a);
96 acb_clear(u);
97 acb_clear(v);
98 acb_clear(u2);
99 acb_clear(v2);
100 _fmpz_vec_clear(f, n + 1);
101 _acb_vec_clear(g, n + 1);
102 }
103
104 flint_randclear(state);
105 flint_cleanup();
106 flint_printf("PASS\n");
107 return EXIT_SUCCESS;
108 }
109
+0
-110
acb/test/t-rising2_ui_rs.c less more
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "flint/arith.h"
12 #include "acb_poly.h"
13
14 int main()
15 {
16 slong iter;
17 flint_rand_t state;
18
19 flint_printf("rising2_ui_rs....");
20 fflush(stdout);
21
22 flint_randinit(state);
23
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 acb_t a, u, v, u2, v2;
27 fmpz *f;
28 acb_ptr g;
29 ulong n;
30 slong i, prec;
31
32 acb_init(a);
33 acb_init(u);
34 acb_init(v);
35 acb_init(u2);
36 acb_init(v2);
37
38 acb_randtest(a, state, 1 + n_randint(state, 4000), 10);
39 acb_randtest(u, state, 1 + n_randint(state, 4000), 10);
40 acb_randtest(v, state, 1 + n_randint(state, 4000), 10);
41 n = n_randint(state, 120);
42
43 f = _fmpz_vec_init(n + 1);
44 g = _acb_vec_init(n + 1);
45
46 prec = 2 + n_randint(state, 4000);
47 acb_rising2_ui_rs(u, v, a, n, 0, prec);
48
49 arith_stirling_number_1u_vec(f, n, n + 1);
50 for (i = 0; i <= n; i++)
51 acb_set_fmpz(g + i, f + i);
52 _acb_poly_evaluate(u2, g, n + 1, a, prec);
53
54 _acb_poly_derivative(g, g, n + 1, prec);
55 _acb_poly_evaluate(v2, g, n, a, prec);
56
57 if (!acb_overlaps(u, u2) || !acb_overlaps(v, v2))
58 {
59 flint_printf("FAIL: overlap\n\n");
60 flint_printf("n = %wu\n", n);
61 flint_printf("a = "); acb_printd(a, 15); flint_printf("\n\n");
62 flint_printf("u = "); acb_printd(u, 15); flint_printf("\n\n");
63 flint_printf("u2 = "); acb_printd(u2, 15); flint_printf("\n\n");
64 flint_printf("v = "); acb_printd(v, 15); flint_printf("\n\n");
65 flint_printf("v2 = "); acb_printd(v2, 15); flint_printf("\n\n");
66 flint_abort();
67 }
68
69 acb_set(u2, a);
70 acb_rising2_ui_rs(u2, v, u2, n, 0, prec);
71
72 if (!acb_equal(u2, u))
73 {
74 flint_printf("FAIL: aliasing 1\n\n");
75 flint_printf("a = "); acb_printd(a, 15); flint_printf("\n\n");
76 flint_printf("u = "); acb_printd(u, 15); flint_printf("\n\n");
77 flint_printf("u2 = "); acb_printd(u2, 15); flint_printf("\n\n");
78 flint_printf("n = %wu\n", n);
79 flint_abort();
80 }
81
82 acb_set(v2, a);
83 acb_rising2_ui_rs(u, v2, v2, n, 0, prec);
84
85 if (!acb_equal(v2, v))
86 {
87 flint_printf("FAIL: aliasing 2\n\n");
88 flint_printf("a = "); acb_printd(a, 15); flint_printf("\n\n");
89 flint_printf("v = "); acb_printd(v, 15); flint_printf("\n\n");
90 flint_printf("v2 = "); acb_printd(v2, 15); flint_printf("\n\n");
91 flint_printf("n = %wu\n", n);
92 flint_abort();
93 }
94
95 acb_clear(a);
96 acb_clear(u);
97 acb_clear(v);
98 acb_clear(u2);
99 acb_clear(v2);
100 _fmpz_vec_clear(f, n + 1);
101 _acb_vec_clear(g, n + 1);
102 }
103
104 flint_randclear(state);
105 flint_cleanup();
106 flint_printf("PASS\n");
107 return EXIT_SUCCESS;
108 }
109
+0
-99
acb/test/t-rising_ui_bs.c less more
0 /*
1 Copyright (C) 2012 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("rising_ui_bs....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 /* check functional equation */
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 acb_t x, xn, y, z;
27 ulong n, m;
28
29 acb_init(x);
30 acb_init(xn);
31 acb_init(y);
32 acb_init(z);
33
34 acb_randtest(x, state, 1 + n_randint(state, 4000), 10);
35 n = n_randint(state, 40);
36 m = n_randint(state, 40);
37 acb_add_ui(xn, x, n, 1 + n_randint(state, 4000));
38
39 acb_rising_ui_bs(y, x, n, 2 + n_randint(state, 4000));
40 acb_rising_ui_bs(z, xn, m, 2 + n_randint(state, 4000));
41 acb_mul(y, y, z, 2 + n_randint(state, 4000));
42
43 acb_rising_ui_bs(z, x, n + m, 2 + n_randint(state, 4000));
44
45 if (!acb_overlaps(y, z))
46 {
47 flint_printf("FAIL: overlap\n\n");
48 flint_printf("n = %wu\n", n);
49 flint_printf("m = %wu\n", m);
50 flint_printf("x = "); acb_print(x); flint_printf("\n\n");
51 flint_printf("xn = "); acb_print(xn); flint_printf("\n\n");
52 flint_printf("y = "); acb_print(y); flint_printf("\n\n");
53 flint_printf("z = "); acb_print(z); flint_printf("\n\n");
54 flint_abort();
55 }
56
57 acb_clear(x);
58 acb_clear(xn);
59 acb_clear(y);
60 acb_clear(z);
61 }
62
63 /* aliasing of y and x */
64 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
65 {
66 acb_t x, y;
67 ulong n;
68 slong prec;
69
70 acb_init(x);
71 acb_init(y);
72
73 acb_randtest(x, state, 1 + n_randint(state, 200), 10);
74 acb_randtest(y, state, 1 + n_randint(state, 200), 10);
75 n = n_randint(state, 100);
76
77 prec = 2 + n_randint(state, 4000);
78 acb_rising_ui_bs(y, x, n, prec);
79 acb_rising_ui_bs(x, x, n, prec);
80
81 if (!acb_equal(x, y))
82 {
83 flint_printf("FAIL: aliasing\n\n");
84 flint_printf("x = "); acb_print(x); flint_printf("\n\n");
85 flint_printf("y = "); acb_print(y); flint_printf("\n\n");
86 flint_printf("n = %wu\n", n);
87 flint_abort();
88 }
89
90 acb_clear(x);
91 acb_clear(y);
92 }
93
94 flint_randclear(state);
95 flint_cleanup();
96 flint_printf("PASS\n");
97 return EXIT_SUCCESS;
98 }
+0
-99
acb/test/t-rising_ui_rec.c less more
0 /*
1 Copyright (C) 2012 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("rising_ui_rec....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 /* check functional equation */
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 acb_t x, xn, y, z;
27 ulong n, m;
28
29 acb_init(x);
30 acb_init(xn);
31 acb_init(y);
32 acb_init(z);
33
34 acb_randtest(x, state, 1 + n_randint(state, 4000), 10);
35 n = n_randint(state, 80);
36 m = n_randint(state, 40);
37 acb_add_ui(xn, x, n, 1 + n_randint(state, 4000));
38
39 acb_rising_ui_rec(y, x, n, 2 + n_randint(state, 4000));
40 acb_rising_ui_rec(z, xn, m, 2 + n_randint(state, 4000));
41 acb_mul(y, y, z, 2 + n_randint(state, 4000));
42
43 acb_rising_ui_rec(z, x, n + m, 2 + n_randint(state, 4000));
44
45 if (!acb_overlaps(y, z))
46 {
47 flint_printf("FAIL: overlap\n\n");
48 flint_printf("n = %wu\n", n);
49 flint_printf("m = %wu\n", m);
50 flint_printf("x = "); acb_print(x); flint_printf("\n\n");
51 flint_printf("xn = "); acb_print(xn); flint_printf("\n\n");
52 flint_printf("y = "); acb_print(y); flint_printf("\n\n");
53 flint_printf("z = "); acb_print(z); flint_printf("\n\n");
54 flint_abort();
55 }
56
57 acb_clear(x);
58 acb_clear(xn);
59 acb_clear(y);
60 acb_clear(z);
61 }
62
63 /* aliasing of y and x */
64 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
65 {
66 acb_t x, y;
67 ulong n;
68 slong prec;
69
70 acb_init(x);
71 acb_init(y);
72
73 acb_randtest(x, state, 1 + n_randint(state, 200), 10);
74 acb_randtest(y, state, 1 + n_randint(state, 200), 10);
75 n = n_randint(state, 100);
76
77 prec = 2 + n_randint(state, 4000);
78 acb_rising_ui_rec(y, x, n, prec);
79 acb_rising_ui_rec(x, x, n, prec);
80
81 if (!acb_equal(x, y))
82 {
83 flint_printf("FAIL: aliasing\n\n");
84 flint_printf("x = "); acb_print(x); flint_printf("\n\n");
85 flint_printf("y = "); acb_print(y); flint_printf("\n\n");
86 flint_printf("n = %wu\n", n);
87 flint_abort();
88 }
89
90 acb_clear(x);
91 acb_clear(y);
92 }
93
94 flint_randclear(state);
95 flint_cleanup();
96 flint_printf("PASS\n");
97 return EXIT_SUCCESS;
98 }
+0
-106
acb/test/t-rising_ui_rs.c less more
0 /*
1 Copyright (C) 2012 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("rising_ui_rs....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 /* check functional equation */
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 acb_t x, xn, y, z;
27 ulong n, m, step1, step2, step3;
28
29 acb_init(x);
30 acb_init(xn);
31 acb_init(y);
32 acb_init(z);
33
34 acb_randtest(x, state, 1 + n_randint(state, 4000), 10);
35 n = n_randint(state, 80);
36 m = n_randint(state, 40);
37 acb_add_ui(xn, x, n, 1 + n_randint(state, 4000));
38
39 step1 = n_randint(state, 20);
40 step2 = n_randint(state, 20);
41 step3 = n_randint(state, 20);
42
43 acb_rising_ui_rs(y, x, n, step1, 2 + n_randint(state, 4000));
44 acb_rising_ui_rs(z, xn, m, step2, 2 + n_randint(state, 4000));
45 acb_mul(y, y, z, 2 + n_randint(state, 4000));
46
47 acb_rising_ui_rs(z, x, n + m, step3, 2 + n_randint(state, 4000));
48
49 if (!acb_overlaps(y, z))
50 {
51 flint_printf("FAIL: overlap\n\n");
52 flint_printf("n = %wu\n", n);
53 flint_printf("m = %wu\n", m);
54 flint_printf("x = "); acb_print(x); flint_printf("\n\n");
55 flint_printf("xn = "); acb_print(xn); flint_printf("\n\n");
56 flint_printf("y = "); acb_print(y); flint_printf("\n\n");
57 flint_printf("z = "); acb_print(z); flint_printf("\n\n");
58 flint_abort();
59 }
60
61 acb_clear(x);
62 acb_clear(xn);
63 acb_clear(y);
64 acb_clear(z);
65 }
66
67 /* aliasing of y and x */
68 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
69 {
70 acb_t x, y;
71 ulong n;
72 slong prec;
73 ulong step;
74
75 acb_init(x);
76 acb_init(y);
77
78 acb_randtest(x, state, 1 + n_randint(state, 200), 10);
79 acb_randtest(y, state, 1 + n_randint(state, 200), 10);
80 n = n_randint(state, 100);
81
82 step = n_randint(state, 20);
83
84 prec = 2 + n_randint(state, 4000);
85 acb_rising_ui_rs(y, x, n, step, prec);
86 acb_rising_ui_rs(x, x, n, step, prec);
87
88 if (!acb_equal(x, y))
89 {
90 flint_printf("FAIL: aliasing\n\n");
91 flint_printf("x = "); acb_print(x); flint_printf("\n\n");
92 flint_printf("y = "); acb_print(y); flint_printf("\n\n");
93 flint_printf("n = %wu\n", n);
94 flint_abort();
95 }
96
97 acb_clear(x);
98 acb_clear(y);
99 }
100
101 flint_randclear(state);
102 flint_cleanup();
103 flint_printf("PASS\n");
104 return EXIT_SUCCESS;
105 }
328328 {
329329 arb_add_error_mag(acb_realref(x), err);
330330 arb_add_error_mag(acb_imagref(x), err);
331 }
332
333 ACB_INLINE void
334 acb_add_error_arb(acb_t x, const arb_t err)
335 {
336 arb_add_error(acb_realref(x), err);
337 arb_add_error(acb_imagref(x), err);
331338 }
332339
333340 void acb_get_mag(mag_t z, const acb_t x);
760767 void acb_chebyshev_u_ui(acb_t a, ulong n, const acb_t x, slong prec);
761768 void acb_chebyshev_u2_ui(acb_t a, acb_t b, ulong n, const acb_t x, slong prec);
762769
763 void acb_rising_ui_bs(acb_t y, const acb_t x, ulong n, slong prec);
764 void acb_rising_ui_rs(acb_t y, const acb_t x, ulong n, ulong m, slong prec);
765 void acb_rising_ui_rec(acb_t y, const acb_t x, ulong n, slong prec);
766770 void acb_rising_ui(acb_t z, const acb_t x, ulong n, slong prec);
767771 void acb_rising(acb_t z, const acb_t x, const acb_t n, slong prec);
768
769 void acb_rising2_ui_bs(acb_t u, acb_t v, const acb_t x, ulong n, slong prec);
770 void acb_rising2_ui_rs(acb_t u, acb_t v, const acb_t x, ulong n, ulong m, slong prec);
771772 void acb_rising2_ui(acb_t u, acb_t v, const acb_t x, ulong n, slong prec);
772773
773774 void acb_rising_ui_get_mag(mag_t bound, const acb_t s, ulong n);
861862 }
862863
863864 ACB_INLINE void
865 _acb_vec_swap(acb_ptr res, acb_ptr vec, slong len)
866 {
867 slong i;
868 for (i = 0; i < len; i++)
869 acb_swap(res + i, vec + i);
870 }
871
872 ACB_INLINE void
864873 _acb_vec_neg(acb_ptr res, acb_srcptr vec, slong len)
865874 {
866875 slong i;
10131022 acb_printn(const acb_t x, slong digits, ulong flags)
10141023 {
10151024 acb_fprintn(stdout, x, digits, flags);
1025 }
1026
1027 ACB_INLINE void
1028 _acb_vec_printn(acb_srcptr vec, slong len, slong ndigits, ulong flags)
1029 {
1030 slong i;
1031 for (i = 0; i < len; i++)
1032 {
1033 acb_printn(vec + i, ndigits, flags);
1034 if (i < len - 1)
1035 flint_printf(", ");
1036 }
10161037 }
10171038
10181039 void acb_randtest(acb_t z, flint_rand_t state, slong prec, slong mag_bits);
4646 16,997,2,1,4,1,2,1009,8,1013,2,1,4076,1021,2,1
4747 };
4848
49 static __inline__ slong fdiv(slong x, slong y)
49 static __inline__ slong rj_fdiv(slong x, slong y)
5050 {
5151 if (x < 0)
5252 return -1;
9090 /* Precompute powers of E2 and E3 */
9191 for (m2 = 0; m2 <= NMAX / 2; m2++)
9292 {
93 for (m3 = 0; m3 <= fdiv(NMAX - 2 * m2, 3); m3++)
93 for (m3 = 0; m3 <= rj_fdiv(NMAX - 2 * m2, 3); m3++)
9494 {
9595 slong i, j, k;
9696
128128 for (m5 = m5start; m5 >= 0; m5--)
129129 {
130130 acb_zero(s4);
131 m4start = fdiv(NMAX - 5 * m5, 4);
131 m4start = rj_fdiv(NMAX - 5 * m5, 4);
132132 if (m5 != m5start)
133133 {
134134 fmpz_mul_ui(c5, c5, 2 * m5 + 2);
144144 for (m4 = m4start; m4 >= 0; m4--)
145145 {
146146 acb_zero(s3);
147 m3start = fdiv(NMAX - 5 * m5 - 4 * m4, 3);
147 m3start = rj_fdiv(NMAX - 5 * m5 - 4 * m4, 3);
148148 if (m4 != m4start)
149149 {
150150 fmpz_mul_ui(c4, c4, 2 * m4 + 2);
154154
155155 for (m3 = 0; m3 <= m3start; m3++)
156156 {
157 m2start = fdiv(NMAX - 5 * m5 - 4 * m4 - 3 * m3, 2);
157 m2start = rj_fdiv(NMAX - 5 * m5 - 4 * m4 - 3 * m3, 2);
158158 fmpz_set(c2, c3);
159159 for (m2 = 0; m2 <= m2start; m2++)
160160 {
6868 mag_set_d(arb_radref(acb_realref(r2)), 1e-14 * fabs(testdata_pi[k][4]));
6969 mag_set_d(arb_radref(acb_imagref(r2)), 1e-14 * fabs(testdata_pi[k][5]));
7070
71 for (prec1 = 32; prec1 <= 256; prec1 *= 2)
71 for (prec1 = 32; prec1 <= (arb_test_multiplier() < 1.0 ? 64 : 256); prec1 *= 2)
7272 {
7373 acb_elliptic_pi(r1, n, m, prec1 + 30);
7474
0 /*
1 Copyright (C) 2014, 2015, 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12 #include "arb_hypgeom.h"
13
14 void
15 acb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
16 const acb_t z, int use_reflect, int digamma, slong prec);
17
18 void acb_gamma_stirling_bound(mag_ptr err, const acb_t x, slong k0, slong knum, slong n);
19
20 void
21 acb_hypgeom_gamma_stirling_inner(acb_t s, const acb_t z, slong N, slong prec)
22 {
23 acb_t logz, t;
24 mag_t err;
25
26 mag_init(err);
27 acb_init(t);
28 acb_init(logz);
29
30 acb_gamma_stirling_bound(err, z, 0, 1, N);
31
32 /* t = (z-0.5)*log(z) - z + log(2*pi)/2 */
33 acb_log(logz, z, prec);
34 arb_one(acb_realref(t));
35 arb_mul_2exp_si(acb_realref(t), acb_realref(t), -1);
36 acb_sub(t, z, t, prec);
37 acb_mul(t, logz, t, prec);
38 acb_sub(t, t, z, prec);
39 arb_const_log_sqrt2pi(acb_realref(logz), prec);
40 arb_add(acb_realref(t), acb_realref(t), acb_realref(logz), prec);
41
42 /* sum part */
43 if (prec <= 128 || (prec <= 1024 && N <= 40) || (prec <= 2048 && N <= 16))
44 acb_hypgeom_gamma_stirling_sum_horner(s, z, N, prec);
45 else
46 acb_hypgeom_gamma_stirling_sum_improved(s, z, N, 0, prec);
47
48 acb_add(s, s, t, prec);
49 acb_add_error_mag(s, err);
50
51 acb_clear(t);
52 acb_clear(logz);
53 mag_clear(err);
54 }
55
56
57 void
58 acb_hypgeom_gamma_stirling(acb_t y, const acb_t x, int reciprocal, slong prec)
59 {
60 int reflect;
61 slong r, n, wp;
62 acb_t t, u, v;
63 double acc;
64
65 wp = prec + FLINT_BIT_COUNT(prec);
66
67 /* todo: for large x (if exact or accurate enough), increase precision */
68 acc = acb_rel_accuracy_bits(x);
69 acc = FLINT_MAX(acc, 0);
70 wp = FLINT_MIN(prec, acc + 20);
71 wp = FLINT_MAX(wp, 2);
72 wp = wp + FLINT_BIT_COUNT(wp);
73
74 if (acc < 3) /* try to avoid divisions blowing up */
75 {
76 if (arf_cmp_d(arb_midref(acb_realref(x)), -0.5) < 0)
77 {
78 reflect = 1;
79 r = 0;
80 }
81 else if (arf_cmp_si(arb_midref(acb_realref(x)), 1) < 0)
82 {
83 reflect = 0;
84 r = 1;
85 }
86 else
87 {
88 reflect = 0;
89 r = 0;
90 }
91
92 n = 1;
93 }
94 else
95 {
96 acb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 0, wp);
97 }
98
99 acb_init(t);
100 acb_init(u);
101 acb_init(v);
102
103 if (reflect)
104 {
105 acb_sub_ui(t, x, 1, wp);
106 acb_neg(t, t);
107 acb_hypgeom_rising_ui_rec(u, t, r, wp);
108 arb_const_pi(acb_realref(v), wp);
109 acb_mul_arb(u, u, acb_realref(v), wp);
110 acb_add_ui(t, t, r, wp);
111 acb_hypgeom_gamma_stirling_inner(v, t, n, wp);
112
113 if (reciprocal)
114 {
115 /* rgamma(x) = gamma(1-x+r) sin(pi x) / ((rf(1-x, r) * pi) */
116 acb_exp(v, v, wp);
117 acb_sin_pi(t, x, wp);
118 acb_mul(v, v, t, wp);
119 acb_mul(y, u, v, wp);
120 acb_div(y, v, u, prec);
121 }
122 else
123 {
124 /* gamma(x) = (rf(1-x, r) * pi) rgamma(1-x+r) csc(pi x) */
125 acb_neg(v, v);
126 acb_exp(v, v, wp);
127 acb_csc_pi(t, x, wp);
128 acb_mul(v, v, t, wp);
129 acb_mul(y, v, u, prec);
130 }
131 }
132 else
133 {
134 acb_add_ui(t, x, r, wp);
135 acb_hypgeom_gamma_stirling_inner(u, t, n, wp);
136
137 if (reciprocal)
138 {
139 /* rgamma(x) = rf(x,r) rgamma(x+r) */
140 acb_neg(u, u);
141 acb_exp(u, u, prec);
142 acb_hypgeom_rising_ui_rec(v, x, r, wp);
143 acb_mul(y, v, u, prec);
144 }
145 else
146 {
147 /* gamma(x) = gamma(x+r) / rf(x,r) */
148 acb_exp(u, u, prec);
149 acb_hypgeom_rising_ui_rec(v, x, r, wp);
150 acb_div(y, u, v, prec);
151 }
152 }
153
154 acb_clear(t);
155 acb_clear(u);
156 acb_clear(v);
157 }
158
159 void
160 acb_hypgeom_gamma(acb_t y, const acb_t x, slong prec)
161 {
162 if (acb_is_real(x))
163 {
164 arb_hypgeom_gamma(acb_realref(y), acb_realref(x), prec);
165 arb_zero(acb_imagref(y));
166 return;
167 }
168
169 if (acb_hypgeom_gamma_taylor(y, x, 0, prec))
170 return;
171
172 acb_hypgeom_gamma_stirling(y, x, 0, prec);
173 }
174
175 void
176 acb_hypgeom_rgamma(acb_t y, const acb_t x, slong prec)
177 {
178 mag_t magz;
179
180 if (acb_is_real(x))
181 {
182 arb_hypgeom_rgamma(acb_realref(y), acb_realref(x), prec);
183 arb_zero(acb_imagref(y));
184 return;
185 }
186
187 if (acb_hypgeom_gamma_taylor(y, x, 1, prec))
188 return;
189
190 mag_init(magz);
191 acb_get_mag(magz, x);
192
193 if (mag_is_inf(magz))
194 {
195 acb_indeterminate(y);
196 }
197 else
198 {
199 acb_hypgeom_gamma_stirling(y, x, 1, prec);
200
201 /* Todo: improved bounds computation */
202 if (!acb_is_finite(y))
203 {
204 arb_t t, u, R;
205
206 arb_init(R);
207 arb_init(t);
208 arb_init(u);
209
210 arf_set_mag(arb_midref(R), magz);
211
212 arb_set_d(u, 0.5);
213 arb_add(u, u, R, MAG_BITS);
214 arb_pow(u, R, u, MAG_BITS);
215
216 arb_const_pi(t, MAG_BITS);
217 arb_mul(t, t, R, MAG_BITS);
218 arb_mul_2exp_si(t, t, -1);
219 arb_exp(t, t, MAG_BITS);
220
221 arb_mul(t, t, u, MAG_BITS);
222
223 arb_get_mag(magz, t);
224
225 acb_zero(y);
226 acb_add_error_mag(y, magz);
227
228 arb_clear(R);
229 arb_clear(t);
230 arb_clear(u);
231 }
232 }
233
234 mag_clear(magz);
235 }
236
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12 #include "acb_hypgeom.h"
13
14 void arb_gamma_stirling_coeff(acb_t b, ulong k, int digamma, slong prec);
15
16 void
17 acb_hypgeom_gamma_stirling_sum_horner(acb_t s, const acb_t z, slong N, slong prec)
18 {
19 acb_t b, t, zinv, w;
20 mag_t zinv_mag;
21 slong n, term_mag, term_prec;
22 slong * term_mags;
23
24 if (N <= 1)
25 {
26 acb_zero(s);
27 return;
28 }
29
30 acb_init(b);
31 acb_init(t);
32 acb_init(zinv);
33 acb_init(w);
34 mag_init(zinv_mag);
35
36 acb_inv(zinv, z, prec);
37 acb_mul(w, zinv, zinv, prec);
38
39 acb_get_mag(zinv_mag, zinv);
40 term_mags = flint_malloc(sizeof(ulong) * N);
41
42 _arb_hypgeom_gamma_stirling_term_bounds(term_mags, zinv_mag, N);
43
44 acb_zero(s);
45
46 for (n = N - 1; n >= 1; n--)
47 {
48 term_mag = term_mags[n];
49 term_prec = prec + term_mag;
50 term_prec = FLINT_MIN(term_prec, prec);
51 term_prec = FLINT_MAX(term_prec, 10);
52
53 if (prec - term_prec > 200)
54 {
55 acb_set_round(t, w, term_prec);
56 acb_mul(s, s, t, term_prec);
57 }
58 else
59 acb_mul(s, s, w, term_prec);
60
61 arb_gamma_stirling_coeff(b, n, 0, term_prec);
62 acb_add(s, s, b, term_prec);
63 }
64
65 acb_mul(s, s, zinv, prec);
66
67 flint_free(term_mags);
68
69 acb_clear(t);
70 acb_clear(b);
71 acb_clear(zinv);
72 acb_clear(w);
73 mag_clear(zinv_mag);
74 }
75
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12 #include "acb_hypgeom.h"
13 #include "bernoulli.h"
14
15 /* todo: move to acb module */
16 static void
17 acb_fma_ui(acb_t res, const acb_t x, ulong y, const acb_t z, slong prec)
18 {
19 arf_t t;
20 arf_init_set_ui(t, y); /* no need to free */
21 arb_fma_arf(acb_realref(res), acb_realref(x), t, acb_realref(z), prec);
22 arb_fma_arf(acb_imagref(res), acb_imagref(x), t, acb_imagref(z), prec);
23 }
24
25 void
26 acb_hypgeom_gamma_stirling_sum_improved(acb_t s, const acb_t z, slong N, slong K, slong prec)
27 {
28 acb_t b, t, zinv, w, u, S2, S3, S4;
29 mag_t zinv_mag, err;
30 slong n, term_mag, term_prec;
31 slong * term_mags;
32 slong i, j, k, M;
33 slong * Mk;
34 acb_ptr upow, ukpow;
35 slong kodd, kpow_exp, wp;
36 fmpz_t kpow;
37 slong m;
38
39 if (N <= 1)
40 {
41 acb_zero(s);
42 return;
43 }
44
45 if (N == 2)
46 {
47 acb_mul_ui(s, z, 12, prec);
48 acb_inv(s, s, prec);
49 return;
50 }
51
52 if (K == 0)
53 {
54 if (prec <= 128)
55 K = 1;
56 else if (prec <= 1024)
57 K = 2;
58 else
59 {
60 K = 4 + 0.1 * sqrt(FLINT_MAX(prec - 4096, 0));
61 K = FLINT_MIN(K, 100);
62 }
63 }
64
65 acb_init(b);
66 acb_init(t);
67 acb_init(zinv);
68 acb_init(w);
69 acb_init(u);
70 acb_init(S2);
71 acb_init(S3);
72 acb_init(S4);
73 mag_init(zinv_mag);
74 mag_init(err);
75
76 acb_inv(zinv, z, prec);
77 acb_mul(w, zinv, zinv, prec);
78
79 acb_get_mag(zinv_mag, zinv);
80
81 term_mags = flint_malloc(sizeof(ulong) * (N + 1));
82
83 /* Avoid possible overflow. (This case is not interesting to handle well,
84 but we need to handle it.) */
85 if (mag_cmp_2exp_si(zinv_mag, 10) > 0)
86 K = 1;
87
88 /* Avoid possible underflow. */
89 if (mag_cmp_2exp_si(zinv_mag, -100000) < 0)
90 mag_set_ui_2exp_si(zinv_mag, 1, -100000);
91
92 _arb_hypgeom_gamma_stirling_term_bounds(term_mags, zinv_mag, N + 1);
93
94 /* We will assume below that term_mags is nonincreasing */
95 for (n = N - 2; n >= 1; n--)
96 {
97 if (term_mags[n] < term_mags[n + 1])
98 term_mags[n] = term_mags[n + 1];
99 }
100
101 Mk = NULL;
102
103 if (K > 1)
104 {
105 Mk = flint_malloc(sizeof(slong) * (K + 1));
106 Mk[0] = Mk[1] = N;
107
108 for (k = 2; k <= K; k++)
109 {
110 double log2_k;
111
112 Mk[k] = N;
113
114 log2_k = log(k) * (1.0 / 0.693147180559945309);
115
116 while (Mk[k] > 2)
117 {
118 slong err, Mnew;
119
120 Mnew = Mk[k] - 1;
121 err = term_mags[Mnew] - log2_k * (2 * Mnew) + FLINT_BIT_COUNT(N - Mnew);
122
123 if (err < -prec)
124 Mk[k] = Mnew;
125 else
126 break;
127 }
128 }
129
130 /* We will assume that Mk is nonincreasing. */
131 for (k = 2; k <= K; k++)
132 {
133 if (Mk[k] > Mk[k - 1])
134 Mk[k] = Mk[k - 1];
135 }
136
137 while (K >= 2 && Mk[K] == Mk[K - 1])
138 K--;
139
140 M = Mk[K];
141
142 mag_hurwitz_zeta_uiui(err, 2 * M, K);
143 mag_mul_ui(err, err, N - M);
144 mag_mul_2exp_si(err, err, term_mags[M]);
145
146 for (k = 1; k < K; k++)
147 {
148 mag_t t;
149 mag_init(t);
150 mag_set_ui_lower(t, k);
151 mag_inv(t, t);
152 mag_pow_ui(t, t, 2 * Mk[k]);
153 mag_mul_ui(t, t, N - Mk[k]);
154 mag_mul_2exp_si(t, t, term_mags[Mk[k]]);
155 mag_add(err, err, t);
156 mag_clear(t);
157 }
158 }
159 else
160 {
161 M = N;
162 }
163
164 m = sqrt(N - M);
165 m = FLINT_MAX(m, 1);
166
167 /* S3 precision */
168 wp = prec + term_mags[M];
169 wp = FLINT_MIN(wp, prec);
170 wp = FLINT_MAX(wp, 10);
171
172 acb_zero(S3);
173
174 /* todo: could avoid one mul + div with precomputation here */
175 /* u = -1 / (2 pi z)^2 */
176 acb_const_pi(u, wp);
177 acb_mul(u, u, z, wp);
178 acb_mul_2exp_si(u, u, 1);
179 acb_mul(u, u, u, wp);
180 acb_inv(u, u, wp);
181 acb_neg(u, u);
182
183 fmpz_init(kpow);
184 upow = _acb_vec_init(m + 1);
185 ukpow = _acb_vec_init(m + 1);
186
187 _acb_vec_set_powers(upow, u, m + 1, wp);
188
189 for (kodd = 1; kodd < K; kodd += 2)
190 {
191 for (k = kodd; k < K; k *= 2)
192 {
193 if (k == 1)
194 {
195 _acb_vec_set(ukpow, upow, m + 1);
196 fmpz_one(kpow);
197 kpow_exp = 0;
198 }
199 else if (k == kodd)
200 {
201 acb_set(ukpow + 0, upow + 0);
202 for (j = 1; j <= FLINT_MIN(Mk[k] - M - 1, m); j++)
203 {
204 if (j == 1)
205 fmpz_set_ui(kpow, k * k);
206 else
207 fmpz_mul_ui(kpow, kpow, k * k);
208 acb_div_fmpz(ukpow + j, upow + j, kpow, wp);
209 }
210
211 /* set kpow = k^(2M) */
212 fmpz_ui_pow_ui(kpow, k * k, M);
213 kpow_exp = 0;
214 }
215 else
216 {
217 /* compute x / k^(2j) given x / (k/2)^(2j) */
218 for (j = 1; j <= FLINT_MIN(Mk[k] - M - 1, m); j++)
219 acb_mul_2exp_si(ukpow + j, ukpow + j, -2 * j);
220 kpow_exp += 2 * M;
221 }
222
223 acb_zero(S4);
224
225 for (n = Mk[k] - 1; n >= M; n--)
226 {
227 i = n - M;
228
229 term_prec = prec + term_mags[n];
230 term_prec = FLINT_MIN(wp, prec);
231 term_prec = FLINT_MAX(term_prec, 10);
232
233 /* note: set_round makes small difference here */
234 acb_fma_ui(S4, S4, (2 * n) * (2 * n - 1), ukpow + i % m, term_prec);
235
236 if (i != 0 && i % m == 0)
237 {
238 /* note: set_round makes small difference here */
239 acb_mul(S4, S4, ukpow + m, term_prec);
240 }
241 }
242
243 /* divide by k^(2M) */
244 if (k != 1)
245 {
246 if (!fmpz_is_one(kpow))
247 acb_div_fmpz(S4, S4, kpow, wp);
248
249 acb_mul_2exp_si(S4, S4, -kpow_exp);
250 }
251
252 acb_add(S3, S3, S4, wp);
253 }
254 }
255
256 /* multiply by -2 (2M-2)! u^M z */
257 fmpz_fac_ui(kpow, 2 * M - 2);
258 acb_mul_fmpz(S3, S3, kpow, wp);
259 acb_pow_ui(u, u, M, wp);
260 acb_mul(S3, S3, u, wp);
261 acb_set_round(t, z, wp);
262 acb_mul(S3, S3, t, wp);
263 acb_mul_2exp_si(S3, S3, 1);
264 acb_neg(S3, S3);
265
266 acb_add_error_mag(S3, err);
267
268 _acb_vec_clear(upow, m + 1);
269 _acb_vec_clear(ukpow, m + 1);
270 fmpz_clear(kpow);
271
272 acb_zero(S2);
273
274 m = sqrt(M);
275 upow = _acb_vec_init(m + 1);
276 _acb_vec_set_powers(upow, w, m + 1, prec);
277
278 BERNOULLI_ENSURE_CACHED(2 * M - 2);
279
280 {
281 fmpz_t d, e, f, g, h;
282 fmpz q[4];
283
284 fmpz_init(d);
285 fmpz_init(e);
286 fmpz_init(f);
287 fmpz_init(g);
288 fmpz_init(h);
289
290 fmpz_init(q);
291 fmpz_init(q + 1);
292 fmpz_init(q + 2);
293 fmpz_init(q + 3);
294
295 for (n = M - 1; n >= 1; n--)
296 {
297 i = n - 1;
298
299 if (i >= 4 && i % m >= 3 && prec >= 512 && prec <= 4096)
300 {
301 term_mag = term_mags[n - 3];
302 term_prec = prec + term_mag;
303 term_prec = FLINT_MIN(term_prec, prec);
304 term_prec = FLINT_MAX(term_prec, 10);
305
306 fmpz_mul_ui(d, fmpq_denref(bernoulli_cache + 2 * (n - 0)), 2 * (n - 0) * (2 * (n - 0) - 1));
307 fmpz_mul_ui(e, fmpq_denref(bernoulli_cache + 2 * (n - 1)), 2 * (n - 1) * (2 * (n - 1) - 1));
308 fmpz_mul_ui(g, fmpq_denref(bernoulli_cache + 2 * (n - 2)), 2 * (n - 2) * (2 * (n - 2) - 1));
309 fmpz_mul_ui(h, fmpq_denref(bernoulli_cache + 2 * (n - 3)), 2 * (n - 3) * (2 * (n - 3) - 1));
310
311 /* q3 = egh q2 = dgh q1 = deh q0 = deg d = degh */
312 fmpz_mul(q + 3, e, g);
313 fmpz_mul(q + 0, q + 3, d);
314 fmpz_mul(q + 3, q + 3, h);
315 fmpz_mul(q + 2, d, h);
316 fmpz_mul(q + 1, q + 2, e);
317 fmpz_mul(q + 2, q + 2, g);
318 fmpz_mul(d, q + 3, d);
319
320 fmpz_mul(q + 3, q + 3, fmpq_numref(bernoulli_cache + 2 * (n - 0)));
321 fmpz_mul(q + 2, q + 2, fmpq_numref(bernoulli_cache + 2 * (n - 1)));
322 fmpz_mul(q + 1, q + 1, fmpq_numref(bernoulli_cache + 2 * (n - 2)));
323 fmpz_mul(q + 0, q + 0, fmpq_numref(bernoulli_cache + 2 * (n - 3)));
324
325 acb_dot_fmpz(t, NULL, 0, upow + i % m - 3, 1, q, 1, 4, term_prec);
326 acb_div_fmpz(t, t, d, term_prec);
327 acb_add(S2, S2, t, term_prec);
328
329 n -= 3;
330 i -= 3;
331 }
332 else if (i >= 3 && i % m >= 2)
333 {
334 term_mag = term_mags[n - 2];
335 term_prec = prec + term_mag;
336 term_prec = FLINT_MIN(term_prec, prec);
337 term_prec = FLINT_MAX(term_prec, 10);
338
339 fmpz_mul_ui(d, fmpq_denref(bernoulli_cache + 2 * (n - 0)), 2 * (n - 0) * (2 * (n - 0) - 1));
340 fmpz_mul_ui(e, fmpq_denref(bernoulli_cache + 2 * (n - 1)), 2 * (n - 1) * (2 * (n - 1) - 1));
341 fmpz_mul_ui(g, fmpq_denref(bernoulli_cache + 2 * (n - 2)), 2 * (n - 2) * (2 * (n - 2) - 1));
342
343 fmpz_mul(q + 2, e, g);
344 fmpz_mul(q + 2, q + 2, fmpq_numref(bernoulli_cache + 2 * (n - 0)));
345 fmpz_mul(q + 1, d, g);
346 fmpz_mul(q + 1, q + 1, fmpq_numref(bernoulli_cache + 2 * (n - 1)));
347 fmpz_mul(q + 0, d, e);
348 fmpz_mul(d, q + 0, g);
349 fmpz_mul(q + 0, q + 0, fmpq_numref(bernoulli_cache + 2 * (n - 2)));
350
351 acb_dot_fmpz(t, NULL, 0, upow + i % m - 2, 1, q, 1, 3, term_prec);
352 acb_div_fmpz(t, t, d, term_prec);
353 acb_add(S2, S2, t, term_prec);
354
355 n -= 2;
356 i -= 2;
357 }
358 else if (i >= 1 && i % m >= 1)
359 {
360 term_mag = term_mags[n - 1];
361 term_prec = prec + term_mag;
362 term_prec = FLINT_MIN(term_prec, prec);
363 term_prec = FLINT_MAX(term_prec, 10);
364
365 fmpz_mul_ui(d, fmpq_denref(bernoulli_cache + 2 * (n - 0)), 2 * (n - 0) * (2 * (n - 0) - 1));
366 fmpz_mul_ui(e, fmpq_denref(bernoulli_cache + 2 * (n - 1)), 2 * (n - 1) * (2 * (n - 1) - 1));
367
368 fmpz_mul(f, fmpq_numref(bernoulli_cache + 2 * (n - 0)), e);
369 acb_set_round(u, upow + i % m, term_prec);
370 acb_mul_fmpz(t, u, f, term_prec); /* todo: output-sensitive mul */
371 fmpz_mul(f, fmpq_numref(bernoulli_cache + 2 * (n - 1)), d);
372 acb_set_round(u, upow + i % m - 1, term_prec);
373 acb_mul_fmpz(u, u, f, term_prec); /* todo: output-sensitive mul */
374 acb_add(t, t, u, term_prec);
375
376 fmpz_mul(d, d, e);
377 acb_div_fmpz(t, t, d, term_prec);
378 acb_add(S2, S2, t, term_prec);
379
380 n--;
381 i--;
382 }
383 else
384 {
385 term_mag = term_mags[n];
386 term_prec = prec + term_mag;
387 term_prec = FLINT_MIN(term_prec, prec);
388 term_prec = FLINT_MAX(term_prec, 10);
389
390 acb_set_round(u, upow + i % m, term_prec);
391 acb_mul_fmpz(t, u, fmpq_numref(bernoulli_cache + 2 * n), term_prec); /* todo: output-sensitive mul */
392 fmpz_mul_ui(d, fmpq_denref(bernoulli_cache + 2 * n), 2 * n * (2 * n - 1));
393 acb_div_fmpz(t, t, d, term_prec);
394
395 acb_add(S2, S2, t, term_prec);
396 }
397
398 if (i != 0 && i % m == 0)
399 {
400 acb_set_round(u, upow + m, term_prec); /* todo: output-sensitive mul */
401 acb_mul(S2, S2, u, term_prec);
402 }
403 }
404
405 fmpz_clear(q);
406 fmpz_clear(q + 1);
407 fmpz_clear(q + 2);
408 fmpz_clear(q + 3);
409
410 fmpz_clear(d);
411 fmpz_clear(e);
412 fmpz_clear(f);
413 fmpz_clear(g);
414 fmpz_clear(h);
415 }
416
417 _acb_vec_clear(upow, m + 1);
418
419 acb_mul(S2, S2, zinv, prec);
420 acb_add(s, S2, S3, prec);
421
422 flint_free(term_mags);
423
424 if (Mk != NULL)
425 flint_free(Mk);
426
427 acb_clear(b);
428 acb_clear(t);
429 acb_clear(zinv);
430 acb_clear(w);
431 acb_clear(u);
432 acb_clear(S2);
433 acb_clear(S3);
434 acb_clear(S4);
435 mag_clear(zinv_mag);
436 mag_clear(err);
437 }
438
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12 #include "acb_hypgeom.h"
13
14 static void
15 evaluate_rect(acb_t res, const short * term_prec, slong len, const acb_t x, slong prec)
16 {
17 slong i, j, m, r, n1, n2;
18 acb_ptr xs;
19 acb_t s, t;
20 arb_struct c[17];
21
22 m = n_sqrt(len) + 1;
23 m = FLINT_MIN(m, 16);
24 r = (len + m - 1) / m;
25
26 xs = _acb_vec_init(m + 1);
27 acb_init(s);
28 acb_init(t);
29 _acb_vec_set_powers(xs, x, m + 1, prec);
30
31 acb_zero(res);
32
33 for (i = r - 1; i >= 0; i--)
34 {
35 n1 = m * i;
36 n2 = FLINT_MIN(len, n1 + m);
37
38 for (j = n1; j < n2; j++)
39 {
40 if (j == 0)
41 {
42 arb_init(c);
43 arb_one(c);
44 }
45 else
46 {
47 if (!_arb_hypgeom_gamma_coeff_shallow(arb_midref(c + j - n1), arb_radref(c + j - n1), j, term_prec[j]))
48 flint_abort();
49 }
50 }
51
52 arb_dot(acb_realref(s), NULL, 0, acb_realref(xs), 2, c, 1, n2 - n1, prec);
53 arb_dot(acb_imagref(s), NULL, 0, acb_imagref(xs), 2, c, 1, n2 - n1, prec);
54
55 #if 0
56 acb_set_round(t, xs + m, term_prec[n1]);
57 acb_mul(res, res, t, term_prec[n1]);
58 acb_add(res, res, s, term_prec[n1]);
59 #else
60 acb_mul(res, res, xs + m, term_prec[n1]);
61 acb_add(res, res, s, term_prec[n1]);
62 #endif
63 }
64
65 _acb_vec_clear(xs, m + 1);
66 acb_clear(s);
67 acb_clear(t);
68 }
69
70 /* Bound requires: |u| <= 20, N <= 10000, N != (1443, 2005, 9891). */
71 static void
72 error_bound(mag_t err, const acb_t u, slong N)
73 {
74 mag_t t;
75 mag_init(t);
76
77 acb_get_mag(t, u);
78
79 if (N >= 1443 || mag_cmp_2exp_si(t, 4) > 0)
80 {
81 mag_inf(err);
82 }
83 else
84 {
85 mag_pow_ui(err, t, N);
86 mag_mul_2exp_si(err, err, arb_hypgeom_gamma_coeffs[N].exp);
87
88 if (mag_cmp_2exp_si(t, -1) > 0)
89 mag_mul(err, err, t);
90 else
91 mag_mul_2exp_si(err, err, -1);
92
93 mag_mul_2exp_si(err, err, 3);
94
95 if (mag_cmp_2exp_si(err, -8) > 0)
96 mag_inf(err);
97 }
98
99 mag_clear(t);
100 }
101
102 static double
103 want_taylor(double x, double y, slong prec)
104 {
105 if (y < 0.0) y = -y;
106 if (x < 0.0) x = -x;
107
108 if ((prec < 128 && y > 4.0) || (prec < 256 && y > 5.0) ||
109 (prec < 512 && y > 8.0) || (prec < 1024 && y > 9.0) || y > 10.0)
110 {
111 return 0;
112 }
113
114 if (x * (1.0 + 0.75 * y) > 8 + 0.15 * prec)
115 {
116 return 0;
117 }
118
119 return 1;
120 }
121
122 int
123 acb_hypgeom_gamma_taylor(acb_t res, const acb_t z, int reciprocal, slong prec)
124 {
125 acb_t s, u;
126 int success;
127 double dua, dub, du2, log2u;
128 slong i, r, n, wp, tail_bound, goal;
129 short term_prec[ARB_HYPGEOM_GAMMA_TAB_NUM];
130 mag_t err;
131
132 if (!acb_is_finite(z) ||
133 arf_cmp_2exp_si(arb_midref(acb_imagref(z)), 4) >= 0 ||
134 arf_cmp_2exp_si(arb_midref(acb_realref(z)), 10) >= 0)
135 {
136 return 0;
137 }
138
139 dua = arf_get_d(arb_midref(acb_realref(z)), ARF_RND_UP);
140 dub = arf_get_d(arb_midref(acb_imagref(z)), ARF_RND_UP);
141 dub = fabs(dub);
142
143 if (!want_taylor(dua, dub, prec))
144 return 0;
145
146 if (dua >= 0.0)
147 r = (slong) (dua + 0.5);
148 else
149 r = -(slong) (-dua + 0.5);
150
151 acb_init(s);
152 acb_init(u);
153 mag_init(err);
154
155 success = 0;
156
157 /* Argument reduction: u = z - r */
158 acb_sub_si(u, z, r, 2 * prec + 10);
159 dua -= r;
160
161 goal = acb_rel_accuracy_bits(u);
162
163 /* not designed for wide intervals (yet) */
164 if (goal < 8)
165 {
166 success = 0;
167 goto cleanup;
168 }
169
170 goal = FLINT_MIN(goal, prec - MAG_BITS) + MAG_BITS;
171 goal = FLINT_MAX(goal, 5);
172 goal = goal + 5;
173 wp = goal + 4 + FLINT_BIT_COUNT(FLINT_ABS(r));
174
175 if (wp > ARB_HYPGEOM_GAMMA_TAB_PREC)
176 {
177 success = 0;
178 goto cleanup;
179 }
180
181 if (!want_taylor(r, dub, goal))
182 {
183 success = 0;
184 goto cleanup;
185 }
186
187 du2 = dua * dua + dub * dub;
188
189 if (du2 > 1e-8)
190 {
191 log2u = 0.5 * mag_d_log_upper_bound(du2) * 1.4426950408889634074 * (1 + 1e-14);
192 }
193 else
194 {
195 slong aexp, bexp;
196
197 aexp = arf_cmpabs_2exp_si(arb_midref(acb_realref(u)), -wp) >= 0 ? ARF_EXP(arb_midref(acb_realref(u))) : -wp;
198 bexp = arf_cmpabs_2exp_si(arb_midref(acb_imagref(u)), -wp) >= 0 ? ARF_EXP(arb_midref(acb_imagref(u))) : -wp;
199 log2u = FLINT_MAX(aexp, bexp) + 1;
200 }
201
202 term_prec[0] = wp;
203 n = 0;
204
205 for (i = 1; i < ARB_HYPGEOM_GAMMA_TAB_NUM; i++)
206 {
207 tail_bound = arb_hypgeom_gamma_coeffs[i].exp + i * log2u + 5;
208
209 if (tail_bound <= -goal)
210 {
211 n = i;
212 break;
213 }
214
215 term_prec[i] = FLINT_MIN(FLINT_MAX(wp + tail_bound, 2), wp);
216
217 if (term_prec[i] > arb_hypgeom_gamma_coeffs[i].nlimbs * FLINT_BITS)
218 {
219 success = 0;
220 goto cleanup;
221 }
222 }
223
224 if (n != 0)
225 error_bound(err, u, n);
226
227 if (n == 0 || mag_is_inf(err))
228 {
229 success = 0;
230 goto cleanup;
231 }
232
233 evaluate_rect(s, term_prec, n, u, wp);
234 acb_add_error_mag(s, err);
235
236 if (r == 0 || r == 1)
237 {
238 if (r == 0)
239 acb_mul(s, s, u, wp);
240
241 if (reciprocal)
242 {
243 acb_set_round(res, s, prec);
244 }
245 else
246 {
247 acb_one(u);
248 acb_div(res, u, s, prec);
249 }
250 }
251 else if (r >= 2)
252 {
253 acb_add_ui(u, u, 1, wp);
254 acb_hypgeom_rising_ui_rec(u, u, r - 1, wp);
255
256 if (reciprocal)
257 acb_div(res, s, u, prec);
258 else
259 acb_div(res, u, s, prec);
260 }
261 else
262 {
263 /* gamma(x) = (-1)^r / (rgamma(1+x-r)*rf(1+r-x,-r)*(x-r)) */
264 /* 1/gamma(x) = (-1)^r * rgamma(1+x-r) * rf(1+r-x,-r) * (x-r) */
265
266 acb_neg(res, z);
267 acb_add_si(res, res, 1 + r, wp);
268 acb_hypgeom_rising_ui_rec(res, res, -r, wp);
269 acb_mul(u, res, u, wp);
270
271 if (reciprocal)
272 {
273 acb_mul(res, s, u, prec);
274 }
275 else
276 {
277 acb_mul(u, s, u, wp);
278 acb_inv(res, u, prec);
279 }
280
281 if (r % 2)
282 acb_neg(res, res);
283 }
284
285 success = 1;
286
287 cleanup:
288 acb_clear(s);
289 acb_clear(u);
290 mag_clear(err);
291
292 return success;
293 }
294
0 /*
1 Copyright (C) 2014, 2015, 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12 #include "arb_hypgeom.h"
13
14 void acb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
15 const acb_t z, int use_reflect, int digamma, slong prec);
16
17 void acb_hypgeom_gamma_stirling_inner(acb_t s, const acb_t z, slong N, slong prec);
18
19 static double
20 want_taylor(double x, double y, slong prec)
21 {
22 if (y < 0.0) y = -y;
23 if (x < 0.0) x = -2.0 * x;
24
25 if ((prec < 128 && y > 4.0) || (prec < 256 && y > 5.0) ||
26 (prec < 512 && y > 8.0) || (prec < 1024 && y > 9.0) || y > 10.0)
27 {
28 return 0;
29 }
30
31 if (x * (1.0 + 0.75 * y) > 8 + 0.15 * prec)
32 {
33 return 0;
34 }
35
36 return 1;
37 }
38
39 /* Linear fit on [0.5, 1.5] for
40 lambda x: findroot(lambda y: im(loggamma(x+1j*y)) - (n+0.5)*pi */
41
42 static const double Atab[] = {
43 4.5835631239879990091,
44 6.4037921417161376741,
45 7.9938623618272375768,
46 9.4449131928216797873,
47 10.802608819487725856,
48 12.0918817314347272,
49 };
50
51 static const double Btab[] = {
52 -1.1432582881376479127,
53 -0.86248117216701645437,
54 -0.75778990135448922722,
55 -0.69734688055939976228,
56 -0.65626499937495627271,
57 -0.62578331900739100617,
58 };
59
60 void
61 _arb_const_log_pi(arb_t t, slong prec)
62 {
63 arb_const_pi(t, prec + 2);
64 arb_log(t, t, prec);
65 }
66
67 ARB_DEF_CACHED_CONSTANT(arb_const_log_pi, _arb_const_log_pi)
68
69 int
70 acb_hypgeom_lgamma_taylor(acb_t res, const acb_t z, slong prec)
71 {
72 double x, y, acc;
73 slong k, r, wp;
74 acb_t t, u;
75 int reflect;
76
77 /* Assume xerr, yerr <= 1/16 */
78 if (mag_cmp_2exp_si(arb_radref(acb_realref(z)), -4) > 0)
79 return 0;
80
81 if (mag_cmp_2exp_si(arb_radref(acb_imagref(z)), -4) > 0)
82 return 0;
83
84 acc = acb_rel_accuracy_bits(z);
85 acc = FLINT_MAX(acc, 0);
86 wp = FLINT_MIN(prec, acc + 20);
87 wp = FLINT_MAX(wp, 2);
88
89 /* x, y plus eventual rounding error */
90 x = arf_get_d(arb_midref(acb_realref(z)), ARF_RND_NEAR);
91 y = arf_get_d(arb_midref(acb_imagref(z)), ARF_RND_NEAR);
92
93 if (!want_taylor(x, y, wp))
94 return 0;
95
96 acb_init(t);
97 acb_init(u);
98
99 /* Reduce real part to (approximately) [0.5, 1.5]. */
100 r = floor(x - 0.5);
101
102 /* Reflection formula is slower but improves accuracy. */
103 reflect = (x < -3.0);
104
105 if (reflect)
106 {
107 acb_neg(u, z);
108 acb_add_si(u, u, 2 + r, 2 * prec + 10);
109 x = 2.0 + r - x;
110 y = -y;
111 }
112 else
113 {
114 acb_sub_si(u, z, r, 2 * prec + 10);
115 x = x - r;
116 }
117
118 for (k = 0; k < 6; k++)
119 {
120 if (fabs(y) <= Atab[k] + Btab[k] * x)
121 {
122 if (!acb_hypgeom_gamma_taylor(t, u, 1, wp))
123 {
124 acb_clear(t);
125 acb_clear(u);
126 return 0;
127 }
128
129 if (k % 2 == 0)
130 {
131 acb_log(t, t, wp);
132 acb_neg(t, t);
133 }
134 else
135 {
136 acb_neg(t, t);
137 acb_log(t, t, wp);
138 acb_neg(t, t);
139 }
140
141 if (k != 0)
142 {
143 arb_t pi;
144 arb_init(pi);
145 arb_const_pi(pi, wp);
146 arb_addmul_si(acb_imagref(t), pi, (y > 0) ? k : -k, wp);
147 arb_clear(pi);
148 }
149
150 if (reflect)
151 {
152 acb_t v;
153 acb_init(v);
154
155 /* loggamma(x) = log(pi) - lsin(x) - loggamma(2+r-x) - logrf(2+r-x, -r-1) */
156
157 acb_hypgeom_log_rising_ui(v, u, -r-1, wp);
158 acb_log_sin_pi(res, z, wp);
159 acb_add(res, res, v, wp);
160 acb_add(res, res, t, wp);
161 acb_neg(res, res);
162
163 arb_const_log_pi(acb_realref(t), wp);
164 arb_zero(acb_imagref(t));
165 acb_add(res, res, t, prec);
166
167 acb_clear(v);
168 }
169 else if (r == 0)
170 {
171 acb_set_round(res, t, prec);
172 }
173 else if (r > 0)
174 {
175 acb_hypgeom_log_rising_ui(res, u, r, wp);
176 acb_add(res, res, t, prec);
177 }
178 else
179 {
180 acb_hypgeom_log_rising_ui(res, z, -r, wp);
181 acb_sub(res, t, res, prec);
182 }
183
184 acb_clear(t);
185 acb_clear(u);
186 return 1;
187 }
188 }
189
190 acb_clear(t);
191 acb_clear(u);
192 return 0;
193 }
194
195 void
196 acb_hypgeom_lgamma(acb_t y, const acb_t x, slong prec)
197 {
198 int reflect;
199 slong r, n, wp;
200 acb_t t, u, v;
201 double acc;
202
203 if (acb_is_real(x) && arb_is_positive(acb_realref(x)))
204 {
205 arb_hypgeom_lgamma(acb_realref(y), acb_realref(x), prec);
206 arb_zero(acb_imagref(y));
207 return;
208 }
209
210 if (acb_hypgeom_lgamma_taylor(y, x, prec))
211 return;
212
213 acc = acb_rel_accuracy_bits(x);
214 acc = FLINT_MAX(acc, 0);
215 wp = FLINT_MIN(prec, acc + 20);
216 wp = FLINT_MAX(wp, 2);
217 wp = wp + FLINT_BIT_COUNT(wp);
218
219 acb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 0, wp);
220
221 acb_init(t);
222 acb_init(u);
223 acb_init(v);
224
225 if (reflect)
226 {
227 /* log gamma(x) = log rf(1-x, r) - log gamma(1-x+r) - log sin(pi x) + log(pi) */
228 acb_sub_ui(u, x, 1, wp);
229 acb_neg(u, u);
230
231 acb_hypgeom_log_rising_ui(t, u, r, wp);
232
233 acb_add_ui(u, u, r, wp);
234 acb_hypgeom_gamma_stirling_inner(v, u, n, wp);
235 acb_sub(t, t, v, wp);
236
237 acb_log_sin_pi(u, x, wp);
238 acb_sub(t, t, u, wp);
239
240 arb_const_log_pi(acb_realref(u), wp);
241 arb_zero(acb_imagref(u));
242
243 acb_add(y, t, u, wp);
244 }
245 else
246 {
247 /* log gamma(x) = log gamma(x+r) - log rf(x,r) */
248 acb_add_ui(t, x, r, wp);
249 acb_hypgeom_gamma_stirling_inner(u, t, n, wp);
250 acb_hypgeom_log_rising_ui(t, x, r, wp);
251 acb_sub(y, u, t, prec);
252 }
253
254 if (!acb_is_finite(y))
255 acb_indeterminate(y);
256
257 acb_clear(t);
258 acb_clear(u);
259 acb_clear(v);
260 }
261
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12 #include "arb_hypgeom.h"
13
14 static void
15 _acb_log_rising_correct_branch(acb_t res,
16 const acb_t t_wrong, const acb_t z, ulong r, slong prec)
17 {
18 acb_t f;
19 arb_t pi, u, v;
20 fmpz_t pi_mult;
21 slong i, argprec;
22
23 acb_init(f);
24
25 arb_init(u);
26 arb_init(pi);
27 arb_init(v);
28
29 fmpz_init(pi_mult);
30
31 argprec = FLINT_MIN(prec, 40);
32
33 arb_zero(u);
34 for (i = 0; i < r; i++)
35 {
36 acb_add_ui(f, z, i, argprec);
37 acb_arg(v, f, argprec);
38 arb_add(u, u, v, argprec);
39 }
40
41 if (argprec == prec)
42 {
43 arb_set(acb_imagref(res), u);
44 }
45 else
46 {
47 arb_sub(v, u, acb_imagref(t_wrong), argprec);
48 arb_const_pi(pi, argprec);
49 arb_div(v, v, pi, argprec);
50
51 if (arb_get_unique_fmpz(pi_mult, v))
52 {
53 arb_const_pi(v, prec);
54 arb_mul_fmpz(v, v, pi_mult, prec);
55 arb_add(acb_imagref(res), acb_imagref(t_wrong), v, prec);
56 }
57 else
58 {
59 arb_zero(u);
60 for (i = 0; i < r; i++)
61 {
62 acb_add_ui(f, z, i, prec);
63 acb_arg(v, f, prec);
64 arb_add(u, u, v, prec);
65 }
66 arb_set(acb_imagref(res), u);
67 }
68 }
69
70 arb_set(acb_realref(res), acb_realref(t_wrong));
71
72 acb_clear(f);
73
74 arb_clear(u);
75 arb_clear(v);
76 arb_clear(pi);
77
78 fmpz_clear(pi_mult);
79 }
80
81 void
82 acb_hypgeom_log_rising_ui_jet_fallback(acb_ptr res, const acb_t z, slong r, slong len, slong prec)
83 {
84 acb_t t;
85 acb_init(t);
86 acb_set(t, z);
87
88 if (len == 1)
89 {
90 acb_hypgeom_rising_ui_rec(res, t, r, prec);
91 acb_log(res, res, prec);
92 }
93 else
94 {
95 acb_hypgeom_rising_ui_jet(res, t, r, len, prec);
96 _acb_poly_log_series(res, res, FLINT_MIN(len, r + 1), len, prec);
97 }
98
99 _acb_log_rising_correct_branch(res, res, t, r, prec);
100
101 acb_clear(t);
102 }
103
104 void
105 acb_hypgeom_log_rising_ui_jet(acb_ptr res, const acb_t z, ulong r, slong len, slong prec)
106 {
107 double za, zb, sa, sb, ta, tb, ma, mb, zak;
108 slong k, correction;
109 int neg;
110
111 if (r == 0 || len == 0)
112 {
113 _acb_vec_zero(res, len);
114 return;
115 }
116
117 if (r == 1)
118 {
119 if (len == 1)
120 {
121 acb_log(res, z, prec);
122 }
123 else
124 {
125 acb_set(res, z);
126 acb_one(res + 1);
127 _acb_poly_log_series(res, res, 2, len, prec);
128 }
129 return;
130 }
131
132 if (arb_is_zero(acb_imagref(z)))
133 {
134 if (arb_is_positive(acb_realref(z)))
135 {
136 acb_hypgeom_rising_ui_jet(res, z, r, len, prec);
137 _acb_poly_log_series(res, res, FLINT_MIN(len, r + 1), len, prec);
138 }
139 else if (arb_contains_int(acb_realref(z)))
140 {
141 _acb_vec_indeterminate(res, len);
142 }
143 else
144 {
145 arb_t t, u;
146
147 arb_init(t);
148 arb_init(u);
149
150 arb_floor(u, acb_realref(z), prec);
151 arb_neg(u, u);
152
153 arb_set_ui(t, r);
154 arb_min(u, u, t, prec);
155 arb_const_pi(t, prec);
156 arb_mul(t, u, t, prec);
157
158 acb_hypgeom_rising_ui_jet(res, z, r, len, prec);
159 _acb_vec_neg(res, res, FLINT_MIN(len, r + 1));
160 _acb_poly_log_series(res, res, FLINT_MIN(len, r + 1), len, prec);
161
162 arb_swap(acb_imagref(res), t);
163
164 arb_clear(t);
165 arb_clear(u);
166 }
167
168 return;
169 }
170
171 /* We use doubles if it is safe.
172 - No overflow/underflow possible.
173 - Input is accurate enough (and not too close to the real line).
174 Note: the relative error for a complex floating-point
175 multiplication is bounded by sqrt(5) * eps, and we basically only
176 need to determine the result to within one quadrant. */
177
178 /* todo: wide */
179 if (prec <= 20 || acb_rel_accuracy_bits(z) < 30 || arb_rel_accuracy_bits(acb_imagref(z)) < 30)
180 {
181 acb_hypgeom_log_rising_ui_jet_fallback(res, z, r, len, prec);
182 return;
183 }
184
185 za = arf_get_d(arb_midref(acb_realref(z)), ARF_RND_NEAR);
186 zb = arf_get_d(arb_midref(acb_imagref(z)), ARF_RND_NEAR);
187
188 if (!(r <= 1e6 && za <= 1e6 && za >= -1e6 && zb <= 1e6 && zb >= -1e6 && (zb > 1e-6 || zb < -1e-6)))
189 {
190 acb_hypgeom_log_rising_ui_jet_fallback(res, z, r, len, prec);
191 return;
192 }
193
194 sa = za;
195 sb = zb;
196 correction = 0;
197 neg = 0;
198
199 for (k = 1; k < r; k++)
200 {
201 zak = za + k;
202
203 ta = sa * zak - sb * zb;
204 tb = sb * zak + sa * zb;
205
206 if (zb > 0.0)
207 {
208 if (sb >= 0.0 && tb < 0.0)
209 correction += 2;
210 }
211 else
212 {
213 if (sb < 0.0 && tb >= 0.0)
214 correction += 2;
215 }
216
217 sa = ta;
218 sb = tb;
219
220 if (k % 4 == 0)
221 {
222 ma = fabs(sa);
223 mb = fabs(sb);
224
225 /* Rescale to protect against overflow. */
226 if (ma > mb)
227 ma = 1.0 / ma;
228 else
229 ma = 1.0 / mb;
230
231 sa *= ma;
232 sb *= ma;
233 }
234 }
235
236 if (sa < 0.0)
237 {
238 neg = 1;
239
240 if ((zb > 0.0 && sb >= 0.0) || (zb < 0.0 && sb < 0.0))
241 correction += 1;
242 else
243 correction -= 1;
244 }
245
246 if (len == 1)
247 {
248 acb_hypgeom_rising_ui_rec(res, z, r, prec);
249 if (neg)
250 acb_neg(res, res);
251 acb_log(res, res, prec);
252 }
253 else
254 {
255 acb_hypgeom_rising_ui_jet(res, z, r, len, prec);
256 if (neg)
257 _acb_vec_neg(res, res, FLINT_MIN(len, r + 1));
258 _acb_poly_log_series(res, res, FLINT_MIN(len, r + 1), len, prec);
259 }
260
261 if (zb < 0.0)
262 correction = -correction;
263
264 if (correction != 0)
265 {
266 arb_t t;
267 arb_init(t);
268 arb_const_pi(t, prec);
269 arb_addmul_si(acb_imagref(res), t, correction, prec);
270 arb_clear(t);
271 }
272 }
273
274 void
275 acb_hypgeom_log_rising_ui(acb_ptr res, const acb_t z, ulong r, slong prec)
276 {
277 acb_hypgeom_log_rising_ui_jet(res, z, r, 1, prec);
278 }
279
0 /*
1 Copyright (C) 2014 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 void
14 acb_hypgeom_rising_ui(acb_t y, const acb_t x, ulong n, slong prec)
15 {
16 if (n < FLINT_MAX(prec, 100))
17 {
18 acb_hypgeom_rising_ui_rec(y, x, n, prec);
19 }
20 else
21 {
22 acb_t t;
23 acb_init(t);
24 acb_add_ui(t, x, n, prec);
25 acb_gamma(t, t, prec);
26 acb_rgamma(y, x, prec);
27 acb_mul(y, y, t, prec);
28 acb_clear(t);
29 }
30 }
31
32 void
33 acb_hypgeom_rising(acb_t y, const acb_t x, const acb_t n, slong prec)
34 {
35 if (acb_is_int(n) && arf_sgn(arb_midref(acb_realref(n))) >= 0 &&
36 arf_cmpabs_ui(arb_midref(acb_realref(n)), FLINT_MAX(prec, 100)) < 0)
37 {
38 acb_hypgeom_rising_ui_rec(y, x,
39 arf_get_si(arb_midref(acb_realref(n)), ARF_RND_DOWN), prec);
40 }
41 else
42 {
43 acb_t t;
44 acb_init(t);
45 acb_add(t, x, n, prec);
46 acb_gamma(t, t, prec);
47 acb_rgamma(y, x, prec);
48 acb_mul(y, y, t, prec);
49 acb_clear(t);
50 }
51 }
52
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 static void
14 bsplit(acb_t y, const acb_t x, ulong a, ulong b, slong prec)
15 {
16 if (b - a <= 4)
17 {
18 if (a == 0)
19 {
20 acb_hypgeom_rising_ui_forward(y, x, b, prec);
21 }
22 else
23 {
24 acb_add_ui(y, x, a, prec);
25 acb_hypgeom_rising_ui_forward(y, y, b - a, prec);
26 }
27 }
28 else
29 {
30 acb_t t, u;
31 ulong m = a + (b - a) / 2;
32
33 acb_init(t);
34 acb_init(u);
35
36 bsplit(t, x, a, m, prec);
37 bsplit(u, x, m, b, prec);
38
39 acb_mul(y, t, u, prec);
40
41 acb_clear(t);
42 acb_clear(u);
43 }
44 }
45
46 void
47 acb_hypgeom_rising_ui_bs(acb_t res, const acb_t x, ulong n, slong prec)
48 {
49 if (n <= 1)
50 {
51 if (n == 0)
52 acb_one(res);
53 else
54 acb_set_round(res, x, prec);
55 return;
56 }
57
58 {
59 acb_t t;
60 slong wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
61
62 acb_init(t);
63 bsplit(t, x, 0, n, wp);
64 acb_set_round(res, t, prec);
65 acb_clear(t);
66 }
67 }
68
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 void _arb_increment_fast(arb_t x, slong prec);
14
15 void
16 acb_hypgeom_rising_ui_forward(acb_t res, const acb_t x, ulong n, slong prec)
17 {
18 acb_t t;
19 ulong k;
20 slong wp;
21
22 if (n <= 1)
23 {
24 if (n == 0)
25 acb_one(res);
26 else
27 acb_set_round(res, x, prec);
28 return;
29 }
30
31 wp = prec + FLINT_BIT_COUNT(n);
32
33 acb_init(t);
34
35 acb_add_ui(t, x, 1, wp);
36 acb_mul(res, x, t, (n == 2) ? prec : wp);
37
38 for (k = 2; k < n; k++)
39 {
40 _arb_increment_fast(acb_realref(t), wp);
41 acb_mul(res, res, t, k == (n - 1) ? prec : wp);
42 }
43
44 acb_clear(t);
45 }
46
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 void
14 acb_hypgeom_rising_ui_jet(acb_ptr res, const acb_t x, ulong n, slong len, slong prec)
15 {
16 if (len == 1)
17 {
18 acb_hypgeom_rising_ui_rec(res, x, n, prec);
19 }
20 else if (n <= 7)
21 {
22 acb_hypgeom_rising_ui_jet_powsum(res, x, n, len, prec);
23 }
24 else if (len == 2)
25 {
26 if (n <= 30 || acb_bits(x) >= prec / 128)
27 acb_hypgeom_rising_ui_jet_rs(res, x, n, 0, len, prec);
28 else
29 acb_hypgeom_rising_ui_jet_bs(res, x, n, len, prec);
30 }
31 else
32 {
33 if (n <= 20 || (n <= 200 && prec > 400 * n && acb_bits(x) >= prec / 4))
34 {
35 acb_hypgeom_rising_ui_jet_powsum(res, x, n, len, prec);
36 }
37 else if (len >= 64 || (acb_bits(x) + 1 < prec / 1024 && n >= 32))
38 {
39 acb_hypgeom_rising_ui_jet_bs(res, x, n, len, prec);
40 }
41 else
42 {
43 acb_hypgeom_rising_ui_jet_rs(res, x, n, 0, len, prec);
44 }
45 }
46 }
47
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 static void
14 bsplit(acb_ptr res, const acb_t x, ulong a, ulong b, slong trunc, slong prec)
15 {
16 trunc = FLINT_MIN(trunc, b - a + 1);
17
18 if (b - a <= 12)
19 {
20 if (a == 0)
21 {
22 acb_hypgeom_rising_ui_jet_powsum(res, x, b - a, FLINT_MIN(trunc, b - a + 1), prec);
23 }
24 else
25 {
26 acb_t t;
27 acb_init(t);
28 acb_add_ui(t, x, a, prec);
29 acb_hypgeom_rising_ui_jet_powsum(res, t, b - a, FLINT_MIN(trunc, b - a + 1), prec);
30 acb_clear(t);
31 }
32 }
33 else
34 {
35 acb_ptr L, R;
36 slong len1, len2;
37
38 slong m = a + (b - a) / 2;
39
40 len1 = poly_pow_length(2, m - a, trunc);
41 len2 = poly_pow_length(2, b - m, trunc);
42
43 L = _acb_vec_init(len1 + len2);
44 R = L + len1;
45
46 bsplit(L, x, a, m, trunc, prec);
47 bsplit(R, x, m, b, trunc, prec);
48
49 _acb_poly_mullow(res, L, len1, R, len2,
50 FLINT_MIN(trunc, len1 + len2 - 1), prec);
51
52 _acb_vec_clear(L, len1 + len2);
53 }
54 }
55
56 void
57 acb_hypgeom_rising_ui_jet_bs(acb_ptr res, const acb_t x, ulong n, slong len, slong prec)
58 {
59 if (len == 0)
60 return;
61
62 if (len > n + 1)
63 {
64 _acb_vec_zero(res + n + 1, len - n - 1);
65 len = n + 1;
66 }
67
68 if (len == n + 1)
69 {
70 acb_one(res + n);
71 len = n;
72 }
73
74 if (n <= 1)
75 {
76 if (n == 1)
77 acb_set_round(res, x, prec);
78 return;
79 }
80
81 bsplit(res, x, 0, n, len, prec);
82 }
83
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 void
14 acb_hypgeom_rising_ui_jet_powsum(acb_ptr res, const acb_t x, ulong n, slong len, slong prec)
15 {
16 slong i, j, k, wp;
17 acb_ptr xpow;
18 TMP_INIT;
19
20 if (len == 0)
21 return;
22
23 if (len > n + 1)
24 {
25 _acb_vec_zero(res + n + 1, len - n - 1);
26 len = n + 1;
27 }
28
29 if (len == n + 1)
30 {
31 acb_one(res + n);
32 len = n;
33 }
34
35 if (n <= 1)
36 {
37 if (n == 1)
38 acb_set_round(res, x, prec);
39 return;
40 }
41
42 if (len == 1)
43 {
44 acb_hypgeom_rising_ui_rs(res, x, n, 0, prec);
45 return;
46 }
47
48 if (n == 2)
49 {
50 acb_mul_2exp_si(res + 1, x, 1);
51 acb_add_ui(res + 1, res + 1, 1, prec);
52 acb_mul(res, x, x, prec + 4);
53 acb_add(res, res, x, prec);
54 return;
55 }
56
57 if (n <= 12 || (FLINT_BITS == 64 && n <= 20))
58 {
59 mp_ptr c;
60 TMP_START;
61
62 wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
63 c = TMP_ALLOC(sizeof(mp_limb_t) * (n + 1) * len);
64
65 _nmod_vec_zero(c, (n + 1) * len);
66
67 c[0] = 0;
68 c[1] = 1;
69 c[(n + 1) + 0] = 1;
70
71 for (i = 2; i <= n; i++)
72 {
73 for (j = FLINT_MIN(len - 1, i); j >= 0; j--)
74 {
75 slong ln, pos;
76
77 ln = i + 1 - j;
78 pos = (n + 1) * j;
79 if (i == j)
80 {
81 c[pos] = 1;
82 }
83 else
84 {
85 c[pos + ln - 1] = c[pos + ln - 2];
86 for (k = ln - 2; k >= 1; k--)
87 c[pos + k] = c[pos + k] * (i - 1) + c[pos + k - 1];
88 c[pos + 0] *= (i - 1);
89 if (j != 0)
90 for (k = ln - 1; k >= 0; k--)
91 c[pos + k] += c[pos - (n + 1) + k];
92 }
93 }
94 }
95
96 xpow = _acb_vec_init(n + 1);
97 _acb_vec_set_powers(xpow, x, n + 1, wp);
98
99 acb_dot_ui(res, NULL, 0, xpow + 1, 1, c + 1, 1, n, prec);
100
101 for (i = 1; i < len; i++)
102 acb_dot_ui(res + i, NULL, 0, xpow, 1, c + (n + 1) * i, 1, n + 1 - i, prec);
103
104 _acb_vec_clear(xpow, n + 1);
105 TMP_END;
106 }
107 else
108 {
109 fmpz * c;
110
111 wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
112 c = _fmpz_vec_init((n + 1) * len);
113
114 fmpz_one(c + 1);
115 fmpz_one(c + (n + 1) + 0);
116
117 for (i = 2; i <= n; i++)
118 {
119 for (j = FLINT_MIN(len - 1, i); j >= 0; j--)
120 {
121 slong ln, pos;
122
123 ln = i + 1 - j;
124 pos = (n + 1) * j;
125 if (i == j)
126 {
127 fmpz_one(c + pos);
128 }
129 else
130 {
131 fmpz_set(c + pos + ln - 1, c + pos + ln - 2);
132 for (k = ln - 2; k >= 1; k--)
133 {
134 fmpz_mul_ui(c + pos + k, c + pos + k, i - 1);
135 fmpz_add(c + pos + k, c + pos + k, c + pos + k - 1);
136 }
137
138 fmpz_mul_ui(c + pos + 0, c + pos + 0, i - 1);
139 if (j != 0)
140 for (k = ln - 1; k >= 0; k--)
141 fmpz_add(c + pos + k, c + pos + k, c + pos - (n + 1) + k);
142 }
143 }
144 }
145
146 xpow = _acb_vec_init(n + 1);
147 _acb_vec_set_powers(xpow, x, n + 1, wp);
148
149 acb_dot_fmpz(res, NULL, 0, xpow + 1, 1, c + 1, 1, n, prec);
150
151 for (i = 1; i < len; i++)
152 acb_dot_fmpz(res + i, NULL, 0, xpow, 1, c + (n + 1) * i, 1, n + 1 - i, prec);
153
154 _acb_vec_clear(xpow, n + 1);
155 _fmpz_vec_clear(c, (n + 1) * len);
156 }
157 }
158
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12 #include "acb_hypgeom.h"
13
14 void
15 acb_hypgeom_rising_ui_jet_rs(acb_ptr res, const acb_t x, ulong n, ulong m, slong len, slong prec)
16 {
17 slong i, j, k, l, m0, xmlen, tlen, ulen, climbs, climbs_max, wp;
18 acb_ptr tmp, xpow;
19 acb_ptr t, u;
20 mp_ptr c;
21 TMP_INIT;
22
23 if (len == 0)
24 return;
25
26 if (len > n + 1)
27 {
28 _acb_vec_zero(res + n + 1, len - n - 1);
29 len = n + 1;
30 }
31
32 if (len == n + 1)
33 {
34 acb_one(res + n);
35 len = n;
36 }
37
38 if (n <= 1)
39 {
40 if (n == 1)
41 acb_set_round(res, x, prec);
42 return;
43 }
44
45 if (len == 1)
46 {
47 acb_hypgeom_rising_ui_rs(res, x, n, m, prec);
48 return;
49 }
50
51 TMP_START;
52
53 if (m == 0)
54 {
55 if (n <= 7)
56 m = n;
57 else if (n <= 12)
58 m = (n + 1) / 2;
59 else if (n <= 32)
60 m = (n + 2) / 3;
61 else
62 {
63 m0 = n_sqrt(n);
64 m = 8 + 0.5 * pow(prec, 0.4);
65 m = FLINT_MIN(m, m0);
66 m = FLINT_MIN(m, 64);
67 }
68 }
69
70 wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
71
72 climbs_max = FLINT_BIT_COUNT(n - 1) * m;
73 c = TMP_ALLOC(sizeof(mp_limb_t) * climbs_max * m);
74
75 /* length of (x+t)^m */
76 xmlen = FLINT_MIN(len, m + 1);
77
78 tmp = _acb_vec_init(2 * len + (m + 1) * xmlen);
79 t = tmp;
80 u = tmp + len;
81 xpow = tmp + 2 * len;
82
83 _acb_vec_set_powers(xpow, x, m + 1, wp);
84
85 tlen = 1;
86
87 /* First derivatives */
88 for (i = 1; i <= m; i++)
89 acb_mul_ui(xpow + (m + 1) + i, xpow + i - 1, i, wp);
90
91 /* Higher derivatives if we need them */
92 if (len >= 3)
93 {
94 fmpz * f = _fmpz_vec_init(len);
95
96 fmpz_one(f + 0);
97 fmpz_one(f + 1);
98
99 for (i = 2; i <= m; i++)
100 {
101 for (j = FLINT_MIN(xmlen - 1, i + 1); j >= 1; j--)
102 fmpz_add(f + j, f + j, f + j - 1);
103
104 for (j = 2; j < FLINT_MIN(xmlen, i + 1); j++)
105 acb_mul_fmpz(xpow + (m + 1) * j + i, xpow + i - j, f + j, wp);
106 }
107
108 _fmpz_vec_clear(f, len);
109 }
110
111 for (k = 0; k < n; k += m)
112 {
113 l = FLINT_MIN(m, n - k);
114 climbs = FLINT_BIT_COUNT(k + l - 1) * l;
115 climbs = (climbs + FLINT_BITS - 1) / FLINT_BITS;
116
117 ulen = FLINT_MIN(len, l + 1);
118
119 if (l == 1)
120 {
121 acb_add_ui(u, x, k, wp);
122 acb_one(u + 1);
123 }
124 else
125 {
126 if (climbs == 1)
127 {
128 _arb_hypgeom_rising_coeffs_1(c, k, l);
129 for (j = 0; j < ulen; j++)
130 acb_dot_ui(u + j, xpow + (m + 1) * j + l, 0, xpow + (m + 1) * j + j, 1, c + j, 1, l - j, wp);
131 }
132 else if (climbs == 2)
133 {
134 _arb_hypgeom_rising_coeffs_2(c, k, l);
135 for (j = 0; j < ulen; j++)
136 acb_dot_uiui(u + j, xpow + (m + 1) * j + l, 0, xpow + (m + 1) * j + j, 1, c + 2 * j, 1, l - j, wp);
137 }
138 else
139 {
140 fmpz * f = (fmpz *) c;
141
142 for (i = 0; i < l; i++)
143 fmpz_init(f + i);
144
145 _arb_hypgeom_rising_coeffs_fmpz(f, k, l);
146
147 for (j = 0; j < ulen; j++)
148 acb_dot_fmpz(u + j, xpow + (m + 1) * j + l, 0, xpow + (m + 1) * j + j, 1, f + j, 1, l - j, wp);
149
150 for (i = 0; i < l; i++)
151 fmpz_clear(f + i);
152 }
153 }
154
155 if (k == 0)
156 {
157 tlen = ulen;
158 _acb_vec_swap(t, u, ulen);
159 }
160 else
161 {
162 _acb_poly_mullow(res, t, tlen, u, ulen, FLINT_MIN(len, tlen + ulen - 1), wp);
163 tlen = FLINT_MIN(len, tlen + ulen - 1);
164 _acb_vec_swap(t, res, tlen);
165 }
166 }
167
168 _acb_vec_set_round(res, t, len, prec);
169
170 _acb_vec_clear(tmp, 2 * len + (m + 1) * xmlen);
171 TMP_END;
172 }
173
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12 #include "acb_hypgeom.h"
13
14 void
15 acb_hypgeom_rising_ui_rec(acb_t res, const acb_t x, ulong n, slong prec)
16 {
17 if (n <= 1)
18 {
19 if (n == 0)
20 acb_one(res);
21 else
22 acb_set_round(res, x, prec);
23 return;
24 }
25
26 if (arb_is_zero(acb_imagref(x)))
27 {
28 arb_hypgeom_rising_ui_rec(acb_realref(res), acb_realref(x), n, prec);
29 arb_zero(acb_imagref(res));
30 return;
31 }
32
33 if (n == 2 && prec <= 1024)
34 {
35 if (res != x)
36 acb_set(res, x);
37 acb_addmul(res, x, x, prec);
38 return;
39 }
40
41 if (n <= 5 && prec <= 512)
42 {
43 acb_hypgeom_rising_ui_forward(res, x, n, prec);
44 }
45 else
46 {
47 if (n >= 20 && acb_bits(x) < prec / 8)
48 acb_hypgeom_rising_ui_bs(res, x, n, prec);
49 else
50 acb_hypgeom_rising_ui_rs(res, x, n, 0, prec);
51 }
52 }
53
4242 else
4343 {
4444 m0 = n_sqrt(n);
45 m = 8 + 0.27 * pow(FLINT_MAX(0, prec - 1024), 0.4);
45 m = 8 + 0.27 * pow(1.5 * FLINT_MAX(0, prec - 1024), 0.4);
4646 m = FLINT_MIN(m, m0);
4747 m = FLINT_MIN(m, 64);
4848 }
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("gamma_stirling_sum....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
24 {
25 acb_t z, s1, s2;
26 slong prec, N, K;
27
28 prec = 2 + n_randint(state, 800);
29 N = n_randint(state, 200);
30 K = n_randint(state, 20);
31
32 acb_init(z);
33 acb_init(s1);
34 acb_init(s2);
35
36 acb_randtest(z, state, prec, 10 + n_randint(state, 200));
37
38 acb_hypgeom_gamma_stirling_sum_horner(s1, z, N, prec);
39 acb_hypgeom_gamma_stirling_sum_improved(s2, z, N, K, prec);
40
41 if (!acb_overlaps(s1, s2))
42 {
43 flint_printf("FAIL\n\n");
44 flint_printf("N = %wd, K = %wd, prec = %wd\n\n", N, K, prec);
45 flint_printf("z = "); acb_printn(z, 1000, 0); flint_printf("\n\n");
46 flint_printf("s1 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
47 flint_printf("s2 = "); acb_printn(s2, 1000, 0); flint_printf("\n\n");
48 flint_abort();
49 }
50
51 acb_clear(z);
52 acb_clear(s1);
53 acb_clear(s2);
54 }
55
56 flint_randclear(state);
57 flint_cleanup();
58 flint_printf("PASS\n");
59 return EXIT_SUCCESS;
60 }
61
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("gamma_taylor....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
24 {
25 acb_t x, s1, s2, a, b;
26 slong prec, ebits, prec2;
27 int success, success2, alias, reciprocal;
28
29 if (n_randint(state, 10) == 0)
30 prec = 2 + n_randint(state, 4000);
31 else
32 prec = 2 + n_randint(state, 300);
33
34 if (n_randint(state, 10) == 0)
35 ebits = 100;
36 else
37 ebits = 10;
38
39 prec2 = prec + 1 + n_randint(state, 30);
40
41 acb_init(x);
42 acb_init(s1);
43 acb_init(s2);
44 acb_init(a);
45 acb_init(b);
46
47 acb_randtest(x, state, prec, ebits);
48 acb_randtest(s1, state, prec, 10);
49 acb_randtest(s2, state, prec, 10);
50 alias = n_randint(state, 2);
51 reciprocal = n_randint(state, 2);
52
53 if (alias)
54 {
55 success = acb_hypgeom_gamma_taylor(s1, x, reciprocal, prec);
56 }
57 else
58 {
59 acb_set(s1, x);
60 success = acb_hypgeom_gamma_taylor(s1, s1, reciprocal, prec);
61 }
62
63 if (success)
64 {
65 /* printf("%ld\n", iter); */
66
67 /* Compare with Stirling series algorithm. */
68 acb_hypgeom_gamma_stirling(s2, x, reciprocal, prec);
69
70 if (!acb_overlaps(s1, s2))
71 {
72 flint_printf("FAIL\n\n");
73 flint_printf("prec = %wd\n\n", prec);
74 flint_printf("x = "); acb_printn(x, 1000, 0); flint_printf("\n\n");
75 flint_printf("s1 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
76 flint_printf("s2 = "); acb_printn(s2, 1000, 0); flint_printf("\n\n");
77 acb_sub(s1, s1, s2, prec2);
78 flint_printf("s1 - s2 = "); acb_printd(s1, 1000); flint_printf("\n\n");
79 flint_abort();
80 }
81
82 /* Compare with different level of precision. */
83 success2 = acb_hypgeom_gamma_taylor(s2, x, reciprocal, prec2);
84
85 if (success2 && !acb_overlaps(s1, s2))
86 {
87 flint_printf("FAIL (2)\n\n");
88 flint_printf("prec = %wd\n\n", prec);
89 flint_printf("x = "); acb_printn(x, 1000, 0); flint_printf("\n\n");
90 flint_printf("s1 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
91 flint_printf("s2 = "); acb_printn(s2, 1000, 0); flint_printf("\n\n");
92 acb_sub(s1, s1, s2, prec2);
93 flint_printf("s1 - s2 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
94 flint_abort();
95 }
96
97 acb_get_mid(a, x);
98
99 if (n_randint(state, 2))
100 {
101 arf_set_mag(arb_midref(acb_realref(b)), arb_radref(acb_realref(x)));
102 arf_set_mag(arb_midref(acb_imagref(b)), arb_radref(acb_imagref(x)));
103
104 if (n_randint(state, 2))
105 acb_neg(b, b);
106 if (n_randint(state, 2))
107 acb_conj(b, b);
108
109 acb_add(a, a, b, prec2);
110 }
111
112 success2 = acb_hypgeom_gamma_taylor(s2, a, reciprocal, prec2);
113
114 if (success2 && !acb_overlaps(s1, s2))
115 {
116 flint_printf("FAIL (3)\n\n");
117 flint_printf("prec = %wd\n\n", prec);
118 flint_printf("x = "); acb_printn(x, 1000, 0); flint_printf("\n\n");
119 flint_printf("s1 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
120 flint_printf("s2 = "); acb_printn(s2, 1000, 0); flint_printf("\n\n");
121 acb_sub(s1, s1, s2, prec2);
122 flint_printf("s1 - s2 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
123 flint_abort();
124 }
125 }
126
127 acb_clear(x);
128 acb_clear(s1);
129 acb_clear(s2);
130 acb_clear(a);
131 acb_clear(b);
132 }
133
134 flint_randclear(state);
135 flint_cleanup();
136 flint_printf("PASS\n");
137 return EXIT_SUCCESS;
138 }
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("lgamma....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
24 {
25 acb_t z, s1, s2, a, b;
26 slong prec, ebits, prec2;
27
28 prec = 2 + n_randint(state, 200);
29
30 if (n_randint(state, 10) == 0)
31 prec = 2 + n_randint(state, 1000);
32
33 if (n_randint(state, 10) == 0)
34 ebits = 100;
35 else
36 ebits = 10;
37 ebits = 2;
38
39 prec2 = 2 + n_randint(state, 200);
40
41 acb_init(z);
42 acb_init(s1);
43 acb_init(s2);
44 acb_init(a);
45 acb_init(b);
46
47 acb_randtest(z, state, prec, ebits);
48 acb_randtest(s1, state, prec, 10);
49 acb_randtest(s2, state, prec, 10);
50
51 if (n_randint(state, 2))
52 {
53 acb_hypgeom_lgamma(s1, z, prec);
54 }
55 else
56 {
57 acb_set(s1, z);
58 acb_hypgeom_lgamma(s1, s1, prec);
59 }
60
61 acb_add_ui(s2, z, 1, prec2);
62 acb_hypgeom_lgamma(s2, s2, prec2);
63 acb_log(a, z, prec2);
64 acb_sub(s2, s2, a, prec2);
65
66 if (!acb_overlaps(s1, s2))
67 {
68 flint_printf("FAIL\n\n");
69 flint_printf("prec = %wd\n\n", prec);
70 flint_printf("z = "); acb_printn(z, 1000, 0); flint_printf("\n\n");
71 flint_printf("s1 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
72 flint_printf("s2 = "); acb_printn(s2, 1000, 0); flint_printf("\n\n");
73 acb_sub(s1, s1, s2, prec2);
74 flint_printf("s1 - s2 = "); acb_printd(s1, 1000); flint_printf("\n\n");
75 flint_abort();
76 }
77
78 acb_get_mid(a, z);
79
80 if (n_randint(state, 2))
81 {
82 arf_set_mag(arb_midref(acb_realref(b)), arb_radref(acb_realref(z)));
83 arf_set_mag(arb_midref(acb_imagref(b)), arb_radref(acb_imagref(z)));
84
85 if (n_randint(state, 2))
86 acb_neg(b, b);
87 if (n_randint(state, 2))
88 acb_conj(b, b);
89
90 acb_add(a, a, b, prec);
91 }
92
93 acb_hypgeom_lgamma(s2, a, prec);
94
95 if (!acb_overlaps(s1, s2))
96 {
97 flint_printf("FAIL (2)\n\n");
98 flint_printf("prec = %wd\n\n", prec);
99 flint_printf("z = "); acb_printn(z, 1000, 0); flint_printf("\n\n");
100 flint_printf("a = "); acb_printn(a, 1000, 0); flint_printf("\n\n");
101 flint_printf("s1 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
102 flint_printf("s2 = "); acb_printn(s2, 1000, 0); flint_printf("\n\n");
103 acb_sub(s1, s1, s2, prec2);
104 flint_printf("s1 - s2 = "); acb_printd(s1, 1000); flint_printf("\n\n");
105 flint_abort();
106 }
107
108 acb_clear(z);
109 acb_clear(s1);
110 acb_clear(s2);
111 acb_clear(a);
112 acb_clear(b);
113 }
114
115 flint_randclear(state);
116 flint_cleanup();
117 flint_printf("PASS\n");
118 return EXIT_SUCCESS;
119 }
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 void
14 acb_hypgeom_log_rising_ui_naive(acb_t res, const acb_t z, ulong r, slong prec)
15 {
16 acb_t t, u;
17 slong k;
18
19 acb_init(t);
20 acb_init(u);
21
22 for (k = 0; k < r; k++)
23 {
24 acb_add_ui(t, z, k, prec);
25 acb_log(t, t, prec);
26 acb_add(u, u, t, prec);
27 }
28
29 acb_swap(res, u);
30
31 acb_clear(t);
32 acb_clear(u);
33 }
34
35 int main()
36 {
37 slong iter;
38 flint_rand_t state;
39
40 flint_printf("log_rising_ui....");
41 fflush(stdout);
42
43 flint_randinit(state);
44
45 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
46 {
47 acb_t z, s1, s2, a, b;
48 slong prec, ebits, prec2;
49 ulong n;
50
51 prec = 2 + n_randint(state, 100);
52
53 if (n_randint(state, 10) == 0)
54 ebits = 100;
55 else
56 ebits = 10;
57 ebits = 2;
58
59 prec2 = prec + 1 + n_randint(state, 30);
60
61 acb_init(z);
62 acb_init(s1);
63 acb_init(s2);
64 acb_init(a);
65 acb_init(b);
66
67 acb_randtest(z, state, prec, ebits);
68 acb_randtest(s1, state, prec, 10);
69 acb_randtest(s2, state, prec, 10);
70 n = n_randint(state, 20);
71
72 if (n_randint(state, 20) == 0)
73 n = n_randint(state, 200);
74
75 if (n_randint(state, 2))
76 {
77 acb_hypgeom_log_rising_ui(s1, z, n, prec);
78 }
79 else
80 {
81 acb_set(s1, z);
82 acb_hypgeom_log_rising_ui(s1, s1, n, prec);
83 }
84
85 acb_hypgeom_log_rising_ui_naive(s2, z, n, prec);
86
87 if (!acb_overlaps(s1, s2))
88 {
89 flint_printf("FAIL\n\n");
90 flint_printf("prec = %wd\n\n", prec);
91 flint_printf("n = %wu\n\n", n);
92 flint_printf("z = "); acb_printn(z, 1000, 0); flint_printf("\n\n");
93 flint_printf("s1 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
94 flint_printf("s2 = "); acb_printn(s2, 1000, 0); flint_printf("\n\n");
95 acb_sub(s1, s1, s2, prec2);
96 flint_printf("s1 - s2 = "); acb_printd(s1, 1000); flint_printf("\n\n");
97 flint_abort();
98 }
99
100 acb_get_mid(a, z);
101
102 if (n_randint(state, 2))
103 {
104 arf_set_mag(arb_midref(acb_realref(b)), arb_radref(acb_realref(z)));
105 arf_set_mag(arb_midref(acb_imagref(b)), arb_radref(acb_imagref(z)));
106
107 if (n_randint(state, 2))
108 acb_neg(b, b);
109 if (n_randint(state, 2))
110 acb_conj(b, b);
111
112 acb_add(a, a, b, prec);
113 }
114
115 acb_hypgeom_log_rising_ui(s2, a, n, prec);
116
117 if (!acb_overlaps(s1, s2))
118 {
119 flint_printf("FAIL (2)\n\n");
120 flint_printf("prec = %wd\n\n", prec);
121 flint_printf("n = %wu\n\n", n);
122 flint_printf("z = "); acb_printn(z, 1000, 0); flint_printf("\n\n");
123 flint_printf("a = "); acb_printn(a, 1000, 0); flint_printf("\n\n");
124 flint_printf("s1 = "); acb_printn(s1, 1000, 0); flint_printf("\n\n");
125 flint_printf("s2 = "); acb_printn(s2, 1000, 0); flint_printf("\n\n");
126 acb_sub(s1, s1, s2, prec2);
127 flint_printf("s1 - s2 = "); acb_printd(s1, 1000); flint_printf("\n\n");
128 flint_abort();
129 }
130
131 acb_clear(z);
132 acb_clear(s1);
133 acb_clear(s2);
134 acb_clear(a);
135 acb_clear(b);
136 }
137
138 flint_randclear(state);
139 flint_cleanup();
140 flint_printf("PASS\n");
141 return EXIT_SUCCESS;
142 }
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("log_rising_ui_jet....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
24 {
25 acb_t z;
26 acb_ptr s1, s2, s3, s4;
27 slong prec, ebits, len, len1, len2, len3, len4;
28 ulong n, m;
29
30 prec = 2 + n_randint(state, 100);
31 len = n_randint(state, 5);
32 len1 = len + n_randint(state, 2);
33 len2 = len + n_randint(state, 2);
34 len3 = len + n_randint(state, 2);
35 len4 = len + n_randint(state, 2);
36
37 if (n_randint(state, 10) == 0)
38 ebits = 100;
39 else
40 ebits = 10;
41 ebits = 2;
42
43 acb_init(z);
44 s1 = _acb_vec_init(FLINT_MAX(1, len1));
45 s2 = _acb_vec_init(FLINT_MAX(1, len2));
46 s3 = _acb_vec_init(FLINT_MAX(1, len3));
47 s4 = _acb_vec_init(FLINT_MAX(1, len4));
48
49 acb_randtest(z, state, prec, ebits);
50 acb_randtest(s1, state, prec, 10);
51 acb_randtest(s2, state, prec, 10);
52 n = n_randint(state, 8);
53 m = n_randint(state, 8);
54
55 acb_hypgeom_log_rising_ui_jet(s1, z, n + m, len1, prec);
56 acb_hypgeom_log_rising_ui_jet(s2, z, n, len2, prec);
57 acb_add_ui(s4, z, n, prec);
58 acb_hypgeom_log_rising_ui_jet(s3, s4, m, len3, prec);
59 _acb_vec_add(s4, s2, s3, len, prec);
60
61 if (!_acb_poly_overlaps(s1, len, s4, len))
62 {
63 flint_printf("FAIL\n\n");
64 flint_printf("prec = %wd\n\n", prec);
65 flint_printf("n = %wu, m = %lu\n\n", n, m);
66 flint_printf("z = "); acb_printn(z, 1000, 0); flint_printf("\n\n");
67 flint_printf("s1 = "); _acb_vec_printn(s1, len, 30, 0); flint_printf("\n\n");
68 flint_printf("s2 = "); _acb_vec_printn(s2, len, 30, 0); flint_printf("\n\n");
69 flint_printf("s3 = "); _acb_vec_printn(s3, len, 30, 0); flint_printf("\n\n");
70 flint_printf("s4 = "); _acb_vec_printn(s4, len, 30, 0); flint_printf("\n\n");
71 flint_abort();
72 }
73
74 acb_clear(z);
75 _acb_vec_clear(s1, FLINT_MAX(1, len1));
76 _acb_vec_clear(s2, FLINT_MAX(1, len2));
77 _acb_vec_clear(s3, FLINT_MAX(1, len3));
78 _acb_vec_clear(s4, FLINT_MAX(1, len4));
79 }
80
81 flint_randclear(state);
82 flint_cleanup();
83 flint_printf("PASS\n");
84 return EXIT_SUCCESS;
85 }
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 void
14 rising_algorithm(acb_t res, const acb_t x, ulong n, ulong m, slong prec, int alg, int alias)
15 {
16 if (alias)
17 {
18 acb_set(res, x);
19 rising_algorithm(res, res, n, m, prec, alg, 0);
20 return;
21 }
22
23 if (alg == 0)
24 acb_hypgeom_rising_ui_rs(res, x, n, m, prec);
25 else if (alg == 1)
26 acb_hypgeom_rising_ui_forward(res, x, n, prec);
27 else if (alg == 2)
28 acb_hypgeom_rising_ui_bs(res, x, n, prec);
29 else if (alg == 3)
30 acb_hypgeom_rising_ui_rec(res, x, n, prec);
31 else
32 acb_hypgeom_rising_ui(res, x, n, prec);
33 }
34
35 int main()
36 {
37 slong iter;
38 flint_rand_t state;
39
40 flint_printf("rising_ui....");
41 fflush(stdout);
42
43 flint_randinit(state);
44
45 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
46 {
47 acb_t x, xk, y, ya, yb, yayb;
48 ulong k, n, m1, m2, m3;
49 slong prec;
50 int alg1, alg2, alg3, alias1, alias2, alias3;
51
52 prec = 2 + n_randint(state, 200);
53 k = n_randint(state, 10);
54 n = n_randint(state, 50);
55 m1 = n_randint(state, 2) ? 0 : 1 + n_randint(state, FLINT_MAX(n + k, 1));
56 m2 = n_randint(state, 2) ? 0 : 1 + n_randint(state, FLINT_MAX(k, 1));
57 m3 = n_randint(state, 2) ? 0 : 1 + n_randint(state, FLINT_MAX(n, 1));
58 alg1 = n_randint(state, 5);
59 alg2 = n_randint(state, 5);
60 alg3 = n_randint(state, 5);
61 alias1 = n_randint(state, 2);
62 alias2 = n_randint(state, 2);
63 alias3 = n_randint(state, 2);
64
65 if (n_randint(state, 100) == 0)
66 n += 100;
67
68 acb_init(x);
69 acb_init(xk);
70 acb_init(y);
71 acb_init(ya);
72 acb_init(yb);
73 acb_init(yayb);
74
75 acb_randtest(x, state, prec, 10 + n_randint(state, 200));
76 acb_add_ui(xk, x, k, prec);
77
78 rising_algorithm(y, x, n + k, m1, prec, alg1, alias1);
79 rising_algorithm(ya, x, k, m2, prec, alg2, alias2);
80 rising_algorithm(yb, xk, n, m3, prec, alg3, alias3);
81 acb_mul(yayb, ya, yb, prec);
82
83 if (!acb_overlaps(y, yayb))
84 {
85 flint_printf("FAIL\n\n");
86 flint_printf("k = %wu, n = %wu, m1 = %wu, m2 = %wu, m3 = %wu\n\n", k, n, m1, m2, m3);
87 flint_printf("x = "); acb_printn(x, 100, 0); flint_printf("\n\n");
88 flint_printf("y = "); acb_printn(y, 100, 0); flint_printf("\n\n");
89 flint_printf("ya = "); acb_printn(ya, 100, 0); flint_printf("\n\n");
90 flint_printf("yb = "); acb_printn(yb, 100, 0); flint_printf("\n\n");
91 flint_printf("yayb = "); acb_printn(yayb, 100, 0); flint_printf("\n\n");
92 flint_abort();
93 }
94
95 acb_clear(x);
96 acb_clear(xk);
97 acb_clear(y);
98 acb_clear(ya);
99 acb_clear(yb);
100 acb_clear(yayb);
101 }
102
103 flint_randclear(state);
104 flint_cleanup();
105 flint_printf("PASS\n");
106 return EXIT_SUCCESS;
107 }
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 void
14 rising_algorithm(acb_ptr res, const acb_t x, ulong n, ulong m, slong len, slong prec, int alg)
15 {
16 if (alg == 0)
17 acb_hypgeom_rising_ui_jet_powsum(res, x, n, len, prec);
18 else if (alg == 1)
19 acb_hypgeom_rising_ui_jet_rs(res, x, n, m, len, prec);
20 else if (alg == 2)
21 acb_hypgeom_rising_ui_jet_bs(res, x, n, len, prec);
22 else
23 acb_hypgeom_rising_ui_jet(res, x, n, len, prec);
24 }
25
26 int main()
27 {
28 slong iter;
29 flint_rand_t state;
30
31 flint_printf("rising_ui_jet....");
32 fflush(stdout);
33
34 flint_randinit(state);
35
36 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
37 {
38 acb_t x, xk;
39 acb_ptr y, ya, yb, yayb;
40 ulong k, n, m1, m2, m3, len;
41 slong prec;
42 int alg1, alg2, alg3;
43
44 prec = 2 + n_randint(state, 200);
45 len = 1 + n_randint(state, 6);
46 k = n_randint(state, 10);
47 n = n_randint(state, 50);
48 m1 = n_randint(state, 2) ? 0 : 1 + n_randint(state, FLINT_MAX(n + k, 1));
49 m2 = n_randint(state, 2) ? 0 : 1 + n_randint(state, FLINT_MAX(k, 1));
50 m3 = n_randint(state, 2) ? 0 : 1 + n_randint(state, FLINT_MAX(n, 1));
51 alg1 = n_randint(state, 4);
52 alg2 = n_randint(state, 4);
53 alg3 = n_randint(state, 4);
54
55 acb_init(x);
56 acb_init(xk);
57 y = _acb_vec_init(len);
58 ya = _acb_vec_init(len);
59 yb = _acb_vec_init(len);
60 yayb = _acb_vec_init(len);
61
62 acb_randtest(x, state, prec, 10);
63 acb_add_ui(xk, x, k, prec);
64
65 rising_algorithm(y, x, n + k, m1, len, prec, alg1);
66 rising_algorithm(ya, x, k, m2, len, prec, alg2);
67 rising_algorithm(yb, xk, n, m3, len, prec, alg3);
68 _acb_poly_mullow(yayb, ya, len, yb, len, len, prec);
69
70 if (!_acb_poly_overlaps(y, len, yayb, len))
71 {
72 flint_printf("FAIL\n\n");
73 flint_printf("len = %wd, k = %wu, n = %wu, m1 = %wu, m2 = %wu, m3 = %wu\n\n", len, k, n, m1, m2, m3);
74 flint_printf("x = "); acb_printn(x, 100, 0); flint_printf("\n\n");
75 flint_printf("y = "); _acb_vec_printn(y, len, 100, 0); flint_printf("\n\n");
76 flint_printf("ya = "); _acb_vec_printn(ya, len, 100, 0); flint_printf("\n\n");
77 flint_printf("yb = "); _acb_vec_printn(yb, len, 100, 0); flint_printf("\n\n");
78 flint_printf("yayb = "); _acb_vec_printn(yayb, len, 100, 0); flint_printf("\n\n");
79 flint_abort();
80 }
81
82 acb_clear(x);
83 acb_clear(xk);
84 _acb_vec_clear(y, len);
85 _acb_vec_clear(ya, len);
86 _acb_vec_clear(yb, len);
87 _acb_vec_clear(yayb, len);
88 }
89
90 flint_randclear(state);
91 flint_cleanup();
92 flint_printf("PASS\n");
93 return EXIT_SUCCESS;
94 }
+0
-76
acb_hypgeom/test/t-rising_ui_rs.c less more
0 /*
1 Copyright (C) 2018 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_hypgeom.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("rising_ui_rs....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
24 {
25 acb_t x, xk, y, ya, yb, yayb;
26 ulong k, n, m1, m2, m3;
27 slong prec;
28
29 prec = 2 + n_randint(state, 200);
30 k = n_randint(state, 10);
31 n = n_randint(state, 50);
32 m1 = n_randint(state, 2) ? 0 : 1 + n_randint(state, FLINT_MAX(n + k, 1));
33 m2 = n_randint(state, 2) ? 0 : 1 + n_randint(state, FLINT_MAX(k, 1));
34 m3 = n_randint(state, 2) ? 0 : 1 + n_randint(state, FLINT_MAX(n, 1));
35
36 acb_init(x);
37 acb_init(xk);
38 acb_init(y);
39 acb_init(ya);
40 acb_init(yb);
41 acb_init(yayb);
42
43 acb_randtest(x, state, prec, 10);
44 acb_add_ui(xk, x, k, prec);
45
46 acb_hypgeom_rising_ui_rs(y, x, n + k, m1, prec);
47 acb_hypgeom_rising_ui_rs(ya, x, k, m2, prec);
48 acb_hypgeom_rising_ui_rs(yb, xk, n, m3, prec);
49 acb_mul(yayb, ya, yb, prec);
50
51 if (!acb_overlaps(y, yayb))
52 {
53 flint_printf("FAIL\n\n");
54 flint_printf("k = %wu, n = %wu, m1 = %wu, m2 = %wu, m3 = %wu\n\n", k, n, m1, m2, m3);
55 flint_printf("x = "); acb_printn(x, 100, 0); flint_printf("\n\n");
56 flint_printf("y = "); acb_printn(y, 100, 0); flint_printf("\n\n");
57 flint_printf("ya = "); acb_printn(ya, 100, 0); flint_printf("\n\n");
58 flint_printf("yb = "); acb_printn(yb, 100, 0); flint_printf("\n\n");
59 flint_printf("yayb = "); acb_printn(yayb, 100, 0); flint_printf("\n\n");
60 flint_abort();
61 }
62
63 acb_clear(x);
64 acb_clear(xk);
65 acb_clear(y);
66 acb_clear(ya);
67 acb_clear(yb);
68 acb_clear(yayb);
69 }
70
71 flint_randclear(state);
72 flint_cleanup();
73 flint_printf("PASS\n");
74 return EXIT_SUCCESS;
75 }
1818 extern "C" {
1919 #endif
2020
21 void acb_hypgeom_rising_ui_forward(acb_t res, const acb_t x, ulong n, slong prec);
2122 void acb_hypgeom_rising_ui_rs(acb_t res, const acb_t x, ulong n, ulong m, slong prec);
23 void acb_hypgeom_rising_ui_bs(acb_t res, const acb_t x, ulong n, slong prec);
24 void acb_hypgeom_rising_ui_rec(acb_t res, const acb_t x, ulong n, slong prec);
25 void acb_hypgeom_rising_ui(acb_t y, const acb_t x, ulong n, slong prec);
26 void acb_hypgeom_rising(acb_t y, const acb_t x, const acb_t n, slong prec);
27
28 void acb_hypgeom_rising_ui_jet_powsum(acb_ptr res, const acb_t x, ulong n, slong len, slong prec);
29 void acb_hypgeom_rising_ui_jet_rs(acb_ptr res, const acb_t x, ulong n, ulong m, slong len, slong prec);
30 void acb_hypgeom_rising_ui_jet_bs(acb_ptr res, const acb_t x, ulong n, slong len, slong prec);
31 void acb_hypgeom_rising_ui_jet(acb_ptr res, const acb_t x, ulong n, slong len, slong prec);
32
33 void acb_hypgeom_log_rising_ui_jet(acb_ptr res, const acb_t z, ulong r, slong len, slong prec);
34 void acb_hypgeom_log_rising_ui(acb_ptr res, const acb_t z, ulong r, slong prec);
35
36 void acb_hypgeom_gamma_stirling_sum_horner(acb_t s, const acb_t z, slong N, slong prec);
37 void acb_hypgeom_gamma_stirling_sum_improved(acb_t s, const acb_t z, slong N, slong K, slong prec);
38 void acb_hypgeom_gamma_stirling(acb_t res, const acb_t x, int reciprocal, slong prec);
39 int acb_hypgeom_gamma_taylor(acb_t res, const acb_t x, int reciprocal, slong prec);
40 void acb_hypgeom_gamma(acb_t y, const acb_t x, slong prec);
41 void acb_hypgeom_rgamma(acb_t y, const acb_t x, slong prec);
42
43 void acb_hypgeom_lgamma(acb_t y, const acb_t x, slong prec);
2244
2345 void acb_hypgeom_pfq_bound_factor(mag_t C,
2446 acb_srcptr a, slong p, acb_srcptr b, slong q, const acb_t z, ulong n);
1010
1111 #include "acb_poly.h"
1212
13 void acb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
13 void acb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1414 const acb_t x, int use_reflect, int digamma, slong prec);
1515
1616 void
5959 acb_init(zr);
6060
6161 /* use Stirling series */
62 acb_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 1, wp);
62 acb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 1, wp);
6363
6464 /* psi(x) = psi((1-x)+r) - h(1-x,r) - pi*cot(pi*x) */
6565 if (reflect)
1212
1313 void acb_gamma_stirling_bound(mag_ptr err, const acb_t x, slong k0, slong knum, slong n);
1414
15 void acb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
15 void acb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1616 const acb_t x, int use_reflect, int digamma, slong prec);
1717
1818 void arb_gamma_stirling_coeff(arb_t b, ulong k, int digamma, slong prec);
231231 acb_init(f + 1);
232232
233233 /* use Stirling series */
234 acb_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
234 acb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
235235
236236 /* gamma(h) = (rf(1-h, r) * pi) / (gamma(1-h+r) sin(pi h)), h = h0 + t*/
237237 if (reflect)
0 /*
1 Copyright (C) 2021 Matthias Gessinger
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_poly.h"
12
13 void
14 _acb_poly_graeffe_transform(acb_ptr b, acb_srcptr a, slong len, slong prec)
15 {
16 slong lo, le, ls, deg, i;
17 acb_ptr pe, po;
18
19 if (len <= 1)
20 {
21 if (len)
22 acb_sqr(b, a, prec);
23 return;
24 }
25
26 deg = len - 1;
27 lo = len / 2;
28 ls = 2 * lo - 1;
29 le = deg / 2 + 1;
30 po = _acb_vec_init(lo);
31 pe = _acb_vec_init(FLINT_MAX(le, ls));
32
33 for (i = deg; i >= 0; i--)
34 {
35 if (i % 2 == 0)
36 acb_set(pe + i / 2, a + i);
37 else
38 acb_set(po + i / 2, a + i);
39 }
40
41 _acb_poly_mul(b, pe, le, pe, le, prec);
42 _acb_poly_mul(pe, po, lo, po, lo, prec);
43 _acb_poly_sub(b + 1, b + 1, ls, pe, ls, prec);
44
45 if (len % 2 == 0)
46 {
47 _acb_vec_neg(b, b, deg);
48 acb_set(b + deg, pe + (deg - 1));
49 }
50
51 _acb_vec_clear(pe, FLINT_MAX(le, ls));
52 _acb_vec_clear(po, lo);
53 }
54
55 void
56 acb_poly_graeffe_transform(acb_poly_t b, const acb_poly_t a, slong prec)
57 {
58 acb_poly_fit_length(b, a->length);
59 _acb_poly_graeffe_transform(b->coeffs, a->coeffs, a->length, prec);
60 _acb_poly_set_length(b, a->length);
61 }
1414 _acb_log_rising_correct_branch(acb_t t,
1515 const acb_t t_wrong, const acb_t z, ulong r, slong prec);
1616
17 void acb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
17 void acb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1818 const acb_t x, int use_reflect, int digamma, slong prec);
1919
2020 void
2121 _acb_poly_gamma_stirling_eval(acb_ptr res, const acb_t z, slong n, slong num, slong prec);
22
23 static __inline__ void
24 _log_rising_ui_series(acb_ptr t, const acb_t x, slong r, slong len, slong prec)
25 {
26 acb_struct f[2];
27 slong rflen;
28
29 acb_init(f);
30 acb_init(f + 1);
31
32 acb_set(f, x);
33 acb_one(f + 1);
34
35 rflen = FLINT_MIN(len, r + 1);
36 _acb_poly_rising_ui_series(t, f, FLINT_MIN(2, len), r, rflen, prec);
37 _acb_poly_log_series(t, t, rflen, len, prec);
38
39 _acb_log_rising_correct_branch(t, t, x, r, prec);
40
41 acb_clear(f);
42 acb_clear(f + 1);
43 }
4422
4523 void
4624 _acb_poly_lgamma_series(acb_ptr res, acb_srcptr h, slong hlen, slong len, slong prec)
9472 acb_init(zr);
9573
9674 /* use Stirling series */
97 acb_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
75 acb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
9876
9977 if (reflect)
10078 {
10381 {
10482 acb_sub_ui(u, h, 1, wp);
10583 acb_neg(u, u);
106 _log_rising_ui_series(t, u, r, len, wp);
84 acb_hypgeom_log_rising_ui_jet(t, u, r, len, wp);
10785 for (i = 1; i < len; i += 2)
10886 acb_neg(t + i, t + i);
10987 }
142120
143121 if (r != 0)
144122 {
145 _log_rising_ui_series(t, h, r, len, wp);
123 acb_hypgeom_log_rising_ui_jet(t, h, r, len, wp);
146124 _acb_vec_sub(u, u, t, len, wp);
147125 }
148126 }
1010
1111 #include "acb_poly.h"
1212
13 void acb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
13 void acb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1414 const acb_t x, int use_reflect, int digamma, slong prec);
1515
1616 void
5555 acb_init(f + 1);
5656
5757 /* otherwise use Stirling series */
58 acb_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
58 acb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
5959
6060 /* rgamma(h) = (gamma(1-h+r) sin(pi h)) / (rf(1-h, r) * pi), h = h0 + t*/
6161 if (reflect)
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "acb_poly.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17 acb_poly_t a, b, c;
18 acb_ptr roots;
19 acb_t leading;
20
21 flint_printf("graeffe_transform....");
22 fflush(stdout);
23
24 flint_randinit(state);
25
26 acb_poly_init(a);
27 acb_poly_init(b);
28 acb_poly_init(c);
29
30 acb_init(leading);
31
32 for (iter = 0; iter < 200 * arb_test_multiplier(); iter++)
33 {
34 slong n, prec, i;
35
36 n = n_randint(state, 20);
37 prec = 2 + n_randint(state, 256);
38
39 roots = _acb_vec_init(n);
40
41 acb_randtest(leading, state, prec, n_randint(state, 16));
42
43 for (i = 0; i < n; i++)
44 acb_randtest(roots + i, state, prec, n_randint(state, 16));
45 acb_poly_product_roots(a, roots, n, prec);
46 acb_poly_scalar_mul(a, a, leading, prec);
47
48 for (i = 0; i < n; i++)
49 acb_sqr(roots + i, roots + i, prec);
50 acb_sqr(leading, leading, prec);
51 acb_poly_product_roots(c, roots, n, prec);
52 acb_poly_scalar_mul(c, c, leading, prec);
53
54 acb_poly_graeffe_transform(b, a, prec);
55 if (!acb_poly_overlaps(b, c))
56 {
57 flint_printf("FAIL (overlap)\n\n");
58 flint_printf("n = %wd, prec = %wd\n\n", n, prec);
59
60 flint_printf("a: "); acb_poly_printd(a, 15); flint_printf("\n\n");
61 flint_printf("b: "); acb_poly_printd(b, 15); flint_printf("\n\n");
62 flint_printf("c: "); acb_poly_printd(c, 15); flint_printf("\n\n");
63
64 flint_abort();
65 }
66
67 acb_poly_graeffe_transform(a, a, prec);
68 if (!acb_poly_equal(a, b))
69 {
70 flint_printf("FAIL (aliasing)\n\n");
71 flint_printf("n = %wd, prec = %wd\n\n", n, prec);
72
73 flint_printf("a: "); acb_poly_printd(a, 15); flint_printf("\n\n");
74 flint_printf("b: "); acb_poly_printd(b, 15); flint_printf("\n\n");
75 flint_printf("c: "); acb_poly_printd(c, 15); flint_printf("\n\n");
76
77 flint_abort();
78 }
79
80 _acb_vec_clear(roots, n);
81 }
82
83 acb_poly_clear(a);
84 acb_poly_clear(b);
85 acb_poly_clear(c);
86
87 acb_clear(leading);
88
89 flint_randclear(state);
90 flint_cleanup();
91 flint_printf("PASS\n");
92 return EXIT_SUCCESS;
93 }
94
192192
193193 void acb_poly_binomial_transform(acb_poly_t b, const acb_poly_t a, slong len, slong prec);
194194
195 void _acb_poly_graeffe_transform(acb_ptr b, acb_srcptr a, slong len, slong prec);
196
197 void acb_poly_graeffe_transform(acb_poly_t b, const acb_poly_t a, slong prec);
198
195199
196200
197201 void acb_poly_set(acb_poly_t dest, const acb_poly_t src);
1010
1111 #include "arb.h"
1212 #include "hypgeom.h"
13 #include "arb_hypgeom.h"
1314
1415 typedef struct
1516 {
332333 euler_bsplit_clear(sum);
333334 }
334335
335 ARB_DEF_CACHED_CONSTANT(arb_const_euler, arb_const_euler_eval)
336
336 ARB_DEF_CACHED_CONSTANT(arb_const_euler_brent_mcmillan, arb_const_euler_eval)
337
338 extern const mp_limb_t arb_hypgeom_gamma_tab_limbs[];
339
340 void
341 arb_const_euler(arb_t res, slong prec)
342 {
343 if (prec < ARB_HYPGEOM_GAMMA_TAB_PREC - 16)
344 {
345 slong exp;
346 mp_size_t n;
347
348 n = ARB_HYPGEOM_GAMMA_TAB_PREC / FLINT_BITS;
349
350 /* just reading the table is known to give the correct rounding */
351 _arf_set_round_mpn(arb_midref(res), &exp, arb_hypgeom_gamma_tab_limbs + n, n, 0, prec, ARF_RND_NEAR);
352 _fmpz_set_si_small(ARF_EXPREF(arb_midref(res)), exp);
353
354 /* 1/2 ulp error */
355 _fmpz_set_si_small(MAG_EXPREF(arb_radref(res)), exp - prec);
356 MAG_MAN(arb_radref(res)) = MAG_ONE_HALF;
357 }
358 else
359 {
360 arb_const_euler_brent_mcmillan(res, prec);
361 }
362 }
363
1111 #include "flint/arith.h"
1212 #include "arb.h"
1313
14 void arb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
14 void arb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1515 const arb_t x, int use_reflect, int digamma, slong prec);
1616
1717 void arb_gamma_stirling_eval(arb_t s, const arb_t z, slong nterms, int digamma, slong prec);
6262
6363 wp = prec + FLINT_BIT_COUNT(prec);
6464
65 arb_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 1, wp);
65 arb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 1, wp);
6666
6767 arb_init(t);
6868 arb_init(u);
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb.h"
12
13 void
14 arb_fma_arf(arb_t res, const arb_t x, const arf_t y, const arb_t z, slong prec)
15 {
16 mag_t ym;
17 int inexact;
18
19 if (arb_is_exact(x))
20 {
21 inexact = arf_fma(arb_midref(res), arb_midref(x), y, arb_midref(z), prec, ARB_RND);
22
23 if (inexact)
24 arf_mag_add_ulp(arb_radref(res), arb_radref(z), arb_midref(res), prec);
25 else
26 mag_set(arb_radref(res), arb_radref(z));
27 }
28 else if (ARB_IS_LAGOM(res) && ARB_IS_LAGOM(x) && ARF_IS_LAGOM(y) && ARB_IS_LAGOM(z))
29 {
30 mag_t tm;
31
32 mag_fast_init_set_arf(ym, y);
33 *tm = *arb_radref(z);
34 mag_fast_addmul(tm, ym, arb_radref(x));
35 *arb_radref(res) = *tm;
36
37 inexact = arf_fma(arb_midref(res), arb_midref(x), y, arb_midref(z), prec, ARB_RND);
38 if (inexact)
39 arf_mag_fast_add_ulp(arb_radref(res), arb_radref(res), arb_midref(res), prec);
40 }
41 else
42 {
43 mag_t tm;
44 mag_init(tm);
45
46 mag_init_set_arf(ym, y);
47 mag_set(tm, arb_radref(z));
48
49 mag_addmul(tm, ym, arb_radref(x));
50 mag_set(arb_radref(res), tm);
51
52 inexact = arf_fma(arb_midref(res), arb_midref(x), y, arb_midref(z), prec, ARB_RND);
53 if (inexact)
54 arf_mag_add_ulp(arb_radref(res), arb_radref(res), arb_midref(res), prec);
55
56 mag_clear(tm);
57 mag_clear(ym);
58 }
59 }
60
61 void
62 arb_fma(arb_t res, const arb_t x, const arb_t y, const arb_t z, slong prec)
63 {
64 mag_t zr, xm, ym;
65 int inexact;
66
67 if (arb_is_exact(y))
68 {
69 arb_fma_arf(res, x, arb_midref(y), z, prec);
70 }
71 else if (arb_is_exact(x))
72 {
73 arb_fma_arf(res, y, arb_midref(x), z, prec);
74 }
75 else if (ARB_IS_LAGOM(res) && ARB_IS_LAGOM(x) && ARB_IS_LAGOM(y) && ARB_IS_LAGOM(z))
76 {
77 mag_fast_init_set_arf(xm, arb_midref(x));
78 mag_fast_init_set_arf(ym, arb_midref(y));
79
80 mag_fast_init_set(zr, arb_radref(z));
81 mag_fast_addmul(zr, xm, arb_radref(y));
82 mag_fast_addmul(zr, ym, arb_radref(x));
83 mag_fast_addmul(zr, arb_radref(x), arb_radref(y));
84
85 inexact = arf_fma(arb_midref(res), arb_midref(x), arb_midref(y), arb_midref(z),
86 prec, ARF_RND_DOWN);
87
88 if (inexact)
89 arf_mag_fast_add_ulp(zr, zr, arb_midref(res), prec);
90
91 *arb_radref(res) = *zr;
92 }
93 else
94 {
95 mag_init_set_arf(xm, arb_midref(x));
96 mag_init_set_arf(ym, arb_midref(y));
97
98 mag_init_set(zr, arb_radref(z));
99 mag_addmul(zr, xm, arb_radref(y));
100 mag_addmul(zr, ym, arb_radref(x));
101 mag_addmul(zr, arb_radref(x), arb_radref(y));
102
103 inexact = arf_fma(arb_midref(res), arb_midref(x), arb_midref(y), arb_midref(z),
104 prec, ARF_RND_DOWN);
105
106 if (inexact)
107 arf_mag_add_ulp(arb_radref(res), zr, arb_midref(res), prec);
108 else
109 mag_set(arb_radref(res), zr);
110
111 mag_clear(zr);
112 mag_clear(xm);
113 mag_clear(ym);
114 }
115 }
116
117 void
118 arb_fma_ui(arb_t res, const arb_t x, ulong y, const arb_t z, slong prec)
119 {
120 arf_t t;
121 arf_init_set_ui(t, y); /* no need to free */
122 arb_fma_arf(res, x, t, z, prec);
123 }
124
99 */
1010
1111 #include "arb.h"
12 #include "acb.h"
12 #include "arb_hypgeom.h"
1313 #include "bernoulli.h"
14 #include "hypgeom.h"
15
16 /* tuning factor */
17 #define GAMMA_STIRLING_BETA 0.27
18
19 #define PI 3.1415926535897932385
20
21 static slong
22 choose_n(double log2z, double argz, int digamma, slong prec)
23 {
24 double argf, boundn;
25 slong n;
26
27 argf = 1.0 / cos(0.5 * argz);
28 argf = log(argf) * (1. / log(2));
29
30 for (n = 1; ; n++)
31 {
32 if (digamma)
33 boundn = bernoulli_bound_2exp_si(2*n) - (2*n)*log2z + (2*n+1)*argf;
34 else
35 boundn = bernoulli_bound_2exp_si(2*n) - (2*n-1)*log2z + (2*n)*argf;
36
37 /* success */
38 if (boundn <= -prec)
39 return n;
40
41 /* if the term magnitude does not decrease, r is too small */
42 if (boundn > 1)
43 {
44 flint_printf("exception: gamma_stirling_choose_param failed to converge\n");
45 flint_abort();
46 }
47 }
48 }
49
50 static void
51 choose_small(int * reflect, slong * r, slong * n,
52 double x, double y, int use_reflect, int digamma, slong prec)
53 {
54 double w, argz, log2z;
55 slong rr;
56
57 /* use reflection formula if very negative */
58 if (x < -5.0 && use_reflect)
59 {
60 *reflect = 1;
61 x = 1.0 - x;
62 }
63 else
64 {
65 *reflect = 0;
66 }
67
68 /* argument reduction until |z| >= w */
69 w = FLINT_MAX(1.0, GAMMA_STIRLING_BETA * prec);
70
71 rr = 0;
72 while (x < 1.0 || x*x + y*y < w*w)
73 {
74 x++;
75 rr++;
76 }
77
78 log2z = 0.5 * log(x*x + y*y) * 1.44269504088896341;
79 argz = atan2(y, x);
80
81 *r = rr;
82 *n = choose_n(log2z, argz, digamma, prec);
83 }
84
85 static void
86 choose_large(int * reflect, slong * r, slong * n,
87 const arf_t a, const arf_t b, int use_reflect, int digamma, slong prec)
88 {
89 if (use_reflect && arf_sgn(a) < 0)
90 *reflect = 1;
91 else
92 *reflect = 0;
93
94 *r = 0;
95
96 /* so big that we will certainly have n = 0 */
97 if (arf_cmpabs_2exp_si(a, WORD_MAX / 8) >= 0 ||
98 arf_cmpabs_2exp_si(b, WORD_MAX / 8) >= 0)
99 {
100 *n = 0;
101 }
102 else
103 {
104 slong ab, bb;
105 double log2z, argz;
106
107 ab = arf_abs_bound_lt_2exp_si(a);
108 bb = arf_abs_bound_lt_2exp_si(b);
109
110 log2z = FLINT_MAX(ab, bb);
111
112 /* piecewise approximation of the argument */
113 if (arf_is_zero(b))
114 {
115 if ((arf_sgn(a) < 0) && !(*reflect))
116 argz = PI;
117 else
118 argz = 0.0;
119 }
120 else
121 {
122 if ((arf_sgn(a) < 0) && !(*reflect))
123 if (arf_cmpabs(a, b) <= 0)
124 argz = PI * 0.75;
125 else
126 argz = PI;
127 else
128 if (arf_cmpabs(a, b) <= 0)
129 argz = PI * 0.25;
130 else
131 argz = PI * 0.5;
132 }
133
134 if (argz == PI)
135 *n = 0;
136 else
137 *n = choose_n(log2z, argz, digamma, prec);
138 }
139 }
140
141
142 void
143 acb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
144 const acb_t z, int use_reflect, int digamma, slong prec)
145 {
146 const arf_struct * a = arb_midref(acb_realref(z));
147 const arf_struct * b = arb_midref(acb_imagref(z));
148
149 if (!arf_is_finite(a) || !arf_is_finite(b))
150 {
151 *reflect = *r = *n = 0;
152 }
153 else if (arf_cmpabs_2exp_si(a, 40) > 0 || arf_cmpabs_2exp_si(b, 40) > 0)
154 {
155 choose_large(reflect, r, n, a, b, use_reflect, digamma, prec);
156 }
157 else
158 {
159 choose_small(reflect, r, n,
160 arf_get_d(a, ARF_RND_UP),
161 arf_get_d(b, ARF_RND_UP), use_reflect, digamma, prec);
162 }
163 }
164
165 void
166 arb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
167 const arb_t x, int use_reflect, int digamma, slong prec)
168 {
169 const arf_struct * a = arb_midref(x);
170
171 if (arf_is_inf(a) || arf_is_nan(a))
172 {
173 *reflect = *r = *n = 0;
174 }
175 else if (arf_cmpabs_2exp_si(a, 40) > 0)
176 {
177 arf_t b;
178 arf_init(b);
179 choose_large(reflect, r, n, a, b, use_reflect, digamma, prec);
180 arf_clear(b);
181 }
182 else
183 {
184 choose_small(reflect, r, n,
185 arf_get_d(a, ARF_RND_UP), 0.0, use_reflect, digamma, prec);
186 }
187 }
14
15 /* todo: move/cleanup helper functions */
18816
18917 void
19018 acb_gamma_bound_phase(mag_t bound, const acb_t z)
348176 fmpz_clear(d);
349177 }
350178
179
180
351181 void
352182 arb_gamma_stirling_eval(arb_t s, const arb_t z, slong nterms, int digamma, slong prec)
353183 {
436266 }
437267
438268 void
439 arb_gamma_fmpq_stirling(arb_t y, const fmpq_t a, slong prec)
440 {
441 int reflect;
442 slong r, n, wp;
443 arb_t x, t, u, v;
444
445 wp = prec + FLINT_BIT_COUNT(prec);
446
447 arb_init(x);
448 arb_init(t);
449 arb_init(u);
450 arb_init(v);
451
452 arb_set_fmpq(x, a, wp);
453 arb_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 0, wp);
454
455 if (reflect)
456 {
457 /* gamma(x) = (rf(1-x, r) * pi) / (gamma(1-x+r) sin(pi x)) */
458 fmpq_t b;
459 fmpq_init(b);
460 fmpz_sub(fmpq_numref(b), fmpq_denref(a), fmpq_numref(a));
461 fmpz_set(fmpq_denref(b), fmpq_denref(a));
462 arb_rising_fmpq_ui(u, b, r, wp);
463 fmpq_clear(b);
464 arb_const_pi(v, wp);
465 arb_mul(u, u, v, wp);
466 arb_sub_ui(t, x, 1, wp);
467 arb_neg(t, t);
468 arb_add_ui(t, t, r, wp);
469 arb_gamma_stirling_eval(v, t, n, 0, wp);
470 arb_exp(v, v, wp);
471 arb_sin_pi_fmpq(t, a, wp);
472 arb_mul(v, v, t, wp);
473 }
474 else
475 {
476 /* gamma(x) = gamma(x+r) / rf(x,r) */
477 arb_add_ui(t, x, r, wp);
478 arb_gamma_stirling_eval(u, t, n, 0, wp);
479 arb_exp(u, u, prec);
480 arb_rising_fmpq_ui(v, a, r, wp);
481 }
482
483 arb_div(y, u, v, prec);
484
485 arb_clear(t);
486 arb_clear(u);
487 arb_clear(v);
488 arb_clear(x);
489 }
490
491 void
492 arb_gamma_const_1_3_eval(arb_t s, slong prec)
493 {
494 hypgeom_t series;
495 arb_t t, u;
496 slong wp = prec + 4 + 2 * FLINT_BIT_COUNT(prec);
497
498 arb_init(t);
499 arb_init(u);
500
501 hypgeom_init(series);
502
503 fmpz_poly_set_str(series->A, "1 1");
504 fmpz_poly_set_str(series->B, "1 1");
505 fmpz_poly_set_str(series->P, "4 5 -46 108 -72");
506 fmpz_poly_set_str(series->Q, "4 0 0 0 512000");
507
508 prec += FLINT_CLOG2(prec);
509
510 arb_hypgeom_infsum(s, t, series, wp, wp);
511
512 arb_sqrt_ui(u, 10, wp);
513 arb_mul(t, t, u, wp);
514
515 arb_const_pi(u, wp);
516 arb_pow_ui(u, u, 4, wp);
517 arb_mul_ui(u, u, 12, wp);
518 arb_mul(s, s, u, wp);
519
520 arb_div(s, s, t, wp);
521 arb_root_ui(s, s, 2, wp);
522 arb_root_ui(s, s, 3, prec);
523
524 hypgeom_clear(series);
525 arb_clear(t);
526 arb_clear(u);
527 }
528
529 ARB_DEF_CACHED_CONSTANT(arb_gamma_const_1_3, arb_gamma_const_1_3_eval)
530
531 void
532 arb_gamma_const_1_4_eval(arb_t x, slong prec)
533 {
534 arb_t t, u;
535 slong wp = prec + 4 + 2 * FLINT_BIT_COUNT(prec);
536
537 arb_init(t);
538 arb_init(u);
539
540 arb_one(t);
541 arb_sqrt_ui(u, 2, wp);
542 arb_agm(x, t, u, wp);
543
544 arb_const_pi(t, wp);
545 arb_mul_2exp_si(t, t, 1);
546 arb_sqrt(u, t, wp);
547 arb_mul(u, u, t, wp);
548
549 arb_div(x, u, x, wp);
550 arb_sqrt(x, x, wp);
551
552 arb_clear(t);
553 arb_clear(u);
554 }
555
556 ARB_DEF_CACHED_CONSTANT(arb_gamma_const_1_4, arb_gamma_const_1_4_eval)
557
558 void
559 arb_gamma_small_frac(arb_t y, unsigned int p, unsigned int q, slong prec)
560 {
561 slong wp = prec + 4;
562
563 if (q == 1)
564 {
565 arb_one(y);
566 }
567 else if (q == 2) /* p = 1 */
568 {
569 arb_const_sqrt_pi(y, prec);
570 }
571 else if (q == 3)
572 {
573 if (p == 1)
574 {
575 arb_gamma_const_1_3(y, prec);
576 }
577 else /* p = 2 */
578 {
579 arb_t t;
580 arb_init(t);
581 arb_gamma_const_1_3(y, wp);
582 arb_sqrt_ui(t, 3, wp);
583 arb_mul(y, y, t, wp);
584 arb_const_pi(t, wp);
585 arb_div(y, t, y, prec);
586 arb_mul_2exp_si(y, y, 1);
587 arb_clear(t);
588 }
589 }
590 else if (q == 4)
591 {
592 if (p == 1)
593 {
594 arb_gamma_const_1_4(y, prec);
595 }
596 else /* p = 3 */
597 {
598 arb_t t;
599 arb_init(t);
600 arb_sqrt_ui(y, 2, wp);
601 arb_const_pi(t, wp);
602 arb_mul(y, y, t, wp);
603 arb_gamma_const_1_4(t, wp);
604 arb_div(y, y, t, prec);
605 arb_clear(t);
606 }
607 }
608 else if (q == 6)
609 {
610 arb_t t;
611 arb_init(t);
612 arb_const_pi(t, wp);
613 arb_div_ui(t, t, 3, wp);
614 arb_sqrt(t, t, wp);
615 arb_set_ui(y, 2);
616 arb_root_ui(y, y, 3, wp);
617 arb_mul(t, t, y, wp);
618 arb_gamma_const_1_3(y, wp);
619 arb_mul(y, y, y, prec);
620
621 if (p == 1)
622 {
623 arb_div(y, y, t, prec);
624 }
625 else /* p = 5 */
626 {
627 arb_div(y, t, y, wp);
628 arb_const_pi(t, wp);
629 arb_mul(y, y, t, prec);
630 arb_mul_2exp_si(y, y, 1);
631 }
632
633 arb_clear(t);
634 }
635 else
636 {
637 flint_printf("small fraction not implemented!\n");
638 flint_abort();
639 }
640 }
641
642 slong _arb_compute_bs_exponents(slong * tab, slong n);
643 slong _arb_get_exp_pos(const slong * tab, slong step);
644
645 static void
646 bsplit2(arb_t P, arb_t Q, const fmpz_t zp, const fmpz_t zq,
647 const slong * xexp, arb_srcptr xpow,
648 ulong N, slong a, slong b, int cont, slong prec)
649 {
650 if (b - a == 1)
651 {
652 fmpz_t t;
653 fmpz_init(t);
654 fmpz_set(t, zp);
655 fmpz_addmul_ui(t, zq, a + 1);
656 arb_set_fmpz(P, t);
657 arb_set(Q, P);
658 fmpz_clear(t);
659 }
660 else
661 {
662 arb_t Pb, Qb;
663 slong step, i, m;
664
665 arb_init(Pb);
666 arb_init(Qb);
667
668 step = (b - a) / 2;
669 m = a + step;
670
671 bsplit2(P, Q, zp, zq, xexp, xpow, N, a, m, 1, prec);
672 bsplit2(Pb, Qb, zp, zq, xexp, xpow, N, m, b, 1, prec);
673
674 arb_mul(P, P, Pb, prec);
675 arb_mul(Q, Q, Pb, prec);
676
677 i = (step == 1) ? 0 : _arb_get_exp_pos(xexp, step);
678 arb_addmul(Q, Qb, xpow + i, prec);
679
680 arb_clear(Pb);
681 arb_clear(Qb);
682 }
683 }
684
685 static void
686 bsplit3(arb_t P, arb_t Q, const fmpz_t zp, const fmpz_t zq,
687 const slong * xexp, arb_srcptr xpow,
688 ulong N, slong a, slong b, int cont, slong prec)
689 {
690 if (b - a == 1)
691 {
692 fmpz_t t;
693 fmpz_init(t);
694 arb_set(P, xpow + 0); /* N zq */
695 fmpz_set(t, zp);
696 fmpz_submul_ui(t, zq, a + 1); /* zp - (a + 1) zq */
697 arb_set_fmpz(Q, t);
698 fmpz_clear(t);
699 }
700 else
701 {
702 arb_t Pb, Qb;
703 slong step, i, m;
704
705 arb_init(Pb);
706 arb_init(Qb);
707
708 step = (b - a) / 2;
709 m = a + step;
710
711 bsplit3(P, Q, zp, zq, xexp, xpow, N, a, m, 1, prec);
712 bsplit3(Pb, Qb, zp, zq, xexp, xpow, N, m, b, 1, prec);
713
714 i = _arb_get_exp_pos(xexp, m - a);
715
716 arb_mul(P, P, xpow + i, prec);
717 if (b - m != m - a)
718 arb_mul(P, P, xpow + 0, prec);
719
720 arb_addmul(P, Q, Pb, prec);
721
722 if (cont)
723 {
724 arb_mul(Q, Q, Qb, prec);
725 }
726 else
727 {
728 i = _arb_get_exp_pos(xexp, m - a);
729
730 arb_mul(Q, xpow + i, xpow + i, prec);
731 if (b - m != m - a)
732 arb_mul(Q, Q, xpow + 0, prec);
733 }
734
735 arb_clear(Pb);
736 arb_clear(Qb);
737 }
738 }
739
740 double d_lambertw_branch1(double x);
741
742 static ulong
743 more_trailing_zeros(ulong N)
744 {
745 ulong bc, N2;
746
747 bc = FLINT_BIT_COUNT(N);
748
749 if (bc >= 8)
750 {
751 N2 = (N >> (bc - 5)) << (bc - 5);
752 N2 += ((N2 != N) << (bc - 5));
753 return N2;
754 }
755 else
756 {
757 return N;
758 }
759 }
760
761 #define C_LOG2 0.69314718055994530942
762 #define C_EXP1 2.7182818284590452354
763
764 static void
765 build_bsplit_power_table(arb_ptr xpow, const slong * xexp, slong len, slong prec)
766 {
767 slong i;
768
769 for (i = 1; i < len; i++)
770 {
771 if (xexp[i] == 2 * xexp[i-1])
772 {
773 arb_mul(xpow + i, xpow + i - 1, xpow + i - 1, prec);
774 }
775 else if (xexp[i] == 2 * xexp[i-2]) /* prefer squaring if possible */
776 {
777 arb_mul(xpow + i, xpow + i - 2, xpow + i - 2, prec);
778 }
779 else if (xexp[i] == 2 * xexp[i-1] + 1)
780 {
781 arb_mul(xpow + i, xpow + i - 1, xpow + i - 1, prec);
782 arb_mul(xpow + i, xpow + i, xpow, prec);
783 }
784 else if (xexp[i] == 2 * xexp[i-2] + 1)
785 {
786 arb_mul(xpow + i, xpow + i - 2, xpow + i - 2, prec);
787 arb_mul(xpow + i, xpow + i, xpow, prec);
788 }
789 else
790 {
791 flint_printf("power table has the wrong structure!\n");
792 flint_abort();
793 }
794 }
795 }
796
797 /* assumes z in [1, 2] */
798 static void
799 arb_gamma_fmpq_general_off1(arb_t res, const fmpq_t z, slong prec)
800 {
801 slong wp, N, n, n2, length, length2, wp2;
802 double alpha;
803 arb_t P, Q;
804 slong *xexp, *xexp2;
805 arb_ptr xpow;
806 mag_t err, err2;
807
808 wp = prec + 30;
809
810 alpha = 0.52; /* tuning parameter between 0.5 and 1 */
811
812 N = alpha * C_LOG2 * wp;
813 N = more_trailing_zeros(N);
814 alpha = N / (C_LOG2 * wp);
815
816 /* Terms in convergent series */
817 n = (1 - alpha) / d_lambertw((1 - alpha) / (alpha * C_EXP1)) * C_LOG2 * wp;
818
819 /* Precision and terms in asymptotic series */
820 wp2 = wp * (1 - alpha);
821 wp2 = FLINT_MAX(wp2, 30);
822 n2 = (alpha - 1) / d_lambertw_branch1((alpha - 1) / (alpha * C_EXP1)) * C_LOG2 * wp;
823 n2 = FLINT_MAX(n2, 2); /* binary splitting correctness */
824
825 mag_init(err);
826 mag_init(err2);
827 arb_init(P);
828 arb_init(Q);
829
830 /* compute the powers of x = N*zq that will appear (at least x^1) */
831 xexp = flint_calloc(2 * FLINT_BITS, sizeof(slong));
832 xexp2 = flint_calloc(2 * FLINT_BITS, sizeof(slong));
833
834 length = _arb_compute_bs_exponents(xexp, n);
835 length2 = _arb_compute_bs_exponents(xexp2, n2);
836
837 xpow = _arb_vec_init(FLINT_MAX(length, length2));
838
839 arb_set_fmpz(xpow + 0, fmpq_denref(z));
840 arb_mul_ui(xpow + 0, xpow + 0, N, wp);
841
842 build_bsplit_power_table(xpow, xexp, length, wp);
843
844 /* 1F1(1, 1+z, N) */
845 bsplit2(P, Q, fmpq_numref(z), fmpq_denref(z), xexp, xpow, N, 0, n, 0, wp);
846 arb_div(P, Q, P, wp);
847
848 /* Convergent series error bound: N^n / n! (1 + (N/n) + ...) */
849 mag_set_ui(err, N);
850 mag_pow_ui(err, err, n);
851 mag_rfac_ui(err2, n);
852 mag_mul(err, err, err2);
853 mag_set_ui(err2, N);
854 mag_div_ui(err2, err2, n);
855 mag_geom_series(err2, err2, 0);
856 mag_mul(err, err, err2);
857 arb_add_error_mag(P, err);
858
859 /* divide 1F1 by z */
860 arb_mul_fmpz(P, P, fmpq_denref(z), wp);
861 arb_div_fmpz(P, P, fmpq_numref(z), wp);
862 arb_swap(res, P);
863
864 build_bsplit_power_table(xpow, xexp2, length2, wp2);
865
866 bsplit3(P, Q, fmpq_numref(z), fmpq_denref(z), xexp2, xpow, N, 0, n2, 0, wp2);
867 arb_div(P, P, Q, wp2);
868
869 /* 2F0 error bound (bounded by first omitted term) */
870 mag_fac_ui(err, n2);
871 mag_set_ui_lower(err2, N);
872 mag_pow_ui_lower(err2, err2, n2);
873 mag_div(err, err, err2);
874 arb_add_error_mag(P, err);
875
876 /* N^z * exp(-N) * (1F1/z + 2F0/N) */
877 arb_div_ui(P, P, N, wp2);
878
879 arb_add(res, res, P, wp);
880 arb_set_ui(Q, N);
881 arb_pow_fmpq(Q, Q, z, wp);
882 arb_mul(res, res, Q, wp);
883
884 arb_set_si(Q, -N);
885 arb_exp(Q, Q, wp);
886 arb_mul(res, res, Q, wp);
887
888 _arb_vec_clear(xpow, FLINT_MAX(length, length2));
889 flint_free(xexp);
890 flint_free(xexp2);
891
892 arb_clear(P);
893 arb_clear(Q);
894 mag_clear(err);
895 mag_clear(err2);
896 }
897
898 /* assumes z in (0, 1] */
899 void
900 arb_gamma_fmpq_hyp(arb_t res, const fmpq_t z, slong prec)
901 {
902 fmpq_t t;
903 fmpq_init(t);
904 fmpq_add_ui(t, z, 1);
905 arb_gamma_fmpq_general_off1(res, t, prec);
906 arb_mul_fmpz(res, res, fmpq_denref(z), prec + 30);
907 arb_div_fmpz(res, res, fmpq_numref(z), prec);
908 fmpq_clear(t);
909 }
910
911 void
912 arb_gamma_fmpq_outward(arb_t y, const fmpq_t x, slong prec)
913 {
914 fmpq_t a;
915 fmpz_t n;
916 fmpz p, q;
917 slong m;
918 arb_t t, u;
919
920 fmpq_init(a);
921 fmpz_init(n);
922 arb_init(t);
923 arb_init(u);
924
925 /* write x = a + n with 0 < a <= 1 */
926 if (fmpz_is_one(fmpq_denref(x)))
927 {
928 fmpq_one(a);
929 fmpz_sub_ui(n, fmpq_numref(x), 1);
930 }
931 else
932 {
933 fmpz_fdiv_qr(n, fmpq_numref(a), fmpq_numref(x), fmpq_denref(x));
934 fmpz_set(fmpq_denref(a), fmpq_denref(x));
935 }
936
937 if (!fmpz_fits_si(n))
938 {
939 flint_printf("gamma: too large fmpq to reduce to 0!\n");
940 flint_abort();
941 }
942
943 m = fmpz_get_si(n);
944
945 /* evaluate gamma(a) */
946 p = *fmpq_numref(a);
947 q = *fmpq_denref(a);
948
949 if (q == 1 || q == 2 || q == 3 || q == 4 || q == 6)
950 {
951 arb_gamma_small_frac(t, p, q, prec);
952 }
953 else
954 {
955 arb_gamma_fmpq_hyp(t, a, prec);
956 }
957
958 /* argument reduction */
959 if (m >= 0)
960 {
961 arb_rising_fmpq_ui(u, a, m, prec);
962 arb_mul(y, t, u, prec);
963 }
964 else
965 {
966 arb_rising_fmpq_ui(u, x, -m, prec);
967 arb_div(y, t, u, prec);
968 }
969
970 fmpq_clear(a);
971 fmpz_clear(n);
972 arb_clear(t);
973 arb_clear(u);
974 }
975
976 void
977269 arb_gamma_fmpq(arb_t y, const fmpq_t x, slong prec)
978270 {
979 fmpz p, q;
980
981 p = *fmpq_numref(x);
982 q = *fmpq_denref(x);
983
984 if ((q == 1 || q == 2 || q == 3 || q == 4 || q == 6) && !COEFF_IS_MPZ(p))
985 {
986 if (q == 1)
987 {
988 if (p <= 0)
989 {
990 arb_indeterminate(y);
991 return;
992 }
993
994 if (p < 1200 || 1.44265 * (p*log(p) - p) < 15.0 * prec)
995 {
996 fmpz_t t;
997 fmpz_init(t);
998 fmpz_fac_ui(t, p - 1);
999 arb_set_round_fmpz(y, t, prec);
1000 fmpz_clear(t);
1001 return;
1002 }
1003 }
1004
1005 p = FLINT_ABS(p);
1006
1007 if (p < q * 500.0 || p < q * (500.0 + 0.1 * prec * sqrt(prec)))
1008 {
1009 arb_gamma_fmpq_outward(y, x, prec);
1010 return;
1011 }
1012 }
1013
1014 if (q != 1 && prec > 7000 + 300 * fmpz_bits(fmpq_denref(x)) &&
1015 (slong) fmpz_bits(fmpq_numref(x)) - (slong) fmpz_bits(fmpq_denref(x)) < FLINT_BITS &&
1016 fabs(fmpq_get_d(x)) < 0.03 * prec * sqrt(prec))
1017 {
1018 arb_gamma_fmpq_outward(y, x, prec);
1019 return;
1020 }
1021
1022 arb_gamma_fmpq_stirling(y, x, prec);
271 arb_hypgeom_gamma_fmpq(y, x, prec);
1023272 }
1024273
1025274 void
1026275 arb_gamma_fmpz(arb_t y, const fmpz_t x, slong prec)
1027276 {
1028 fmpq_t t;
1029 *fmpq_numref(t) = *x;
1030 *fmpq_denref(t) = WORD(1);
1031 arb_gamma_fmpq(y, t, prec);
1032 }
1033
1034 static void
1035 _arb_gamma(arb_t y, const arb_t x, slong prec, int inverse)
1036 {
1037 int reflect;
1038 slong r, n, wp;
1039 arb_t t, u, v;
1040 double acc;
1041
1042 if (arb_is_exact(x))
1043 {
1044 const arf_struct * mid = arb_midref(x);
1045
1046 if (arf_is_special(mid))
1047 {
1048 if (!inverse && arf_is_pos_inf(mid))
1049 arb_set(y, x);
1050 else if (arf_is_nan(mid) || arf_is_neg_inf(mid) || !inverse)
1051 arb_indeterminate(y);
1052 else
1053 arb_zero(y);
1054 return;
1055 }
1056 else if (inverse && arf_is_int(mid) && arf_sgn(mid) < 0)
1057 {
1058 arb_zero(y);
1059 }
1060 else
1061 {
1062 /* fast gamma(n), gamma(n/2) or gamma(n/4), ... */
1063 if (arf_cmpabs_2exp_si(mid, prec) < 0 &&
1064 (arf_is_int_2exp_si(mid, -2) || (prec > 1000 && arf_is_int_2exp_si(mid, -1000))))
1065 {
1066 fmpq_t a;
1067 fmpq_init(a);
1068 arf_get_fmpq(a, mid);
1069 arb_gamma_fmpq(y, a, prec + 2 * inverse);
1070 if (inverse)
1071 arb_inv(y, y, prec);
1072 fmpq_clear(a);
1073 return;
1074 }
1075 }
1076 }
1077
1078 /* todo: for large x (if exact or accurate enough), increase precision */
1079 acc = arb_rel_accuracy_bits(x);
1080 acc = FLINT_MAX(acc, 0);
1081 wp = FLINT_MIN(prec, acc + 20);
1082 wp = FLINT_MAX(wp, 2);
1083 wp = wp + FLINT_BIT_COUNT(wp);
1084
1085 if (acc < 3) /* try to avoid divisions blowing up */
1086 {
1087 if (arf_cmp_d(arb_midref(x), -0.5) < 0)
1088 {
1089 reflect = 1;
1090 r = 0;
1091 }
1092 else if (arf_cmp_si(arb_midref(x), 1) < 0)
1093 {
1094 reflect = 0;
1095 r = 1;
1096 }
1097 else
1098 {
1099 reflect = 0;
1100 r = 0;
1101 }
1102
1103 n = 1;
1104 }
1105 else
1106 {
1107 arb_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 0, wp);
1108 }
1109
1110 arb_init(t);
1111 arb_init(u);
1112 arb_init(v);
1113
1114 if (reflect)
1115 {
1116 arb_sub_ui(t, x, 1, wp);
1117 arb_neg(t, t);
1118 arb_rising_ui_rec(u, t, r, wp);
1119 arb_const_pi(v, wp);
1120 arb_mul(u, u, v, wp);
1121 arb_add_ui(t, t, r, wp);
1122 arb_gamma_stirling_eval(v, t, n, 0, wp);
1123
1124 if (inverse)
1125 {
1126 /* rgamma(x) = gamma(1-x+r) sin(pi x) / ((rf(1-x, r) * pi) */
1127 arb_exp(v, v, wp);
1128 arb_sin_pi(t, x, wp);
1129 arb_mul(v, v, t, wp);
1130 arb_mul(y, u, v, wp);
1131 arb_div(y, v, u, prec);
1132 }
1133 else
1134 {
1135 /* gamma(x) = (rf(1-x, r) * pi) rgamma(1-x+r) csc(pi x) */
1136 arb_neg(v, v);
1137 arb_exp(v, v, wp);
1138 arb_csc_pi(t, x, wp);
1139 arb_mul(v, v, t, wp);
1140 arb_mul(y, v, u, prec);
1141 }
1142 }
1143 else
1144 {
1145 arb_add_ui(t, x, r, wp);
1146 arb_gamma_stirling_eval(u, t, n, 0, wp);
1147
1148 if (inverse)
1149 {
1150 /* rgamma(x) = rf(x,r) rgamma(x+r) */
1151 arb_neg(u, u);
1152 arb_exp(u, u, prec);
1153 arb_rising_ui_rec(v, x, r, wp);
1154 arb_mul(y, v, u, prec);
1155 }
1156 else
1157 {
1158 /* gamma(x) = gamma(x+r) / rf(x,r) */
1159 arb_exp(u, u, prec);
1160 arb_rising_ui_rec(v, x, r, wp);
1161 arb_div(y, u, v, prec);
1162 }
1163 }
1164
1165 arb_clear(t);
1166 arb_clear(u);
1167 arb_clear(v);
277 arb_hypgeom_gamma_fmpz(y, x, prec);
1168278 }
1169279
1170280 void
1171281 arb_gamma(arb_t y, const arb_t x, slong prec)
1172282 {
1173 _arb_gamma(y, x, prec, 0);
283 arb_hypgeom_gamma(y, x, prec);
1174284 }
1175285
1176286 void
1177287 arb_rgamma(arb_t y, const arb_t x, slong prec)
1178288 {
1179 _arb_gamma(y, x, prec, 1);
289 arb_hypgeom_rgamma(y, x, prec);
1180290 }
1181291
1182292 void
1183293 arb_lgamma(arb_t y, const arb_t x, slong prec)
1184294 {
1185 int reflect;
1186 slong r, n, wp;
1187 arb_t t, u;
1188
1189 if (!arb_is_positive(x))
1190 {
1191 arb_indeterminate(y);
1192 return;
1193 }
1194
1195 /* fast gamma(n), gamma(n/2) or gamma(n/4), ... */
1196 if (arb_is_exact(x) && arf_cmpabs_2exp_si(arb_midref(x), prec) < 0 &&
1197 (arf_is_int_2exp_si(arb_midref(x), -2) || (prec > 10000 && arf_is_int_2exp_si(arb_midref(x), -1000))))
1198 {
1199 fmpq_t a;
1200 fmpq_init(a);
1201 arf_get_fmpq(a, arb_midref(x));
1202 arb_gamma_fmpq(y, a, prec);
1203 arb_log(y, y, prec);
1204 fmpq_clear(a);
1205 return;
1206 }
1207
1208 wp = prec + FLINT_BIT_COUNT(prec);
1209
1210 arb_gamma_stirling_choose_param(&reflect, &r, &n, x, 0, 0, wp);
1211
1212 /* log(gamma(x)) = log(gamma(x+r)) - log(rf(x,r)) */
1213 arb_init(t);
1214 arb_init(u);
1215
1216 arb_add_ui(t, x, r, wp);
1217 arb_gamma_stirling_eval(u, t, n, 0, wp);
1218 arb_rising_ui_rec(t, x, r, wp);
1219 arb_log(t, t, wp);
1220 arb_sub(y, u, t, prec);
1221
1222 arb_clear(t);
1223 arb_clear(u);
1224 }
1225
295 arb_hypgeom_lgamma(y, x, prec);
296 }
297
99 */
1010
1111 #include "arb.h"
12 #include "arb_hypgeom.h"
1213
1314 void
1415 arb_rising2_ui(arb_t u, arb_t v, const arb_t x, ulong n, slong prec)
1516 {
16 if (prec < 512 || n < 8 || arb_bits(x) < prec / 8)
17 arb_rising2_ui_bs(u, v, x, n, prec);
17 if (x == u || x == v)
18 {
19 arb_t t;
20 arb_init(t);
21 arb_set(t, x);
22 arb_rising2_ui(u, v, t, n, prec);
23 arb_clear(t);
24 }
1825 else
19 arb_rising2_ui_rs(u, v, x, n, 0, prec);
26 {
27 arb_struct tmp[2];
28
29 tmp[0] = *u;
30 tmp[1] = *v;
31
32 arb_hypgeom_rising_ui_jet(tmp, x, n, 2, prec);
33
34 *u = tmp[0];
35 *v = tmp[1];
36 }
2037 }
2138
+0
-83
arb/rising2_ui_bs.c less more
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb.h"
12
13 static void
14 bsplit(arb_t p, arb_t q, const arb_t x, ulong a, ulong b, slong prec)
15 {
16 if (b - a < 8)
17 {
18 ulong k;
19 arb_t t;
20
21 arb_one(p);
22 arb_add_ui(q, x, a, prec);
23
24 arb_init(t);
25
26 for (k = a + 1; k < b; k++)
27 {
28 arb_add_ui(t, x, k, prec);
29 arb_mul(p, p, t, prec);
30 arb_add(p, p, q, prec);
31 arb_mul(q, q, t, prec);
32 }
33
34 arb_clear(t);
35 }
36 else
37 {
38 arb_t r, s;
39 ulong m;
40
41 arb_init(r);
42 arb_init(s);
43
44 m = a + (b - a) / 2;
45 bsplit(p, q, x, a, m, prec);
46 bsplit(r, s, x, m, b, prec);
47
48 arb_mul(p, p, s, prec);
49 arb_mul(r, r, q, prec);
50 arb_add(p, p, r, prec);
51 arb_mul(q, q, s, prec);
52
53 arb_clear(r);
54 arb_clear(s);
55 }
56 }
57
58 void
59 arb_rising2_ui_bs(arb_t u, arb_t v, const arb_t x, ulong n, slong prec)
60 {
61 if (n == 0)
62 {
63 arb_zero(v);
64 arb_one(u);
65 }
66 else if (n == 1)
67 {
68 arb_set(u, x);
69 arb_one(v);
70 }
71 else
72 {
73 arb_t t;
74 slong wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
75
76 arb_init(t); /* support aliasing */
77 arb_set(t, x);
78 bsplit(v, u, t, 0, n, wp);
79 arb_clear(t);
80 }
81 }
82
+0
-162
arb/rising2_ui_rs.c less more
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "flint/fmpz_poly.h"
12 #include "arb.h"
13
14 void
15 _gamma_rf_bsplit(fmpz * A, ulong a, ulong b)
16 {
17 ulong n = b - a;
18
19 if (n == 0)
20 {
21 fmpz_one(A);
22 }
23 else if (n < 8)
24 {
25 ulong j, k;
26
27 fmpz_set_ui(A, a);
28 fmpz_one(A + 1);
29
30 for (j = 1; j < n; j++)
31 {
32 fmpz_one(A + j + 1);
33
34 for (k = j; k > 0; k--)
35 {
36 fmpz_mul_ui(A + k, A + k, a + j);
37 fmpz_add(A + k, A + k, A + k - 1);
38 }
39
40 fmpz_mul_ui(A, A, a + j);
41 }
42 }
43 else
44 {
45 ulong m = a + (b - a) / 2;
46 ulong w = m - a;
47 ulong v = b - m;
48
49 fmpz *t, *A1, *A2;
50
51 t = _fmpz_vec_init(w + v + 2);
52
53 A1 = t;
54 A2 = A1 + w + 1;
55
56 _gamma_rf_bsplit(A1, a, m);
57 _gamma_rf_bsplit(A2, m, b);
58
59 _fmpz_poly_mul(A, A2, v + 1, A1, w + 1);
60
61 _fmpz_vec_clear(t, w + v + 2);
62 }
63 }
64
65 void
66 arb_rising2_ui_rs(arb_t u, arb_t v,
67 const arb_t x, ulong n, ulong m, slong prec)
68 {
69 if (n == 0)
70 {
71 arb_zero(v);
72 arb_one(u);
73 }
74 else if (n == 1)
75 {
76 arb_set(u, x);
77 arb_one(v);
78 }
79 else
80 {
81 slong wp;
82 ulong i, j, a, b;
83 arb_ptr xs;
84 arb_t S, T, U, V;
85 fmpz *A, *B;
86
87 wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
88
89 if (m == 0)
90 {
91 ulong m1, m2;
92 m1 = 0.6 * pow(wp, 0.4);
93 m2 = n_sqrt(n);
94 m = FLINT_MIN(m1, m2);
95 }
96
97 m = FLINT_MAX(m, 1);
98
99 xs = _arb_vec_init(m + 1);
100 A = _fmpz_vec_init(2 * m + 1);
101 B = A + (m + 1);
102
103 arb_init(S);
104 arb_init(T);
105 arb_init(U);
106 arb_init(V);
107 _arb_vec_set_powers(xs, x, m + 1, wp);
108
109 for (i = 0; i < n; i += m)
110 {
111 a = i;
112 b = FLINT_MIN(n, a + m);
113
114 if (a == 0 || b != a + m)
115 {
116 _gamma_rf_bsplit(A, a, b);
117 }
118 else
119 {
120 fmpz tt = m;
121 _fmpz_poly_taylor_shift(A, &tt, m + 1);
122 }
123
124 _fmpz_poly_derivative(B, A, b - a + 1);
125
126 arb_set_fmpz(S, A);
127
128 for (j = 1; j <= b - a; j++)
129 arb_addmul_fmpz(S, xs + j, A + j, wp);
130
131 arb_set_fmpz(T, B);
132
133 for (j = 1; j < b - a; j++)
134 arb_addmul_fmpz(T, xs + j, B + j, wp);
135
136 if (i == 0)
137 {
138 arb_set(U, S);
139 arb_set(V, T);
140 }
141 else
142 {
143 arb_mul(V, V, S, wp);
144 arb_addmul(V, U, T, wp);
145 arb_mul(U, U, S, wp);
146 }
147 }
148
149 arb_set(u, U);
150 arb_set(v, V);
151
152 _arb_vec_clear(xs, m + 1);
153 _fmpz_vec_clear(A, 2 * m + 1);
154
155 arb_clear(S);
156 arb_clear(T);
157 arb_clear(U);
158 arb_clear(V);
159 }
160 }
161
99 */
1010
1111 #include "arb.h"
12 #include "arb_hypgeom.h"
1213
1314 void
1415 arb_rising_ui(arb_t y, const arb_t x, ulong n, slong prec)
1516 {
16 if (n < FLINT_MAX(prec, 100))
17 {
18 arb_rising_ui_rec(y, x, n, prec);
19 }
20 else
21 {
22 arb_t t;
23 arb_init(t);
24 arb_add_ui(t, x, n, prec);
25 arb_gamma(t, t, prec);
26 arb_rgamma(y, x, prec);
27 arb_mul(y, y, t, prec);
28 arb_clear(t);
29 }
17 arb_hypgeom_rising_ui(y, x, n, prec);
3018 }
3119
3220 void
3321 arb_rising(arb_t y, const arb_t x, const arb_t n, slong prec)
3422 {
35 if (arb_is_int(n) && arf_sgn(arb_midref(n)) >= 0 &&
36 arf_cmpabs_ui(arb_midref(n), FLINT_MAX(prec, 100)) < 0)
37 {
38 arb_rising_ui_rec(y, x,
39 arf_get_si(arb_midref(n), ARF_RND_DOWN), prec);
40 }
41 else
42 {
43 arb_t t;
44 arb_init(t);
45 arb_add(t, x, n, prec);
46 arb_gamma(t, t, prec);
47 arb_rgamma(y, x, prec);
48 arb_mul(y, y, t, prec);
49 arb_clear(t);
50 }
23 arb_hypgeom_rising(y, x, n, prec);
5124 }
5225
+0
-80
arb/rising_ui_bs.c less more
0 /*
1 Copyright (C) 2014 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb.h"
12
13 /* assumes y and x are not aliased */
14 static void
15 bsplit(arb_t y, const arb_t x, ulong a, ulong b, slong prec)
16 {
17 if (b - a == 1)
18 {
19 arb_set_round(y, x, prec);
20 }
21 else if (b - a <= 10)
22 {
23 slong i;
24 arb_t t;
25 arb_init(t);
26
27 arb_add_ui(t, x, a, prec);
28 arb_add_ui(y, x, a + 1, prec);
29 arb_mul(y, y, t, prec);
30
31 for (i = a + 2; i < b; i++)
32 {
33 arb_add_ui(t, x, i, prec);
34 arb_mul(y, y, t, prec);
35 }
36
37 arb_clear(t);
38 }
39 else
40 {
41 arb_t t, u;
42 ulong m = a + (b - a) / 2;
43
44 arb_init(t);
45 arb_init(u);
46
47 bsplit(t, x, a, m, prec);
48 bsplit(u, x, m, b, prec);
49
50 arb_mul(y, t, u, prec);
51
52 arb_clear(t);
53 arb_clear(u);
54 }
55 }
56
57 void
58 arb_rising_ui_bs(arb_t y, const arb_t x, ulong n, slong prec)
59 {
60 if (n == 0)
61 {
62 arb_one(y);
63 }
64 else if (n == 1)
65 {
66 arb_set_round(y, x, prec);
67 }
68 else
69 {
70 arb_t t;
71 slong wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
72
73 arb_init(t);
74 bsplit(t, x, 0, n, wp);
75 arb_set_round(y, t, prec);
76 arb_clear(t);
77 }
78 }
79
+0
-22
arb/rising_ui_rec.c less more
0 /*
1 Copyright (C) 2014 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb.h"
12
13 void
14 arb_rising_ui_rec(arb_t y, const arb_t x, ulong n, slong prec)
15 {
16 if (prec < 512 || n < 8 || arb_bits(x) < prec / 8)
17 arb_rising_ui_bs(y, x, n, prec);
18 else
19 arb_rising_ui_rs(y, x, n, 0, prec);
20 }
21
+0
-154
arb/rising_ui_rs.c less more
0 /*
1 Copyright (C) 2014 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "flint/arith.h"
12 #include "arb.h"
13
14 void
15 rising_difference_polynomial(fmpz * s, fmpz * c, ulong m)
16 {
17 slong i, j, v;
18
19 fmpz_t t;
20 fmpz_init(t);
21
22 arith_stirling_number_1u_vec(s, m, m + 1);
23
24 /* Compute the first row */
25 for (i = 0; i < m; i++)
26 {
27 fmpz_set_ui(t, m);
28 fmpz_mul_ui(t, t, (i + 1));
29 fmpz_mul(c + i, s + (i + 1), t);
30
31 for (j = i + 2; j < m + 1; j++)
32 {
33 fmpz_mul_ui(t, t, m * j);
34 fmpz_divexact_ui(t, t, j - i);
35 fmpz_addmul(c + i, s + j, t);
36 }
37 }
38
39 /* Extend using recurrence and symmetry */
40 for (v = 1; v < m; v++)
41 {
42 for (i = v; i < m - v; i++)
43 {
44 fmpz_mul_ui(t, c + (v - 1) * m + (i + 1), i + 1);
45 fmpz_divexact_ui(c + v * m + i, t, v);
46 }
47
48 for (i = 0; i < v; i++)
49 fmpz_set(c + v * m + i, c + i * m + v);
50 }
51
52 fmpz_clear(t);
53 }
54
55 void
56 arb_rising_ui_rs(arb_t y, const arb_t x, ulong n, ulong m, slong prec)
57 {
58 arb_ptr xs;
59 arb_t t, u, v;
60 ulong i, k, rem;
61 fmpz_t c, h;
62 fmpz *s, *d;
63 slong wp;
64
65 if (n == 0)
66 {
67 arb_one(y);
68 return;
69 }
70
71 if (n == 1)
72 {
73 arb_set_round(y, x, prec);
74 return;
75 }
76
77 wp = ARF_PREC_ADD(prec, FLINT_BIT_COUNT(n));
78
79 arb_init(t);
80 arb_init(u);
81 arb_init(v);
82 fmpz_init(c);
83 fmpz_init(h);
84
85 if (m == 0)
86 {
87 ulong m1, m2;
88 m1 = 0.2 * pow(wp, 0.4);
89 m2 = n_sqrt(n);
90 m = FLINT_MIN(m1, m2);
91 }
92
93 m = FLINT_MIN(m, n);
94 m = FLINT_MAX(m, 1);
95
96 xs = _arb_vec_init(m + 1);
97 d = _fmpz_vec_init(m * m);
98 s = _fmpz_vec_init(m + 1);
99
100 _arb_vec_set_powers(xs, x, m + 1, wp);
101
102 rising_difference_polynomial(s, d, m);
103
104 /* tail */
105 rem = m;
106 while (rem + m <= n)
107 rem += m;
108 arb_one(y);
109 for (k = rem; k < n; k++)
110 {
111 arb_add_ui(t, xs + 1, k, wp);
112 arb_mul(y, y, t, wp);
113 }
114
115 /* initial rising factorial */
116 arb_zero(t);
117 for (i = 1; i <= m; i++)
118 arb_addmul_fmpz(t, xs + i, s + i, wp);
119
120 arb_mul(y, y, t, wp);
121
122 /* the leading coefficient is always the same */
123 arb_mul_fmpz(xs + m - 1, xs + m - 1, d + m - 1 + 0, wp);
124
125 for (k = 0; k + 2 * m <= n; k += m)
126 {
127 for (i = 0; i < m - 1; i++)
128 {
129 fmpz_set_ui(h, k);
130 _fmpz_poly_evaluate_horner_fmpz(c, d + i * m, m - i, h);
131
132 if (i == 0)
133 arb_add_fmpz(t, t, c, wp);
134 else
135 arb_addmul_fmpz(t, xs + i, c, wp);
136 }
137
138 arb_add(t, t, xs + m - 1, wp);
139 arb_mul(y, y, t, wp);
140 }
141
142 arb_set_round(y, y, prec);
143
144 arb_clear(t);
145 arb_clear(u);
146 arb_clear(v);
147 _arb_vec_clear(xs, m + 1);
148 _fmpz_vec_clear(d, m * m);
149 _fmpz_vec_clear(s, m + 1);
150 fmpz_clear(c);
151 fmpz_clear(h);
152 }
153
0 /*
1 Copyright (C) 2012 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb.h"
12
13 void
14 arb_fma_naive(arb_t res, const arb_t x, const arb_t y, const arb_t z, slong prec)
15 {
16 arb_t t;
17 arb_init(t);
18 arb_set(t, z);
19 arb_addmul(t, x, y, prec);
20 arb_set(res, t);
21 arb_clear(t);
22 }
23
24 int main()
25 {
26 slong iter;
27 flint_rand_t state;
28
29 flint_printf("fma....");
30 fflush(stdout);
31
32 flint_randinit(state);
33
34 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
35 {
36 arb_t x, y, z, res1, res2;
37 slong prec;
38 int aliasing;
39
40 arb_init(x);
41 arb_init(y);
42 arb_init(z);
43 arb_init(res1);
44 arb_init(res2);
45
46 prec = 2 + n_randint(state, 200);
47
48 arb_randtest_special(x, state, 200, 100);
49 arb_randtest_special(y, state, 200, 100);
50 arb_randtest_special(z, state, 200, 100);
51 arb_randtest_special(res1, state, 200, 100);
52 arb_randtest_special(res2, state, 200, 100);
53
54 if (n_randint(state, 10) == 0 &&
55 fmpz_bits(ARF_EXPREF(arb_midref(x))) < 10 &&
56 fmpz_bits(ARF_EXPREF(arb_midref(y))) < 10 &&
57 fmpz_bits(ARF_EXPREF(arb_midref(z))) < 10)
58 {
59 prec = ARF_PREC_EXACT;
60 }
61
62 aliasing = n_randint(state, 7);
63
64 switch (aliasing)
65 {
66 case 0:
67 arb_fma(res1, x, y, z, prec);
68 arb_fma_naive(res2, x, y, z, prec);
69 break;
70 case 1:
71 arb_set(res1, z);
72 arb_fma(res1, x, y, res1, prec);
73 arb_fma_naive(res2, x, y, z, prec);
74 break;
75 case 2:
76 arb_set(res1, x);
77 arb_fma(res1, res1, y, z, prec);
78 arb_fma_naive(res2, x, y, z, prec);
79 break;
80 case 3:
81 arb_set(res1, y);
82 arb_fma(res1, x, res1, z, prec);
83 arb_fma_naive(res2, x, y, z, prec);
84 break;
85 case 4:
86 arb_fma(res1, x, x, z, prec);
87 arb_fma_naive(res2, x, x, z, prec);
88 break;
89 case 5:
90 arb_set(res1, x);
91 arb_fma(res1, res1, res1, z, prec);
92 arb_fma_naive(res2, x, x, z, prec);
93 break;
94 default:
95 arb_set(res1, x);
96 arb_fma(res1, res1, res1, res1, prec);
97 arb_fma_naive(res2, x, x, x, prec);
98 break;
99 }
100
101 if (!arb_equal(res1, res2))
102 {
103 flint_printf("FAIL!\n");
104 flint_printf("prec = %wd, aliasing = %d\n\n", prec, aliasing);
105 flint_printf("x = "); arb_printd(x, 30); flint_printf("\n\n");
106 flint_printf("y = "); arb_printd(y, 30); flint_printf("\n\n");
107 flint_printf("z = "); arb_printd(z, 30); flint_printf("\n\n");
108 flint_printf("res1 = "); arb_printd(res1, 30); flint_printf("\n\n");
109 flint_printf("res2 = "); arb_printd(res2, 30); flint_printf("\n\n");
110 flint_abort();
111 }
112
113 arb_clear(x);
114 arb_clear(y);
115 arb_clear(z);
116 arb_clear(res1);
117 arb_clear(res2);
118 }
119
120 flint_randclear(state);
121 flint_cleanup();
122 flint_printf("PASS\n");
123 return EXIT_SUCCESS;
124 }
+0
-110
arb/test/t-rising2_ui_bs.c less more
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "flint/arith.h"
12 #include "arb_poly.h"
13
14 int main()
15 {
16 slong iter;
17 flint_rand_t state;
18
19 flint_printf("rising2_ui_bs....");
20 fflush(stdout);
21
22 flint_randinit(state);
23
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 arb_t a, u, v, u2, v2;
27 fmpz *f;
28 arb_ptr g;
29 ulong n;
30 slong i, prec;
31
32 arb_init(a);
33 arb_init(u);
34 arb_init(v);
35 arb_init(u2);
36 arb_init(v2);
37
38 arb_randtest(a, state, 1 + n_randint(state, 4000), 10);
39 arb_randtest(u, state, 1 + n_randint(state, 4000), 10);
40 arb_randtest(v, state, 1 + n_randint(state, 4000), 10);
41 n = n_randint(state, 120);
42
43 f = _fmpz_vec_init(n + 1);
44 g = _arb_vec_init(n + 1);
45
46 prec = 2 + n_randint(state, 4000);
47 arb_rising2_ui_bs(u, v, a, n, prec);
48
49 arith_stirling_number_1u_vec(f, n, n + 1);
50 for (i = 0; i <= n; i++)
51 arb_set_fmpz(g + i, f + i);
52 _arb_poly_evaluate(u2, g, n + 1, a, prec);
53
54 _arb_poly_derivative(g, g, n + 1, prec);
55 _arb_poly_evaluate(v2, g, n, a, prec);
56
57 if (!arb_overlaps(u, u2) || !arb_overlaps(v, v2))
58 {
59 flint_printf("FAIL: overlap\n\n");
60 flint_printf("n = %wu\n", n);
61 flint_printf("a = "); arb_printd(a, 15); flint_printf("\n\n");
62 flint_printf("u = "); arb_printd(u, 15); flint_printf("\n\n");
63 flint_printf("u2 = "); arb_printd(u2, 15); flint_printf("\n\n");
64 flint_printf("v = "); arb_printd(v, 15); flint_printf("\n\n");
65 flint_printf("v2 = "); arb_printd(v2, 15); flint_printf("\n\n");
66 flint_abort();
67 }
68
69 arb_set(u2, a);
70 arb_rising2_ui_bs(u2, v, u2, n, prec);
71
72 if (!arb_equal(u2, u))
73 {
74 flint_printf("FAIL: aliasing 1\n\n");
75 flint_printf("a = "); arb_printd(a, 15); flint_printf("\n\n");
76 flint_printf("u = "); arb_printd(u, 15); flint_printf("\n\n");
77 flint_printf("u2 = "); arb_printd(u2, 15); flint_printf("\n\n");
78 flint_printf("n = %wu\n", n);
79 flint_abort();
80 }
81
82 arb_set(v2, a);
83 arb_rising2_ui_bs(u, v2, v2, n, prec);
84
85 if (!arb_equal(v2, v))
86 {
87 flint_printf("FAIL: aliasing 2\n\n");
88 flint_printf("a = "); arb_printd(a, 15); flint_printf("\n\n");
89 flint_printf("v = "); arb_printd(v, 15); flint_printf("\n\n");
90 flint_printf("v2 = "); arb_printd(v2, 15); flint_printf("\n\n");
91 flint_printf("n = %wu\n", n);
92 flint_abort();
93 }
94
95 arb_clear(a);
96 arb_clear(u);
97 arb_clear(v);
98 arb_clear(u2);
99 arb_clear(v2);
100 _fmpz_vec_clear(f, n + 1);
101 _arb_vec_clear(g, n + 1);
102 }
103
104 flint_randclear(state);
105 flint_cleanup();
106 flint_printf("PASS\n");
107 return EXIT_SUCCESS;
108 }
109
+0
-110
arb/test/t-rising2_ui_rs.c less more
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "flint/arith.h"
12 #include "arb_poly.h"
13
14 int main()
15 {
16 slong iter;
17 flint_rand_t state;
18
19 flint_printf("rising2_ui_rs....");
20 fflush(stdout);
21
22 flint_randinit(state);
23
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 arb_t a, u, v, u2, v2;
27 fmpz *f;
28 arb_ptr g;
29 ulong n;
30 slong i, prec;
31
32 arb_init(a);
33 arb_init(u);
34 arb_init(v);
35 arb_init(u2);
36 arb_init(v2);
37
38 arb_randtest(a, state, 1 + n_randint(state, 4000), 10);
39 arb_randtest(u, state, 1 + n_randint(state, 4000), 10);
40 arb_randtest(v, state, 1 + n_randint(state, 4000), 10);
41 n = n_randint(state, 120);
42
43 f = _fmpz_vec_init(n + 1);
44 g = _arb_vec_init(n + 1);
45
46 prec = 2 + n_randint(state, 4000);
47 arb_rising2_ui_rs(u, v, a, n, 0, prec);
48
49 arith_stirling_number_1u_vec(f, n, n + 1);
50 for (i = 0; i <= n; i++)
51 arb_set_fmpz(g + i, f + i);
52 _arb_poly_evaluate(u2, g, n + 1, a, prec);
53
54 _arb_poly_derivative(g, g, n + 1, prec);
55 _arb_poly_evaluate(v2, g, n, a, prec);
56
57 if (!arb_overlaps(u, u2) || !arb_overlaps(v, v2))
58 {
59 flint_printf("FAIL: overlap\n\n");
60 flint_printf("n = %wu\n", n);
61 flint_printf("a = "); arb_printd(a, 15); flint_printf("\n\n");
62 flint_printf("u = "); arb_printd(u, 15); flint_printf("\n\n");
63 flint_printf("u2 = "); arb_printd(u2, 15); flint_printf("\n\n");
64 flint_printf("v = "); arb_printd(v, 15); flint_printf("\n\n");
65 flint_printf("v2 = "); arb_printd(v2, 15); flint_printf("\n\n");
66 flint_abort();
67 }
68
69 arb_set(u2, a);
70 arb_rising2_ui_rs(u2, v, u2, n, 0, prec);
71
72 if (!arb_equal(u2, u))
73 {
74 flint_printf("FAIL: aliasing 1\n\n");
75 flint_printf("a = "); arb_printd(a, 15); flint_printf("\n\n");
76 flint_printf("u = "); arb_printd(u, 15); flint_printf("\n\n");
77 flint_printf("u2 = "); arb_printd(u2, 15); flint_printf("\n\n");
78 flint_printf("n = %wu\n", n);
79 flint_abort();
80 }
81
82 arb_set(v2, a);
83 arb_rising2_ui_rs(u, v2, v2, n, 0, prec);
84
85 if (!arb_equal(v2, v))
86 {
87 flint_printf("FAIL: aliasing 2\n\n");
88 flint_printf("a = "); arb_printd(a, 15); flint_printf("\n\n");
89 flint_printf("v = "); arb_printd(v, 15); flint_printf("\n\n");
90 flint_printf("v2 = "); arb_printd(v2, 15); flint_printf("\n\n");
91 flint_printf("n = %wu\n", n);
92 flint_abort();
93 }
94
95 arb_clear(a);
96 arb_clear(u);
97 arb_clear(v);
98 arb_clear(u2);
99 arb_clear(v2);
100 _fmpz_vec_clear(f, n + 1);
101 _arb_vec_clear(g, n + 1);
102 }
103
104 flint_randclear(state);
105 flint_cleanup();
106 flint_printf("PASS\n");
107 return EXIT_SUCCESS;
108 }
109
+0
-109
arb/test/t-rising_ui_bs.c less more
0 /*
1 Copyright (C) 2012 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("rising_ui_bs....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 /* compare with fmpq */
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 arb_t a, b;
27 fmpq_t x, y, z;
28 ulong n;
29 slong i;
30
31 arb_init(a);
32 arb_init(b);
33
34 fmpq_init(x);
35 fmpq_init(y);
36 fmpq_init(z);
37
38 arb_randtest(a, state, 1 + n_randint(state, 1000), 10);
39 arb_randtest(b, state, 1 + n_randint(state, 1000), 10);
40 n = n_randint(state, 80);
41
42 arb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 10));
43 arb_rising_ui_bs(b, a, n, 2 + n_randint(state, 1000));
44
45 fmpq_one(y);
46 for (i = 0; i < n; i++)
47 {
48 fmpq_set_si(z, i, 1);
49 fmpq_add(z, x, z);
50 fmpq_mul(y, y, z);
51 }
52
53 if (!arb_contains_fmpq(b, y))
54 {
55 flint_printf("FAIL: containment\n\n");
56 flint_printf("n = %wu\n", n);
57 flint_printf("a = "); arb_print(a); flint_printf("\n\n");
58 flint_printf("x = "); fmpq_print(x); flint_printf("\n\n");
59 flint_printf("b = "); arb_print(b); flint_printf("\n\n");
60 flint_printf("y = "); fmpq_print(y); flint_printf("\n\n");
61 flint_abort();
62 }
63
64 arb_clear(a);
65 arb_clear(b);
66
67 fmpq_clear(x);
68 fmpq_clear(y);
69 fmpq_clear(z);
70 }
71
72 /* aliasing of y and x */
73 for (iter = 0; iter < 500 * arb_test_multiplier(); iter++)
74 {
75 arb_t x, y;
76 ulong n;
77 slong prec;
78
79 arb_init(x);
80 arb_init(y);
81
82 arb_randtest(x, state, 1 + n_randint(state, 200), 10);
83 arb_randtest(y, state, 1 + n_randint(state, 200), 10);
84 n = n_randint(state, 100);
85
86 prec = 2 + n_randint(state, 1000);
87
88 arb_rising_ui_bs(y, x, n, prec);
89 arb_rising_ui_bs(x, x, n, prec);
90
91 if (!arb_equal(x, y))
92 {
93 flint_printf("FAIL: aliasing\n\n");
94 flint_printf("x = "); arb_print(x); flint_printf("\n\n");
95 flint_printf("y = "); arb_print(y); flint_printf("\n\n");
96 flint_printf("n = %wu\n", n);
97 flint_abort();
98 }
99
100 arb_clear(x);
101 arb_clear(y);
102 }
103
104 flint_randclear(state);
105 flint_cleanup();
106 flint_printf("PASS\n");
107 return EXIT_SUCCESS;
108 }
+0
-109
arb/test/t-rising_ui_rec.c less more
0 /*
1 Copyright (C) 2012 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("rising_ui_rec....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 /* compare with fmpq */
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 arb_t a, b;
27 fmpq_t x, y, z;
28 ulong n;
29 slong i;
30
31 arb_init(a);
32 arb_init(b);
33
34 fmpq_init(x);
35 fmpq_init(y);
36 fmpq_init(z);
37
38 arb_randtest(a, state, 1 + n_randint(state, 1000), 10);
39 arb_randtest(b, state, 1 + n_randint(state, 1000), 10);
40 n = n_randint(state, 80);
41
42 arb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 10));
43 arb_rising_ui_rec(b, a, n, 2 + n_randint(state, 1000));
44
45 fmpq_one(y);
46 for (i = 0; i < n; i++)
47 {
48 fmpq_set_si(z, i, 1);
49 fmpq_add(z, x, z);
50 fmpq_mul(y, y, z);
51 }
52
53 if (!arb_contains_fmpq(b, y))
54 {
55 flint_printf("FAIL: containment\n\n");
56 flint_printf("n = %wu\n", n);
57 flint_printf("a = "); arb_print(a); flint_printf("\n\n");
58 flint_printf("x = "); fmpq_print(x); flint_printf("\n\n");
59 flint_printf("b = "); arb_print(b); flint_printf("\n\n");
60 flint_printf("y = "); fmpq_print(y); flint_printf("\n\n");
61 flint_abort();
62 }
63
64 arb_clear(a);
65 arb_clear(b);
66
67 fmpq_clear(x);
68 fmpq_clear(y);
69 fmpq_clear(z);
70 }
71
72 /* aliasing of y and x */
73 for (iter = 0; iter < 500 * arb_test_multiplier(); iter++)
74 {
75 arb_t x, y;
76 ulong n;
77 slong prec;
78
79 arb_init(x);
80 arb_init(y);
81
82 arb_randtest(x, state, 1 + n_randint(state, 200), 10);
83 arb_randtest(y, state, 1 + n_randint(state, 200), 10);
84 n = n_randint(state, 100);
85
86 prec = 2 + n_randint(state, 1000);
87
88 arb_rising_ui_rec(y, x, n, prec);
89 arb_rising_ui_rec(x, x, n, prec);
90
91 if (!arb_equal(x, y))
92 {
93 flint_printf("FAIL: aliasing\n\n");
94 flint_printf("x = "); arb_print(x); flint_printf("\n\n");
95 flint_printf("y = "); arb_print(y); flint_printf("\n\n");
96 flint_printf("n = %wu\n", n);
97 flint_abort();
98 }
99
100 arb_clear(x);
101 arb_clear(y);
102 }
103
104 flint_randclear(state);
105 flint_cleanup();
106 flint_printf("PASS\n");
107 return EXIT_SUCCESS;
108 }
+0
-112
arb/test/t-rising_ui_rs.c less more
0 /*
1 Copyright (C) 2012 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("rising_ui_rs....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 /* compare with fmpq */
24 for (iter = 0; iter < 1000 * arb_test_multiplier(); iter++)
25 {
26 arb_t a, b;
27 fmpq_t x, y, z;
28 ulong n, step;
29 slong i;
30
31 arb_init(a);
32 arb_init(b);
33
34 fmpq_init(x);
35 fmpq_init(y);
36 fmpq_init(z);
37
38 arb_randtest(a, state, 1 + n_randint(state, 1000), 10);
39 arb_randtest(b, state, 1 + n_randint(state, 1000), 10);
40 n = n_randint(state, 80);
41
42 arb_get_rand_fmpq(x, state, a, 1 + n_randint(state, 10));
43
44 step = n_randint(state, 20);
45 arb_rising_ui_rs(b, a, n, step, 2 + n_randint(state, 1000));
46
47 fmpq_one(y);
48 for (i = 0; i < n; i++)
49 {
50 fmpq_set_si(z, i, 1);
51 fmpq_add(z, x, z);
52 fmpq_mul(y, y, z);
53 }
54
55 if (!arb_contains_fmpq(b, y))
56 {
57 flint_printf("FAIL: containment\n\n");
58 flint_printf("n = %wu\n", n);
59 flint_printf("a = "); arb_print(a); flint_printf("\n\n");
60 flint_printf("x = "); fmpq_print(x); flint_printf("\n\n");
61 flint_printf("b = "); arb_print(b); flint_printf("\n\n");
62 flint_printf("y = "); fmpq_print(y); flint_printf("\n\n");
63 flint_abort();
64 }
65
66 arb_clear(a);
67 arb_clear(b);
68
69 fmpq_clear(x);
70 fmpq_clear(y);
71 fmpq_clear(z);
72 }
73
74 /* aliasing of y and x */
75 for (iter = 0; iter < 500 * arb_test_multiplier(); iter++)
76 {
77 arb_t x, y;
78 ulong n, step;
79 slong prec;
80
81 arb_init(x);
82 arb_init(y);
83
84 arb_randtest(x, state, 1 + n_randint(state, 200), 10);
85 arb_randtest(y, state, 1 + n_randint(state, 200), 10);
86 n = n_randint(state, 100);
87
88 prec = 2 + n_randint(state, 1000);
89
90 step = n_randint(state, 20);
91 arb_rising_ui_rs(y, x, n, step, prec);
92 arb_rising_ui_rs(x, x, n, step, prec);
93
94 if (!arb_equal(x, y))
95 {
96 flint_printf("FAIL: aliasing\n\n");
97 flint_printf("x = "); arb_print(x); flint_printf("\n\n");
98 flint_printf("y = "); arb_print(y); flint_printf("\n\n");
99 flint_printf("n = %wu\n", n);
100 flint_abort();
101 }
102
103 arb_clear(x);
104 arb_clear(y);
105 }
106
107 flint_randclear(state);
108 flint_cleanup();
109 flint_printf("PASS\n");
110 return EXIT_SUCCESS;
111 }
1010
1111 #include "arb.h"
1212
13 const char * arb_version = "2.20.0";
13 const char * arb_version = "2.21.0";
2626 #endif
2727
2828 #define __ARB_VERSION 2
29 #define __ARB_VERSION_MINOR 20
29 #define __ARB_VERSION_MINOR 21
3030 #define __ARB_VERSION_PATCHLEVEL 0
31 #define ARB_VERSION "2.20.0"
31 #define ARB_VERSION "2.21.0"
3232 #define __ARB_RELEASE (__ARB_VERSION * 10000 + \
3333 __ARB_VERSION_MINOR * 100 + \
3434 __ARB_VERSION_PATCHLEVEL)
423423 void arb_submul_si(arb_t z, const arb_t x, slong y, slong prec);
424424 void arb_submul_ui(arb_t z, const arb_t x, ulong y, slong prec);
425425 void arb_submul_fmpz(arb_t z, const arb_t x, const fmpz_t y, slong prec);
426
427 void arb_fma(arb_t res, const arb_t x, const arb_t y, const arb_t z, slong prec);
428 void arb_fma_arf(arb_t res, const arb_t x, const arf_t y, const arb_t z, slong prec);
429 void arb_fma_ui(arb_t res, const arb_t x, ulong y, const arb_t z, slong prec);
426430
427431 void arb_dot_simple(arb_t res, const arb_t initial, int subtract,
428432 arb_srcptr x, slong xstep, arb_srcptr y, slong ystep, slong len, slong prec);
562566 void arb_zeta(arb_t z, const arb_t s, slong prec);
563567 void arb_hurwitz_zeta(arb_t z, const arb_t s, const arb_t a, slong prec);
564568
565 void arb_rising_ui_bs(arb_t y, const arb_t x, ulong n, slong prec);
566 void arb_rising_ui_rs(arb_t y, const arb_t x, ulong n, ulong m, slong prec);
567 void arb_rising_ui_rec(arb_t y, const arb_t x, ulong n, slong prec);
568569 void arb_rising_ui(arb_t z, const arb_t x, ulong n, slong prec);
569570 void arb_rising_fmpq_ui(arb_t y, const fmpq_t x, ulong n, slong prec);
570571 void arb_rising(arb_t z, const arb_t x, const arb_t n, slong prec);
571
572 void arb_rising2_ui_rs(arb_t u, arb_t v, const arb_t x, ulong n, ulong m, slong prec);
573 void arb_rising2_ui_bs(arb_t u, arb_t v, const arb_t x, ulong n, slong prec);
574572 void arb_rising2_ui(arb_t u, arb_t v, const arb_t x, ulong n, slong prec);
575573
576574 void arb_log_ui_from_prev(arb_t s, ulong k, arb_t log_prev, ulong prev, slong prec);
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include <math.h>
12
13 #include "arb.h"
14 #include "acb.h"
15 #include "arb_fpwrap.h"
16 #include "arb_hypgeom.h"
17 #include "acb_hypgeom.h"
18 #include "acb_dirichlet.h"
19 #include "acb_elliptic.h"
20 #include "acb_modular.h"
21
22 static int
23 _acb_vec_is_finite(acb_srcptr x, slong len)
24 {
25 slong i;
26
27 for (i = 0; i < len; i++)
28 if (!acb_is_finite(x + i))
29 return 0;
30
31 return 1;
32 }
33
34 int
35 arb_accurate_enough_d(const arb_t x, int flags)
36 {
37 if (flags & FPWRAP_CORRECT_ROUNDING)
38 {
39 return arb_can_round_arf(x, 53, ARF_RND_NEAR);
40 }
41
42 if (arb_rel_accuracy_bits(x) >= 53 + 1)
43 return 1;
44
45 /* Rounding will give +/- 0 (we don't worry which) */
46 if (mag_cmp_2exp_si(arb_radref(x), -1077) < 0 &&
47 arf_cmpabs_2exp_si(arb_midref(x), -1077) < 0)
48 {
49 return 1;
50 }
51
52 /* Rounding will give +/- inf */
53 if (arb_rel_accuracy_bits(x) > 2 &&
54 arf_cmpabs_2exp_si(arb_midref(x), 1024) > 0)
55 {
56 return 1;
57 }
58
59 return 0;
60 }
61
62 int
63 acb_accurate_enough_d(const acb_t x, int flags)
64 {
65 if (flags & FPWRAP_CORRECT_ROUNDING)
66 {
67 return arb_can_round_arf(acb_realref(x), 53, ARF_RND_NEAR) &&
68 arb_can_round_arf(acb_imagref(x), 53, ARF_RND_NEAR);
69 }
70
71 if (flags & FPWRAP_ACCURATE_PARTS)
72 {
73 return arb_accurate_enough_d(acb_realref(x), flags) &&
74 arb_accurate_enough_d(acb_imagref(x), flags);
75 }
76
77 if (acb_rel_accuracy_bits(x) >= 53 + 1)
78 return 1;
79
80 /* Rounding will give +/- 0 (we don't worry which) */
81 if (mag_cmp_2exp_si(arb_radref(acb_realref(x)), -1077) < 0 &&
82 arf_cmpabs_2exp_si(arb_midref(acb_realref(x)), -1077) < 0 &&
83 mag_cmp_2exp_si(arb_radref(acb_imagref(x)), -1077) < 0 &&
84 arf_cmpabs_2exp_si(arb_midref(acb_imagref(x)), -1077) < 0)
85 {
86 return 1;
87 }
88
89 /* Rounding will give +/- inf */
90 if (acb_rel_accuracy_bits(x) > 2 &&
91 (arf_cmpabs_2exp_si(arb_midref(acb_realref(x)), 1024) > 0 ||
92 arf_cmpabs_2exp_si(arb_midref(acb_imagref(x)), 1024) > 0))
93 {
94 return 1;
95 }
96
97 return 0;
98 }
99
100 #define WP_INITIAL 64
101
102 #define DOUBLE_CHECK_RESULT \
103 if (arb_accurate_enough_d(arb_res, flags)) \
104 { \
105 *res = arf_get_d(arb_midref(arb_res), ARF_RND_NEAR); \
106 status = FPWRAP_SUCCESS; \
107 break; \
108 } \
109 if (wp >= double_wp_max(flags)) \
110 { \
111 *res = D_NAN; \
112 status = FPWRAP_UNABLE; \
113 break; \
114 } \
115
116 #define DOUBLE_CHECK_RESULT2 \
117 if (arb_accurate_enough_d(arb_res1, flags) && arb_accurate_enough_d(arb_res2, flags)) \
118 { \
119 *res1 = arf_get_d(arb_midref(arb_res1), ARF_RND_NEAR); \
120 *res2 = arf_get_d(arb_midref(arb_res2), ARF_RND_NEAR); \
121 status = FPWRAP_SUCCESS; \
122 break; \
123 } \
124 if (wp >= double_wp_max(flags)) \
125 { \
126 *res1 = D_NAN; \
127 *res2 = D_NAN; \
128 status = FPWRAP_UNABLE; \
129 break; \
130 } \
131
132 #define CDOUBLE_CHECK_RESULT \
133 if (acb_accurate_enough_d(acb_res, flags)) \
134 { \
135 res->real = arf_get_d(arb_midref(acb_realref(acb_res)), ARF_RND_NEAR); \
136 res->imag = arf_get_d(arb_midref(acb_imagref(acb_res)), ARF_RND_NEAR); \
137 status = FPWRAP_SUCCESS; \
138 break; \
139 } \
140 if (wp >= double_wp_max(flags)) \
141 { \
142 res->real = D_NAN; \
143 res->imag = D_NAN; \
144 status = FPWRAP_UNABLE; \
145 break; \
146 }
147
148
149 static slong
150 double_wp_max(int flags)
151 {
152 int iters;
153
154 iters = flags / FPWRAP_WORK_LIMIT;
155
156 if (iters <= 0)
157 return 64 << 7;
158
159 if (iters >= 25)
160 return 64 << 24;
161
162 return 64 << iters;
163 }
164
165
166 typedef void (*arb_func_1)(arb_t, const arb_t, slong prec);
167 typedef void (*arb_func_2)(arb_t, const arb_t, const arb_t, slong prec);
168 typedef void (*arb_func_3)(arb_t, const arb_t, const arb_t, const arb_t, slong prec);
169 typedef void (*arb_func_4)(arb_t, const arb_t, const arb_t, const arb_t, const arb_t, slong prec);
170
171 typedef void (*acb_func_1)(acb_t, const acb_t, slong prec);
172 typedef void (*acb_func_2)(acb_t, const acb_t, const acb_t, slong prec);
173 typedef void (*acb_func_3)(acb_t, const acb_t, const acb_t, const acb_t, slong prec);
174 typedef void (*acb_func_4)(acb_t, const acb_t, const acb_t, const acb_t, const acb_t, slong prec);
175
176 typedef void (*arb_func_1_int)(arb_t, const arb_t, int, slong prec);
177 typedef void (*arb_func_2_int)(arb_t, const arb_t, const arb_t, int, slong prec);
178 typedef void (*arb_func_3_int)(arb_t, const arb_t, const arb_t, const arb_t, int, slong prec);
179 typedef void (*arb_func_4_int)(arb_t, const arb_t, const arb_t, const arb_t, const arb_t, int, slong prec);
180
181 typedef void (*acb_func_1_int)(acb_t, const acb_t, int, slong prec);
182 typedef void (*acb_func_2_int)(acb_t, const acb_t, const acb_t, int, slong prec);
183 typedef void (*acb_func_3_int)(acb_t, const acb_t, const acb_t, const acb_t, int, slong prec);
184 typedef void (*acb_func_4_int)(acb_t, const acb_t, const acb_t, const acb_t, const acb_t, int, slong prec);
185
186
187 int arb_fpwrap_double_1(double * res, arb_func_1 func, double x, int flags)
188 {
189 arb_t arb_res, arb_x;
190 slong wp;
191 int status;
192
193 arb_init(arb_res);
194 arb_init(arb_x);
195
196 arb_set_d(arb_x, x);
197
198 if (!arb_is_finite(arb_x))
199 {
200 *res = D_NAN;
201 status = FPWRAP_UNABLE;
202 }
203 else
204 {
205 for (wp = WP_INITIAL; ; wp *= 2)
206 {
207 func(arb_res, arb_x, wp);
208 DOUBLE_CHECK_RESULT
209 }
210 }
211
212 arb_clear(arb_x);
213 arb_clear(arb_res);
214
215 return status;
216 }
217
218 int arb_fpwrap_double_2(double * res, arb_func_2 func, double x1, double x2, int flags)
219 {
220 arb_t arb_res, arb_x1, arb_x2;
221 slong wp;
222 int status;
223
224 arb_init(arb_res);
225 arb_init(arb_x1);
226 arb_init(arb_x2);
227
228 arb_set_d(arb_x1, x1);
229 arb_set_d(arb_x2, x2);
230
231 if (!arb_is_finite(arb_x1) || !arb_is_finite(arb_x2))
232 {
233 *res = D_NAN;
234 status = FPWRAP_UNABLE;
235 }
236 else
237 {
238 for (wp = WP_INITIAL; ; wp *= 2)
239 {
240 func(arb_res, arb_x1, arb_x2, wp);
241 DOUBLE_CHECK_RESULT
242 }
243 }
244
245 arb_clear(arb_x1);
246 arb_clear(arb_x2);
247 arb_clear(arb_res);
248
249 return status;
250 }
251
252 int arb_fpwrap_double_3(double * res, arb_func_3 func, double x1, double x2, double x3, int flags)
253 {
254 arb_t arb_res, arb_x1, arb_x2, arb_x3;
255 slong wp;
256 int status;
257
258 arb_init(arb_res);
259 arb_init(arb_x1);
260 arb_init(arb_x2);
261 arb_init(arb_x3);
262
263 arb_set_d(arb_x1, x1);
264 arb_set_d(arb_x2, x2);
265 arb_set_d(arb_x3, x3);
266
267 if (!arb_is_finite(arb_x1) || !arb_is_finite(arb_x2) || !arb_is_finite(arb_x3))
268 {
269 *res = D_NAN;
270 status = FPWRAP_UNABLE;
271 }
272 else
273 {
274 for (wp = WP_INITIAL; ; wp *= 2)
275 {
276 func(arb_res, arb_x1, arb_x2, arb_x3, wp);
277 DOUBLE_CHECK_RESULT
278 }
279 }
280
281 arb_clear(arb_x1);
282 arb_clear(arb_x2);
283 arb_clear(arb_x3);
284 arb_clear(arb_res);
285
286 return status;
287 }
288
289 int arb_fpwrap_double_4(double * res, arb_func_4 func, double x1, double x2, double x3, double x4, int flags)
290 {
291 arb_t arb_res, arb_x1, arb_x2, arb_x3, arb_x4;
292 slong wp;
293 int status;
294
295 arb_init(arb_res);
296 arb_init(arb_x1);
297 arb_init(arb_x2);
298 arb_init(arb_x3);
299 arb_init(arb_x4);
300
301 arb_set_d(arb_x1, x1);
302 arb_set_d(arb_x2, x2);
303 arb_set_d(arb_x3, x3);
304 arb_set_d(arb_x3, x4);
305
306 if (!arb_is_finite(arb_x1) || !arb_is_finite(arb_x2) || !arb_is_finite(arb_x3) || !arb_is_finite(arb_x4))
307 {
308 *res = D_NAN;
309 status = FPWRAP_UNABLE;
310 }
311 else
312 {
313 for (wp = WP_INITIAL; ; wp *= 2)
314 {
315 func(arb_res, arb_x1, arb_x2, arb_x3, arb_x4, wp);
316 DOUBLE_CHECK_RESULT
317 }
318 }
319
320 arb_clear(arb_x1);
321 arb_clear(arb_x2);
322 arb_clear(arb_x3);
323 arb_clear(arb_x4);
324 arb_clear(arb_res);
325
326 return status;
327 }
328
329 int arb_fpwrap_cdouble_1(complex_double * res, acb_func_1 func, complex_double x, int flags)
330 {
331 acb_t acb_res, acb_x;
332 slong wp;
333 int status;
334
335 acb_init(acb_res);
336 acb_init(acb_x);
337
338 acb_set_d_d(acb_x, x.real, x.imag);
339
340 if (!acb_is_finite(acb_x))
341 {
342 res->real = D_NAN;
343 res->imag = D_NAN;
344 status = FPWRAP_UNABLE;
345 }
346 else
347 {
348 for (wp = WP_INITIAL; ; wp *= 2)
349 {
350 func(acb_res, acb_x, wp);
351 CDOUBLE_CHECK_RESULT
352 }
353 }
354
355 acb_clear(acb_x);
356 acb_clear(acb_res);
357
358 return status;
359 }
360
361 int arb_fpwrap_cdouble_2(complex_double * res, acb_func_2 func, complex_double x1, complex_double x2, int flags)
362 {
363 acb_t acb_res, acb_x1, acb_x2;
364 slong wp;
365 int status;
366
367 acb_init(acb_res);
368 acb_init(acb_x1);
369 acb_init(acb_x2);
370
371 acb_set_d_d(acb_x1, x1.real, x1.imag);
372 acb_set_d_d(acb_x2, x2.real, x2.imag);
373
374 if (!acb_is_finite(acb_x1) || !acb_is_finite(acb_x2))
375 {
376 res->real = D_NAN;
377 res->imag = D_NAN;
378 status = FPWRAP_UNABLE;
379 }
380 else
381 {
382 for (wp = WP_INITIAL; ; wp *= 2)
383 {
384 func(acb_res, acb_x1, acb_x2, wp);
385 CDOUBLE_CHECK_RESULT
386 }
387 }
388
389 acb_clear(acb_x1);
390 acb_clear(acb_x2);
391 acb_clear(acb_res);
392
393 return status;
394 }
395
396 int arb_fpwrap_cdouble_3(complex_double * res, acb_func_3 func, complex_double x1, complex_double x2, complex_double x3, int flags)
397 {
398 acb_t acb_res, acb_x1, acb_x2, acb_x3;
399 slong wp;
400 int status;
401
402 acb_init(acb_res);
403 acb_init(acb_x1);
404 acb_init(acb_x2);
405 acb_init(acb_x3);
406
407 acb_set_d_d(acb_x1, x1.real, x1.imag);
408 acb_set_d_d(acb_x2, x2.real, x2.imag);
409 acb_set_d_d(acb_x3, x3.real, x3.imag);
410
411 if (!acb_is_finite(acb_x1) || !acb_is_finite(acb_x2) || !acb_is_finite(acb_x3))
412 {
413 res->real = D_NAN;
414 res->imag = D_NAN;
415 status = FPWRAP_UNABLE;
416 }
417 else
418 {
419 for (wp = WP_INITIAL; ; wp *= 2)
420 {
421 func(acb_res, acb_x1, acb_x2, acb_x3, wp);
422 CDOUBLE_CHECK_RESULT
423 }
424 }
425
426 acb_clear(acb_x1);
427 acb_clear(acb_x2);
428 acb_clear(acb_x3);
429 acb_clear(acb_res);
430
431 return status;
432 }
433
434 int arb_fpwrap_cdouble_4(complex_double * res, acb_func_4 func, complex_double x1, complex_double x2, complex_double x3, complex_double x4, int flags)
435 {
436 acb_t acb_res, acb_x1, acb_x2, acb_x3, acb_x4;
437 slong wp;
438 int status;
439
440 acb_init(acb_res);
441 acb_init(acb_x1);
442 acb_init(acb_x2);
443 acb_init(acb_x3);
444 acb_init(acb_x4);
445
446 acb_set_d_d(acb_x1, x1.real, x1.imag);
447 acb_set_d_d(acb_x2, x2.real, x2.imag);
448 acb_set_d_d(acb_x3, x3.real, x3.imag);
449 acb_set_d_d(acb_x4, x4.real, x4.imag);
450
451 if (!acb_is_finite(acb_x1) || !acb_is_finite(acb_x2) || !acb_is_finite(acb_x3) || !acb_is_finite(acb_x4))
452 {
453 res->real = D_NAN;
454 res->imag = D_NAN;
455 status = FPWRAP_UNABLE;
456 }
457 else
458 {
459 for (wp = WP_INITIAL; ; wp *= 2)
460 {
461 func(acb_res, acb_x1, acb_x2, acb_x3, acb_x4, wp);
462 CDOUBLE_CHECK_RESULT
463 }
464 }
465
466 acb_clear(acb_x1);
467 acb_clear(acb_x2);
468 acb_clear(acb_x3);
469 acb_clear(acb_x4);
470 acb_clear(acb_res);
471
472 return status;
473 }
474
475 int arb_fpwrap_double_1_int(double * res, arb_func_1_int func, double x, int intx, int flags)
476 {
477 arb_t arb_res, arb_x;
478 slong wp;
479 int status;
480
481 arb_init(arb_res);
482 arb_init(arb_x);
483
484 arb_set_d(arb_x, x);
485
486 if (!arb_is_finite(arb_x))
487 {
488 *res = D_NAN;
489 status = FPWRAP_UNABLE;
490 }
491 else
492 {
493 for (wp = WP_INITIAL; ; wp *= 2)
494 {
495 func(arb_res, arb_x, intx, wp);
496 DOUBLE_CHECK_RESULT
497 }
498 }
499
500 arb_clear(arb_x);
501 arb_clear(arb_res);
502
503 return status;
504 }
505
506 int arb_fpwrap_double_2_int(double * res, arb_func_2_int func, double x1, double x2, int intx, int flags)
507 {
508 arb_t arb_res, arb_x1, arb_x2;
509 slong wp;
510 int status;
511
512 arb_init(arb_res);
513 arb_init(arb_x1);
514 arb_init(arb_x2);
515
516 arb_set_d(arb_x1, x1);
517 arb_set_d(arb_x2, x2);
518
519 if (!arb_is_finite(arb_x1) || !arb_is_finite(arb_x2))
520 {
521 *res = D_NAN;
522 status = FPWRAP_UNABLE;
523 }
524 else
525 {
526 for (wp = WP_INITIAL; ; wp *= 2)
527 {
528 func(arb_res, arb_x1, arb_x2, intx, wp);
529 DOUBLE_CHECK_RESULT
530 }
531 }
532
533 arb_clear(arb_x1);
534 arb_clear(arb_x2);
535 arb_clear(arb_res);
536
537 return status;
538 }
539
540 int arb_fpwrap_double_3_int(double * res, arb_func_3_int func, double x1, double x2, double x3, int intx, int flags)
541 {
542 arb_t arb_res, arb_x1, arb_x2, arb_x3;
543 slong wp;
544 int status;
545
546 arb_init(arb_res);
547 arb_init(arb_x1);
548 arb_init(arb_x2);
549 arb_init(arb_x3);
550
551 arb_set_d(arb_x1, x1);
552 arb_set_d(arb_x2, x2);
553 arb_set_d(arb_x3, x3);
554
555 if (!arb_is_finite(arb_x1) || !arb_is_finite(arb_x2) || !arb_is_finite(arb_x3))
556 {
557 *res = D_NAN;
558 status = FPWRAP_UNABLE;
559 }
560 else
561 {
562 for (wp = WP_INITIAL; ; wp *= 2)
563 {
564 func(arb_res, arb_x1, arb_x2, arb_x3, intx, wp);
565 DOUBLE_CHECK_RESULT
566 }
567 }
568
569 arb_clear(arb_x1);
570 arb_clear(arb_x2);
571 arb_clear(arb_x3);
572 arb_clear(arb_res);
573
574 return status;
575 }
576
577 int arb_fpwrap_double_4_int(double * res, arb_func_4_int func, double x1, double x2, double x3, double x4, int intx, int flags)
578 {
579 arb_t arb_res, arb_x1, arb_x2, arb_x3, arb_x4;
580 slong wp;
581 int status;
582
583 arb_init(arb_res);
584 arb_init(arb_x1);
585 arb_init(arb_x2);
586 arb_init(arb_x3);
587 arb_init(arb_x4);
588
589 arb_set_d(arb_x1, x1);
590 arb_set_d(arb_x2, x2);
591 arb_set_d(arb_x3, x3);
592 arb_set_d(arb_x3, x4);
593
594 if (!arb_is_finite(arb_x1) || !arb_is_finite(arb_x2) || !arb_is_finite(arb_x3) || !arb_is_finite(arb_x4))
595 {
596 *res = D_NAN;
597 status = FPWRAP_UNABLE;
598 }
599 else
600 {
601 for (wp = WP_INITIAL; ; wp *= 2)
602 {
603 func(arb_res, arb_x1, arb_x2, arb_x3, arb_x4, intx, wp);
604 DOUBLE_CHECK_RESULT
605 }
606 }
607
608 arb_clear(arb_x1);
609 arb_clear(arb_x2);
610 arb_clear(arb_x3);
611 arb_clear(arb_x4);
612 arb_clear(arb_res);
613
614 return status;
615 }
616
617 int arb_fpwrap_cdouble_1_int(complex_double * res, acb_func_1_int func, complex_double x, int intx, int flags)
618 {
619 acb_t acb_res, acb_x;
620 slong wp;
621 int status;
622
623 acb_init(acb_res);
624 acb_init(acb_x);
625
626 acb_set_d_d(acb_x, x.real, x.imag);
627
628 if (!acb_is_finite(acb_x))
629 {
630 res->real = D_NAN;
631 res->imag = D_NAN;
632 status = FPWRAP_UNABLE;
633 }
634 else
635 {
636 for (wp = WP_INITIAL; ; wp *= 2)
637 {
638 func(acb_res, acb_x, intx, wp);
639 CDOUBLE_CHECK_RESULT
640 }
641 }
642
643 acb_clear(acb_x);
644 acb_clear(acb_res);
645
646 return status;
647 }
648
649 int arb_fpwrap_cdouble_2_int(complex_double * res, acb_func_2_int func, complex_double x1, complex_double x2, int intx, int flags)
650 {
651 acb_t acb_res, acb_x1, acb_x2;
652 slong wp;
653 int status;
654
655 acb_init(acb_res);
656 acb_init(acb_x1);
657 acb_init(acb_x2);
658
659 acb_set_d_d(acb_x1, x1.real, x1.imag);
660 acb_set_d_d(acb_x2, x2.real, x2.imag);
661
662 if (!acb_is_finite(acb_x1) || !acb_is_finite(acb_x2))
663 {
664 res->real = D_NAN;
665 res->imag = D_NAN;
666 status = FPWRAP_UNABLE;
667 }
668 else
669 {
670 for (wp = WP_INITIAL; ; wp *= 2)
671 {
672 func(acb_res, acb_x1, acb_x2, intx, wp);
673 CDOUBLE_CHECK_RESULT
674 }
675 }
676
677 acb_clear(acb_x1);
678 acb_clear(acb_x2);
679 acb_clear(acb_res);
680
681 return status;
682 }
683
684 int arb_fpwrap_cdouble_3_int(complex_double * res, acb_func_3_int func, complex_double x1, complex_double x2, complex_double x3, int intx, int flags)
685 {
686 acb_t acb_res, acb_x1, acb_x2, acb_x3;
687 slong wp;
688 int status;
689
690 acb_init(acb_res);
691 acb_init(acb_x1);
692 acb_init(acb_x2);
693 acb_init(acb_x3);
694
695 acb_set_d_d(acb_x1, x1.real, x1.imag);
696 acb_set_d_d(acb_x2, x2.real, x2.imag);
697 acb_set_d_d(acb_x3, x3.real, x3.imag);
698
699 if (!acb_is_finite(acb_x1) || !acb_is_finite(acb_x2) || !acb_is_finite(acb_x3))
700 {
701 res->real = D_NAN;
702 res->imag = D_NAN;
703 status = FPWRAP_UNABLE;
704 }
705 else
706 {
707 for (wp = WP_INITIAL; ; wp *= 2)
708 {
709 func(acb_res, acb_x1, acb_x2, acb_x3, intx, wp);
710 CDOUBLE_CHECK_RESULT
711 }
712 }
713
714 acb_clear(acb_x1);
715 acb_clear(acb_x2);
716 acb_clear(acb_x3);
717 acb_clear(acb_res);
718
719 return status;
720 }
721
722 int arb_fpwrap_cdouble_4_int(complex_double * res, acb_func_4_int func, complex_double x1, complex_double x2, complex_double x3, complex_double x4, int intx, int flags)
723 {
724 acb_t acb_res, acb_x1, acb_x2, acb_x3, acb_x4;
725 slong wp;
726 int status;
727
728 acb_init(acb_res);
729 acb_init(acb_x1);
730 acb_init(acb_x2);
731 acb_init(acb_x3);
732 acb_init(acb_x4);
733
734 acb_set_d_d(acb_x1, x1.real, x1.imag);
735 acb_set_d_d(acb_x2, x2.real, x2.imag);
736 acb_set_d_d(acb_x3, x3.real, x3.imag);
737 acb_set_d_d(acb_x4, x4.real, x4.imag);
738
739 if (!acb_is_finite(acb_x1) || !acb_is_finite(acb_x2) || !acb_is_finite(acb_x3) || !acb_is_finite(acb_x4))
740 {
741 res->real = D_NAN;
742 res->imag = D_NAN;
743 status = FPWRAP_UNABLE;
744 }
745 else
746 {
747 for (wp = WP_INITIAL; ; wp *= 2)
748 {
749 func(acb_res, acb_x1, acb_x2, acb_x3, acb_x4, intx, wp);
750 CDOUBLE_CHECK_RESULT
751 }
752 }
753
754 acb_clear(acb_x1);
755 acb_clear(acb_x2);
756 acb_clear(acb_x3);
757 acb_clear(acb_x4);
758 acb_clear(acb_res);
759
760 return status;
761 }
762
763 #define DEF_DOUBLE_FUN_1(name, arb_fun) \
764 int arb_fpwrap_double_ ## name(double * res, double x, int flags) \
765 { \
766 return arb_fpwrap_double_1(res, arb_fun, x, flags); \
767 } \
768
769 #define DEF_DOUBLE_FUN_2(name, arb_fun) \
770 int arb_fpwrap_double_ ## name(double * res, double x1, double x2, int flags) \
771 { \
772 return arb_fpwrap_double_2(res, arb_fun, x1, x2, flags); \
773 } \
774
775 #define DEF_DOUBLE_FUN_3(name, arb_fun) \
776 int arb_fpwrap_double_ ## name(double * res, double x1, double x2, double x3, int flags) \
777 { \
778 return arb_fpwrap_double_3(res, arb_fun, x1, x2, x3, flags); \
779 } \
780
781 #define DEF_DOUBLE_FUN_4(name, arb_fun) \
782 int arb_fpwrap_double_ ## name(double * res, double x1, double x2, double x3, double x4, int flags) \
783 { \
784 return arb_fpwrap_double_4(res, arb_fun, x1, x2, x3, x4, flags); \
785 } \
786
787 #define DEF_CDOUBLE_FUN_1(name, acb_fun) \
788 int arb_fpwrap_cdouble_ ## name(complex_double * res, complex_double x, int flags) \
789 { \
790 return arb_fpwrap_cdouble_1(res, acb_fun, x, flags); \
791 } \
792
793 #define DEF_CDOUBLE_FUN_2(name, acb_fun) \
794 int arb_fpwrap_cdouble_ ## name(complex_double * res, complex_double x1, complex_double x2, int flags) \
795 { \
796 return arb_fpwrap_cdouble_2(res, acb_fun, x1, x2, flags); \
797 } \
798
799 #define DEF_CDOUBLE_FUN_3(name, acb_fun) \
800 int arb_fpwrap_cdouble_ ## name(complex_double * res, complex_double x1, complex_double x2, complex_double x3, int flags) \
801 { \
802 return arb_fpwrap_cdouble_3(res, acb_fun, x1, x2, x3, flags); \
803 } \
804
805 #define DEF_CDOUBLE_FUN_4(name, acb_fun) \
806 int arb_fpwrap_cdouble_ ## name(complex_double * res, complex_double x1, complex_double x2, complex_double x3, complex_double x4, int flags) \
807 { \
808 return arb_fpwrap_cdouble_4(res, acb_fun, x1, x2, x3, x4, flags); \
809 } \
810
811 #define DEF_DOUBLE_FUN_1_INT(name, arb_fun) \
812 int arb_fpwrap_double_ ## name(double * res, double x, int intx, int flags) \
813 { \
814 return arb_fpwrap_double_1_int(res, arb_fun, x, intx, flags); \
815 } \
816
817 #define DEF_DOUBLE_FUN_2_INT(name, arb_fun) \
818 int arb_fpwrap_double_ ## name(double * res, double x1, double x2, int intx, int flags) \
819 { \
820 return arb_fpwrap_double_2_int(res, arb_fun, x1, x2, intx, flags); \
821 } \
822
823 #define DEF_DOUBLE_FUN_3_INT(name, arb_fun) \
824 int arb_fpwrap_double_ ## name(double * res, double x1, double x2, double x3, int intx, int flags) \
825 { \
826 return arb_fpwrap_double_3_int(res, arb_fun, x1, x2, x3, intx, flags); \
827 } \
828
829 #define DEF_DOUBLE_FUN_4_INT(name, arb_fun) \
830 int arb_fpwrap_double_ ## name(double * res, double x1, double x2, double x3, double x4, int intx, int flags) \
831 { \
832 return arb_fpwrap_double_4_int(res, arb_fun, x1, x2, x3, x4, intx, flags); \
833 } \
834
835 #define DEF_CDOUBLE_FUN_1_INT(name, acb_fun) \
836 int arb_fpwrap_cdouble_ ## name(complex_double * res, complex_double x, int intx, int flags) \
837 { \
838 return arb_fpwrap_cdouble_1_int(res, acb_fun, x, intx, flags); \
839 } \
840
841 #define DEF_CDOUBLE_FUN_2_INT(name, acb_fun) \
842 int arb_fpwrap_cdouble_ ## name(complex_double * res, complex_double x1, complex_double x2, int intx, int flags) \
843 { \
844 return arb_fpwrap_cdouble_2_int(res, acb_fun, x1, x2, intx, flags); \
845 } \
846
847 #define DEF_CDOUBLE_FUN_3_INT(name, acb_fun) \
848 int arb_fpwrap_cdouble_ ## name(complex_double * res, complex_double x1, complex_double x2, complex_double x3, int intx, int flags) \
849 { \
850 return arb_fpwrap_cdouble_3_int(res, acb_fun, x1, x2, x3, intx, flags); \
851 } \
852
853 #define DEF_CDOUBLE_FUN_4_INT(name, acb_fun) \
854 int arb_fpwrap_cdouble_ ## name(complex_double * res, complex_double x1, complex_double x2, complex_double x3, complex_double x4, int intx, int flags) \
855 { \
856 return arb_fpwrap_cdouble_4_int(res, acb_fun, x1, x2, x3, x4, intx, flags); \
857 } \
858
859 DEF_DOUBLE_FUN_1(exp, arb_exp)
860 DEF_CDOUBLE_FUN_1(exp, acb_exp)
861
862 DEF_DOUBLE_FUN_1(expm1, arb_expm1)
863 DEF_CDOUBLE_FUN_1(expm1, acb_expm1)
864
865 DEF_DOUBLE_FUN_1(log, arb_log)
866 DEF_CDOUBLE_FUN_1(log, acb_log)
867
868 DEF_DOUBLE_FUN_1(log1p, arb_log1p)
869 DEF_CDOUBLE_FUN_1(log1p, acb_log1p)
870
871 DEF_DOUBLE_FUN_1(sqrt, arb_sqrt)
872 DEF_CDOUBLE_FUN_1(sqrt, acb_sqrt)
873
874 DEF_DOUBLE_FUN_1(rsqrt, arb_rsqrt)
875 DEF_CDOUBLE_FUN_1(rsqrt, acb_rsqrt)
876
877 static void _arb_cbrt(arb_t res, const arb_t x, slong prec) { arb_root_ui(res, x, 3, prec); }
878 static void _acb_cbrt(acb_t res, const acb_t x, slong prec) { acb_root_ui(res, x, 3, prec); }
879
880 DEF_DOUBLE_FUN_1(cbrt, _arb_cbrt)
881 DEF_CDOUBLE_FUN_1(cbrt, _acb_cbrt)
882
883 DEF_DOUBLE_FUN_1(sin, arb_sin)
884 DEF_CDOUBLE_FUN_1(sin, acb_sin)
885
886 DEF_DOUBLE_FUN_1(cos, arb_cos)
887 DEF_CDOUBLE_FUN_1(cos, acb_cos)
888
889 DEF_DOUBLE_FUN_1(tan, arb_tan)
890 DEF_CDOUBLE_FUN_1(tan, acb_tan)
891
892 DEF_DOUBLE_FUN_1(cot, arb_cot)
893 DEF_CDOUBLE_FUN_1(cot, acb_cot)
894
895 DEF_DOUBLE_FUN_1(sec, arb_sec)
896 DEF_CDOUBLE_FUN_1(sec, acb_sec)
897
898 DEF_DOUBLE_FUN_1(csc, arb_csc)
899 DEF_CDOUBLE_FUN_1(csc, acb_csc)
900
901 DEF_DOUBLE_FUN_1(sinc, arb_sinc)
902 DEF_CDOUBLE_FUN_1(sinc, acb_sinc)
903
904 DEF_DOUBLE_FUN_1(sin_pi, arb_sin_pi)
905 DEF_CDOUBLE_FUN_1(sin_pi, acb_sin_pi)
906
907 DEF_DOUBLE_FUN_1(cos_pi, arb_cos_pi)
908 DEF_CDOUBLE_FUN_1(cos_pi, acb_cos_pi)
909
910 DEF_DOUBLE_FUN_1(tan_pi, arb_tan_pi)
911 DEF_CDOUBLE_FUN_1(tan_pi, acb_tan_pi)
912
913 DEF_DOUBLE_FUN_1(cot_pi, arb_cot_pi)
914 DEF_CDOUBLE_FUN_1(cot_pi, acb_cot_pi)
915
916 DEF_DOUBLE_FUN_1(sinc_pi, arb_sinc_pi)
917 DEF_CDOUBLE_FUN_1(sinc_pi, acb_sinc_pi)
918
919 DEF_DOUBLE_FUN_1(asin, arb_asin)
920 DEF_CDOUBLE_FUN_1(asin, acb_asin)
921
922 DEF_DOUBLE_FUN_1(acos, arb_acos)
923 DEF_CDOUBLE_FUN_1(acos, acb_acos)
924
925 DEF_DOUBLE_FUN_1(atan, arb_atan)
926 DEF_CDOUBLE_FUN_1(atan, acb_atan)
927
928 DEF_DOUBLE_FUN_2(atan2, arb_atan2)
929
930 DEF_DOUBLE_FUN_1(asinh, arb_asinh)
931 DEF_CDOUBLE_FUN_1(asinh, acb_asinh)
932
933 DEF_DOUBLE_FUN_1(acosh, arb_acosh)
934 DEF_CDOUBLE_FUN_1(acosh, acb_acosh)
935
936 DEF_DOUBLE_FUN_1(atanh, arb_atanh)
937 DEF_CDOUBLE_FUN_1(atanh, acb_atanh)
938
939 DEF_DOUBLE_FUN_2(rising, arb_rising)
940 DEF_CDOUBLE_FUN_2(rising, acb_rising)
941
942 DEF_DOUBLE_FUN_1(gamma, arb_gamma)
943 DEF_CDOUBLE_FUN_1(gamma, acb_gamma)
944
945 DEF_DOUBLE_FUN_1(rgamma, arb_rgamma)
946 DEF_CDOUBLE_FUN_1(rgamma, acb_rgamma)
947
948 DEF_DOUBLE_FUN_1(lgamma, arb_lgamma)
949 DEF_CDOUBLE_FUN_1(lgamma, acb_lgamma)
950
951 DEF_DOUBLE_FUN_1(digamma, arb_digamma)
952 DEF_CDOUBLE_FUN_1(digamma, acb_digamma)
953
954 DEF_DOUBLE_FUN_1(zeta, arb_zeta)
955 DEF_CDOUBLE_FUN_1(zeta, acb_zeta)
956
957 DEF_DOUBLE_FUN_2(hurwitz_zeta, arb_hurwitz_zeta)
958 DEF_CDOUBLE_FUN_2(hurwitz_zeta, acb_hurwitz_zeta)
959
960 static void
961 _arb_polygamma(arb_t res, const arb_t s, const arb_t z, slong prec)
962 {
963 acb_t t, u, v;
964 acb_init(t);
965 acb_init(u);
966 acb_init(v);
967 acb_set_arb(t, s);
968 acb_set_arb(u, z);
969 acb_polygamma(v, t, u, prec);
970 if (acb_is_real(v))
971 arb_set(res, acb_realref(v));
972 else
973 arb_indeterminate(res);
974 acb_clear(t);
975 acb_clear(u);
976 acb_clear(v);
977 }
978
979 static void
980 _arb_barnes_g(arb_t res, const arb_t x, slong prec)
981 {
982 acb_t t, u;
983 acb_init(t);
984 acb_init(u);
985 acb_set_arb(t, x);
986 acb_barnes_g(u, t, prec);
987 arb_set(res, acb_realref(u));
988 acb_clear(t);
989 acb_clear(u);
990 }
991
992 static void
993 _arb_log_barnes_g(arb_t res, const arb_t x, slong prec)
994 {
995 if (!arb_is_positive(x))
996 {
997 arb_indeterminate(res);
998 }
999 else
1000 {
1001 acb_t t, u;
1002 acb_init(t);
1003 acb_init(u);
1004 acb_set_arb(t, x);
1005 acb_log_barnes_g(u, t, prec);
1006 arb_set(res, acb_realref(u));
1007 acb_clear(t);
1008 acb_clear(u);
1009 }
1010 }
1011
1012 DEF_DOUBLE_FUN_1(barnes_g, _arb_barnes_g)
1013 DEF_CDOUBLE_FUN_1(barnes_g, acb_barnes_g)
1014
1015 DEF_DOUBLE_FUN_1(log_barnes_g, _arb_log_barnes_g)
1016 DEF_CDOUBLE_FUN_1(log_barnes_g, acb_log_barnes_g)
1017
1018 DEF_DOUBLE_FUN_2(polygamma, _arb_polygamma)
1019 DEF_CDOUBLE_FUN_2(polygamma, acb_polygamma)
1020
1021 DEF_DOUBLE_FUN_2(polylog, arb_polylog)
1022 DEF_CDOUBLE_FUN_2(polylog, acb_polylog)
1023
1024 DEF_DOUBLE_FUN_1(dilog, arb_hypgeom_dilog)
1025 DEF_CDOUBLE_FUN_1(dilog, acb_hypgeom_dilog)
1026
1027
1028 DEF_DOUBLE_FUN_1(erf, arb_hypgeom_erf)
1029 DEF_CDOUBLE_FUN_1(erf, acb_hypgeom_erf)
1030
1031 DEF_DOUBLE_FUN_1(erfc, arb_hypgeom_erfc)
1032 DEF_CDOUBLE_FUN_1(erfc, acb_hypgeom_erfc)
1033
1034 DEF_DOUBLE_FUN_1(erfi, arb_hypgeom_erfi)
1035 DEF_CDOUBLE_FUN_1(erfi, acb_hypgeom_erfi)
1036
1037 static void _arb_hypgeom_fresnel_s(arb_t res, const arb_t x, int normalized, slong prec) { arb_hypgeom_fresnel(res, NULL, x, normalized, prec); }
1038 static void _arb_hypgeom_fresnel_c(arb_t res, const arb_t x, int normalized, slong prec) { arb_hypgeom_fresnel(NULL, res, x, normalized, prec); }
1039 static void _acb_hypgeom_fresnel_s(acb_t res, const acb_t x, int normalized, slong prec) { acb_hypgeom_fresnel(res, NULL, x, normalized, prec); }
1040 static void _acb_hypgeom_fresnel_c(acb_t res, const acb_t x, int normalized, slong prec) { acb_hypgeom_fresnel(NULL, res, x, normalized, prec); }
1041
1042 DEF_DOUBLE_FUN_1_INT(fresnel_s, _arb_hypgeom_fresnel_s)
1043 DEF_CDOUBLE_FUN_1_INT(fresnel_s, _acb_hypgeom_fresnel_s)
1044
1045 DEF_DOUBLE_FUN_1_INT(fresnel_c, _arb_hypgeom_fresnel_c)
1046 DEF_CDOUBLE_FUN_1_INT(fresnel_c, _acb_hypgeom_fresnel_c)
1047
1048 DEF_DOUBLE_FUN_2_INT(gamma_upper, arb_hypgeom_gamma_upper)
1049 DEF_CDOUBLE_FUN_2_INT(gamma_upper, acb_hypgeom_gamma_upper)
1050
1051 DEF_DOUBLE_FUN_2_INT(gamma_lower, arb_hypgeom_gamma_lower)
1052 DEF_CDOUBLE_FUN_2_INT(gamma_lower, acb_hypgeom_gamma_lower)
1053
1054 DEF_DOUBLE_FUN_3_INT(beta_lower, arb_hypgeom_beta_lower)
1055 DEF_CDOUBLE_FUN_3_INT(beta_lower, acb_hypgeom_beta_lower)
1056
1057 DEF_DOUBLE_FUN_2(exp_integral_e, arb_hypgeom_expint)
1058 DEF_CDOUBLE_FUN_2(exp_integral_e, acb_hypgeom_expint)
1059
1060 DEF_DOUBLE_FUN_1(exp_integral_ei, arb_hypgeom_ei)
1061 DEF_CDOUBLE_FUN_1(exp_integral_ei, acb_hypgeom_ei)
1062
1063 DEF_DOUBLE_FUN_1(sin_integral, arb_hypgeom_si)
1064 DEF_CDOUBLE_FUN_1(sin_integral, acb_hypgeom_si)
1065
1066 DEF_DOUBLE_FUN_1(cos_integral, arb_hypgeom_ci)
1067 DEF_CDOUBLE_FUN_1(cos_integral, acb_hypgeom_ci)
1068
1069 DEF_DOUBLE_FUN_1(sinh_integral, arb_hypgeom_shi)
1070 DEF_CDOUBLE_FUN_1(sinh_integral, acb_hypgeom_shi)
1071
1072 DEF_DOUBLE_FUN_1(cosh_integral, arb_hypgeom_chi)
1073 DEF_CDOUBLE_FUN_1(cosh_integral, acb_hypgeom_chi)
1074
1075 DEF_DOUBLE_FUN_1_INT(log_integral, arb_hypgeom_li)
1076 DEF_CDOUBLE_FUN_1_INT(log_integral, acb_hypgeom_li)
1077
1078 DEF_DOUBLE_FUN_2(bessel_j, arb_hypgeom_bessel_j)
1079 DEF_CDOUBLE_FUN_2(bessel_j, acb_hypgeom_bessel_j)
1080
1081 DEF_DOUBLE_FUN_2(bessel_y, arb_hypgeom_bessel_y)
1082 DEF_CDOUBLE_FUN_2(bessel_y, acb_hypgeom_bessel_y)
1083
1084 DEF_DOUBLE_FUN_2(bessel_i, arb_hypgeom_bessel_i)
1085 DEF_CDOUBLE_FUN_2(bessel_i, acb_hypgeom_bessel_i)
1086
1087 DEF_DOUBLE_FUN_2(bessel_k, arb_hypgeom_bessel_k)
1088 DEF_CDOUBLE_FUN_2(bessel_k, acb_hypgeom_bessel_k)
1089
1090 DEF_DOUBLE_FUN_2(bessel_k_scaled, arb_hypgeom_bessel_k_scaled)
1091 DEF_CDOUBLE_FUN_2(bessel_k_scaled, acb_hypgeom_bessel_k_scaled)
1092
1093 static void _arb_hypgeom_airy_ai(arb_t res, const arb_t x, slong prec) { arb_hypgeom_airy(res, NULL, NULL, NULL, x, prec); }
1094 static void _arb_hypgeom_airy_ai_prime(arb_t res, const arb_t x, slong prec) { arb_hypgeom_airy(NULL, res, NULL, NULL, x, prec); }
1095 static void _arb_hypgeom_airy_bi(arb_t res, const arb_t x, slong prec) { arb_hypgeom_airy(NULL, NULL, res, NULL, x, prec); }
1096 static void _arb_hypgeom_airy_bi_prime(arb_t res, const arb_t x, slong prec) { arb_hypgeom_airy(NULL, NULL, NULL, res, x, prec); }
1097
1098 static void _acb_hypgeom_airy_ai(acb_t res, const acb_t x, slong prec) { acb_hypgeom_airy(res, NULL, NULL, NULL, x, prec); }
1099 static void _acb_hypgeom_airy_ai_prime(acb_t res, const acb_t x, slong prec) { acb_hypgeom_airy(NULL, res, NULL, NULL, x, prec); }
1100 static void _acb_hypgeom_airy_bi(acb_t res, const acb_t x, slong prec) { acb_hypgeom_airy(NULL, NULL, res, NULL, x, prec); }
1101 static void _acb_hypgeom_airy_bi_prime(acb_t res, const acb_t x, slong prec) { acb_hypgeom_airy(NULL, NULL, NULL, res, x, prec); }
1102
1103 DEF_DOUBLE_FUN_1(airy_ai, _arb_hypgeom_airy_ai)
1104 DEF_CDOUBLE_FUN_1(airy_ai, _acb_hypgeom_airy_ai)
1105
1106 DEF_DOUBLE_FUN_1(airy_ai_prime, _arb_hypgeom_airy_ai_prime)
1107 DEF_CDOUBLE_FUN_1(airy_ai_prime, _acb_hypgeom_airy_ai_prime)
1108
1109 DEF_DOUBLE_FUN_1(airy_bi, _arb_hypgeom_airy_bi)
1110 DEF_CDOUBLE_FUN_1(airy_bi, _acb_hypgeom_airy_bi)
1111
1112 DEF_DOUBLE_FUN_1(airy_bi_prime, _arb_hypgeom_airy_bi_prime)
1113 DEF_CDOUBLE_FUN_1(airy_bi_prime, _acb_hypgeom_airy_bi_prime)
1114
1115 static void _arb_hypgeom_coulomb_f(arb_t res, const arb_t l, const arb_t eta, const arb_t z, slong prec) { arb_hypgeom_coulomb(res, NULL, l, eta, z, prec); }
1116 static void _arb_hypgeom_coulomb_g(arb_t res, const arb_t l, const arb_t eta, const arb_t z, slong prec) { arb_hypgeom_coulomb(NULL, res, l, eta, z, prec); }
1117
1118 static void _acb_hypgeom_coulomb_f(acb_t res, const acb_t l, const acb_t eta, const acb_t z, slong prec) { acb_hypgeom_coulomb(res, NULL, NULL, NULL, l, eta, z, prec); }
1119 static void _acb_hypgeom_coulomb_g(acb_t res, const acb_t l, const acb_t eta, const acb_t z, slong prec) { acb_hypgeom_coulomb(NULL, res, NULL, NULL, l, eta, z, prec); }
1120 static void _acb_hypgeom_coulomb_hpos(acb_t res, const acb_t l, const acb_t eta, const acb_t z, slong prec) { acb_hypgeom_coulomb(NULL, NULL, res, NULL, l, eta, z, prec); }
1121 static void _acb_hypgeom_coulomb_hneg(acb_t res, const acb_t l, const acb_t eta, const acb_t z, slong prec) { acb_hypgeom_coulomb(NULL, NULL, NULL, res, l, eta, z, prec); }
1122
1123 DEF_DOUBLE_FUN_3(coulomb_f, _arb_hypgeom_coulomb_f)
1124 DEF_CDOUBLE_FUN_3(coulomb_f, _acb_hypgeom_coulomb_f)
1125
1126 DEF_DOUBLE_FUN_3(coulomb_g, _arb_hypgeom_coulomb_g)
1127 DEF_CDOUBLE_FUN_3(coulomb_g, _acb_hypgeom_coulomb_g)
1128
1129 DEF_CDOUBLE_FUN_3(coulomb_hpos, _acb_hypgeom_coulomb_hpos)
1130 DEF_CDOUBLE_FUN_3(coulomb_hneg, _acb_hypgeom_coulomb_hneg)
1131
1132 DEF_DOUBLE_FUN_2(chebyshev_t, arb_hypgeom_chebyshev_t)
1133 DEF_CDOUBLE_FUN_2(chebyshev_t, acb_hypgeom_chebyshev_t)
1134
1135 DEF_DOUBLE_FUN_2(chebyshev_u, arb_hypgeom_chebyshev_u)
1136 DEF_CDOUBLE_FUN_2(chebyshev_u, acb_hypgeom_chebyshev_u)
1137
1138 DEF_DOUBLE_FUN_4(jacobi_p, arb_hypgeom_jacobi_p)
1139 DEF_CDOUBLE_FUN_4(jacobi_p, acb_hypgeom_jacobi_p)
1140
1141 DEF_DOUBLE_FUN_3(gegenbauer_c, arb_hypgeom_gegenbauer_c)
1142 DEF_CDOUBLE_FUN_3(gegenbauer_c, acb_hypgeom_gegenbauer_c)
1143
1144 DEF_DOUBLE_FUN_3(laguerre_l, arb_hypgeom_laguerre_l)
1145 DEF_CDOUBLE_FUN_3(laguerre_l, acb_hypgeom_laguerre_l)
1146
1147 DEF_DOUBLE_FUN_2(hermite_h, arb_hypgeom_hermite_h)
1148 DEF_CDOUBLE_FUN_2(hermite_h, acb_hypgeom_hermite_h)
1149
1150 DEF_DOUBLE_FUN_3_INT(legendre_p, arb_hypgeom_legendre_p)
1151 DEF_CDOUBLE_FUN_3_INT(legendre_p, acb_hypgeom_legendre_p)
1152
1153 DEF_DOUBLE_FUN_3_INT(legendre_q, arb_hypgeom_legendre_q)
1154 DEF_CDOUBLE_FUN_3_INT(legendre_q, acb_hypgeom_legendre_q)
1155
1156 int arb_fpwrap_cdouble_spherical_y(complex_double * res, slong n, slong m, complex_double x1, complex_double x2, int flags)
1157 {
1158 acb_t acb_res, acb_x1, acb_x2;
1159 slong wp;
1160 int status;
1161
1162 acb_init(acb_res);
1163 acb_init(acb_x1);
1164 acb_init(acb_x2);
1165
1166 acb_set_d_d(acb_x1, x1.real, x1.imag);
1167 acb_set_d_d(acb_x2, x2.real, x2.imag);
1168
1169 if (!acb_is_finite(acb_x1) || !acb_is_finite(acb_x2))
1170 {
1171 res->real = D_NAN;
1172 res->imag = D_NAN;
1173 status = FPWRAP_UNABLE;
1174 }
1175 else
1176 {
1177 for (wp = WP_INITIAL; ; wp *= 2)
1178 {
1179 acb_hypgeom_spherical_y(acb_res, n, m, acb_x1, acb_x2, wp);
1180 CDOUBLE_CHECK_RESULT
1181 }
1182 }
1183
1184 acb_clear(acb_x1);
1185 acb_clear(acb_x2);
1186 acb_clear(acb_res);
1187
1188 return status;
1189 }
1190
1191 DEF_DOUBLE_FUN_2_INT(hypgeom_0f1, arb_hypgeom_0f1)
1192 DEF_CDOUBLE_FUN_2_INT(hypgeom_0f1, acb_hypgeom_0f1)
1193
1194 DEF_DOUBLE_FUN_3_INT(hypgeom_1f1, arb_hypgeom_1f1)
1195 DEF_CDOUBLE_FUN_3_INT(hypgeom_1f1, acb_hypgeom_1f1)
1196
1197 DEF_DOUBLE_FUN_3(hypgeom_u, arb_hypgeom_u)
1198 DEF_CDOUBLE_FUN_3(hypgeom_u, acb_hypgeom_u)
1199
1200 DEF_DOUBLE_FUN_4_INT(hypgeom_2f1, arb_hypgeom_2f1)
1201 DEF_CDOUBLE_FUN_4_INT(hypgeom_2f1, acb_hypgeom_2f1)
1202
1203 int arb_fpwrap_double_hypgeom_pfq(double * res, const double * a, slong p, const double * b, slong q, double z, int regularized, int flags)
1204 {
1205 arb_t arb_res;
1206 arb_ptr t;
1207 slong wp;
1208 slong i;
1209 int status;
1210
1211 arb_init(arb_res);
1212 t = _arb_vec_init(p + q + 1);
1213
1214 for (i = 0; i < p; i++)
1215 arb_set_d(t + i, a[i]);
1216 for (i = 0; i < q; i++)
1217 arb_set_d(t + p + i, b[i]);
1218 arb_set_d(t + p + q, z);
1219
1220 if (!_arb_vec_is_finite(t, p + q + 1))
1221 {
1222 *res = D_NAN;
1223 status = FPWRAP_UNABLE;
1224 }
1225 else
1226 {
1227 for (wp = WP_INITIAL; ; wp *= 2)
1228 {
1229 arb_hypgeom_pfq(arb_res, t, p, t + p, q, t + p + q, regularized, wp);
1230 DOUBLE_CHECK_RESULT
1231 }
1232 }
1233
1234 _arb_vec_clear(t, p + q + 1);
1235 arb_clear(arb_res);
1236
1237 return status;
1238 }
1239
1240 int arb_fpwrap_cdouble_hypgeom_pfq(complex_double * res, const complex_double * a, slong p, const complex_double * b, slong q, complex_double z, int regularized, int flags)
1241 {
1242 acb_t acb_res;
1243 acb_ptr t;
1244 slong wp;
1245 slong i;
1246 int status;
1247
1248 acb_init(acb_res);
1249 t = _acb_vec_init(p + q + 1);
1250
1251 for (i = 0; i < p; i++)
1252 acb_set_d_d(t + i, a[i].real, a[i].imag);
1253 for (i = 0; i < q; i++)
1254 acb_set_d_d(t + p + i, b[i].real, b[i].imag);
1255 acb_set_d_d(t + p + q, z.real, z.imag);
1256
1257 if (!_acb_vec_is_finite(t, p + q + 1))
1258 {
1259 res->real = D_NAN;
1260 res->imag = D_NAN;
1261 status = FPWRAP_UNABLE;
1262 }
1263 else
1264 {
1265 for (wp = WP_INITIAL; ; wp *= 2)
1266 {
1267 acb_hypgeom_pfq(acb_res, t, p, t + p, q, t + p + q, regularized, wp);
1268 CDOUBLE_CHECK_RESULT
1269 }
1270 }
1271
1272 _acb_vec_clear(t, p + q + 1);
1273 acb_clear(acb_res);
1274
1275 return status;
1276 }
1277
1278 DEF_DOUBLE_FUN_2(agm, arb_agm)
1279 DEF_CDOUBLE_FUN_2(agm, acb_agm)
1280
1281 DEF_CDOUBLE_FUN_1(elliptic_k, acb_elliptic_k)
1282 DEF_CDOUBLE_FUN_1(elliptic_e, acb_elliptic_e)
1283 DEF_CDOUBLE_FUN_2(elliptic_pi, acb_elliptic_pi)
1284 DEF_CDOUBLE_FUN_2_INT(elliptic_f, acb_elliptic_f)
1285 DEF_CDOUBLE_FUN_2_INT(elliptic_e_inc, acb_elliptic_e_inc)
1286 DEF_CDOUBLE_FUN_3_INT(elliptic_pi_inc, acb_elliptic_pi_inc)
1287
1288 DEF_CDOUBLE_FUN_3_INT(elliptic_rf, acb_elliptic_rf)
1289 DEF_CDOUBLE_FUN_3_INT(elliptic_rg, acb_elliptic_rg)
1290 DEF_CDOUBLE_FUN_4_INT(elliptic_rj, acb_elliptic_rj)
1291
1292 DEF_CDOUBLE_FUN_2(elliptic_p, acb_elliptic_p)
1293 DEF_CDOUBLE_FUN_2(elliptic_p_prime, acb_elliptic_p_prime)
1294 DEF_CDOUBLE_FUN_2(elliptic_inv_p, acb_elliptic_inv_p)
1295 DEF_CDOUBLE_FUN_2(elliptic_zeta, acb_elliptic_zeta)
1296 DEF_CDOUBLE_FUN_2(elliptic_sigma, acb_elliptic_sigma)
1297
1298
1299 static void
1300 _acb_theta1(acb_t res, const acb_t z, const acb_t tau, slong prec)
1301 {
1302 acb_t a, b, c; acb_init(a); acb_init(b); acb_init(c);
1303 acb_modular_theta(res, a, b, c, z, tau, prec);
1304 acb_clear(a); acb_clear(b); acb_clear(c);
1305 }
1306
1307 static void
1308 _acb_theta2(acb_t res, const acb_t z, const acb_t tau, slong prec)
1309 {
1310 acb_t a, b, c; acb_init(a); acb_init(b); acb_init(c);
1311 acb_modular_theta(a, res, b, c, z, tau, prec);
1312 acb_clear(a); acb_clear(b); acb_clear(c);
1313 }
1314
1315 static void
1316 _acb_theta3(acb_t res, const acb_t z, const acb_t tau, slong prec)
1317 {
1318 acb_t a, b, c; acb_init(a); acb_init(b); acb_init(c);
1319 acb_modular_theta(a, b, res, c, z, tau, prec);
1320 acb_clear(a); acb_clear(b); acb_clear(c);
1321 }
1322
1323 static void
1324 _acb_theta4(acb_t res, const acb_t z, const acb_t tau, slong prec)
1325 {
1326 acb_t a, b, c; acb_init(a); acb_init(b); acb_init(c);
1327 acb_modular_theta(a, b, c, res, z, tau, prec);
1328 acb_clear(a); acb_clear(b); acb_clear(c);
1329 }
1330
1331 DEF_CDOUBLE_FUN_2(jacobi_theta_1, _acb_theta1)
1332 DEF_CDOUBLE_FUN_2(jacobi_theta_2, _acb_theta2)
1333 DEF_CDOUBLE_FUN_2(jacobi_theta_3, _acb_theta3)
1334 DEF_CDOUBLE_FUN_2(jacobi_theta_4, _acb_theta4)
1335
1336 DEF_CDOUBLE_FUN_1(dedekind_eta, acb_modular_eta)
1337 DEF_CDOUBLE_FUN_1(modular_j, acb_modular_j)
1338 DEF_CDOUBLE_FUN_1(modular_lambda, acb_modular_lambda)
1339 DEF_CDOUBLE_FUN_1(modular_delta, acb_modular_delta)
1340
1341 DEF_CDOUBLE_FUN_1(dirichlet_eta, acb_dirichlet_eta)
1342 DEF_CDOUBLE_FUN_1(riemann_xi, acb_dirichlet_xi)
1343
1344 static void
1345 _acb_hardy_theta(acb_t res, const acb_t t, slong prec)
1346 {
1347 acb_dirichlet_hardy_theta(res, t, NULL, NULL, 1, prec);
1348 }
1349
1350 static void
1351 _acb_hardy_z(acb_t res, const acb_t t, slong prec)
1352 {
1353 acb_dirichlet_hardy_z(res, t, NULL, NULL, 1, prec);
1354 }
1355
1356 DEF_CDOUBLE_FUN_1(hardy_theta, _acb_hardy_theta)
1357 DEF_CDOUBLE_FUN_1(hardy_z, _acb_hardy_z)
1358
1359 int arb_fpwrap_cdouble_zeta_zero(complex_double * res, ulong n, int flags)
1360 {
1361 fmpz_t t;
1362 acb_t acb_res;
1363 slong wp;
1364 int status;
1365
1366 if (n == 0)
1367 {
1368 res->real = D_NAN;
1369 res->imag = D_NAN;
1370 return FPWRAP_UNABLE;
1371 }
1372
1373 acb_init(acb_res);
1374 fmpz_init(t);
1375
1376 fmpz_set_ui(t, n);
1377
1378 for (wp = WP_INITIAL; ; wp *= 2)
1379 {
1380 acb_dirichlet_zeta_zero(acb_res, t, wp);
1381 CDOUBLE_CHECK_RESULT
1382 }
1383
1384 acb_clear(acb_res);
1385
1386 return status;
1387 }
1388
1389 int arb_fpwrap_double_legendre_root(double * res1, double * res2, ulong n, ulong k, int flags)
1390 {
1391 arb_t arb_res1, arb_res2;
1392 slong wp;
1393 int status;
1394
1395 if (k >= n)
1396 {
1397 *res1 = D_NAN;
1398 *res2 = D_NAN;
1399 return FPWRAP_UNABLE;
1400 }
1401
1402 arb_init(arb_res1);
1403 arb_init(arb_res2);
1404
1405 for (wp = WP_INITIAL; ; wp *= 2)
1406 {
1407 arb_hypgeom_legendre_p_ui_root(arb_res1, arb_res2, n, k, wp);
1408 DOUBLE_CHECK_RESULT2
1409 }
1410
1411 arb_clear(arb_res1);
1412 arb_clear(arb_res2);
1413
1414 return status;
1415 }
1416
1417 int _arb_fpwrap_double_airy_zero(double * res, ulong n, int which, int flags)
1418 {
1419 fmpz_t t;
1420 arb_t arb_res;
1421 slong wp;
1422 int status;
1423
1424 if (n == 0)
1425 {
1426 *res = D_NAN;
1427 return FPWRAP_UNABLE;
1428 }
1429
1430 arb_init(arb_res);
1431 fmpz_init(t);
1432 fmpz_set_ui(t, n);
1433
1434 for (wp = WP_INITIAL; ; wp *= 2)
1435 {
1436 if (which == 0)
1437 arb_hypgeom_airy_zero(arb_res, NULL, NULL, NULL, t, wp);
1438 else if (which == 1)
1439 arb_hypgeom_airy_zero(NULL, arb_res, NULL, NULL, t, wp);
1440 else if (which == 2)
1441 arb_hypgeom_airy_zero(NULL, NULL, arb_res, NULL, t, wp);
1442 else
1443 arb_hypgeom_airy_zero(NULL, NULL, NULL, arb_res, t, wp);
1444
1445 DOUBLE_CHECK_RESULT
1446 }
1447
1448 arb_clear(arb_res);
1449 fmpz_clear(t);
1450
1451 return status;
1452 }
1453
1454 int arb_fpwrap_double_airy_ai_zero(double * res, ulong n, int flags) { return _arb_fpwrap_double_airy_zero(res, n, 0, flags); }
1455 int arb_fpwrap_double_airy_ai_prime_zero(double * res, ulong n, int flags) { return _arb_fpwrap_double_airy_zero(res, n, 1, flags); }
1456 int arb_fpwrap_double_airy_bi_zero(double * res, ulong n, int flags) { return _arb_fpwrap_double_airy_zero(res, n, 2, flags); }
1457 int arb_fpwrap_double_airy_bi_prime_zero(double * res, ulong n, int flags) { return _arb_fpwrap_double_airy_zero(res, n, 3, flags); }
1458
1459 int arb_fpwrap_double_lambertw(double * res, double x, slong branch, int flags)
1460 {
1461 arb_t arb_res, arb_x;
1462 slong wp;
1463 int status;
1464
1465 arb_init(arb_res);
1466 arb_init(arb_x);
1467
1468 arb_set_d(arb_x, x);
1469
1470 if (!arb_is_finite(arb_x) || !(branch == 0 || branch == -1))
1471 {
1472 *res = D_NAN;
1473 status = FPWRAP_UNABLE;
1474 }
1475 else
1476 {
1477 for (wp = WP_INITIAL; ; wp *= 2)
1478 {
1479 arb_lambertw(arb_res, arb_x, (branch == -1), wp);
1480 DOUBLE_CHECK_RESULT
1481 }
1482 }
1483
1484 arb_clear(arb_x);
1485 arb_clear(arb_res);
1486
1487 return status;
1488 }
1489
1490 int arb_fpwrap_cdouble_lambertw(complex_double * res, complex_double x, slong branch, int flags)
1491 {
1492 fmpz_t t;
1493 acb_t acb_res, acb_x;
1494 slong wp;
1495 int status;
1496
1497 acb_init(acb_res);
1498 acb_init(acb_x);
1499 fmpz_init(t);
1500
1501 acb_set_d_d(acb_x, x.real, x.imag);
1502 fmpz_set_si(t, branch);
1503
1504 if (!acb_is_finite(acb_x))
1505 {
1506 res->real = D_NAN;
1507 res->imag = D_NAN;
1508 status = FPWRAP_UNABLE;
1509 }
1510 else
1511 {
1512 for (wp = WP_INITIAL; ; wp *= 2)
1513 {
1514 acb_lambertw(acb_res, acb_x, t, 0, wp);
1515 CDOUBLE_CHECK_RESULT
1516 }
1517 }
1518
1519 acb_clear(acb_x);
1520 acb_clear(acb_res);
1521 fmpz_clear(t);
1522
1523 return status;
1524 }
1525
1526 /* todo: functions with multiple outputs */
1527 /* todo: elliptic invariants, roots */
1528 /* todo: eisenstein series */
1529 /* todo: dirichlet functions requiring characters */
1530
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "flint/double_extras.h"
12 #include "arb_fpwrap.h"
13
14 #define CHECK_DOUBLE(fcall) \
15 do { \
16 int fail = fcall; \
17 if (fail || res != res) \
18 { \
19 flint_printf("FAIL\n"); \
20 flint_printf("%d\n", __LINE__); \
21 flint_abort(); \
22 } \
23 } while (0)
24
25 #define CHECK_CDOUBLE(fcall) \
26 do { \
27 int fail = fcall; \
28 if (fail || cres.real != cres.real || cres.imag != cres.imag) \
29 { \
30 flint_printf("FAIL\n"); \
31 flint_printf("%d\n", __LINE__); \
32 flint_abort(); \
33 } \
34 } while (0)
35
36
37 int main()
38 {
39 slong iter;
40 flint_rand_t state;
41
42 flint_printf("fpwrap....");
43 fflush(stdout);
44
45 flint_randinit(state);
46
47 /* correct rounding test */
48 for (iter = 0; iter < 100000 * arb_test_multiplier(); iter++)
49 {
50 mpfr_t t;
51 double x, y, z;
52
53 mpfr_init2(t, 53);
54
55 x = d_randtest(state) + n_randint(state, 100);
56
57 mpfr_set_d(t, x, MPFR_RNDN);
58
59 switch (n_randint(state, 4))
60 {
61 case 0:
62 arb_fpwrap_double_log1p(&y, x, FPWRAP_CORRECT_ROUNDING);
63 mpfr_log1p(t, t, MPFR_RNDN);
64 break;
65 case 1:
66 arb_fpwrap_double_sqrt(&y, x, FPWRAP_CORRECT_ROUNDING);
67 mpfr_sqrt(t, t, MPFR_RNDN);
68 break;
69 case 2:
70 arb_fpwrap_double_exp(&y, x, FPWRAP_CORRECT_ROUNDING);
71 mpfr_exp(t, t, MPFR_RNDN);
72 break;
73 default:
74 arb_fpwrap_double_sin(&y, x, FPWRAP_CORRECT_ROUNDING);
75 mpfr_sin(t, t, MPFR_RNDN);
76 break;
77 }
78
79 z = mpfr_get_d(t, MPFR_RNDN);
80
81 if (z != y)
82 {
83 flint_printf("FAIL: correct rounding\n\n");
84 flint_abort();
85 }
86
87 mpfr_clear(t);
88 }
89
90 {
91 double a[1], b[2];
92 double z, y;
93
94 z = 1.75;
95 a[0] = 0.25;
96 b[0] = 1.5;
97 b[1] = -2.125;
98
99 arb_fpwrap_double_hypgeom_pfq(&y, a, 1, b, 2, z, 0, 0);
100
101 if (fabs(y - 0.68910385124070327187) > 1e-16)
102 {
103 flint_printf("FAIL: value 1\n\n");
104 flint_abort();
105 }
106
107 arb_fpwrap_double_hypgeom_pfq(&y, a, 1, b, 2, z, 1, 0);
108
109 if (fabs(y - (-0.21324224371323783595)) > 1e-16)
110 {
111 flint_printf("FAIL: value 2\n\n");
112 flint_abort();
113 }
114 }
115
116 {
117 complex_double y, z;
118
119 arb_fpwrap_cdouble_zeta_zero(&y, 1, FPWRAP_CORRECT_ROUNDING);
120 arb_fpwrap_cdouble_zeta(&z, y, 0);
121
122 if (fabs(z.real - (-1.0483650805588237388e-16)) > 1e-31)
123 {
124 flint_printf("FAIL: value 3\n\n");
125 flint_abort();
126 }
127
128 if (fabs(z.imag - 6.5852592776051578103e-16) > 1e-31)
129 {
130 flint_printf("FAIL: value 4\n\n");
131 flint_abort();
132 }
133 }
134
135 {
136 complex_double x, y;
137
138 x.real = 1.0;
139 x.imag = 1e-100;
140
141 arb_fpwrap_cdouble_erf(&y, x, FPWRAP_ACCURATE_PARTS);
142
143 if (fabs(y.imag - 4.1510749742059471164e-101) > 1e-116)
144 {
145 flint_printf("FAIL: value 5\n\n");
146 flint_abort();
147 }
148 }
149
150 {
151 double x, y, z;
152 complex_double cx, cy, cz, ctau;
153 double res, res2;
154 complex_double cres;
155 int flags;
156
157 x = 0.25;
158 y = 0.625;
159 z = 0.75;
160
161 cx.real = 0.25;
162 cx.imag = 0.125;
163 cy.real = 0.5;
164 cy.imag = 0.625;
165 cz.real = 0.75;
166 cz.imag = 0.125;
167 ctau.real = 0.25;
168 ctau.imag = 1.0;
169
170 flags = 0;
171
172 CHECK_DOUBLE(arb_fpwrap_double_exp(&res, x, flags));
173 CHECK_CDOUBLE(arb_fpwrap_cdouble_exp(&cres, cx, flags));
174
175 CHECK_DOUBLE(arb_fpwrap_double_expm1(&res, x, flags));
176 CHECK_CDOUBLE(arb_fpwrap_cdouble_expm1(&cres, cx, flags));
177
178 CHECK_DOUBLE(arb_fpwrap_double_log(&res, x, flags));
179 CHECK_CDOUBLE(arb_fpwrap_cdouble_log(&cres, cx, flags));
180
181 CHECK_DOUBLE(arb_fpwrap_double_log1p(&res, x, flags));
182 CHECK_CDOUBLE(arb_fpwrap_cdouble_log1p(&cres, cx, flags));
183
184 CHECK_DOUBLE(arb_fpwrap_double_sqrt(&res, x, flags));
185 CHECK_CDOUBLE(arb_fpwrap_cdouble_sqrt(&cres, cx, flags));
186
187 CHECK_DOUBLE(arb_fpwrap_double_rsqrt(&res, x, flags));
188 CHECK_CDOUBLE(arb_fpwrap_cdouble_rsqrt(&cres, cx, flags));
189
190 CHECK_DOUBLE(arb_fpwrap_double_cbrt(&res, x, flags));
191 CHECK_CDOUBLE(arb_fpwrap_cdouble_cbrt(&cres, cx, flags));
192
193 CHECK_DOUBLE(arb_fpwrap_double_sin(&res, x, flags));
194 CHECK_CDOUBLE(arb_fpwrap_cdouble_sin(&cres, cx, flags));
195
196 CHECK_DOUBLE(arb_fpwrap_double_cos(&res, x, flags));
197 CHECK_CDOUBLE(arb_fpwrap_cdouble_cos(&cres, cx, flags));
198
199 CHECK_DOUBLE(arb_fpwrap_double_tan(&res, x, flags));
200 CHECK_CDOUBLE(arb_fpwrap_cdouble_tan(&cres, cx, flags));
201
202 CHECK_DOUBLE(arb_fpwrap_double_cot(&res, x, flags));
203 CHECK_CDOUBLE(arb_fpwrap_cdouble_cot(&cres, cx, flags));
204
205 CHECK_DOUBLE(arb_fpwrap_double_sec(&res, x, flags));
206 CHECK_CDOUBLE(arb_fpwrap_cdouble_sec(&cres, cx, flags));
207
208 CHECK_DOUBLE(arb_fpwrap_double_csc(&res, x, flags));
209 CHECK_CDOUBLE(arb_fpwrap_cdouble_csc(&cres, cx, flags));
210
211 CHECK_DOUBLE(arb_fpwrap_double_sinc(&res, x, flags));
212 CHECK_CDOUBLE(arb_fpwrap_cdouble_sinc(&cres, cx, flags));
213
214 CHECK_DOUBLE(arb_fpwrap_double_sin_pi(&res, x, flags));
215 CHECK_CDOUBLE(arb_fpwrap_cdouble_sin_pi(&cres, cx, flags));
216
217 CHECK_DOUBLE(arb_fpwrap_double_cos_pi(&res, x, flags));
218 CHECK_CDOUBLE(arb_fpwrap_cdouble_cos_pi(&cres, cx, flags));
219
220 CHECK_DOUBLE(arb_fpwrap_double_tan_pi(&res, x, flags));
221 CHECK_CDOUBLE(arb_fpwrap_cdouble_tan_pi(&cres, cx, flags));
222
223 CHECK_DOUBLE(arb_fpwrap_double_cot_pi(&res, x, flags));
224 CHECK_CDOUBLE(arb_fpwrap_cdouble_cot_pi(&cres, cx, flags));
225
226 CHECK_DOUBLE(arb_fpwrap_double_sinc_pi(&res, x, flags));
227 CHECK_CDOUBLE(arb_fpwrap_cdouble_sinc_pi(&cres, cx, flags));
228
229 CHECK_DOUBLE(arb_fpwrap_double_asin(&res, x, flags));
230 CHECK_CDOUBLE(arb_fpwrap_cdouble_asin(&cres, cx, flags));
231
232 CHECK_DOUBLE(arb_fpwrap_double_acos(&res, x, flags));
233 CHECK_CDOUBLE(arb_fpwrap_cdouble_acos(&cres, cx, flags));
234
235 CHECK_DOUBLE(arb_fpwrap_double_atan(&res, x, flags));
236 CHECK_CDOUBLE(arb_fpwrap_cdouble_atan(&cres, cx, flags));
237
238 CHECK_DOUBLE(arb_fpwrap_double_atan2(&res, x, y, flags));
239
240 CHECK_DOUBLE(arb_fpwrap_double_asinh(&res, x, flags));
241 CHECK_CDOUBLE(arb_fpwrap_cdouble_asinh(&cres, cx, flags));
242
243 CHECK_DOUBLE(arb_fpwrap_double_acosh(&res, 1.0 + x, flags));
244 CHECK_CDOUBLE(arb_fpwrap_cdouble_acosh(&cres, cx, flags));
245
246 CHECK_DOUBLE(arb_fpwrap_double_atanh(&res, x, flags));
247 CHECK_CDOUBLE(arb_fpwrap_cdouble_atanh(&cres, cx, flags));
248
249 CHECK_DOUBLE(arb_fpwrap_double_lambertw(&res, x, 0, flags));
250 CHECK_CDOUBLE(arb_fpwrap_cdouble_lambertw(&cres, cx, 0, flags));
251
252 CHECK_DOUBLE(arb_fpwrap_double_lambertw(&res, -0.2, -1, flags));
253 CHECK_CDOUBLE(arb_fpwrap_cdouble_lambertw(&cres, cx, -1, flags));
254
255 CHECK_DOUBLE(arb_fpwrap_double_rising(&res, x, y, flags));
256 CHECK_CDOUBLE(arb_fpwrap_cdouble_rising(&cres, cx, cy, flags));
257
258 CHECK_DOUBLE(arb_fpwrap_double_gamma(&res, x, flags));
259 CHECK_CDOUBLE(arb_fpwrap_cdouble_gamma(&cres, cx, flags));
260
261 CHECK_DOUBLE(arb_fpwrap_double_rgamma(&res, x, flags));
262 CHECK_CDOUBLE(arb_fpwrap_cdouble_rgamma(&cres, cx, flags));
263
264 CHECK_DOUBLE(arb_fpwrap_double_lgamma(&res, x, flags));
265 CHECK_CDOUBLE(arb_fpwrap_cdouble_lgamma(&cres, cx, flags));
266
267 CHECK_DOUBLE(arb_fpwrap_double_digamma(&res, x, flags));
268 CHECK_CDOUBLE(arb_fpwrap_cdouble_digamma(&cres, cx, flags));
269
270 CHECK_DOUBLE(arb_fpwrap_double_zeta(&res, x, flags));
271 CHECK_CDOUBLE(arb_fpwrap_cdouble_zeta(&cres, cx, flags));
272
273 CHECK_DOUBLE(arb_fpwrap_double_hurwitz_zeta(&res, x, z, flags));
274 CHECK_CDOUBLE(arb_fpwrap_cdouble_hurwitz_zeta(&cres, cx, cz, flags));
275
276 CHECK_DOUBLE(arb_fpwrap_double_barnes_g(&res, x, flags));
277 CHECK_CDOUBLE(arb_fpwrap_cdouble_barnes_g(&cres, cx, flags));
278
279 CHECK_DOUBLE(arb_fpwrap_double_log_barnes_g(&res, x, flags));
280 CHECK_CDOUBLE(arb_fpwrap_cdouble_log_barnes_g(&cres, cx, flags));
281
282 CHECK_DOUBLE(arb_fpwrap_double_polygamma(&res, x, z, flags));
283 CHECK_CDOUBLE(arb_fpwrap_cdouble_polygamma(&cres, cx, cz, flags));
284
285 CHECK_DOUBLE(arb_fpwrap_double_polylog(&res, x, z, flags));
286 CHECK_CDOUBLE(arb_fpwrap_cdouble_polylog(&cres, cx, cz, flags));
287
288 CHECK_CDOUBLE(arb_fpwrap_cdouble_dirichlet_eta(&cres, cz, flags));
289 CHECK_CDOUBLE(arb_fpwrap_cdouble_riemann_xi(&cres, cz, flags));
290 CHECK_CDOUBLE(arb_fpwrap_cdouble_hardy_theta(&cres, cz, flags));
291 CHECK_CDOUBLE(arb_fpwrap_cdouble_hardy_z(&cres, cz, flags));
292 CHECK_CDOUBLE(arb_fpwrap_cdouble_zeta_zero(&cres, 2, flags));
293
294 CHECK_DOUBLE(arb_fpwrap_double_erf(&res, x, flags));
295 CHECK_CDOUBLE(arb_fpwrap_cdouble_erf(&cres, cx, flags));
296
297 CHECK_DOUBLE(arb_fpwrap_double_erfc(&res, x, flags));
298 CHECK_CDOUBLE(arb_fpwrap_cdouble_erfc(&cres, cx, flags));
299
300 CHECK_DOUBLE(arb_fpwrap_double_erfi(&res, x, flags));
301 CHECK_CDOUBLE(arb_fpwrap_cdouble_erfi(&cres, cx, flags));
302
303 CHECK_DOUBLE(arb_fpwrap_double_fresnel_s(&res, x, 0, flags));
304 CHECK_CDOUBLE(arb_fpwrap_cdouble_fresnel_s(&cres, cx, 0, flags));
305
306 CHECK_DOUBLE(arb_fpwrap_double_fresnel_c(&res, x, 0, flags));
307 CHECK_CDOUBLE(arb_fpwrap_cdouble_fresnel_c(&cres, cx, 0, flags));
308
309 CHECK_DOUBLE(arb_fpwrap_double_gamma_upper(&res, x, z, 0, flags));
310 CHECK_CDOUBLE(arb_fpwrap_cdouble_gamma_upper(&cres, cx, cz, 0, flags));
311
312 CHECK_DOUBLE(arb_fpwrap_double_gamma_lower(&res, x, z, 0, flags));
313 CHECK_CDOUBLE(arb_fpwrap_cdouble_gamma_lower(&cres, cx, cz, 0, flags));
314
315 CHECK_DOUBLE(arb_fpwrap_double_beta_lower(&res, x, y, z, 0, flags));
316 CHECK_CDOUBLE(arb_fpwrap_cdouble_beta_lower(&cres, cx, cy, cz, 0, flags));
317
318 CHECK_DOUBLE(arb_fpwrap_double_exp_integral_e(&res, x, z, flags));
319 CHECK_CDOUBLE(arb_fpwrap_cdouble_exp_integral_e(&cres, cx, cz, flags));
320
321 CHECK_DOUBLE(arb_fpwrap_double_exp_integral_ei(&res, x, flags));
322 CHECK_CDOUBLE(arb_fpwrap_cdouble_exp_integral_ei(&cres, cx, flags));
323
324 CHECK_DOUBLE(arb_fpwrap_double_sin_integral(&res, x, flags));
325 CHECK_CDOUBLE(arb_fpwrap_cdouble_sin_integral(&cres, cx, flags));
326
327 CHECK_DOUBLE(arb_fpwrap_double_cos_integral(&res, x, flags));
328 CHECK_CDOUBLE(arb_fpwrap_cdouble_cos_integral(&cres, cx, flags));
329
330 CHECK_DOUBLE(arb_fpwrap_double_sinh_integral(&res, x, flags));
331 CHECK_CDOUBLE(arb_fpwrap_cdouble_sinh_integral(&cres, cx, flags));
332
333 CHECK_DOUBLE(arb_fpwrap_double_cosh_integral(&res, x, flags));
334 CHECK_CDOUBLE(arb_fpwrap_cdouble_cosh_integral(&cres, cx, flags));
335
336 CHECK_DOUBLE(arb_fpwrap_double_log_integral(&res, x, 0, flags));
337 CHECK_CDOUBLE(arb_fpwrap_cdouble_log_integral(&cres, cx, 0, flags));
338
339 CHECK_DOUBLE(arb_fpwrap_double_bessel_j(&res, y, x, flags));
340 CHECK_CDOUBLE(arb_fpwrap_cdouble_bessel_j(&cres, cy, cx, flags));
341
342 CHECK_DOUBLE(arb_fpwrap_double_bessel_y(&res, y, x, flags));
343 CHECK_CDOUBLE(arb_fpwrap_cdouble_bessel_y(&cres, cy, cx, flags));
344
345 CHECK_DOUBLE(arb_fpwrap_double_bessel_i(&res, y, x, flags));
346 CHECK_CDOUBLE(arb_fpwrap_cdouble_bessel_i(&cres, cy, cx, flags));
347
348 CHECK_DOUBLE(arb_fpwrap_double_bessel_k(&res, y, x, flags));
349 CHECK_CDOUBLE(arb_fpwrap_cdouble_bessel_k(&cres, cy, cx, flags));
350
351 CHECK_DOUBLE(arb_fpwrap_double_bessel_k_scaled(&res, y, x, flags));
352 CHECK_CDOUBLE(arb_fpwrap_cdouble_bessel_k_scaled(&cres, cy, cx, flags));
353
354 CHECK_DOUBLE(arb_fpwrap_double_airy_ai(&res, x, flags));
355 CHECK_CDOUBLE(arb_fpwrap_cdouble_airy_ai(&cres, cx, flags));
356
357 CHECK_DOUBLE(arb_fpwrap_double_airy_ai_prime(&res, x, flags));
358 CHECK_CDOUBLE(arb_fpwrap_cdouble_airy_ai_prime(&cres, cx, flags));
359
360 CHECK_DOUBLE(arb_fpwrap_double_airy_bi(&res, x, flags));
361 CHECK_CDOUBLE(arb_fpwrap_cdouble_airy_bi(&cres, cx, flags));
362
363 CHECK_DOUBLE(arb_fpwrap_double_airy_bi_prime(&res, x, flags));
364 CHECK_CDOUBLE(arb_fpwrap_cdouble_airy_bi_prime(&cres, cx, flags));
365
366 CHECK_DOUBLE(arb_fpwrap_double_airy_ai_zero(&res, 1, flags));
367 CHECK_DOUBLE(arb_fpwrap_double_airy_ai_prime_zero(&res, 1, flags));
368 CHECK_DOUBLE(arb_fpwrap_double_airy_bi_zero(&res, 1, flags));
369 CHECK_DOUBLE(arb_fpwrap_double_airy_bi_prime_zero(&res, 1, flags));
370
371 CHECK_DOUBLE(arb_fpwrap_double_coulomb_f(&res, y, z, x, flags));
372 CHECK_CDOUBLE(arb_fpwrap_cdouble_coulomb_f(&cres, cy, cz, cx, flags));
373
374 CHECK_DOUBLE(arb_fpwrap_double_coulomb_g(&res, y, z, x, flags));
375 CHECK_CDOUBLE(arb_fpwrap_cdouble_coulomb_g(&cres, cy, cz, cx, flags));
376
377 CHECK_CDOUBLE(arb_fpwrap_cdouble_coulomb_hpos(&cres, cy, cz, cx, flags));
378 CHECK_CDOUBLE(arb_fpwrap_cdouble_coulomb_hneg(&cres, cy, cz, cx, flags));
379
380 CHECK_DOUBLE(arb_fpwrap_double_chebyshev_t(&res, y, x, flags));
381 CHECK_CDOUBLE(arb_fpwrap_cdouble_chebyshev_t(&cres, cy, cx, flags));
382
383 CHECK_DOUBLE(arb_fpwrap_double_chebyshev_u(&res, y, x, flags));
384 CHECK_CDOUBLE(arb_fpwrap_cdouble_chebyshev_u(&cres, cy, cx, flags));
385
386 CHECK_DOUBLE(arb_fpwrap_double_jacobi_p(&res, y, x, y, x, flags));
387 CHECK_CDOUBLE(arb_fpwrap_cdouble_jacobi_p(&cres, cy, cx, cy, cx, flags));
388
389 CHECK_DOUBLE(arb_fpwrap_double_gegenbauer_c(&res, y, z, x, flags));
390 CHECK_CDOUBLE(arb_fpwrap_cdouble_gegenbauer_c(&cres, cy, cz, cx, flags));
391
392 CHECK_DOUBLE(arb_fpwrap_double_laguerre_l(&res, y, z, x, flags));
393 CHECK_CDOUBLE(arb_fpwrap_cdouble_laguerre_l(&cres, cy, cz, cx, flags));
394
395 CHECK_DOUBLE(arb_fpwrap_double_hermite_h(&res, y, x, flags));
396 CHECK_CDOUBLE(arb_fpwrap_cdouble_hermite_h(&cres, cy, cx, flags));
397
398 CHECK_DOUBLE(arb_fpwrap_double_legendre_p(&res, y, z, x, 0, flags));
399 CHECK_CDOUBLE(arb_fpwrap_cdouble_legendre_p(&cres, cy, cz, cx, 0, flags));
400
401 CHECK_DOUBLE(arb_fpwrap_double_legendre_q(&res, y, z, x, 0, flags));
402 CHECK_CDOUBLE(arb_fpwrap_cdouble_legendre_q(&cres, cy, cz, cx, 0, flags));
403
404 CHECK_DOUBLE(arb_fpwrap_double_legendre_root(&res, &res2, 2, 1, flags));
405
406 CHECK_CDOUBLE(arb_fpwrap_cdouble_spherical_y(&cres, 2, 1, cx, cy, flags));
407
408 CHECK_DOUBLE(arb_fpwrap_double_hypgeom_0f1(&res, y, x, 0, flags));
409 CHECK_CDOUBLE(arb_fpwrap_cdouble_hypgeom_0f1(&cres, cy, cx, 0, flags));
410
411 CHECK_DOUBLE(arb_fpwrap_double_hypgeom_1f1(&res, x, y, x, 0, flags));
412 CHECK_CDOUBLE(arb_fpwrap_cdouble_hypgeom_1f1(&cres, cx, cy, cx, 0, flags));
413
414 CHECK_DOUBLE(arb_fpwrap_double_hypgeom_u(&res, x, y, x, flags));
415 CHECK_CDOUBLE(arb_fpwrap_cdouble_hypgeom_u(&cres, cx, cy, cx, flags));
416
417 CHECK_DOUBLE(arb_fpwrap_double_hypgeom_2f1(&res, x, y, z, x, 0, flags));
418 CHECK_CDOUBLE(arb_fpwrap_cdouble_hypgeom_2f1(&cres, cx, cy, cz, cx, 0, flags));
419
420 CHECK_DOUBLE(arb_fpwrap_double_hypgeom_pfq(&res, &x, 1, &y, 1, z, 0, flags));
421 CHECK_CDOUBLE(arb_fpwrap_cdouble_hypgeom_pfq(&cres, &cx, 1, &cy, 1, cz, 0, flags));
422
423 CHECK_DOUBLE(arb_fpwrap_double_agm(&res, x, y, flags));
424 CHECK_CDOUBLE(arb_fpwrap_cdouble_agm(&cres, cx, cy, flags));
425
426 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_k(&cres, cz, flags));
427 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_e(&cres, cz, flags));
428 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_pi(&cres, cy, cz, flags));
429 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_f(&cres, cx, cz, 0, flags));
430 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_e_inc(&cres, cx, cz, 0, flags));
431 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_pi_inc(&cres, cx, cy, cz, 0, flags));
432
433 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_rf(&cres, cx, cy, cz, 0, flags));
434 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_rg(&cres, cx, cy, cz, 0, flags));
435 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_rj(&cres, cx, cy, cz, cx, 0, flags));
436
437 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_p(&cres, cz, ctau, flags));
438 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_p_prime(&cres, cz, ctau, flags));
439 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_inv_p(&cres, cz, ctau, flags));
440 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_zeta(&cres, cz, ctau, flags));
441 CHECK_CDOUBLE(arb_fpwrap_cdouble_elliptic_sigma(&cres, cz, ctau, flags));
442
443 CHECK_CDOUBLE(arb_fpwrap_cdouble_jacobi_theta_1(&cres, cz, ctau, flags));
444 CHECK_CDOUBLE(arb_fpwrap_cdouble_jacobi_theta_2(&cres, cz, ctau, flags));
445 CHECK_CDOUBLE(arb_fpwrap_cdouble_jacobi_theta_3(&cres, cz, ctau, flags));
446 CHECK_CDOUBLE(arb_fpwrap_cdouble_jacobi_theta_4(&cres, cz, ctau, flags));
447
448 CHECK_CDOUBLE(arb_fpwrap_cdouble_dedekind_eta(&cres, ctau, flags));
449 CHECK_CDOUBLE(arb_fpwrap_cdouble_modular_j(&cres, ctau, flags));
450 CHECK_CDOUBLE(arb_fpwrap_cdouble_modular_lambda(&cres, ctau, flags));
451 CHECK_CDOUBLE(arb_fpwrap_cdouble_modular_delta(&cres, ctau, flags));
452 }
453
454 flint_randclear(state);
455 flint_cleanup();
456 flint_printf("PASS\n");
457 return EXIT_SUCCESS;
458 }
459
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #ifndef ARB_FPWRAP_H
12 #define ARB_FPWRAP_H
13
14 #ifdef ARB_FPWRAP_INLINES_C
15 #define ARB_FPWRAP_INLINE
16 #else
17 #define ARB_FPWRAP_INLINE static __inline__
18 #endif
19
20 #include "arb.h"
21 #include "acb.h"
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 #define FPWRAP_SUCCESS 0
28 #define FPWRAP_UNABLE 1
29
30 #define FPWRAP_ACCURATE_PARTS 1
31 #define FPWRAP_CORRECT_ROUNDING 2
32 #define FPWRAP_WORK_LIMIT 65536
33
34 typedef struct
35 {
36 double real;
37 double imag;
38 }
39 complex_double;
40
41 int arb_fpwrap_double_exp(double * res, double x, int flags);
42 int arb_fpwrap_cdouble_exp(complex_double * res, complex_double x, int flags);
43
44 int arb_fpwrap_double_expm1(double * res, double x, int flags);
45 int arb_fpwrap_cdouble_expm1(complex_double * res, complex_double x, int flags);
46
47 int arb_fpwrap_double_log(double * res, double x, int flags);
48 int arb_fpwrap_cdouble_log(complex_double * res, complex_double x, int flags);
49
50 int arb_fpwrap_double_log1p(double * res, double x, int flags);
51 int arb_fpwrap_cdouble_log1p(complex_double * res, complex_double x, int flags);
52
53 int arb_fpwrap_double_sqrt(double * res, double x, int flags);
54 int arb_fpwrap_cdouble_sqrt(complex_double * res, complex_double x, int flags);
55
56 int arb_fpwrap_double_rsqrt(double * res, double x, int flags);
57 int arb_fpwrap_cdouble_rsqrt(complex_double * res, complex_double x, int flags);
58
59 int arb_fpwrap_double_cbrt(double * res, double x, int flags);
60 int arb_fpwrap_cdouble_cbrt(complex_double * res, complex_double x, int flags);
61
62 int arb_fpwrap_double_sin(double * res, double x, int flags);
63 int arb_fpwrap_cdouble_sin(complex_double * res, complex_double x, int flags);
64
65 int arb_fpwrap_double_cos(double * res, double x, int flags);
66 int arb_fpwrap_cdouble_cos(complex_double * res, complex_double x, int flags);
67
68 int arb_fpwrap_double_tan(double * res, double x, int flags);
69 int arb_fpwrap_cdouble_tan(complex_double * res, complex_double x, int flags);
70
71 int arb_fpwrap_double_cot(double * res, double x, int flags);
72 int arb_fpwrap_cdouble_cot(complex_double * res, complex_double x, int flags);
73
74 int arb_fpwrap_double_sec(double * res, double x, int flags);
75 int arb_fpwrap_cdouble_sec(complex_double * res, complex_double x, int flags);
76
77 int arb_fpwrap_double_csc(double * res, double x, int flags);
78 int arb_fpwrap_cdouble_csc(complex_double * res, complex_double x, int flags);
79
80 int arb_fpwrap_double_sinc(double * res, double x, int flags);
81 int arb_fpwrap_cdouble_sinc(complex_double * res, complex_double x, int flags);
82
83 int arb_fpwrap_double_sin_pi(double * res, double x, int flags);
84 int arb_fpwrap_cdouble_sin_pi(complex_double * res, complex_double x, int flags);
85
86 int arb_fpwrap_double_cos_pi(double * res, double x, int flags);
87 int arb_fpwrap_cdouble_cos_pi(complex_double * res, complex_double x, int flags);
88
89 int arb_fpwrap_double_tan_pi(double * res, double x, int flags);
90 int arb_fpwrap_cdouble_tan_pi(complex_double * res, complex_double x, int flags);
91
92 int arb_fpwrap_double_cot_pi(double * res, double x, int flags);
93 int arb_fpwrap_cdouble_cot_pi(complex_double * res, complex_double x, int flags);
94
95 int arb_fpwrap_double_sinc_pi(double * res, double x, int flags);
96 int arb_fpwrap_cdouble_sinc_pi(complex_double * res, complex_double x, int flags);
97
98 int arb_fpwrap_double_asin(double * res, double x, int flags);
99 int arb_fpwrap_cdouble_asin(complex_double * res, complex_double x, int flags);
100
101 int arb_fpwrap_double_acos(double * res, double x, int flags);
102 int arb_fpwrap_cdouble_acos(complex_double * res, complex_double x, int flags);
103
104 int arb_fpwrap_double_atan(double * res, double x, int flags);
105 int arb_fpwrap_cdouble_atan(complex_double * res, complex_double x, int flags);
106
107 int arb_fpwrap_double_atan2(double * res, double x1, double x2, int flags);
108
109 int arb_fpwrap_double_asinh(double * res, double x, int flags);
110 int arb_fpwrap_cdouble_asinh(complex_double * res, complex_double x, int flags);
111
112 int arb_fpwrap_double_acosh(double * res, double x, int flags);
113 int arb_fpwrap_cdouble_acosh(complex_double * res, complex_double x, int flags);
114
115 int arb_fpwrap_double_atanh(double * res, double x, int flags);
116 int arb_fpwrap_cdouble_atanh(complex_double * res, complex_double x, int flags);
117
118 int arb_fpwrap_double_lambertw(double * res, double x, slong branch, int flags);
119 int arb_fpwrap_cdouble_lambertw(complex_double * res, complex_double x, slong branch, int flags);
120
121 int arb_fpwrap_double_rising(double * res, double x, double n, int flags);
122 int arb_fpwrap_cdouble_rising(complex_double * res, complex_double x, complex_double n, int flags);
123
124 int arb_fpwrap_double_gamma(double * res, double x, int flags);
125 int arb_fpwrap_cdouble_gamma(complex_double * res, complex_double x, int flags);
126
127 int arb_fpwrap_double_rgamma(double * res, double x, int flags);
128 int arb_fpwrap_cdouble_rgamma(complex_double * res, complex_double x, int flags);
129
130 int arb_fpwrap_double_lgamma(double * res, double x, int flags);
131 int arb_fpwrap_cdouble_lgamma(complex_double * res, complex_double x, int flags);
132
133 int arb_fpwrap_double_digamma(double * res, double x, int flags);
134 int arb_fpwrap_cdouble_digamma(complex_double * res, complex_double x, int flags);
135
136 int arb_fpwrap_double_zeta(double * res, double x, int flags);
137 int arb_fpwrap_cdouble_zeta(complex_double * res, complex_double x, int flags);
138
139 int arb_fpwrap_double_hurwitz_zeta(double * res, double s, double z, int flags);
140 int arb_fpwrap_cdouble_hurwitz_zeta(complex_double * res, complex_double s, complex_double z, int flags);
141
142 int arb_fpwrap_double_barnes_g(double * res, double x, int flags);
143 int arb_fpwrap_cdouble_barnes_g(complex_double * res, complex_double x, int flags);
144
145 int arb_fpwrap_double_log_barnes_g(double * res, double x, int flags);
146 int arb_fpwrap_cdouble_log_barnes_g(complex_double * res, complex_double x, int flags);
147
148 int arb_fpwrap_double_polygamma(double * res, double s, double z, int flags);
149 int arb_fpwrap_cdouble_polygamma(complex_double * res, complex_double s, complex_double z, int flags);
150
151 int arb_fpwrap_double_polylog(double * res, double s, double z, int flags);
152 int arb_fpwrap_cdouble_polylog(complex_double * res, complex_double s, complex_double z, int flags);
153
154 int arb_fpwrap_cdouble_dirichlet_eta(complex_double * res, complex_double s, int flags);
155 int arb_fpwrap_cdouble_riemann_xi(complex_double * res, complex_double s, int flags);
156 int arb_fpwrap_cdouble_hardy_theta(complex_double * res, complex_double z, int flags);
157 int arb_fpwrap_cdouble_hardy_z(complex_double * res, complex_double z, int flags);
158 int arb_fpwrap_cdouble_zeta_zero(complex_double * res, ulong n, int flags);
159
160 int arb_fpwrap_double_erf(double * res, double x, int flags);
161 int arb_fpwrap_cdouble_erf(complex_double * res, complex_double x, int flags);
162
163 int arb_fpwrap_double_erfc(double * res, double x, int flags);
164 int arb_fpwrap_cdouble_erfc(complex_double * res, complex_double x, int flags);
165
166 int arb_fpwrap_double_erfi(double * res, double x, int flags);
167 int arb_fpwrap_cdouble_erfi(complex_double * res, complex_double x, int flags);
168
169 int arb_fpwrap_double_fresnel_s(double * res, double x, int normalized, int flags);
170 int arb_fpwrap_cdouble_fresnel_s(complex_double * res, complex_double x, int normalized, int flags);
171
172 int arb_fpwrap_double_fresnel_c(double * res, double x, int normalized, int flags);
173 int arb_fpwrap_cdouble_fresnel_c(complex_double * res, complex_double x, int normalized, int flags);
174
175 int arb_fpwrap_double_gamma_upper(double * res, double s, double z, int regularized, int flags);
176 int arb_fpwrap_cdouble_gamma_upper(complex_double * res, complex_double s, complex_double z, int regularized, int flags);
177
178 int arb_fpwrap_double_gamma_lower(double * res, double s, double z, int regularized, int flags);
179 int arb_fpwrap_cdouble_gamma_lower(complex_double * res, complex_double s, complex_double z, int regularized, int flags);
180
181 int arb_fpwrap_double_beta_lower(double * res, double a, double b, double z, int regularized, int flags);
182 int arb_fpwrap_cdouble_beta_lower(complex_double * res, complex_double a, complex_double b, complex_double z, int regularized, int flags);
183
184 int arb_fpwrap_double_exp_integral_e(double * res, double s, double z, int flags);
185 int arb_fpwrap_cdouble_exp_integral_e(complex_double * res, complex_double s, complex_double z, int flags);
186
187 int arb_fpwrap_double_exp_integral_ei(double * res, double x, int flags);
188 int arb_fpwrap_cdouble_exp_integral_ei(complex_double * res, complex_double x, int flags);
189
190 int arb_fpwrap_double_sin_integral(double * res, double x, int flags);
191 int arb_fpwrap_cdouble_sin_integral(complex_double * res, complex_double x, int flags);
192
193 int arb_fpwrap_double_cos_integral(double * res, double x, int flags);
194 int arb_fpwrap_cdouble_cos_integral(complex_double * res, complex_double x, int flags);
195
196 int arb_fpwrap_double_sinh_integral(double * res, double x, int flags);
197 int arb_fpwrap_cdouble_sinh_integral(complex_double * res, complex_double x, int flags);
198
199 int arb_fpwrap_double_cosh_integral(double * res, double x, int flags);
200 int arb_fpwrap_cdouble_cosh_integral(complex_double * res, complex_double x, int flags);
201
202 int arb_fpwrap_double_log_integral(double * res, double x, int offset, int flags);
203 int arb_fpwrap_cdouble_log_integral(complex_double * res, complex_double x, int offset, int flags);
204
205 int arb_fpwrap_double_bessel_j(double * res, double nu, double x, int flags);
206 int arb_fpwrap_cdouble_bessel_j(complex_double * res, complex_double nu, complex_double x, int flags);
207
208 int arb_fpwrap_double_bessel_y(double * res, double nu, double x, int flags);
209 int arb_fpwrap_cdouble_bessel_y(complex_double * res, complex_double nu, complex_double x, int flags);
210
211 int arb_fpwrap_double_bessel_i(double * res, double nu, double x, int flags);
212 int arb_fpwrap_cdouble_bessel_i(complex_double * res, complex_double nu, complex_double x, int flags);
213
214 int arb_fpwrap_double_bessel_k(double * res, double nu, double x, int flags);
215 int arb_fpwrap_cdouble_bessel_k(complex_double * res, complex_double nu, complex_double x, int flags);
216
217 int arb_fpwrap_double_bessel_k_scaled(double * res, double nu, double x, int flags);
218 int arb_fpwrap_cdouble_bessel_k_scaled(complex_double * res, complex_double nu, complex_double x, int flags);
219
220 int arb_fpwrap_double_airy_ai(double * res, double x, int flags);
221 int arb_fpwrap_cdouble_airy_ai(complex_double * res, complex_double x, int flags);
222
223 int arb_fpwrap_double_airy_ai_prime(double * res, double x, int flags);
224 int arb_fpwrap_cdouble_airy_ai_prime(complex_double * res, complex_double x, int flags);
225
226 int arb_fpwrap_double_airy_bi(double * res, double x, int flags);
227 int arb_fpwrap_cdouble_airy_bi(complex_double * res, complex_double x, int flags);
228
229 int arb_fpwrap_double_airy_bi_prime(double * res, double x, int flags);
230 int arb_fpwrap_cdouble_airy_bi_prime(complex_double * res, complex_double x, int flags);
231
232 int arb_fpwrap_double_airy_ai_zero(double * res, ulong n, int flags);
233 int arb_fpwrap_double_airy_ai_prime_zero(double * res, ulong n, int flags);
234 int arb_fpwrap_double_airy_bi_zero(double * res, ulong n, int flags);
235 int arb_fpwrap_double_airy_bi_prime_zero(double * res, ulong n, int flags);
236
237 int arb_fpwrap_double_coulomb_f(double * res, double l, double eta, double x, int flags);
238 int arb_fpwrap_cdouble_coulomb_f(complex_double * res, complex_double l, complex_double eta, complex_double x, int flags);
239
240 int arb_fpwrap_double_coulomb_g(double * res, double l, double eta, double x, int flags);
241 int arb_fpwrap_cdouble_coulomb_g(complex_double * res, complex_double l, complex_double eta, complex_double x, int flags);
242
243 int arb_fpwrap_cdouble_coulomb_hpos(complex_double * res, complex_double l, complex_double eta, complex_double x, int flags);
244 int arb_fpwrap_cdouble_coulomb_hneg(complex_double * res, complex_double l, complex_double eta, complex_double x, int flags);
245
246 int arb_fpwrap_double_chebyshev_t(double * res, double n, double x, int flags);
247 int arb_fpwrap_cdouble_chebyshev_t(complex_double * res, complex_double n, complex_double x, int flags);
248
249 int arb_fpwrap_double_chebyshev_u(double * res, double n, double x, int flags);
250 int arb_fpwrap_cdouble_chebyshev_u(complex_double * res, complex_double n, complex_double x, int flags);
251
252 int arb_fpwrap_double_jacobi_p(double * res, double n, double a, double b, double x, int flags);
253 int arb_fpwrap_cdouble_jacobi_p(complex_double * res, complex_double n, complex_double a, complex_double b, complex_double x, int flags);
254
255 int arb_fpwrap_double_gegenbauer_c(double * res, double n, double m, double x, int flags);
256 int arb_fpwrap_cdouble_gegenbauer_c(complex_double * res, complex_double n, complex_double m, complex_double x, int flags);
257
258 int arb_fpwrap_double_laguerre_l(double * res, double n, double m, double x, int flags);
259 int arb_fpwrap_cdouble_laguerre_l(complex_double * res, complex_double n, complex_double m, complex_double x, int flags);
260
261 int arb_fpwrap_double_hermite_h(double * res, double n, double x, int flags);
262 int arb_fpwrap_cdouble_hermite_h(complex_double * res, complex_double n, complex_double x, int flags);
263
264 int arb_fpwrap_double_legendre_p(double * res, double n, double m, double x, int type, int flags);
265 int arb_fpwrap_cdouble_legendre_p(complex_double * res, complex_double n, complex_double m, complex_double x, int type, int flags);
266
267 int arb_fpwrap_double_legendre_q(double * res, double n, double m, double x, int type, int flags);
268 int arb_fpwrap_cdouble_legendre_q(complex_double * res, complex_double n, complex_double m, complex_double x, int type, int flags);
269
270 int arb_fpwrap_double_legendre_root(double * res1, double * res2, ulong n, ulong k, int flags);
271
272 int arb_fpwrap_cdouble_spherical_y(complex_double * res, slong n, slong m, complex_double x1, complex_double x2, int flags);
273
274 int arb_fpwrap_double_hypgeom_0f1(double * res, double a, double x, int regularized, int flags);
275 int arb_fpwrap_cdouble_hypgeom_0f1(complex_double * res, complex_double a, complex_double x, int regularized, int flags);
276
277 int arb_fpwrap_double_hypgeom_1f1(double * res, double a, double b, double x, int regularized, int flags);
278 int arb_fpwrap_cdouble_hypgeom_1f1(complex_double * res, complex_double a, complex_double b, complex_double x, int regularized, int flags);
279
280 int arb_fpwrap_double_hypgeom_u(double * res, double a, double b, double x, int flags);
281 int arb_fpwrap_cdouble_hypgeom_u(complex_double * res, complex_double a, complex_double b, complex_double x, int flags);
282
283 int arb_fpwrap_double_hypgeom_2f1(double * res, double a, double b, double c, double x, int regularized, int flags);
284 int arb_fpwrap_cdouble_hypgeom_2f1(complex_double * res, complex_double a, complex_double b, complex_double c, complex_double x, int regularized, int flags);
285
286 int arb_fpwrap_double_hypgeom_pfq(double * res, const double * a, slong p, const double * b, slong q, double z, int regularized, int flags);
287 int arb_fpwrap_cdouble_hypgeom_pfq(complex_double * res, const complex_double * a, slong p, const complex_double * b, slong q, complex_double z, int regularized, int flags);
288
289
290 int arb_fpwrap_double_agm(double * res, double x, double y, int flags);
291 int arb_fpwrap_cdouble_agm(complex_double * res, complex_double x, complex_double y, int flags);
292
293 int arb_fpwrap_cdouble_elliptic_k(complex_double * res, complex_double m, int flags);
294 int arb_fpwrap_cdouble_elliptic_e(complex_double * res, complex_double m, int flags);
295 int arb_fpwrap_cdouble_elliptic_pi(complex_double * res, complex_double n, complex_double m, int flags);
296 int arb_fpwrap_cdouble_elliptic_f(complex_double * res, complex_double phi, complex_double m, int pi, int flags);
297 int arb_fpwrap_cdouble_elliptic_e_inc(complex_double * res, complex_double phi, complex_double m, int pi, int flags);
298 int arb_fpwrap_cdouble_elliptic_pi_inc(complex_double * res, complex_double n, complex_double phi, complex_double m, int pi, int flags);
299
300 int arb_fpwrap_cdouble_elliptic_rf(complex_double * res, complex_double x, complex_double y, complex_double z, int option, int flags);
301 int arb_fpwrap_cdouble_elliptic_rg(complex_double * res, complex_double x, complex_double y, complex_double z, int option, int flags);
302 int arb_fpwrap_cdouble_elliptic_rj(complex_double * res, complex_double x, complex_double y, complex_double z, complex_double w, int option, int flags);
303
304 int arb_fpwrap_cdouble_elliptic_p(complex_double * res, complex_double z, complex_double tau, int flags);
305 int arb_fpwrap_cdouble_elliptic_p_prime(complex_double * res, complex_double z, complex_double tau, int flags);
306 int arb_fpwrap_cdouble_elliptic_inv_p(complex_double * res, complex_double z, complex_double tau, int flags);
307 int arb_fpwrap_cdouble_elliptic_zeta(complex_double * res, complex_double z, complex_double tau, int flags);
308 int arb_fpwrap_cdouble_elliptic_sigma(complex_double * res, complex_double z, complex_double tau, int flags);
309
310 int arb_fpwrap_cdouble_jacobi_theta_1(complex_double * res, complex_double z, complex_double tau, int flags);
311 int arb_fpwrap_cdouble_jacobi_theta_2(complex_double * res, complex_double z, complex_double tau, int flags);
312 int arb_fpwrap_cdouble_jacobi_theta_3(complex_double * res, complex_double z, complex_double tau, int flags);
313 int arb_fpwrap_cdouble_jacobi_theta_4(complex_double * res, complex_double z, complex_double tau, int flags);
314
315 int arb_fpwrap_cdouble_dedekind_eta(complex_double * res, complex_double tau, int flags);
316 int arb_fpwrap_cdouble_modular_j(complex_double * res, complex_double tau, int flags);
317 int arb_fpwrap_cdouble_modular_lambda(complex_double * res, complex_double tau, int flags);
318 int arb_fpwrap_cdouble_modular_delta(complex_double * res, complex_double tau, int flags);
319
320 #ifdef __cplusplus
321 }
322 #endif
323
324 #endif
325
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12 #include "bernoulli.h"
13
14 /* tuning factor */
15 double GAMMA_STIRLING_BETA = 0.0;
16
17 #define PI 3.1415926535897932385
18
19 static slong
20 choose_n(double log2z, double argz, int digamma, slong prec)
21 {
22 double argf, boundn, boundn_best;
23 slong n, nbest;
24
25 argf = 1.0 / cos(0.5 * argz);
26 argf = log(argf) * (1. / log(2));
27
28 boundn_best = 1e300;
29 nbest = 1;
30
31 for (n = 1; ; n++)
32 {
33 if (digamma)
34 boundn = bernoulli_bound_2exp_si(2*n) - (2*n)*log2z + (2*n+1)*argf;
35 else
36 boundn = bernoulli_bound_2exp_si(2*n) - (2*n-1)*log2z + (2*n)*argf;
37
38 /* success */
39 if (boundn <= -prec)
40 return n;
41
42 if (boundn < boundn_best)
43 {
44 nbest = n;
45 boundn_best = boundn;
46 }
47
48 /* if the term magnitude does not decrease, r is too small */
49 if (boundn > 1)
50 {
51 /* printf("failure: prec = %ld, nbound_best = %f [%ld, %ld]\n", prec, boundn_best, n, nbest); */
52 return nbest;
53 }
54 }
55 }
56
57 static void
58 choose_small(int * reflect, slong * r, slong * n,
59 double x, double y, int use_reflect, int digamma, slong prec)
60 {
61 double w, argz, log2z, BETA;
62 slong rr;
63
64 /* use reflection formula if very negative */
65 if (x < -5.0 && use_reflect)
66 {
67 *reflect = 1;
68 x = 1.0 - x;
69 }
70 else
71 {
72 *reflect = 0;
73 }
74
75 BETA = GAMMA_STIRLING_BETA;
76
77 if (BETA < 0.12)
78 {
79 if (prec <= 32768)
80 BETA = 0.17;
81 else if (prec <= 131072)
82 BETA = 0.20;
83 else
84 BETA = 0.24;
85 }
86
87 /* argument reduction until |z| >= w */
88 w = FLINT_MAX(1.0, BETA * prec);
89
90 rr = 0;
91 while (x < 1.0 || x*x + y*y < w*w)
92 {
93 x++;
94 rr++;
95 }
96
97 log2z = 0.5 * log(x*x + y*y) * 1.44269504088896341;
98 argz = atan2(y, x);
99
100 *r = rr;
101 *n = choose_n(log2z, argz, digamma, prec);
102 }
103
104 static void
105 choose_large(int * reflect, slong * r, slong * n,
106 const arf_t a, const arf_t b, int use_reflect, int digamma, slong prec)
107 {
108 if (use_reflect && arf_sgn(a) < 0)
109 *reflect = 1;
110 else
111 *reflect = 0;
112
113 *r = 0;
114
115 /* so big that we will certainly have n = 0 */
116 if (arf_cmpabs_2exp_si(a, WORD_MAX / 8) >= 0 ||
117 arf_cmpabs_2exp_si(b, WORD_MAX / 8) >= 0)
118 {
119 *n = 0;
120 }
121 else
122 {
123 slong ab, bb;
124 double log2z, argz;
125
126 ab = arf_abs_bound_lt_2exp_si(a);
127 bb = arf_abs_bound_lt_2exp_si(b);
128
129 log2z = FLINT_MAX(ab, bb);
130
131 /* piecewise approximation of the argument */
132 if (arf_is_zero(b))
133 {
134 if ((arf_sgn(a) < 0) && !(*reflect))
135 argz = PI;
136 else
137 argz = 0.0;
138 }
139 else
140 {
141 if ((arf_sgn(a) < 0) && !(*reflect))
142 if (arf_cmpabs(a, b) <= 0)
143 argz = PI * 0.75;
144 else
145 argz = PI;
146 else
147 if (arf_cmpabs(a, b) <= 0)
148 argz = PI * 0.25;
149 else
150 argz = PI * 0.5;
151 }
152
153 if (argz == PI)
154 *n = 0;
155 else
156 *n = choose_n(log2z, argz, digamma, prec);
157 }
158 }
159
160
161 void
162 acb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
163 const acb_t z, int use_reflect, int digamma, slong prec)
164 {
165 const arf_struct * a = arb_midref(acb_realref(z));
166 const arf_struct * b = arb_midref(acb_imagref(z));
167
168 if (!arf_is_finite(a) || !arf_is_finite(b))
169 {
170 *reflect = *r = *n = 0;
171 }
172 else if (arf_cmpabs_2exp_si(a, 40) > 0 || arf_cmpabs_2exp_si(b, 40) > 0)
173 {
174 choose_large(reflect, r, n, a, b, use_reflect, digamma, prec);
175 }
176 else
177 {
178 choose_small(reflect, r, n,
179 arf_get_d(a, ARF_RND_UP),
180 arf_get_d(b, ARF_RND_UP), use_reflect, digamma, prec);
181 }
182 }
183
184 void
185 arb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
186 const arb_t x, int use_reflect, int digamma, slong prec)
187 {
188 const arf_struct * a = arb_midref(x);
189
190 if (arf_is_inf(a) || arf_is_nan(a))
191 {
192 *reflect = *r = *n = 0;
193 }
194 else if (arf_cmpabs_2exp_si(a, 40) > 0)
195 {
196 arf_t b;
197 arf_init(b);
198 choose_large(reflect, r, n, a, b, use_reflect, digamma, prec);
199 arf_clear(b);
200 }
201 else
202 {
203 choose_small(reflect, r, n,
204 arf_get_d(a, ARF_RND_UP), 0.0, use_reflect, digamma, prec);
205 }
206 }
207
208 void arb_gamma_stirling_bound(mag_ptr err, const arb_t x, slong k0, slong knum, slong n);
209
210 void
211 arb_hypgeom_gamma_stirling_inner(arb_t s, const arb_t z, slong N, slong prec)
212 {
213 arb_t logz, t;
214 mag_t err;
215
216 mag_init(err);
217 arb_init(t);
218 arb_init(logz);
219
220 arb_gamma_stirling_bound(err, z, 0, 1, N);
221
222 /* t = (z-0.5)*log(z) - z + log(2*pi)/2 */
223 arb_log(logz, z, prec);
224 arb_one(t);
225 arb_mul_2exp_si(t, t, -1);
226 arb_sub(t, z, t, prec);
227 arb_mul(t, logz, t, prec);
228 arb_sub(t, t, z, prec);
229 arb_const_log_sqrt2pi(logz, prec);
230 arb_add(t, t, logz, prec);
231
232 /* sum part */
233 if (prec <= 128 || (prec <= 768 && N <= 40) || (prec <= 2048 && N <= 16))
234 arb_hypgeom_gamma_stirling_sum_horner(s, z, N, prec);
235 else
236 arb_hypgeom_gamma_stirling_sum_improved(s, z, N, 0, prec);
237
238 arb_add(s, s, t, prec);
239
240 mag_add(arb_radref(s), arb_radref(s), err);
241
242 arb_clear(t);
243 arb_clear(logz);
244 mag_clear(err);
245 }
246
247 int
248 arb_hypgeom_gamma_exact(arb_t res, const arb_t x, int reciprocal, slong prec)
249 {
250 if (arb_is_exact(x))
251 {
252 const arf_struct * mid = arb_midref(x);
253
254 if (arf_is_special(mid))
255 {
256 if (!reciprocal && arf_is_pos_inf(mid))
257 arb_set(res, x);
258 else if (arf_is_nan(mid) || arf_is_neg_inf(mid) || !reciprocal)
259 arb_indeterminate(res);
260 else
261 arb_zero(res);
262 return 1;
263 }
264 else if (reciprocal && arf_is_int(mid) && arf_sgn(mid) < 0)
265 {
266 arb_zero(res);
267 return 1;
268 }
269 else
270 {
271 /* todo: cutoffs for larger denominators */
272
273 /* fast gamma(n), gamma(n/2) or gamma(n/4), ... */
274 if (arf_cmpabs_2exp_si(mid, prec) < 0 &&
275 (arf_is_int_2exp_si(mid, -2) || (prec > 1000 && arf_is_int_2exp_si(mid, -prec / 50))))
276 {
277 fmpq_t a;
278 fmpq_init(a);
279 arf_get_fmpq(a, mid);
280 arb_gamma_fmpq(res, a, prec + 2 * reciprocal);
281 if (reciprocal)
282 arb_inv(res, res, prec);
283 fmpq_clear(a);
284 return 1;
285 }
286 }
287 }
288
289 return 0;
290 }
291
292 void
293 arb_hypgeom_gamma_stirling(arb_t y, const arb_t x, int reciprocal, slong prec)
294 {
295 int reflect;
296 slong r, n, wp;
297 arb_t t, u, v;
298 double acc;
299
300 /* todo: for large x (if exact or accurate enough), increase precision */
301 acc = arb_rel_accuracy_bits(x);
302 acc = FLINT_MAX(acc, 0);
303 wp = FLINT_MIN(prec, acc + 20);
304 wp = FLINT_MAX(wp, 2);
305 wp = wp + FLINT_BIT_COUNT(wp);
306
307 if (acc < 3) /* try to avoid divisions blowing up */
308 {
309 if (arf_cmp_d(arb_midref(x), -0.5) < 0)
310 {
311 reflect = 1;
312 r = 0;
313 }
314 else if (arf_cmp_si(arb_midref(x), 1) < 0)
315 {
316 reflect = 0;
317 r = 1;
318 }
319 else
320 {
321 reflect = 0;
322 r = 0;
323 }
324
325 n = 1;
326 }
327 else
328 {
329 arb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 0, wp);
330 }
331
332 arb_init(t);
333 arb_init(u);
334 arb_init(v);
335
336 if (reflect)
337 {
338 arb_sub_ui(t, x, 1, wp);
339 arb_neg(t, t);
340 arb_hypgeom_rising_ui_rec(u, t, r, wp);
341 arb_const_pi(v, wp);
342 arb_mul(u, u, v, wp);
343 arb_add_ui(t, t, r, wp);
344 arb_hypgeom_gamma_stirling_inner(v, t, n, wp);
345
346 if (reciprocal)
347 {
348 /* rgamma(x) = gamma(1-x+r) sin(pi x) / ((rf(1-x, r) * pi) */
349 arb_exp(v, v, wp);
350 arb_sin_pi(t, x, wp);
351 arb_mul(v, v, t, wp);
352 arb_mul(y, u, v, wp);
353 arb_div(y, v, u, prec);
354 }
355 else
356 {
357 /* gamma(x) = (rf(1-x, r) * pi) rgamma(1-x+r) csc(pi x) */
358 arb_neg(v, v);
359 arb_exp(v, v, wp);
360 arb_csc_pi(t, x, wp);
361 arb_mul(v, v, t, wp);
362 arb_mul(y, v, u, prec);
363 }
364 }
365 else
366 {
367 arb_add_ui(t, x, r, wp);
368 arb_hypgeom_gamma_stirling_inner(u, t, n, wp);
369
370 if (reciprocal)
371 {
372 /* rgamma(x) = rf(x,r) rgamma(x+r) */
373 arb_neg(u, u);
374 arb_exp(u, u, prec);
375 arb_hypgeom_rising_ui_rec(v, x, r, wp);
376 arb_mul(y, v, u, prec);
377 }
378 else
379 {
380 /* gamma(x) = gamma(x+r) / rf(x,r) */
381 arb_exp(u, u, prec);
382 arb_hypgeom_rising_ui_rec(v, x, r, wp);
383 arb_div(y, u, v, prec);
384 }
385 }
386
387 arb_clear(t);
388 arb_clear(u);
389 arb_clear(v);
390 }
391
392 void
393 arb_hypgeom_gamma(arb_t y, const arb_t x, slong prec)
394 {
395 if (arb_hypgeom_gamma_exact(y, x, 0, prec))
396 return;
397
398 if (arb_hypgeom_gamma_taylor(y, x, 0, prec))
399 return;
400
401 arb_hypgeom_gamma_stirling(y, x, 0, prec);
402 }
403
404 void
405 arb_hypgeom_rgamma(arb_t y, const arb_t x, slong prec)
406 {
407 if (arb_hypgeom_gamma_exact(y, x, 1, prec))
408 return;
409
410 if (arb_hypgeom_gamma_taylor(y, x, 1, prec))
411 return;
412
413 arb_hypgeom_gamma_stirling(y, x, 1, prec);
414 }
415
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12 #include "hypgeom.h"
13
14 void
15 arb_gamma_const_1_3_eval(arb_t s, slong prec)
16 {
17 hypgeom_t series;
18 arb_t t, u;
19 slong wp = prec + 4 + 2 * FLINT_BIT_COUNT(prec);
20
21 arb_init(t);
22 arb_init(u);
23
24 hypgeom_init(series);
25
26 fmpz_poly_set_str(series->A, "1 1");
27 fmpz_poly_set_str(series->B, "1 1");
28 fmpz_poly_set_str(series->P, "4 5 -46 108 -72");
29 fmpz_poly_set_str(series->Q, "4 0 0 0 512000");
30
31 prec += FLINT_CLOG2(prec);
32
33 arb_hypgeom_infsum(s, t, series, wp, wp);
34
35 arb_sqrt_ui(u, 10, wp);
36 arb_mul(t, t, u, wp);
37
38 arb_const_pi(u, wp);
39 arb_pow_ui(u, u, 4, wp);
40 arb_mul_ui(u, u, 12, wp);
41 arb_mul(s, s, u, wp);
42
43 arb_div(s, s, t, wp);
44 arb_root_ui(s, s, 2, wp);
45 arb_root_ui(s, s, 3, prec);
46
47 hypgeom_clear(series);
48 arb_clear(t);
49 arb_clear(u);
50 }
51
52 ARB_DEF_CACHED_CONSTANT(arb_gamma_const_1_3, arb_gamma_const_1_3_eval)
53
54 void
55 arb_gamma_const_1_4_eval(arb_t x, slong prec)
56 {
57 arb_t t, u;
58 slong wp = prec + 4 + 2 * FLINT_BIT_COUNT(prec);
59
60 arb_init(t);
61 arb_init(u);
62
63 arb_one(t);
64 arb_sqrt_ui(u, 2, wp);
65 arb_agm(x, t, u, wp);
66
67 arb_const_pi(t, wp);
68 arb_mul_2exp_si(t, t, 1);
69 arb_sqrt(u, t, wp);
70 arb_mul(u, u, t, wp);
71
72 arb_div(x, u, x, wp);
73 arb_sqrt(x, x, wp);
74
75 arb_clear(t);
76 arb_clear(u);
77 }
78
79 ARB_DEF_CACHED_CONSTANT(arb_gamma_const_1_4, arb_gamma_const_1_4_eval)
80
81
82 void arb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n, const arb_t x, int use_reflect, int digamma, slong prec);
83 void arb_hypgeom_gamma_stirling_inner(arb_t s, const arb_t z, slong N, slong prec);
84
85 void
86 arb_hypgeom_gamma_fmpq_stirling(arb_t y, const fmpq_t a, slong prec)
87 {
88 int reflect;
89 slong r, n, wp;
90 arb_t x, t, u, v;
91
92 wp = prec + FLINT_BIT_COUNT(prec);
93
94 arb_init(x);
95 arb_init(t);
96 arb_init(u);
97 arb_init(v);
98
99 arb_set_fmpq(x, a, wp);
100 arb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, x, 1, 0, wp);
101
102 if (reflect)
103 {
104 /* gamma(x) = (rf(1-x, r) * pi) / (gamma(1-x+r) sin(pi x)) */
105 fmpq_t b;
106 fmpq_init(b);
107 fmpz_sub(fmpq_numref(b), fmpq_denref(a), fmpq_numref(a));
108 fmpz_set(fmpq_denref(b), fmpq_denref(a));
109 arb_rising_fmpq_ui(u, b, r, wp);
110 fmpq_clear(b);
111 arb_const_pi(v, wp);
112 arb_mul(u, u, v, wp);
113 arb_sub_ui(t, x, 1, wp);
114 arb_neg(t, t);
115 arb_add_ui(t, t, r, wp);
116 arb_hypgeom_gamma_stirling_inner(v, t, n, wp);
117 arb_exp(v, v, wp);
118 arb_sin_pi_fmpq(t, a, wp);
119 arb_mul(v, v, t, wp);
120 }
121 else
122 {
123 /* gamma(x) = gamma(x+r) / rf(x,r) */
124 arb_add_ui(t, x, r, wp);
125 arb_hypgeom_gamma_stirling_inner(u, t, n, wp);
126 arb_exp(u, u, prec);
127 arb_rising_fmpq_ui(v, a, r, wp);
128 }
129
130 arb_div(y, u, v, prec);
131
132 arb_clear(t);
133 arb_clear(u);
134 arb_clear(v);
135 arb_clear(x);
136 }
137
138 void
139 arb_hypgeom_gamma_small_frac(arb_t y, unsigned int p, unsigned int q, slong prec)
140 {
141 slong wp = prec + 4;
142
143 if (q == 1)
144 {
145 arb_one(y);
146 }
147 else if (q == 2) /* p = 1 */
148 {
149 arb_const_sqrt_pi(y, prec);
150 }
151 else if (q == 3)
152 {
153 if (p == 1)
154 {
155 arb_gamma_const_1_3(y, prec);
156 }
157 else /* p = 2 */
158 {
159 arb_t t;
160 arb_init(t);
161 arb_gamma_const_1_3(y, wp);
162 arb_sqrt_ui(t, 3, wp);
163 arb_mul(y, y, t, wp);
164 arb_const_pi(t, wp);
165 arb_div(y, t, y, prec);
166 arb_mul_2exp_si(y, y, 1);
167 arb_clear(t);
168 }
169 }
170 else if (q == 4)
171 {
172 if (p == 1)
173 {
174 arb_gamma_const_1_4(y, prec);
175 }
176 else /* p = 3 */
177 {
178 arb_t t;
179 arb_init(t);
180 arb_sqrt_ui(y, 2, wp);
181 arb_const_pi(t, wp);
182 arb_mul(y, y, t, wp);
183 arb_gamma_const_1_4(t, wp);
184 arb_div(y, y, t, prec);
185 arb_clear(t);
186 }
187 }
188 else if (q == 6)
189 {
190 arb_t t;
191 arb_init(t);
192 arb_const_pi(t, wp);
193 arb_div_ui(t, t, 3, wp);
194 arb_sqrt(t, t, wp);
195 arb_set_ui(y, 2);
196 arb_root_ui(y, y, 3, wp);
197 arb_mul(t, t, y, wp);
198 arb_gamma_const_1_3(y, wp);
199 arb_mul(y, y, y, prec);
200
201 if (p == 1)
202 {
203 arb_div(y, y, t, prec);
204 }
205 else /* p = 5 */
206 {
207 arb_div(y, t, y, wp);
208 arb_const_pi(t, wp);
209 arb_mul(y, y, t, prec);
210 arb_mul_2exp_si(y, y, 1);
211 }
212
213 arb_clear(t);
214 }
215 else
216 {
217 flint_printf("small fraction not implemented!\n");
218 flint_abort();
219 }
220 }
221
222 slong _arb_compute_bs_exponents(slong * tab, slong n);
223 slong _arb_get_exp_pos(const slong * tab, slong step);
224
225 static void
226 bsplit2(arb_t P, arb_t Q, const fmpz_t zp, const fmpz_t zq,
227 const slong * xexp, arb_srcptr xpow,
228 ulong N, slong a, slong b, int cont, slong prec)
229 {
230 if (b - a == 1)
231 {
232 fmpz_t t;
233 fmpz_init(t);
234 fmpz_set(t, zp);
235 fmpz_addmul_ui(t, zq, a + 1);
236 arb_set_fmpz(P, t);
237 arb_set(Q, P);
238 fmpz_clear(t);
239 }
240 else
241 {
242 arb_t Pb, Qb;
243 slong step, i, m;
244
245 arb_init(Pb);
246 arb_init(Qb);
247
248 step = (b - a) / 2;
249 m = a + step;
250
251 bsplit2(P, Q, zp, zq, xexp, xpow, N, a, m, 1, prec);
252 bsplit2(Pb, Qb, zp, zq, xexp, xpow, N, m, b, 1, prec);
253
254 arb_mul(P, P, Pb, prec);
255 arb_mul(Q, Q, Pb, prec);
256
257 i = (step == 1) ? 0 : _arb_get_exp_pos(xexp, step);
258 arb_addmul(Q, Qb, xpow + i, prec);
259
260 arb_clear(Pb);
261 arb_clear(Qb);
262 }
263 }
264
265 static void
266 bsplit3(arb_t P, arb_t Q, const fmpz_t zp, const fmpz_t zq,
267 const slong * xexp, arb_srcptr xpow,
268 ulong N, slong a, slong b, int cont, slong prec)
269 {
270 if (b - a == 1)
271 {
272 fmpz_t t;
273 fmpz_init(t);
274 arb_set(P, xpow + 0); /* N zq */
275 fmpz_set(t, zp);
276 fmpz_submul_ui(t, zq, a + 1); /* zp - (a + 1) zq */
277 arb_set_fmpz(Q, t);
278 fmpz_clear(t);
279 }
280 else
281 {
282 arb_t Pb, Qb;
283 slong step, i, m;
284
285 arb_init(Pb);
286 arb_init(Qb);
287
288 step = (b - a) / 2;
289 m = a + step;
290
291 bsplit3(P, Q, zp, zq, xexp, xpow, N, a, m, 1, prec);
292 bsplit3(Pb, Qb, zp, zq, xexp, xpow, N, m, b, 1, prec);
293
294 i = _arb_get_exp_pos(xexp, m - a);
295
296 arb_mul(P, P, xpow + i, prec);
297 if (b - m != m - a)
298 arb_mul(P, P, xpow + 0, prec);
299
300 arb_addmul(P, Q, Pb, prec);
301
302 if (cont)
303 {
304 arb_mul(Q, Q, Qb, prec);
305 }
306 else
307 {
308 i = _arb_get_exp_pos(xexp, m - a);
309
310 arb_mul(Q, xpow + i, xpow + i, prec);
311 if (b - m != m - a)
312 arb_mul(Q, Q, xpow + 0, prec);
313 }
314
315 arb_clear(Pb);
316 arb_clear(Qb);
317 }
318 }
319
320 double d_lambertw_branch1(double x);
321
322 static ulong
323 more_trailing_zeros(ulong N)
324 {
325 ulong bc, N2;
326
327 bc = FLINT_BIT_COUNT(N);
328
329 if (bc >= 8)
330 {
331 N2 = (N >> (bc - 5)) << (bc - 5);
332 N2 += ((N2 != N) << (bc - 5));
333 return N2;
334 }
335 else
336 {
337 return N;
338 }
339 }
340
341 #define C_LOG2 0.69314718055994530942
342 #define C_EXP1 2.7182818284590452354
343
344 static void
345 build_bsplit_power_table(arb_ptr xpow, const slong * xexp, slong len, slong prec)
346 {
347 slong i;
348
349 for (i = 1; i < len; i++)
350 {
351 if (xexp[i] == 2 * xexp[i-1])
352 {
353 arb_mul(xpow + i, xpow + i - 1, xpow + i - 1, prec);
354 }
355 else if (xexp[i] == 2 * xexp[i-2]) /* prefer squaring if possible */
356 {
357 arb_mul(xpow + i, xpow + i - 2, xpow + i - 2, prec);
358 }
359 else if (xexp[i] == 2 * xexp[i-1] + 1)
360 {
361 arb_mul(xpow + i, xpow + i - 1, xpow + i - 1, prec);
362 arb_mul(xpow + i, xpow + i, xpow, prec);
363 }
364 else if (xexp[i] == 2 * xexp[i-2] + 1)
365 {
366 arb_mul(xpow + i, xpow + i - 2, xpow + i - 2, prec);
367 arb_mul(xpow + i, xpow + i, xpow, prec);
368 }
369 else
370 {
371 flint_printf("power table has the wrong structure!\n");
372 flint_abort();
373 }
374 }
375 }
376
377 /* assumes z in [1, 2] */
378 static void
379 arb_hypgeom_gamma_fmpq_general_off1(arb_t res, const fmpq_t z, slong prec)
380 {
381 slong wp, N, n, n2, length, length2, wp2;
382 double alpha;
383 arb_t P, Q;
384 slong *xexp, *xexp2;
385 arb_ptr xpow;
386 mag_t err, err2;
387
388 wp = prec + 30;
389
390 alpha = 0.52; /* tuning parameter between 0.5 and 1 */
391
392 N = alpha * C_LOG2 * wp;
393 N = more_trailing_zeros(N);
394 alpha = N / (C_LOG2 * wp);
395
396 /* Terms in convergent series */
397 n = (1 - alpha) / d_lambertw((1 - alpha) / (alpha * C_EXP1)) * C_LOG2 * wp;
398
399 /* Precision and terms in asymptotic series */
400 wp2 = wp * (1 - alpha);
401 wp2 = FLINT_MAX(wp2, 30);
402 n2 = (alpha - 1) / d_lambertw_branch1((alpha - 1) / (alpha * C_EXP1)) * C_LOG2 * wp;
403 n2 = FLINT_MAX(n2, 2); /* binary splitting correctness */
404
405 mag_init(err);
406 mag_init(err2);
407 arb_init(P);
408 arb_init(Q);
409
410 /* compute the powers of x = N*zq that will appear (at least x^1) */
411 xexp = flint_calloc(2 * FLINT_BITS, sizeof(slong));
412 xexp2 = flint_calloc(2 * FLINT_BITS, sizeof(slong));
413
414 length = _arb_compute_bs_exponents(xexp, n);
415 length2 = _arb_compute_bs_exponents(xexp2, n2);
416
417 xpow = _arb_vec_init(FLINT_MAX(length, length2));
418
419 arb_set_fmpz(xpow + 0, fmpq_denref(z));
420 arb_mul_ui(xpow + 0, xpow + 0, N, wp);
421
422 build_bsplit_power_table(xpow, xexp, length, wp);
423
424 /* 1F1(1, 1+z, N) */
425 bsplit2(P, Q, fmpq_numref(z), fmpq_denref(z), xexp, xpow, N, 0, n, 0, wp);
426 arb_div(P, Q, P, wp);
427
428 /* Convergent series error bound: N^n / n! (1 + (N/n) + ...) */
429 mag_set_ui(err, N);
430 mag_pow_ui(err, err, n);
431 mag_rfac_ui(err2, n);
432 mag_mul(err, err, err2);
433 mag_set_ui(err2, N);
434 mag_div_ui(err2, err2, n);
435 mag_geom_series(err2, err2, 0);
436 mag_mul(err, err, err2);
437 arb_add_error_mag(P, err);
438
439 /* divide 1F1 by z */
440 arb_mul_fmpz(P, P, fmpq_denref(z), wp);
441 arb_div_fmpz(P, P, fmpq_numref(z), wp);
442 arb_swap(res, P);
443
444 build_bsplit_power_table(xpow, xexp2, length2, wp2);
445
446 bsplit3(P, Q, fmpq_numref(z), fmpq_denref(z), xexp2, xpow, N, 0, n2, 0, wp2);
447 arb_div(P, P, Q, wp2);
448
449 /* 2F0 error bound (bounded by first omitted term) */
450 mag_fac_ui(err, n2);
451 mag_set_ui_lower(err2, N);
452 mag_pow_ui_lower(err2, err2, n2);
453 mag_div(err, err, err2);
454 arb_add_error_mag(P, err);
455
456 /* N^z * exp(-N) * (1F1/z + 2F0/N) */
457 arb_div_ui(P, P, N, wp2);
458
459 arb_add(res, res, P, wp);
460 arb_set_ui(Q, N);
461 arb_pow_fmpq(Q, Q, z, wp);
462 arb_mul(res, res, Q, wp);
463
464 arb_set_si(Q, -N);
465 arb_exp(Q, Q, wp);
466 arb_mul(res, res, Q, wp);
467
468 _arb_vec_clear(xpow, FLINT_MAX(length, length2));
469 flint_free(xexp);
470 flint_free(xexp2);
471
472 arb_clear(P);
473 arb_clear(Q);
474 mag_clear(err);
475 mag_clear(err2);
476 }
477
478 /* assumes z in (0, 1] */
479 void
480 arb_hypgeom_gamma_fmpq_hyp(arb_t res, const fmpq_t z, slong prec)
481 {
482 fmpq_t t;
483 fmpq_init(t);
484 fmpq_add_ui(t, z, 1);
485 arb_hypgeom_gamma_fmpq_general_off1(res, t, prec);
486 arb_mul_fmpz(res, res, fmpq_denref(z), prec + 30);
487 arb_div_fmpz(res, res, fmpq_numref(z), prec);
488 fmpq_clear(t);
489 }
490
491 void
492 arb_hypgeom_gamma_fmpq_outward(arb_t y, const fmpq_t x, slong prec)
493 {
494 fmpq_t a;
495 fmpz_t n;
496 fmpz p, q;
497 slong m;
498 arb_t t, u;
499
500 fmpq_init(a);
501 fmpz_init(n);
502 arb_init(t);
503 arb_init(u);
504
505 /* write x = a + n with 0 < a <= 1 */
506 if (fmpz_is_one(fmpq_denref(x)))
507 {
508 fmpq_one(a);
509 fmpz_sub_ui(n, fmpq_numref(x), 1);
510 }
511 else
512 {
513 fmpz_fdiv_qr(n, fmpq_numref(a), fmpq_numref(x), fmpq_denref(x));
514 fmpz_set(fmpq_denref(a), fmpq_denref(x));
515 }
516
517 if (!fmpz_fits_si(n))
518 {
519 flint_printf("gamma: too large fmpq to reduce to 0!\n");
520 flint_abort();
521 }
522
523 m = fmpz_get_si(n);
524
525 /* evaluate gamma(a) */
526 p = *fmpq_numref(a);
527 q = *fmpq_denref(a);
528
529 if (q == 1 || q == 2 || q == 3 || q == 4 || q == 6)
530 {
531 arb_hypgeom_gamma_small_frac(t, p, q, prec);
532 }
533 else
534 {
535 arb_hypgeom_gamma_fmpq_hyp(t, a, prec);
536 }
537
538 /* argument reduction */
539 if (m >= 0)
540 {
541 arb_rising_fmpq_ui(u, a, m, prec);
542 arb_mul(y, t, u, prec);
543 }
544 else
545 {
546 arb_rising_fmpq_ui(u, x, -m, prec);
547 arb_div(y, t, u, prec);
548 }
549
550 fmpq_clear(a);
551 fmpz_clear(n);
552 arb_clear(t);
553 arb_clear(u);
554 }
555
556 int
557 arb_hypgeom_gamma_fmpq_taylor(arb_t y, const fmpq_t x, slong prec)
558 {
559 fmpq_t a;
560 fmpz_t n;
561 slong m;
562 arb_t t;
563 int success;
564
565 fmpq_init(a);
566 fmpz_init(n);
567 arb_init(t);
568
569 success = 1;
570
571 /* write x = a + n with 0 < a <= 1 */
572 if (fmpz_is_one(fmpq_denref(x)))
573 {
574 fmpq_one(a);
575 fmpz_sub_ui(n, fmpq_numref(x), 1);
576 }
577 else
578 {
579 fmpz_fdiv_qr(n, fmpq_numref(a), fmpq_numref(x), fmpq_denref(x));
580 fmpz_set(fmpq_denref(a), fmpq_denref(x));
581 }
582
583 if (!fmpz_fits_si(n))
584 {
585 success = 0;
586 goto cleanup;
587 }
588
589 m = fmpz_get_si(n);
590
591 if (m < -(40 + (prec - 40) / 4))
592 {
593 success = 0;
594 goto cleanup;
595 }
596
597 if (m > 70 + (prec - 40) / 8)
598 {
599 success = 0;
600 goto cleanup;
601 }
602
603 arb_set_fmpq(t, a, prec + 4);
604 success = arb_hypgeom_gamma_taylor(t, t, 0, prec);
605
606 if (success)
607 {
608 arb_t u;
609 arb_init(u);
610
611 if (m >= 0)
612 {
613 arb_rising_fmpq_ui(u, a, m, prec);
614 arb_mul(y, t, u, prec);
615 }
616 else
617 {
618 arb_rising_fmpq_ui(u, x, -m, prec);
619 arb_div(y, t, u, prec);
620 }
621
622 arb_clear(u);
623 }
624
625 cleanup:
626 fmpq_clear(a);
627 fmpz_clear(n);
628 arb_clear(t);
629
630 return success;
631 }
632
633 void
634 arb_hypgeom_gamma_fmpq(arb_t y, const fmpq_t x, slong prec)
635 {
636 fmpz p, q;
637
638 p = *fmpq_numref(x);
639 q = *fmpq_denref(x);
640
641 if ((q == 1 || q == 2 || q == 3 || q == 4 || q == 6) && !COEFF_IS_MPZ(p))
642 {
643 if (q == 1)
644 {
645 if (p <= 0)
646 {
647 arb_indeterminate(y);
648 return;
649 }
650
651 if (p < 1200 || 1.44265 * (p*log(p) - p) < 15.0 * prec)
652 {
653 fmpz_t t;
654 fmpz_init(t);
655 fmpz_fac_ui(t, p - 1);
656 arb_set_round_fmpz(y, t, prec);
657 fmpz_clear(t);
658 return;
659 }
660 }
661
662 p = FLINT_ABS(p);
663
664 if (p < q * 500.0 || p < q * (500.0 + 0.1 * prec * sqrt(prec)))
665 {
666 arb_hypgeom_gamma_fmpq_outward(y, x, prec);
667 return;
668 }
669 }
670
671 if (q != 1 && prec > 7000 + 300 * fmpz_bits(fmpq_denref(x)) &&
672 (slong) fmpz_bits(fmpq_numref(x)) - (slong) fmpz_bits(fmpq_denref(x)) < FLINT_BITS &&
673 fabs(fmpq_get_d(x)) < 0.03 * prec * sqrt(prec))
674 {
675 arb_hypgeom_gamma_fmpq_outward(y, x, prec);
676 return;
677 }
678
679 if (fmpz_bits(fmpq_denref(x)) > 0.1 * prec || fmpz_bits(fmpq_numref(x)) > 0.1 * prec)
680 {
681 slong wp;
682
683 wp = (slong) fmpz_bits(fmpq_numref(x)) - (slong) fmpz_bits(fmpq_denref(x));
684 wp = FLINT_MAX(wp, 0);
685 wp = FLINT_MIN(wp, 4 * prec);
686 wp += prec;
687
688 arb_set_fmpq(y, x, wp);
689
690 if (!arb_hypgeom_gamma_taylor(y, y, 0, prec))
691 arb_hypgeom_gamma_stirling(y, y, 0, prec);
692
693 return;
694 }
695
696 if (arb_hypgeom_gamma_fmpq_taylor(y, x, prec))
697 return;
698
699 arb_hypgeom_gamma_fmpq_stirling(y, x, prec);
700 }
701
702 void
703 arb_hypgeom_gamma_fmpz(arb_t y, const fmpz_t x, slong prec)
704 {
705 fmpq_t t;
706 *fmpq_numref(t) = *x;
707 *fmpq_denref(t) = WORD(1);
708 arb_hypgeom_gamma_fmpq(y, t, prec);
709 }
710
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 void arb_gamma_stirling_coeff(arb_t b, ulong k, int digamma, slong prec);
14
15 void
16 arb_hypgeom_gamma_stirling_sum_horner(arb_t s, const arb_t z, slong N, slong prec)
17 {
18 arb_t b, t, zinv, w;
19 mag_t zinv_mag;
20 slong n, term_mag, term_prec;
21 slong * term_mags;
22
23 if (N <= 1)
24 {
25 arb_zero(s);
26 return;
27 }
28
29 arb_init(b);
30 arb_init(t);
31 arb_init(zinv);
32 arb_init(w);
33 mag_init(zinv_mag);
34
35 arb_inv(zinv, z, prec);
36 arb_mul(w, zinv, zinv, prec);
37
38 arb_get_mag(zinv_mag, zinv);
39 term_mags = flint_malloc(sizeof(ulong) * N);
40
41 _arb_hypgeom_gamma_stirling_term_bounds(term_mags, zinv_mag, N);
42
43 arb_zero(s);
44
45 for (n = N - 1; n >= 1; n--)
46 {
47 term_mag = term_mags[n];
48 term_prec = prec + term_mag;
49 term_prec = FLINT_MIN(term_prec, prec);
50 term_prec = FLINT_MAX(term_prec, 10);
51
52 if (prec - term_prec > 200)
53 {
54 arb_set_round(t, w, term_prec);
55 arb_mul(s, s, t, term_prec);
56 }
57 else
58 arb_mul(s, s, w, term_prec);
59
60 arb_gamma_stirling_coeff(b, n, 0, term_prec);
61 arb_add(s, s, b, term_prec);
62 }
63
64 arb_mul(s, s, zinv, prec);
65
66 flint_free(term_mags);
67
68 arb_clear(t);
69 arb_clear(b);
70 arb_clear(zinv);
71 arb_clear(w);
72 mag_clear(zinv_mag);
73 }
74
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12 #include "bernoulli.h"
13
14 void
15 arb_hypgeom_gamma_stirling_sum_improved(arb_t s, const arb_t z, slong N, slong K, slong prec)
16 {
17 arb_t b, t, zinv, w, u, S2, S3, S4;
18 mag_t zinv_mag, err;
19 slong n, term_mag, term_prec;
20 slong * term_mags;
21 slong i, j, k, M;
22 slong * Mk;
23 arb_ptr upow, ukpow;
24 slong kodd, kpow_exp, wp;
25 fmpz_t kpow;
26 slong m;
27
28 if (N <= 1)
29 {
30 arb_zero(s);
31 return;
32 }
33
34 if (N == 2)
35 {
36 arb_mul_ui(s, z, 12, prec);
37 arb_inv(s, s, prec);
38 return;
39 }
40
41 if (K == 0)
42 {
43 if (prec <= 128)
44 K = 1;
45 else if (prec <= 1024)
46 K = 2;
47 else
48 {
49 K = 4 + 0.1 * sqrt(FLINT_MAX(prec - 4096, 0));
50 K = FLINT_MIN(K, 100);
51 }
52 }
53
54 arb_init(b);
55 arb_init(t);
56 arb_init(zinv);
57 arb_init(w);
58 arb_init(u);
59 arb_init(S2);
60 arb_init(S3);
61 arb_init(S4);
62 mag_init(zinv_mag);
63 mag_init(err);
64
65 arb_inv(zinv, z, prec);
66 arb_mul(w, zinv, zinv, prec);
67
68 arb_get_mag(zinv_mag, zinv);
69
70 term_mags = flint_malloc(sizeof(ulong) * (N + 1));
71
72 /* Avoid possible overflow. (This case is not interesting to handle well,
73 but we need to handle it.) */
74 if (mag_cmp_2exp_si(zinv_mag, 10) > 0)
75 K = 1;
76
77 /* Avoid possible underflow. */
78 if (mag_cmp_2exp_si(zinv_mag, -100000) < 0)
79 mag_set_ui_2exp_si(zinv_mag, 1, -100000);
80
81 _arb_hypgeom_gamma_stirling_term_bounds(term_mags, zinv_mag, N + 1);
82
83 /* We will assume below that term_mags is nonincreasing */
84 for (n = N - 2; n >= 1; n--)
85 {
86 if (term_mags[n] < term_mags[n + 1])
87 term_mags[n] = term_mags[n + 1];
88 }
89
90 Mk = NULL;
91
92 if (K > 1)
93 {
94 Mk = flint_malloc(sizeof(slong) * (K + 1));
95 Mk[0] = Mk[1] = N;
96
97 for (k = 2; k <= K; k++)
98 {
99 double log2_k;
100
101 Mk[k] = N;
102
103 log2_k = log(k) * (1.0 / 0.693147180559945309);
104
105 while (Mk[k] > 2)
106 {
107 slong err, Mnew;
108
109 Mnew = Mk[k] - 1;
110 err = term_mags[Mnew] - log2_k * (2 * Mnew) + FLINT_BIT_COUNT(N - Mnew);
111
112 if (err < -prec)
113 Mk[k] = Mnew;
114 else
115 break;
116 }
117 }
118
119 /* We will assume that Mk is nonincreasing. */
120 for (k = 2; k <= K; k++)
121 {
122 if (Mk[k] > Mk[k - 1])
123 Mk[k] = Mk[k - 1];
124 }
125
126 while (K >= 2 && Mk[K] == Mk[K - 1])
127 K--;
128
129 M = Mk[K];
130
131 mag_hurwitz_zeta_uiui(err, 2 * M, K);
132 mag_mul_ui(err, err, N - M);
133 mag_mul_2exp_si(err, err, term_mags[M]);
134
135 for (k = 1; k < K; k++)
136 {
137 mag_t t;
138 mag_init(t);
139 mag_set_ui_lower(t, k);
140 mag_inv(t, t);
141 mag_pow_ui(t, t, 2 * Mk[k]);
142 mag_mul_ui(t, t, N - Mk[k]);
143 mag_mul_2exp_si(t, t, term_mags[Mk[k]]);
144 mag_add(err, err, t);
145 mag_clear(t);
146 }
147 }
148 else
149 {
150 M = N;
151 }
152
153 m = sqrt(N - M);
154 m = FLINT_MAX(m, 1);
155
156 /* S3 precision */
157 wp = prec + term_mags[M];
158 wp = FLINT_MIN(wp, prec);
159 wp = FLINT_MAX(wp, 10);
160
161 arb_zero(S3);
162
163 /* todo: could avoid one mul + div with precomputation here */
164 /* u = -1 / (2 pi z)^2 */
165 arb_const_pi(u, wp);
166 arb_mul(u, u, z, wp);
167 arb_mul_2exp_si(u, u, 1);
168 arb_mul(u, u, u, wp);
169 arb_inv(u, u, wp);
170 arb_neg(u, u);
171
172 fmpz_init(kpow);
173 upow = _arb_vec_init(m + 1);
174 ukpow = _arb_vec_init(m + 1);
175
176 _arb_vec_set_powers(upow, u, m + 1, wp);
177
178 for (kodd = 1; kodd < K; kodd += 2)
179 {
180 for (k = kodd; k < K; k *= 2)
181 {
182 if (k == 1)
183 {
184 _arb_vec_set(ukpow, upow, m + 1);
185 fmpz_one(kpow);
186 kpow_exp = 0;
187 }
188 else if (k == kodd)
189 {
190 arb_set(ukpow + 0, upow + 0);
191 for (j = 1; j <= FLINT_MIN(Mk[k] - M - 1, m); j++)
192 {
193 if (j == 1)
194 fmpz_set_ui(kpow, k * k);
195 else
196 fmpz_mul_ui(kpow, kpow, k * k);
197 arb_div_fmpz(ukpow + j, upow + j, kpow, wp);
198 }
199
200 /* set kpow = k^(2M) */
201 fmpz_ui_pow_ui(kpow, k * k, M);
202 kpow_exp = 0;
203 }
204 else
205 {
206 /* compute x / k^(2j) given x / (k/2)^(2j) */
207 for (j = 1; j <= FLINT_MIN(Mk[k] - M - 1, m); j++)
208 arb_mul_2exp_si(ukpow + j, ukpow + j, -2 * j);
209 kpow_exp += 2 * M;
210 }
211
212 arb_zero(S4);
213
214 for (n = Mk[k] - 1; n >= M; n--)
215 {
216 i = n - M;
217
218 term_prec = prec + term_mags[n];
219 term_prec = FLINT_MIN(wp, prec);
220 term_prec = FLINT_MAX(term_prec, 10);
221
222 /* note: set_round makes small difference here */
223 arb_fma_ui(S4, S4, (2 * n) * (2 * n - 1), ukpow + i % m, term_prec);
224
225 if (i != 0 && i % m == 0)
226 {
227 /* note: set_round makes small difference here */
228 arb_mul(S4, S4, ukpow + m, term_prec);
229 }
230 }
231
232 /* divide by k^(2M) */
233 if (k != 1)
234 {
235 if (!fmpz_is_one(kpow))
236 arb_div_fmpz(S4, S4, kpow, wp);
237
238 arb_mul_2exp_si(S4, S4, -kpow_exp);
239 }
240
241 arb_add(S3, S3, S4, wp);
242 }
243 }
244
245 /* multiply by -2 (2M-2)! u^M z */
246 fmpz_fac_ui(kpow, 2 * M - 2);
247 arb_mul_fmpz(S3, S3, kpow, wp);
248 arb_pow_ui(u, u, M, wp);
249 arb_mul(S3, S3, u, wp);
250 arb_set_round(t, z, wp);
251 arb_mul(S3, S3, t, wp);
252 arb_mul_2exp_si(S3, S3, 1);
253 arb_neg(S3, S3);
254
255 arb_add_error_mag(S3, err);
256
257 _arb_vec_clear(upow, m + 1);
258 _arb_vec_clear(ukpow, m + 1);
259 fmpz_clear(kpow);
260
261 arb_zero(S2);
262
263 m = sqrt(M);
264 upow = _arb_vec_init(m + 1);
265 _arb_vec_set_powers(upow, w, m + 1, prec);
266
267 BERNOULLI_ENSURE_CACHED(2 * M - 2);
268
269 {
270 fmpz_t d, e, f, g, h;
271 fmpz q[4];
272
273 fmpz_init(d);
274 fmpz_init(e);
275 fmpz_init(f);
276 fmpz_init(g);
277 fmpz_init(h);
278
279 fmpz_init(q);
280 fmpz_init(q + 1);
281 fmpz_init(q + 2);
282 fmpz_init(q + 3);
283
284 for (n = M - 1; n >= 1; n--)
285 {
286 i = n - 1;
287
288 if (i >= 4 && i % m >= 3 && prec >= 512 && prec <= 4096)
289 {
290 term_mag = term_mags[n - 3];
291 term_prec = prec + term_mag;
292 term_prec = FLINT_MIN(term_prec, prec);
293 term_prec = FLINT_MAX(term_prec, 10);
294
295 fmpz_mul_ui(d, fmpq_denref(bernoulli_cache + 2 * (n - 0)), 2 * (n - 0) * (2 * (n - 0) - 1));
296 fmpz_mul_ui(e, fmpq_denref(bernoulli_cache + 2 * (n - 1)), 2 * (n - 1) * (2 * (n - 1) - 1));
297 fmpz_mul_ui(g, fmpq_denref(bernoulli_cache + 2 * (n - 2)), 2 * (n - 2) * (2 * (n - 2) - 1));
298 fmpz_mul_ui(h, fmpq_denref(bernoulli_cache + 2 * (n - 3)), 2 * (n - 3) * (2 * (n - 3) - 1));
299
300 /* q3 = egh q2 = dgh q1 = deh q0 = deg d = degh */
301 fmpz_mul(q + 3, e, g);
302 fmpz_mul(q + 0, q + 3, d);
303 fmpz_mul(q + 3, q + 3, h);
304 fmpz_mul(q + 2, d, h);
305 fmpz_mul(q + 1, q + 2, e);
306 fmpz_mul(q + 2, q + 2, g);
307 fmpz_mul(d, q + 3, d);
308
309 fmpz_mul(q + 3, q + 3, fmpq_numref(bernoulli_cache + 2 * (n - 0)));
310 fmpz_mul(q + 2, q + 2, fmpq_numref(bernoulli_cache + 2 * (n - 1)));
311 fmpz_mul(q + 1, q + 1, fmpq_numref(bernoulli_cache + 2 * (n - 2)));
312 fmpz_mul(q + 0, q + 0, fmpq_numref(bernoulli_cache + 2 * (n - 3)));
313
314 arb_dot_fmpz(t, NULL, 0, upow + i % m - 3, 1, q, 1, 4, term_prec);
315 arb_div_fmpz(t, t, d, term_prec);
316 arb_add(S2, S2, t, term_prec);
317
318 n -= 3;
319 i -= 3;
320 }
321 else if (i >= 3 && i % m >= 2)
322 {
323 term_mag = term_mags[n - 2];
324 term_prec = prec + term_mag;
325 term_prec = FLINT_MIN(term_prec, prec);
326 term_prec = FLINT_MAX(term_prec, 10);
327
328 fmpz_mul_ui(d, fmpq_denref(bernoulli_cache + 2 * (n - 0)), 2 * (n - 0) * (2 * (n - 0) - 1));
329 fmpz_mul_ui(e, fmpq_denref(bernoulli_cache + 2 * (n - 1)), 2 * (n - 1) * (2 * (n - 1) - 1));
330 fmpz_mul_ui(g, fmpq_denref(bernoulli_cache + 2 * (n - 2)), 2 * (n - 2) * (2 * (n - 2) - 1));
331
332 fmpz_mul(q + 2, e, g);
333 fmpz_mul(q + 2, q + 2, fmpq_numref(bernoulli_cache + 2 * (n - 0)));
334 fmpz_mul(q + 1, d, g);
335 fmpz_mul(q + 1, q + 1, fmpq_numref(bernoulli_cache + 2 * (n - 1)));
336 fmpz_mul(q + 0, d, e);
337 fmpz_mul(d, q + 0, g);
338 fmpz_mul(q + 0, q + 0, fmpq_numref(bernoulli_cache + 2 * (n - 2)));
339
340 arb_dot_fmpz(t, NULL, 0, upow + i % m - 2, 1, q, 1, 3, term_prec);
341 arb_div_fmpz(t, t, d, term_prec);
342 arb_add(S2, S2, t, term_prec);
343
344 n -= 2;
345 i -= 2;
346 }
347 else if (i >= 1 && i % m >= 1)
348 {
349 term_mag = term_mags[n - 1];
350 term_prec = prec + term_mag;
351 term_prec = FLINT_MIN(term_prec, prec);
352 term_prec = FLINT_MAX(term_prec, 10);
353
354 fmpz_mul_ui(d, fmpq_denref(bernoulli_cache + 2 * (n - 0)), 2 * (n - 0) * (2 * (n - 0) - 1));
355 fmpz_mul_ui(e, fmpq_denref(bernoulli_cache + 2 * (n - 1)), 2 * (n - 1) * (2 * (n - 1) - 1));
356
357 fmpz_mul(f, fmpq_numref(bernoulli_cache + 2 * (n - 0)), e);
358 arb_set_round(u, upow + i % m, term_prec);
359 arb_mul_fmpz(t, u, f, term_prec); /* todo: output-sensitive mul */
360 fmpz_mul(f, fmpq_numref(bernoulli_cache + 2 * (n - 1)), d);
361 arb_set_round(u, upow + i % m - 1, term_prec);
362 arb_mul_fmpz(u, u, f, term_prec); /* todo: output-sensitive mul */
363 arb_add(t, t, u, term_prec);
364
365 fmpz_mul(d, d, e);
366 arb_div_fmpz(t, t, d, term_prec);
367 arb_add(S2, S2, t, term_prec);
368
369 n--;
370 i--;
371 }
372 else
373 {
374 term_mag = term_mags[n];
375 term_prec = prec + term_mag;
376 term_prec = FLINT_MIN(term_prec, prec);
377 term_prec = FLINT_MAX(term_prec, 10);
378
379 arb_set_round(u, upow + i % m, term_prec);
380 arb_mul_fmpz(t, u, fmpq_numref(bernoulli_cache + 2 * n), term_prec); /* todo: output-sensitive mul */
381 fmpz_mul_ui(d, fmpq_denref(bernoulli_cache + 2 * n), 2 * n * (2 * n - 1));
382 arb_div_fmpz(t, t, d, term_prec);
383
384 arb_add(S2, S2, t, term_prec);
385 }
386
387 if (i != 0 && i % m == 0)
388 {
389 arb_set_round(u, upow + m, term_prec); /* todo: output-sensitive mul */
390 arb_mul(S2, S2, u, term_prec);
391 }
392 }
393
394 fmpz_clear(q);
395 fmpz_clear(q + 1);
396 fmpz_clear(q + 2);
397 fmpz_clear(q + 3);
398
399 fmpz_clear(d);
400 fmpz_clear(e);
401 fmpz_clear(f);
402 fmpz_clear(g);
403 fmpz_clear(h);
404 }
405
406 _arb_vec_clear(upow, m + 1);
407
408 arb_mul(S2, S2, zinv, prec);
409 arb_add(s, S2, S3, prec);
410
411 flint_free(term_mags);
412
413 if (Mk != NULL)
414 flint_free(Mk);
415
416 arb_clear(b);
417 arb_clear(t);
418 arb_clear(zinv);
419 arb_clear(w);
420 arb_clear(u);
421 arb_clear(S2);
422 arb_clear(S3);
423 arb_clear(S4);
424 mag_clear(zinv_mag);
425 mag_clear(err);
426 }
427
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 void
14 _arb_hypgeom_gamma_stirling_term_bounds(slong * bound, const mag_t zinv, slong N)
15 {
16 mag_t b, u;
17 slong n;
18
19 mag_init(b);
20 mag_init(u);
21
22 /* bound[0] = WORD_MAX; -- should not be used */
23
24 /* first term 1/(12z) */
25 mag_set(b, zinv);
26 mag_div_ui(b, b, 12);
27 bound[1] = MAG_EXP(b);
28
29 /* u = 1/(2 pi z)^2 */
30 mag_const_pi_lower(u);
31 mag_mul_2exp_si(u, u, 1);
32 mag_inv(u, u);
33 mag_mul(u, u, zinv);
34 mag_mul(u, u, u);
35
36 /* zeta(2n) 2 (2n-2)! / (2pi)^(2n) / z^(2n-1) */
37 /* ratio bounded by (2n-2)(2n-3)/(2 pi z)^2 */
38
39 for (n = 2; n < N; n++)
40 {
41 mag_mul_ui(b, b, (2*n-2) * (2*n-3));
42 mag_mul(b, b, u);
43 bound[n] = MAG_EXP(b);
44 }
45
46 mag_clear(b);
47 mag_clear(u);
48 }
49
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 #if FLINT_BITS == 64
14 #define Z2(a,b) UWORD(0x ## b ## a)
15 #else
16 #define Z2(a,b) UWORD(0x ## a), UWORD(0x ## b)
17 #endif
18
19 #define Z8(a,b,c,d,e,f,g,h) Z2(a,b), Z2(c,d), Z2(e,f), Z2(g,h),
20
21 arb_hypgeom_gamma_coeff_t arb_hypgeom_gamma_coeffs[ARB_HYPGEOM_GAMMA_TAB_NUM] = {
22 {1, 0, 54, 0}, {0, 54, 54, 0}, {0, 108, 54, 1}, {-4, 162, 54, 1},
23 {-2, 216, 54, 0}, {-4, 270, 54, 1}, {-6, 324, 54, 1}, {-7, 378, 54, 0},
24 {-9, 432, 54, 1}, {-12, 486, 54, 1}, {-12, 540, 54, 0}, {-15, 594, 54, 1},
25 {-19, 648, 54, 1}, {-19, 702, 54, 0}, {-22, 756, 54, 1}, {-27, 810, 54, 0},
26 {-27, 864, 54, 0}, {-29, 918, 54, 1}, {-33, 972, 54, 0}, {-36, 1026, 54, 0},
27 {-37, 1080, 54, 1}, {-40, 1134, 54, 0}, {-45, 1188, 54, 1}, {-47, 1242, 54, 1},
28 {-49, 1296, 54, 0}, {-52, 1350, 53, 1}, {-59, 1403, 53, 0}, {-59, 1456, 53, 0},
29 {-61, 1509, 53, 1}, {-65, 1562, 53, 0}, {-72, 1615, 53, 0}, {-72, 1668, 53, 1},
30 {-74, 1721, 53, 0}, {-78, 1774, 53, 1}, {-85, 1827, 53, 1}, {-85, 1880, 53, 0},
31 {-88, 1933, 53, 1}, {-92, 1986, 53, 0}, {-99, 2039, 53, 0}, {-99, 2092, 52, 1},
32 {-102, 2144, 52, 0}, {-106, 2196, 52, 1}, {-116, 2248, 52, 0}, {-114, 2300, 52, 0},
33 {-117, 2352, 52, 1}, {-121, 2404, 52, 0}, {-127, 2456, 52, 1}, {-129, 2508, 52, 1},
34 {-132, 2560, 52, 0}, {-136, 2612, 52, 1}, {-141, 2664, 52, 0}, {-144, 2716, 52, 0},
35 {-147, 2768, 52, 1}, {-151, 2820, 51, 0}, {-156, 2871, 51, 1}, {-161, 2922, 51, 1},
36 {-163, 2973, 51, 0}, {-167, 3024, 51, 1}, {-171, 3075, 51, 0}, {-179, 3126, 51, 1},
37 {-179, 3177, 51, 1}, {-183, 3228, 51, 0}, {-187, 3279, 51, 1}, {-192, 3330, 51, 0},
38 {-197, 3381, 51, 0}, {-199, 3432, 51, 1}, {-203, 3483, 50, 0}, {-208, 3533, 50, 1},
39 {-217, 3583, 50, 1}, {-216, 3633, 50, 0}, {-220, 3683, 50, 1}, {-224, 3733, 50, 0},
40 {-230, 3783, 50, 1}, {-234, 3833, 50, 1}, {-237, 3883, 50, 0}, {-241, 3933, 50, 1},
41 {-246, 3983, 50, 0}, {-256, 4033, 49, 1}, {-255, 4082, 49, 1}, {-259, 4131, 49, 0},
42 {-263, 4180, 49, 1}, {-269, 4229, 49, 0}, {-274, 4278, 49, 0}, {-277, 4327, 49, 1},
43 {-281, 4376, 49, 0}, {-285, 4425, 49, 1}, {-292, 4474, 49, 0}, {-295, 4523, 49, 0},
44 {-299, 4572, 49, 1}, {-303, 4621, 49, 0}, {-308, 4670, 48, 1}, {-317, 4718, 48, 1},
45 {-317, 4766, 48, 0}, {-321, 4814, 48, 1}, {-326, 4862, 48, 0}, {-331, 4910, 48, 1},
46 {-337, 4958, 48, 1}, {-340, 5006, 48, 0}, {-344, 5054, 48, 1}, {-349, 5102, 48, 0},
47 {-355, 5150, 48, 1}, {-359, 5198, 47, 1}, {-363, 5245, 47, 0}, {-367, 5292, 47, 1},
48 {-372, 5339, 47, 0}, {-379, 5386, 47, 1}, {-382, 5433, 47, 1}, {-386, 5480, 47, 0},
49 {-391, 5527, 47, 1}, {-396, 5574, 47, 0}, {-405, 5621, 47, 1}, {-406, 5668, 47, 1},
50 {-410, 5715, 46, 0}, {-415, 5761, 46, 1}, {-420, 5807, 46, 0}, {-428, 5853, 46, 0},
51 {-429, 5899, 46, 1}, {-434, 5945, 46, 0}, {-439, 5991, 46, 1}, {-444, 6037, 46, 0},
52 {-451, 6083, 46, 0}, {-454, 6129, 46, 1}, {-458, 6175, 46, 0}, {-463, 6221, 45, 1},
53 {-469, 6266, 45, 0}, {-475, 6311, 45, 0}, {-478, 6356, 45, 1}, {-482, 6401, 45, 0},
54 {-488, 6446, 45, 1}, {-494, 6491, 45, 0}, {-500, 6536, 45, 0}, {-503, 6581, 45, 1},
55 {-507, 6626, 45, 0}, {-512, 6671, 45, 1}, {-518, 6716, 44, 0}, {-524, 6760, 44, 0},
56 {-527, 6804, 44, 1}, {-532, 6848, 44, 0}, {-537, 6892, 44, 1}, {-543, 6936, 44, 0},
57 {-549, 6980, 44, 0}, {-553, 7024, 44, 1}, {-557, 7068, 44, 0}, {-562, 7112, 44, 1},
58 {-569, 7156, 44, 0}, {-575, 7200, 43, 0}, {-578, 7243, 43, 1}, {-583, 7286, 43, 0},
59 {-588, 7329, 43, 1}, {-594, 7372, 43, 0}, {-601, 7415, 43, 0}, {-604, 7458, 43, 1},
60 {-608, 7501, 43, 0}, {-613, 7544, 43, 1}, {-619, 7587, 43, 0}, {-627, 7630, 42, 0},
61 {-629, 7672, 42, 1}, {-634, 7714, 42, 0}, {-639, 7756, 42, 1}, {-645, 7798, 42, 0},
62 {-656, 7840, 42, 0}, {-655, 7882, 42, 1}, {-660, 7924, 42, 0}, {-665, 7966, 42, 1},
63 {-671, 8008, 42, 0}, {-679, 8050, 41, 1}, {-682, 8091, 41, 1}, {-686, 8132, 41, 0},
64 {-691, 8173, 41, 1}, {-697, 8214, 41, 0}, {-704, 8255, 41, 1}, {-708, 8296, 41, 1},
65 {-713, 8337, 41, 0}, {-718, 8378, 41, 1}, {-723, 8419, 41, 0}, {-730, 8460, 41, 1},
66 {-735, 8501, 40, 1}, {-739, 8541, 40, 0}, {-744, 8581, 40, 1}, {-750, 8621, 40, 0},
67 {-756, 8661, 40, 1}, {-763, 8701, 40, 1}, {-766, 8741, 40, 0}, {-771, 8781, 40, 1},
68 {-776, 8821, 40, 0}, {-782, 8861, 40, 1}, {-791, 8901, 39, 1}, {-793, 8940, 39, 0},
69 {-798, 8979, 39, 1}, {-803, 9018, 39, 0}, {-809, 9057, 39, 1}, {-817, 9096, 39, 0},
70 {-820, 9135, 39, 0}, {-825, 9174, 39, 1}, {-830, 9213, 39, 0}, {-836, 9252, 39, 1},
71 {-843, 9291, 38, 0}, {-848, 9329, 38, 0}, {-852, 9367, 38, 1}, {-857, 9405, 38, 0},
72 {-863, 9443, 38, 1}, {-869, 9481, 38, 0}, {-876, 9519, 38, 0}, {-880, 9557, 38, 1},
73 {-885, 9595, 38, 0}, {-890, 9633, 38, 1}, {-896, 9671, 37, 0}, {-906, 9708, 37, 1},
74 {-908, 9745, 37, 1}, {-912, 9782, 37, 0}, {-918, 9819, 37, 1}, {-924, 9856, 37, 0},
75 {-931, 9893, 37, 1}, {-936, 9930, 37, 1}, {-940, 9967, 37, 0}, {-945, 10004, 37, 1},
76 {-951, 10041, 36, 0}, {-958, 10077, 36, 1}, {-965, 10113, 36, 1}, {-968, 10149, 36, 0},
77 {-973, 10185, 36, 1}, {-979, 10221, 36, 0}, {-985, 10257, 36, 1}, {-994, 10293, 36, 0},
78 {-997, 10329, 36, 0}, {-1001, 10365, 35, 1}, {-1007, 10400, 35, 0}, {-1013, 10435, 35, 1},
79 {-1020, 10470, 35, 0}, {-1025, 10505, 35, 0}, {-1030, 10540, 35, 1}, {-1035, 10575, 35, 0},
80 {-1041, 10610, 35, 1}, {-1047, 10645, 35, 0}, {-1056, 10680, 34, 0}, {-1058, 10714, 34, 1},
81 {-1063, 10748, 34, 0}, {-1069, 10782, 34, 1}, {-1075, 10816, 34, 0}, {-1082, 10850, 34, 1},
82 {-1087, 10884, 34, 1}, {-1092, 10918, 34, 0}, {-1097, 10952, 34, 1}, {-1103, 10986, 34, 0},
83 {-1110, 11020, 33, 1}, {-1117, 11053, 33, 1}, {-1121, 11086, 33, 0}, {-1126, 11119, 33, 1},
84 {-1131, 11152, 33, 0}, {-1138, 11185, 33, 1}, {-1145, 11218, 33, 0}, {-1150, 11251, 33, 0},
85 {-1155, 11284, 33, 1}, {-1160, 11317, 33, 0}, {-1166, 11350, 32, 1}, {-1173, 11382, 32, 0},
86 {-1180, 11414, 32, 0}, {-1184, 11446, 32, 1}, {-1189, 11478, 32, 0}, {-1195, 11510, 32, 1},
87 {-1201, 11542, 32, 0}, {-1209, 11574, 32, 1}, {-1213, 11606, 32, 1}, {-1218, 11638, 32, 0},
88 {-1223, 11670, 31, 1}, {-1230, 11701, 31, 0}, {-1236, 11732, 31, 1}, {-1244, 11763, 31, 1},
89 {-1247, 11794, 31, 0}, {-1253, 11825, 31, 1}, {-1258, 11856, 31, 0}, {-1265, 11887, 31, 1},
90 {-1273, 11918, 31, 0}, {-1277, 11949, 30, 0}, {-1282, 11979, 30, 1}, {-1288, 12009, 30, 0},
91 {-1294, 12039, 30, 1}, {-1300, 12069, 30, 0}, {-1309, 12099, 30, 0}, {-1312, 12129, 30, 1},
92 {-1317, 12159, 30, 0}, {-1323, 12189, 30, 1}, {-1329, 12219, 29, 0}, {-1337, 12248, 29, 1},
93 {-1342, 12277, 29, 1}, {-1347, 12306, 29, 0}, {-1352, 12335, 29, 1}, {-1358, 12364, 29, 0},
94 {-1365, 12393, 29, 1}, {-1378, 12422, 29, 1}, {-1377, 12451, 29, 0}, {-1382, 12480, 29, 1},
95 {-1388, 12509, 28, 0}, {-1394, 12537, 28, 1}, {-1401, 12565, 28, 0}, {-1407, 12593, 28, 0},
96 {-1412, 12621, 28, 1}, {-1417, 12649, 28, 0}, {-1423, 12677, 28, 1}, {-1430, 12705, 28, 0},
97 {-1438, 12733, 27, 1}, {-1442, 12760, 27, 1}, {-1447, 12787, 27, 0}, {-1453, 12814, 27, 1},
98 {-1459, 12841, 27, 0}, {-1466, 12868, 27, 1}, {-1474, 12895, 27, 1}, {-1477, 12922, 27, 0},
99 {-1483, 12949, 27, 1}, {-1489, 12976, 27, 0}, {-1495, 13003, 26, 1}, {-1503, 13029, 26, 0},
100 {-1508, 13055, 26, 0}, {-1513, 13081, 26, 1}, {-1519, 13107, 26, 0}, {-1525, 13133, 26, 1},
101 {-1531, 13159, 26, 0}, {-1541, 13185, 26, 1}, {-1544, 13211, 26, 1}, {-1549, 13237, 25, 0},
102 {-1555, 13262, 25, 1}, {-1561, 13287, 25, 0}, {-1568, 13312, 25, 1}, {-1576, 13337, 25, 1},
103 {-1580, 13362, 25, 0}, {-1585, 13387, 25, 1}, {-1591, 13412, 25, 0}, {-1598, 13437, 25, 1},
104 {-1605, 13462, 24, 0}, {-1611, 13486, 24, 0}, {-1616, 13510, 24, 1}, {-1621, 13534, 24, 0},
105 {-1628, 13558, 24, 1}, {-1634, 13582, 24, 0}, {-1643, 13606, 24, 1}, {-1647, 13630, 24, 1},
106 {-1652, 13654, 24, 0}, {-1658, 13678, 23, 1}, {-1664, 13701, 23, 0}, {-1671, 13724, 23, 1},
107 {-1680, 13747, 23, 1}, {-1683, 13770, 23, 0}, {-1688, 13793, 23, 1}, {-1694, 13816, 23, 0},
108 {-1701, 13839, 23, 1}, {-1708, 13862, 23, 0}, {-1715, 13885, 22, 0}, {-1719, 13907, 22, 1},
109 {-1725, 13929, 22, 0}, {-1731, 13951, 22, 1}, {-1738, 13973, 22, 0}, {-1746, 13995, 22, 1},
110 {-1751, 14017, 22, 1}, {-1756, 14039, 22, 0}, {-1762, 14061, 22, 1}, {-1768, 14083, 21, 0},
111 {-1775, 14104, 21, 1}, {-1785, 14125, 21, 0}, {-1788, 14146, 21, 0}, {-1793, 14167, 21, 1},
112 {-1799, 14188, 21, 0}, {-1805, 14209, 21, 1}, {-1812, 14230, 21, 0}, {-1821, 14251, 21, 0},
113 {-1824, 14272, 20, 1}, {-1830, 14292, 20, 0}, {-1836, 14312, 20, 1}, {-1843, 14332, 20, 0},
114 {-1850, 14352, 20, 1}, {-1857, 14372, 20, 1}, {-1861, 14392, 20, 0}, {-1867, 14412, 20, 1},
115 {-1873, 14432, 20, 0}, {-1880, 14452, 19, 1}, {-1888, 14471, 19, 0}, {-1893, 14490, 19, 0},
116 {-1898, 14509, 19, 1}, {-1904, 14528, 19, 0}, {-1911, 14547, 19, 1}, {-1918, 14566, 19, 0},
117 {-1926, 14585, 19, 1}, {-1930, 14604, 19, 1}, {-1936, 14623, 18, 0}, {-1942, 14641, 18, 1},
118 {-1948, 14659, 18, 0}, {-1955, 14677, 18, 1}, {-1967, 14695, 18, 1}, {-1968, 14713, 18, 0},
119 {-1973, 14731, 18, 1}, {-1979, 14749, 18, 0}, {-1986, 14767, 18, 1}, {-1993, 14785, 17, 0},
120 {-2001, 14802, 17, 0}, {-2005, 14819, 17, 1}, {-2011, 14836, 17, 0}, {-2017, 14853, 17, 1},
121 {-2024, 14870, 17, 0}, {-2031, 14887, 17, 1}, {-2038, 14904, 17, 1}, {-2043, 14921, 16, 0},
122 {-2048, 14937, 16, 1}, {-2055, 14953, 16, 0}, {-2062, 14969, 16, 1}, {-2069, 14985, 16, 0},
123 {-2076, 15001, 16, 0}, {-2080, 15017, 16, 1}, {-2086, 15033, 16, 0}, {-2093, 15049, 16, 1},
124 {-2100, 15065, 15, 0}, {-2108, 15080, 15, 1}, {-2113, 15095, 15, 1}, {-2118, 15110, 15, 0},
125 {-2124, 15125, 15, 1}, {-2131, 15140, 15, 0}, {-2138, 15155, 15, 1}, {-2147, 15170, 15, 0},
126 {-2151, 15185, 15, 0}, {-2156, 15200, 14, 1}, {-2162, 15214, 14, 0}, {-2169, 15228, 14, 1},
127 {-2176, 15242, 14, 0}, {-2186, 15256, 14, 1}, {-2189, 15270, 14, 1}, {-2194, 15284, 14, 0},
128 {-2201, 15298, 14, 1}, {-2207, 15312, 14, 0}, {-2214, 15326, 13, 1}, {-2225, 15339, 13, 1},
129 {-2227, 15352, 13, 0}, {-2233, 15365, 13, 1}, {-2239, 15378, 13, 0}, {-2245, 15391, 13, 1},
130 {-2253, 15404, 13, 0}, {-2262, 15417, 13, 0}, {-2265, 15430, 12, 1}, {-2271, 15442, 12, 0},
131 {-2277, 15454, 12, 1}, {-2284, 15466, 12, 0}, {-2291, 15478, 12, 1}, {-2300, 15490, 12, 1},
132 {-2304, 15502, 12, 0}, {-2309, 15514, 12, 1}, {-2316, 15526, 12, 0}, {-2322, 15538, 11, 1},
133 {-2330, 15549, 11, 0}, {-2338, 15560, 11, 0}, {-2342, 15571, 11, 1}, {-2348, 15582, 11, 0},
134 {-2354, 15593, 11, 1}, {-2361, 15604, 11, 0}, {-2369, 15615, 11, 1}, {-2376, 15626, 10, 1},
135 {-2381, 15636, 10, 0}, {-2387, 15646, 10, 1}, {-2393, 15656, 10, 0}, {-2400, 15666, 10, 1},
136 {-2408, 15676, 10, 0}, {-2415, 15686, 10, 0}, {-2419, 15696, 10, 1}, {-2425, 15706, 10, 0},
137 {-2432, 15716, 9, 1}, {-2439, 15725, 9, 0}, {-2447, 15734, 9, 1}, {-2453, 15743, 9, 1},
138 {-2458, 15752, 9, 0}, {-2464, 15761, 9, 1}, {-2471, 15770, 9, 0}, {-2478, 15779, 9, 1},
139 {-2486, 15788, 8, 0}, {-2492, 15796, 8, 0}, {-2497, 15804, 8, 1}, {-2503, 15812, 8, 0},
140 {-2510, 15820, 8, 1}, {-2517, 15828, 8, 0}, {-2525, 15836, 8, 1}, {-2531, 15844, 8, 1},
141 {-2536, 15852, 8, 0}, {-2542, 15860, 7, 1}, {-2549, 15867, 7, 0}, {-2556, 15874, 7, 1},
142 {-2564, 15881, 7, 0}, {-2570, 15888, 7, 0}, {-2575, 15895, 7, 1}, {-2581, 15902, 7, 0},
143 {-2588, 15909, 7, 1}, {-2595, 15916, 7, 0}, {-2603, 15923, 6, 1}, {-2609, 15929, 6, 1},
144 {-2614, 15935, 6, 0}, {-2621, 15941, 6, 1}, {-2627, 15947, 6, 0}, {-2634, 15953, 6, 1},
145 {-2642, 15959, 6, 0}, {-2649, 15965, 6, 0}, {-2654, 15971, 5, 1}, {-2660, 15976, 5, 0},
146 {-2667, 15981, 5, 1}, {-2674, 15986, 5, 0}, {-2682, 15991, 5, 1}, {-2688, 15996, 5, 1},
147 {-2693, 16001, 5, 0}, {-2699, 16006, 5, 1}, {-2706, 16011, 5, 0}, {-2713, 16016, 4, 1},
148 {-2721, 16020, 4, 0}, {-2728, 16024, 4, 0}, {-2733, 16028, 4, 1}, {-2739, 16032, 4, 0},
149 {-2745, 16036, 4, 1}, {-2752, 16040, 4, 0}, {-2761, 16044, 4, 1}, {-2767, 16048, 3, 1},
150 {-2772, 16051, 3, 0}, {-2778, 16054, 3, 1}, {-2785, 16057, 3, 0}, {-2792, 16060, 3, 1},
151 {-2800, 16063, 3, 0}, {-2807, 16066, 3, 0}, {-2812, 16069, 3, 1}, {-2818, 16072, 3, 0},
152 {-2825, 16075, 2, 1}, {-2832, 16077, 2, 0}, {-2840, 16079, 2, 1}, {-2847, 16081, 2, 1},
153 {-2852, 16083, 2, 0}, {-2858, 16085, 2, 1}, {-2865, 16087, 2, 0}, {-2872, 16089, 2, 1},
154 {-2879, 16091, 1, 0}, {-2887, 16092, 1, 0}, {-2892, 16093, 1, 1}, {-2898, 16094, 1, 0},
155 {-2904, 16095, 1, 1}, {-2911, 16096, 1, 0}, {-2919, 16097, 1, 1}, {-2927, 16098, 1, 1},
156 };
157
158 const mp_limb_t arb_hypgeom_gamma_tab_limbs[] = {
159 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
160 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
161 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
162 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
163 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
164 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
165 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
166 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
167 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
168 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
169 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
170 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
171 Z8(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000)
172 Z8(00000000,00000000,00000000,80000000,d44c6937,0c3f5be7,e0421838,31072b10)
173 Z8(e1f3a067,f17903f4,7ec1b6d0,98bb22aa,ba5f3a57,9ad030aa,d8036214,1b32e5e8)
174 Z8(512b3051,81ccae83,a8427633,81b5753e,2bce15a3,542e9f72,5a2b38e6,92bf5222)
175 Z8(439cd03a,81c1a48e,b6612b78,1baf84db,37fb2817,e9cc3d17,5ad1f5c7,818bd307)
176 Z8(fea32a67,4068bbca,c26e5421,b7a661e5,f5389130,7f18b93e,17fcc003,d0d62342)
177 Z8(69ddf172,9f9c7ccc,9215f371,6223b2f0,b05e5b25,e528fdf1,6fe9554e,aea1c4bb)
178 Z8(7031f9c0,af289048,744db679,c5d238d0,4f1b66c2,e11df242,d2238d8c,7c555302)
179 Z8(13edf604,4c4d8c4f,5c40bf30,8e704b7c,65f004cc,2741e538,ee52e018,7db2db49)
180 Z8(448f2a05,32fab2c7,d3ee591c,c083f22a,c9b31959,6fcaabcc,64b83989,03655949)
181 Z8(31ced822,5a7bd469,e741e5d8,7cfde60e,e80567a4,8fc28658,63e6d09f,b54fe70e)
182 Z8(ce3bea5d,961542a3,bd61c746,5e6ac2f0,82797722,3ec7c271,e62ff864,d2a1ea1d)
183 Z8(b6b7b86f,0c09d4c8,7899aaae,8a96d156,154b36cf,dbe7bf38,cc86d733,58deb878)
184 Z8(d74bafea,e43b4673,32135a08,1056ae91,621057d1,d0649ccb,03a9f0ee,8e4b59fa)
185 Z8(709affbd,0c03df34,f65cc019,a1cecc3a,0152cb56,d1be3f81,7db0c7a4,93c467e3)
186 Z8(8f1877ab,5c379a00,f9580af6,76b55cc4,f35f61ce,ef1c2900,294dca79,6885062b)
187 Z8(021a094b,4756ca11,1a11d46e,04920c54,b41a7dfc,f0288d8a,2f09194b,14f2cd2a)
188 Z8(83d8d9cf,690c95ad,8781a84d,cdb6fa0a,2302cf3a,c58aee6e,977add8d,db3059f0)
189 Z8(19f9bd13,806423c3,8fbff045,2cffd33a,4ba3c3ef,1588a81e,182a865c,d4bad52a)
190 Z8(6ff3e41b,59c80c6a,2359b8a7,55df6b32,5cf9734f,1388b48e,81ad3ffe,456e5d05)
191 Z8(3956f4b4,698ca360,ad128bca,12c4585a,f72f5b25,8c2a1b45,5ec1b718,f1e5778b)
192 Z8(af21a29d,a63ad266,e1674d69,1a937aac,7e92b6d0,a3b7721f,96f573ad,03525173)
193 Z8(8002e7d8,6595d953,83a8e1e0,862a96a3,d8b597b8,9a1f90dd,0ade1e9e,09791289)
194 Z8(812e6230,c51d77bb,135f63b9,725da3a8,5f42c8eb,803422ee,31d4b4c0,eb323ed6)
195 Z8(dd941d01,4e335234,3f65391b,fa7cabd2,42fed427,e6f2cd93,08f7e03d,94ef0edb)
196 Z8(d8eedaf9,30bc3e04,ba7acbaf,1af586d0,4a1e52bc,2d89f1e9,8f1a86ec,645ef92e)
197 Z8(9ec407ed,d25818cf,c7473287,86f93595,edf114df,ec1ee8cf,e44ad789,5977a634)
198 Z8(232bf00f,e15a6cbb,96dcd8c5,1e0a48ef,bcff260a,2d816c1d,d08fb45c,8ed05db9)
199 Z8(bd611d64,c24856f3,57d16e75,a7e7a013,565580c5,909e6e1e,365bca4b,b95e7dbc)
200 Z8(309115e1,856dde8e,a83da736,2d6cac75,714edf38,a1f3ff04,593c3b9e,791e06e8)
201 Z8(859911dc,b7579e07,67a6c86d,233427d7,ff625deb,d2b87c32,faf32c0a,a18aec7a)
202 Z8(3e7bcea8,3b920d0d,582e38c2,38594742,a4605c64,a6f5d49f,f60c0df7,1d8b96ba)
203 Z8(532bac68,38bd9b08,94205465,c3478ad6,dae2519e,291e5de3,aff8e561,1b69edae)
204 Z8(f78ca6c9,4786c982,bc0da507,930256fa,97fa264c,9325e453,f8be9c9f,d8913717)
205 Z8(a3a4b94c,d424bb8f,84f82135,c56fc7e4,7b86b03e,8b11fcbe,9702df3c,d03a085a)
206 Z8(22044511,fdbd1f91,1ce99bcb,be7783f9,38bb5e92,3e247510,8a82e06b,9e1f9306)
207 Z8(30f90470,3378bb76,35174f52,00c4393a,4ebf5695,ac34dcbc,ae33cc14,3d794b9c)
208 Z8(988a127b,8cb9a696,af813a36,4322ca0f,b6e6b7b9,e0bb7ea2,8c603663,9bf2daee)
209 Z8(310e33ac,e5c9ce60,a293a76d,7c1e561f,9abff0db,2731a5a6,b829d246,047b6a05)
210 Z8(043eb9c3,2273f947,21208155,b8d50305,f4b4d62a,6cda2bea,0e94d288,b1361145)
211 Z8(69abc0cb,a9824b0e,d0377dba,09547d0d,3f0060e4,f8d3efe8,359777d7,89b4393c)
212 Z8(b5a0bec2,dfc931dc,a9b55a20,1403ab71,9c84b042,a15a643c,13823e47,ac0af47d)
213 Z8(e0642cde,1869cecf,717ccc7a,91b4eb03,fffd9154,834f5d81,36be40ce,9aa37f25)
214 Z8(f86f8a67,51e24cc0,b60a3f15,f720b040,d82353fc,14d339de,e83d8700,51552cdc)
215 Z8(fbe2f86c,e380d534,95cbba62,361a1523,e62be0f9,02053756,ce7a1475,f20dbdc1)
216 Z8(9f32751d,ddfa310c,929b5b2e,1c97d15d,333ab386,b0bc2711,ef122799,5eecdc56)
217 Z8(0b8c42d1,110ca5b6,6cfcda46,ca5f2ce8,862ee895,7cd9ea63,6de4bd45,73cd0446)
218 Z8(0ff62ff2,ceb489b1,5ea0e2ec,0a84dfee,6c130226,5b095b0b,d4d5a198,33c4871b)
219 Z8(4ad6da3d,7068516d,2c180a0a,d7f0a18f,671d0d1e,c68c2d88,3c07662b,69c9fcf8)
220 Z8(0d37c0d9,5b4e086a,6d0b0000,babd4fd4,b0739e11,0b509a61,8d03d499,fe63031c)
221 Z8(a54f47a8,fc60f9da,0a15abc8,de1146eb,6717e210,104e1c9d,321fd882,93acc37a)
222 Z8(94336c18,6e146396,a4f1c553,eb7594cb,4bb48380,9fbc4857,9a8f9528,4171ba3f)
223 Z8(2dab48ff,40854a9b,b1f527b9,dab9a53b,282c86ba,860906ab,f7cac3bd,58b5e567)
224 Z8(7e632403,79e8932e,b8e2545a,85c569c0,5c7e176b,0beb919b,1d1cf655,821fd014)
225 Z8(bb6b0d86,503b89b8,001b7660,b73265f9,bb596b64,acd16f79,08740560,c0b5dd3d)
226 Z8(1ef84da1,d37fb09a,a1fdf2ef,aa891905,feece581,98b763c2,ba5ca445,b3d64aa7)
227 Z8(0fd4e2a5,0972a12f,6aac09d6,98e5ee2a,a3745a94,7ba78b40,bbecd2f6,bc7b7024)
228 Z8(98be1ae1,2911d234,c2569eb3,f57d6799,0327f952,b82ae4c6,270d7a73,dd839ec7)
229 Z8(5c7c94c1,ec6a5b11,e817cf1b,020e7db2,904463b3,3a8fcebf,a3773246,e4d656c0)
230 Z8(e7049c56,0020189c,8a673965,5b9323ab,558e48eb,d72712c7,3dc0f6fd,6cbffcd5)
231 Z8(b079cd5b,6cb536d1,092176be,11092edd,13678662,aacf3c36,a2b1bed6,420070ce)
232 Z8(3754b9ab,cd6a6ef1,b9738d6e,f26d4c47,529b13f4,90e40980,5bb6b5ce,9023077e)
233 Z8(15aef90f,3955943c,e76d045a,ae63c7f2,400c9a60,51a613da,0add4e25,c2b42db0)
234 Z8(6dadaf3e,be977b61,9f5049ba,1ea4af96,789d0620,df9c4243,425a08ac,c110359c)
235 Z8(ad0b16d5,39e5a5c9,4831dbf4,cb823de9,ec66c0cf,d356669c,787e18d7,1769cf66)
236 Z8(e683edc7,de95560a,987e12bd,0aac72ab,063c8c94,85de1f4f,ad06066c,35eef6d5)
237 Z8(bbfcad39,42075aeb,de6827de,8d795ba8,6c1a14ff,ca0c1834,9297ffe5,fec1c959)
238 Z8(3ac35dcc,eb9ec7d8,fd9a3f9f,78f4f977,9310b40b,a5d22363,18040b7f,2968ad39)
239 Z8(5b6a43ee,e04c83b2,10646d87,b1fd891b,8caca42e,1b404838,1a0493df,acd7881e)
240 Z8(3e6f60ed,3bb7330c,e901cb17,d36142cf,0d2ea48b,6ab5ee30,ae785c4f,73b0fcd0)
241 Z8(90ae8a01,c7c0b55f,c28b572f,c1858400,6a0fab0e,2839fbfa,216fdab8,07db2b53)
242 Z8(e5b926e1,6dc36d7f,b9ee08ec,2611dd53,963d2452,6cdb1158,27c7af28,0875bca6)
243 Z8(984ff2af,604dbba7,4a820dd7,d3aa0f13,dd72e299,a9f9f273,bf8d1eca,dcf91bf8)
244 Z8(23b2824e,0e31bd46,d247fb0b,09169797,3b285547,abc74ef1,cdd6da23,58297ccb)
245 Z8(8d5ded39,a688b400,d60bce25,b55eff49,c50060ca,f6771ed6,32c5d186,12db0465)
246 Z8(ccd08fac,7b79d989,5e78c1a6,d2a6d559,6419d6d1,d4e1026f,b0cab006,dc4c7db5)
247 Z8(63f4b360,5e9b3db1,124a4299,bfe4e9a0,98103075,182268bc,0d16c2e5,8bcc2984)
248 Z8(3e8191b3,aaf37c4d,ad12bc60,88079562,cdcfdc07,fd313971,338f9c96,4112a3ed)
249 Z8(bc61a309,61d3c3e8,58d23a00,5807a6f1,9ba8bd61,b3c3d210,b68a49d8,b2185343)
250 Z8(5e2c9a26,62d81332,c96257e3,60b9e78a,5e6d3f05,780df480,a8ba60d6,148d3612)
251 Z8(8f195d8a,994cc75d,03bddb2e,32eda7b9,60b65fd3,bda99c32,fc5f362b,b868103d)
252 Z8(bc7158db,48be4222,042e74d6,a225b4d6,b3af63d8,90e7687f,afb99a05,1f3ac55f)
253 Z8(73539adc,b79e8182,41f10a71,9da57942,8c2e8516,49af9cff,3a6d761f,cf7beb09)
254 Z8(5132eb17,e8f45072,de062054,51a7841f,1370dfc1,bd0ef793,5b837f7d,c508f8ec)
255 Z8(a97d388d,2259ed32,6f1f7776,e0f7232a,2ecc9dec,7e1e9375,9717da37,33b4c61f)
256 Z8(29f483b3,84cf5384,97a76481,17431cd3,533f7e0c,3f577698,fb727c05,60382a7b)
257 Z8(50344115,d7316c03,2d83b31b,2e62fcba,1b8b106b,519d508d,11a47c48,5169ce92)
258 Z8(29382723,260d6507,c20fbdf5,e33a3000,95e4b3c0,5817a304,892c9f22,9fda369d)
259 Z8(1ffcb718,41be5a02,230a86e7,bfe7828e,7af6b3e0,f043722a,4783486e,2a0f82da)
260 Z8(2db4313a,334bc6ee,e57d1f29,861653da,088e4428,bd150f74,1c88bbbc,9467ac30)
261 Z8(d9b5f686,d7eb3477,1e55669e,ac5a7da4,624a73c9,e356003b,9f781f5d,cade496c)
262 Z8(12bfa4af,9492ba7d,4dc1bb27,ebe4445e,2663befe,95e55fec,cae4902a,c7e28bbd)
263 Z8(8b7250c1,00646f4a,77fcc751,5ebb615b,b2c655fe,689bca3f,59ca5dbd,0a3cd2b2)
264 Z8(5e5d4ab0,f31d843f,aff5c48d,77a9699c,19e0eff1,a0f5a34f,3c6938e6,e01f5da7)
265 Z8(88a2107a,034c5609,758c244d,bf277bce,e74ad959,5c0111c2,8f991ede,ac0cd025)
266 Z8(e44cfe84,743ebcef,01f16923,6807e2e3,dc1e1318,d1d69dd3,fb058cad,ec8ce293)
267 Z8(824cff8a,e3f1815f,ef92e17e,9d460c8a,a5441529,de0690f4,a2ea416d,820db6ac)
268 Z8(561901f5,2fbc5992,c291526d,ffe3e781,04b745ec,37a21341,31ce6e2c,5887dd80)
269 Z8(1b923790,1b9ec225,ce794fcf,393e1e10,1bfd4673,f7b73eea,c6b54e79,090de562)
270 Z8(619958da,9fa99c16,a36b3064,758a34f6,2fa22d00,27df471c,1ccca829,f900de36)
271 Z8(0a5dacd0,5a5ed6b7,c86f1ef8,c5e96904,f077ae83,76759f33,3b51736b,c19b532b)
272 Z8(2288f908,2836525c,c96c7f91,c51c84a9,759f02dc,307f8cb3,6a651062,376d5a4f)
273 Z8(69445ee6,b2aca171,77579525,e8fbe8aa,6567136b,457f0c30,9521426f,bf2961c8)
274 Z8(3420b417,9229d3b8,3a0c5db6,783d7d76,74f987d7,7d22bf66,1147ef5f,80d1a5f1)
275 Z8(bd8d2d69,8ed8f88f,132a0ffa,cf82f086,f9d2d4a7,e2c315b7,c27737fe,922d095b)
276 Z8(177d8efa,2ac3ae70,a919ddb7,22a3efdb,601bb55d,95b5a93d,276b2be7,74ab206b)
277 Z8(700db34d,ab76a034,043444a2,78a261df,9c6a0695,010f2cfc,234a2f61,cc5f0a26)
278 Z8(3d2d949a,0063b274,7fc901f4,0b1d8ab6,3464aa67,65ecd4d1,2dd22196,3577bc51)
279 Z8(17911e3c,f81b118e,81ddf8e3,cba8cd28,05b73bde,613a4285,9bfe7718,eac597f7)
280 Z8(88e959c6,6edba835,1d153de9,98b88967,ba98774a,875f1318,9c6bf8b9,8a411b3a)
281 Z8(386c1c19,ee237372,a2804472,0a3bc950,6ae598ca,c07f1177,dff9e1bf,7f5789c8)
282 Z8(8b9989d9,6bea06c9,852aa3ce,14bb28ca,090682cd,f1679b5a,1d0ed549,8297c3e6)
283 Z8(b3035811,1666f2d2,2b44d2ef,5616461e,eecfb86d,0760e0ed,4ca94bba,4913452f)
284 Z8(73ecf00c,8b1e7224,06ccbb31,632b5b81,4f31a7bb,982505ae,381c25dd,9d8de329)
285 Z8(514b33ec,6ea2a87f,010d9244,1f1e8f49,87b44cb8,1f35d5eb,e0362bac,b4786abf)
286 Z8(0c8040b3,e80c449d,d4708327,57de11f9,258652e9,138817ad,b56dea4d,2e1ef1e2)
287 Z8(6ce9b487,05b86ca9,39c2f841,dd5e1d18,fede1321,c9bfdf75,d8418eb7,082cd32b)
288 Z8(6e5060e8,a2306f73,288c9835,4cd9f820,be636232,c19e2458,70661cc3,c904f3c2)
289 Z8(029a9a0e,48cb8fc1,c24e7114,d57fc6a8,93b97c7f,f5570290,5e1c0abf,692ef2c6)
290 Z8(773383e8,8583904c,975c80ef,97806c4f,0ae5e341,ce231541,a03cc804,78cf3b15)
291 Z8(9687782a,51fec398,53bbc32f,5b54b2f8,a65b4201,b4463e2b,d2fd2a7b,ac1fb2ee)
292 Z8(963e8b55,18fac703,3752d7aa,4acf480b,b2f5710d,71387366,3c303f3f,d18da812)
293 Z8(c8ed8f57,bef3be7f,879d0688,6b46c976,8691b6ed,7c04703c,8ab1e74c,e1b27f37)
294 Z8(71904391,ca30d70d,3dec9233,08643fc4,01b9a90f,2fab53f3,707e8941,b50a13de)
295 Z8(aeb7c641,7f9498aa,d4cfb64e,422ef7fb,633ca9a8,cdc4b472,2496b512,8240985b)
296 Z8(e8141cb8,c43fd3e0,ccf64e0c,8a34b11d,a9c12594,9dbb2baf,55c526b6,31348935)
297 Z8(be4b8ecb,80eb7ec4,8b4c1f4c,484e9a70,48a53726,91f27187,fb74b71b,bffa0717)
298 Z8(ae8ba841,adb71820,0ab1be1a,096182ea,67801cf3,1fe10129,b94933da,17cf4a23)
299 Z8(52344e75,e1185265,4170bcfb,5cb3ea32,b274138a,dbdc048b,840b9be0,ca168459)
300 Z8(2e80d8c8,b81f3f00,3b28de86,2ff2b406,887be281,b39d68cc,703e46f2,3b074329)
301 Z8(8fe359ae,210b80ee,649154db,53824836,37fb02b9,4b4da73e,36883c2e,04610819)
302 Z8(ee06b9d8,cdcf9547,a7b240ed,85e48d48,2c9089bc,cafcaf7e,babbc550,853a2b46)
303 Z8(a79a10a7,81161907,3501846b,e0740aba,f47b540a,6ff1ac62,62177184,4f38190c)
304 Z8(e7669481,122c4170,21fe9a28,673e3a30,26f506b4,eb519c43,6d3b6cc0,3703e87e)
305 Z8(9aa57986,50548ae0,9a1b822b,a1046ef8,dac9c8ae,190a1b13,9eeb9e4e,580d16fa)
306 Z8(accbfae6,fd07d290,c1c2fe74,16a22d6c,552dc83b,0814ad95,27b1abb2,a4b18b2b)
307 Z8(cdb927f8,d83432fa,cfce8d3c,86453c66,417db143,c8e968fa,4acc61a2,da2c6db7)
308 Z8(d1acbaaa,f4b569cd,f4276425,4a3dc2d3,58fdcc4d,4b951b14,4798f56d,51ac9e88)
309 Z8(ee452e6b,e563f90e,77f58fb3,0d485708,033201e5,a5422c79,8574fb5a,dbb86fb3)
310 Z8(d90a5716,6a72590c,9e9d9649,e62152b8,8b6a6b0d,ffe7525f,1dc2ae11,93618386)
311 Z8(c3665344,b58aa6c6,53452496,04085f2d,41fb800a,c2399a66,60bd1d29,8513293e)
312 Z8(28bf7140,fb024a7d,8ffcc437,bc8d6296,a2dc0a23,87874e30,2865b7ce,a80a7c8a)
313 Z8(018b5b16,7f742b36,d9174f75,4e392763,8b3a1edd,fb46a158,14dedff6,0d2b8cef)
314 Z8(b8f343cf,dc75df89,1fd2365c,98f25a77,a3653233,ea13eb11,e3689ee5,81cefe21)
315 Z8(402445a8,6a36a885,1a4fd92f,dec1073b,131223b1,7f5353a4,862fe775,5650e6c9)
316 Z8(35b2c2c8,3e598b22,68d71601,0c4f62f9,14944a93,d61a9765,8d10ac4b,2df4519c)
317 Z8(9cf023be,37115c61,51859791,12690855,df8e5902,4add3e25,e0991538,322aba35)
318 Z8(59e4bf5a,f2c4bf07,f7269612,bc633b57,ce3d177a,a31e9613,ba4d4691,2c90c164)
319 Z8(b7ed9d5b,f452f8cf,2f6de019,eb27e870,37f0c3ed,80e8eefa,5c160015,2c1bc14d)
320 Z8(9fb44b73,ddbbda77,8468170a,a78edf4e,34b827da,92173afe,3f55efed,a8e7457a)
321 Z8(d6c7453a,31724824,f6cd81c1,64c046d1,26b99c14,cf3d900f,80bb424a,74472a60)
322 Z8(a0ec0dbf,d932ee71,c34c44c5,a5648343,2d4cde24,a036ddf2,bd64d46d,ad1485c0)
323 Z8(979cfe09,5dbef230,3674f69c,9c04754c,021306de,59e38f14,65a6caef,1fb9ec0e)
324 Z8(99ee65de,96f8c46f,ae4b994b,0053aaeb,17593b83,3cc24c67,fe54e8fe,0ef07c5e)
325 Z8(d85c28ca,7bb4c14f,40b8f013,4adf0cdc,2e1a3420,c8034e32,e193ee3f,95fbda7e)
326 Z8(a2131cae,abfd1059,e645550a,58cec677,80e88d62,d610483c,da790950,08cdba6b)
327 Z8(45a70085,b7c5cdeb,32d258a2,474c4555,c1fb8f03,468cbf8c,92adceb3,1b22809c)
328 Z8(a1cb3de8,567bf625,74d93b0e,79de52d9,2f9c9c45,262cef5a,6197f010,825906e9)
329 Z8(5af9aec1,bcd99b48,97118482,93e09059,4553d04b,b521706f,c174e809,65af81c6)
330 Z8(3946a98e,94675d45,ccb143f8,cc2c969c,553fb20e,f6c19fb6,d633f4f7,402c4653)
331 Z8(acb42b76,9e8ef8c9,10dc994d,a461b151,aaf44049,016c6405,23f8d36a,91d11b0b)
332 Z8(177dddb7,07a086ee,4e90cac0,31d61bbf,a198fe81,db06fb79,7de6ae26,2ccfdec2)
333 Z8(93b48254,a4882e9b,18dc91cc,58912581,06503f14,3caa142f,8c3903ca,87cf94f9)
334 Z8(dc7ccb6c,776ab160,1a7dd901,a7d6a0fe,7b0668e5,883f3dd8,ea1c7b18,6715bf65)
335 Z8(21456aab,3339d49a,70055fa7,32db82bd,9509b69b,65ce2a6f,5b1930ef,e426137f)
336 Z8(67fdedd2,b1e9e4b9,7551caa4,9b33ef04,54267c98,042c6ca5,db5aa9d9,9c38599c)
337 Z8(974b7017,58003677,9ee00b81,c978c57c,4c530300,1f9b560e,df0e4b3f,cff707cd)
338 Z8(0bc2656f,bc23f982,a74f12aa,849aac59,c45287b7,80a580ed,c94b12b1,e843a996)
339 Z8(530a6887,3029bdbc,53fb1e2d,1633a4d8,919f7c6d,bc153c72,9c4adabc,6102e7aa)
340 Z8(35e6dd8b,d459f2b5,e9e8def8,6ac8599e,15bff119,e196b789,a8115e0c,58d26680)
341 Z8(501717f4,f148bf97,f0b2ee7e,d0419128,924abf62,06b98490,c1677e10,dc0b7352)
342 Z8(e818c113,23455571,f62e1479,70ec1c15,de72dede,b82dc5f0,ceecf3a1,e9b26631)
343 Z8(60cbc58d,3afa494b,f85e2f7f,fcb4fd5b,08b62d40,7669dd3f,dd4abdab,0bababcc)
344 Z8(4cefd2f0,ef33c8c6,d7d3be3c,362b4fe7,bc56e6d2,d37c63a3,41cad63e,d66c55b0)
345 Z8(2862ac4f,11982f5a,f20f014d,da7bba60,b2206dbb,1ca8d84b,fe2e2dd1,67776002)
346 Z8(ca270e4f,cec415a9,4636d5bc,385c3f9f,04ab7b60,02e423ee,7675749e,f8cfa777)
347 Z8(38ba5e2d,4fe8b9f0,089cf725,72d97c3e,4e64f0b8,f6ffcb7e,e06f1640,981284ed)
348 Z8(2a545858,e3cfa2aa,4b087f06,5a0510b5,a2dca245,0c9d6ee9,3ffbbd91,ffe2a1b1)
349 Z8(8b3ae0e9,53b7fdfb,86183f63,b14a642d,2a369ab4,0e50b3ec,2415000b,4a20abae)
350 Z8(674a4cb0,1df9e334,ab3d1e52,1b6799ad,09010604,3f271889,59b1ba9c,5fe6bcd2)
351 Z8(a27f64d9,6f10d68f,09a53e53,62a051a5,27d0d7a7,696313e6,fc92fa5c,9073b402)
352 Z8(1661d23c,703b7465,ba6a85bf,9a2ce73b,4f107f69,fe60e39b,6c557d40,aef1e5fc)
353 Z8(84c25fa4,3c47d9ef,c4d2aeee,dad6c61f,a268b689,420f7029,37489a25,4e121ed4)
354 Z8(3b234dde,7044587d,782a3162,2e2fcb01,592ddc10,f3e81a10,41c115f2,5579186b)
355 Z8(e5a8f47b,849fa3ef,855f1fd1,f1bac200,5e343dff,2e2cfcdd,78a07c65,a621484f)
356 Z8(7eb9cdf2,e518f6b1,8997e991,d9400b97,ebfd5f50,9486f827,5c379f79,321aace2)
357 Z8(838f0ede,a81c65ed,79a8db09,ba62c507,04664879,af8b0f1b,850e54ce,37a2f13f)
358 Z8(aa48df62,81295f39,ebae09a8,4e952a58,220a67f5,a0c2c0a0,274ba938,bc88fb06)
359 Z8(8d09c8b4,e2d161af,bc464f11,fbf41bea,e9d636d4,bc9d598d,3966d13e,f101a4f1)
360 Z8(4fa2bf1a,0d5c5a9d,2dec2065,6a9ed9e4,6f4f606f,3a10a560,49bcd39b,9375b64f)
361 Z8(e809707c,9722ef2c,6112e8e8,dccc3333,b8ad8128,5562275e,e38df4ec,4c01473f)
362 Z8(071045f3,3554d086,b574e03d,3dcb7c41,a2e64dac,94add171,68ff330e,bd020296)
363 Z8(96d876bb,15a8f054,63a89867,9407cd41,b2b9003c,14042357,8f229ffd,97669e30)
364 Z8(d4198f64,16f3982a,86d73878,f22f00e4,d039682a,9226c81d,01237758,82732822)
365 Z8(3e469d18,a83fe6b8,bfb68386,1146d412,3a03a104,17f69581,5c1d7f2f,acc6a152)
366 Z8(c047dc32,16e9ae91,e87a7325,66547d69,1b75e157,8e2e9934,43e3d3ec,1ed389f3)
367 Z8(d5247431,4329ba83,04716c3f,192f2d4c,69eef066,a9b45d84,3d480095,573e9ee0)
368 Z8(2e166f31,370e6f8d,3135f416,eca10709,aa412112,9ab920c9,71cfc7d5,2ac723eb)
369 Z8(29fe827f,3a867440,3b8c4d76,d3fbcaf9,ee930bb1,3c6a2051,eeeae4d1,3df76f22)
370 Z8(724e00fc,00a9d8de,2dbe8921,ebe5189e,0957e03b,6c4f34ce,0f3b7e37,28a7d4c7)
371 Z8(6ec9a92e,d28fee8e,9ed145ea,c52d8614,7718c012,74104ed1,f5670614,0fbafea6)
372 Z8(f23a8236,d6d715d1,36777389,c1b2d26d,c851fe2c,db9c753c,b947c9f1,b5b1fcdc)
373 Z8(d3cbec78,a1742a3d,e097c05b,9f61f15e,0c9d32f9,746877b8,8172fec4,d5503879)
374 Z8(7d5b2cb5,aeec3bd6,65b6e9e9,21c575eb,3419dc08,21cc6fd9,16b14565,d225bdd1)
375 Z8(5245ef31,be9aa946,d2238972,34d44cbe,2caaac5d,8ab539bc,d85a0026,9e25b566)
376 Z8(7a778618,39446cbd,9da3b989,bac0350c,79897b42,a0a08142,afbfcfdc,6af2b036)
377 Z8(5c6fffcd,2a62f9ad,bcfe2140,0b2546d7,ef60b780,6511329e,d52a28ed,edb0e71f)
378 Z8(07293273,d040016e,36cdb0e1,6e9155cd,979ed26b,7c887fd6,73f34935,cddda157)
379 Z8(72aa1cb7,2614012b,47048167,5eee09cb,576a8376,30a008e1,7fc74a1e,fce74637)
380 Z8(7e803728,63bf97e0,528bc7cf,72fdbba3,3100286f,313c56a3,e749f324,fec4fca3)
381 Z8(0523aa81,6aba7a62,19d8698b,341f98c8,651cb191,aafef9a1,935aad11,2931c44d)
382 Z8(761a8d46,e572fe69,f9d7aaaf,12bbe393,ec255b65,ee571552,8e61e2bb,14d76b21)
383 Z8(52c396c6,09cc2dca,7c3486ed,e1c3fb0a,aa79c85f,202d0adf,6573e03e,d2748ad5)
384 Z8(98f5609c,86cb914f,590ba3ee,a1ecdc59,84bd1dbb,6a01d520,8df603d7,8f433e3c)
385 Z8(997a6d8b,6b887aac,cd9ce1df,68f56761,74fa1fda,bf11b00e,fab51efe,3bd457a7)
386 Z8(85cb8f08,8a0a84a5,4f120fa9,94053818,7e8f9e25,31ecdf9a,ba526855,a1c8b028)
387 Z8(3bbf2854,9e425486,ccf010f9,a5d3fd83,0f8da642,6d6d05c4,48359ff5,4447e34f)
388 Z8(6e76d1e0,eafbbf41,c2199fd9,abde1fe1,d9e03b78,59db812d,5fc7d1e8,32da60a3)
389 Z8(9b8443ae,a9bd8478,6d4fefa5,4323da20,3328f276,bed8394f,a3aa20a5,cc86ee7b)
390 Z8(7806d88e,4e7c527a,ff879a04,fabc36d6,c22a64e3,f40196be,a410aa71,a74d44b3)
391 Z8(3d337cac,472d1a34,b86b74dd,dd559082,b62f2138,ae33ae97,d0fe7495,8b7e43cf)
392 Z8(b560a3ec,db9c77c4,aa93b59b,a2b2b853,86c1d87c,0825997c,1ff09480,0e225e25)
393 Z8(bf98dfbb,0cd3c494,39fda330,c47735b4,68b3e92b,677c8e94,fc363ba2,87304eae)
394 Z8(a5c93f82,5f08e819,05b85120,cc6ddff7,422d6d85,2ae06a4d,3dcdda1a,dae20c69)
395 Z8(0473eb14,11489cc4,c6255040,2eff173d,81b45c4d,cec02831,9ed865de,8cb817ff)
396 Z8(4105feec,4a879c90,cb9d46a2,6b16ca71,4ca330d7,c6b5c1d3,4719ee8d,4398c456)
397 Z8(319d33ee,ef465d0e,72db532e,935d0b76,ef428db0,5dcb4f67,67a75077,45a9b1a8)
398 Z8(0f74b1bf,2aff0faf,d6aa7d70,c7a52b42,d9daac7e,058efa80,e814c224,33038a03)
399 Z8(cdc08abf,7bec9c36,c35059cc,b2e577b6,bdf5fe89,c5089a06,ee56dfd2,fa65579e)
400 Z8(11bdca8e,b3471cb3,34112a78,7b5463b3,8e9f87c0,3f000f04,b124e76f,b4c0188f)
401 Z8(ba5338e7,81b1f949,362e5a55,6aeb2772,3897ffde,89819c39,51c47be3,a25a676e)
402 Z8(add51fff,1f3802e7,9a59711b,35287ebd,9ca20b8f,6a55bd83,b7edbb2d,c36191fa)
403 Z8(2ac38a26,ce8bd81d,b955639e,80c23e1a,f59538fc,0df32298,e566300e,9470fca0)
404 Z8(50c77d4a,ab9237a6,dd5b2d90,8042171e,e4d9d54e,127192b9,9afee7b2,1f881e78)
405 Z8(dc1aad62,0f8dea33,9947d8c7,d84cbdbd,fc82fad1,1e9a850e,e1c08b30,7efbc0b3)
406 Z8(83fac85d,0cfe9492,5a60afb3,5e917e15,c7e2c0a6,b43a3fc9,6e9992a6,26a40dcc)
407 Z8(c0b6cd7c,dc29d874,490a9691,d1b2fbcb,70822fcf,ebdbb8df,0f0de925,b446cd5c)
408 Z8(0ba7b0d9,15f53fec,11ac20d6,ea6ee286,c642e10e,458d7ad4,fc9513d6,4d24a8b3)
409 Z8(afc14710,a256fe37,ab59aa8d,9dc7de22,f90a86bd,71456d41,59b02d27,9b6a0762)
410 Z8(c3b77fad,f18820f7,b60ea211,e4c2d9b4,4c34997b,30d84003,ec1313f5,3e284292)
411 Z8(e164928f,ed7217e7,50f9b146,060e3735,1ae6671c,4c2b80ab,ce6c5cf7,6154f916)
412 Z8(cb174b1d,e8a2c804,9e8c3d39,1daa1f0f,fdf88c8c,ed06d60d,b8beb9ec,403d3acd)
413 Z8(1452b436,82281f9e,c7264052,47c41f11,e06fbeca,af85e71b,794a9d2a,3dccc2c3)
414 Z8(c0d12673,6992dcf3,f3f5a85d,fe4c77ec,8a3e243c,819b63a1,6ca458b4,5f316fb5)
415 Z8(9563b603,bf7d3839,0c30362f,e573b3ae,9e9a2d10,e5a4ec10,4b36da3d,cec745a6)
416 Z8(8c156914,ed81e976,d54665e5,2fe201aa,b07dcc44,e395b974,5457ea19,4412a7f4)
417 Z8(dc99c22a,063a2695,c8ecf1fa,ddea54a8,69164be2,19f9c4fe,78efcf3a,248e6dde)
418 Z8(babb2635,725a218d,83ad02f8,be9a51e4,37f40376,354ce094,fe653d9d,333ac2f2)
419 Z8(d6fc9c3f,7ad92d4e,56af163f,7b65a8e4,0251999f,6142d49e,78c910f2,b269591b)
420 Z8(6530bf38,334e2f52,7920014a,0371ba95,915e2b0f,f6da9411,f437ceef,c3242664)
421 Z8(13120af5,45cdfe4a,34df4804,4fa5caef,031edb3a,c3a764d3,535f37a2,037ce182)
422 Z8(7a774777,077149d2,6c8b0f61,c613e457,446a5195,3fb56ddf,4285f9bb,38119391)
423 Z8(593266a7,0f4e9fe3,2e9865e0,fd99933f,aba19d5b,dd6484e7,8e09073d,826986cc)
424 Z8(bd556e67,85ea82da,95d0c141,b27d0147,b60f0103,3e2e5fe4,5536b7ac,e7b5ee82)
425 Z8(8d1f2e1c,c8c72d66,35c578a4,b940d44a,09c7a3f6,dba58117,6453dd1d,56947615)
426 Z8(bb5e0d83,57d0934b,2c565994,53960d0d,a7225f5c,242e456b,5374557c,6e0a75ac)
427 Z8(61990bc4,75908e5d,8ee49443,245cdcfc,b6bacb97,ecfa87b7,1abda1fa,6fa185df)
428 Z8(a0f4e7ff,b6b7b3d1,def531ce,c0b0146e,7e71c665,6b19f0b7,d7833a2d,88e832df)
429 Z8(bf364bdb,255cf0ad,a6dc43b1,9f4957a7,8068ba08,62043a04,3ec023b9,6cc8e699)
430 Z8(f29d9fef,be8e422b,03b78383,01d7d7d4,319da696,e1bac4d7,644d9a9b,524064a6)
431 Z8(51bcc378,d3ccd8e7,91a18352,56f88cae,6b67ff9f,9ccfe66c,54079417,03d802f9)
432 Z8(0fb6ec2d,64c8ac2a,0e3a81ec,38183b05,67c509c5,268ab93b,e1422f36,5859d7f7)
433 Z8(0333e55f,2b332493,cfc57410,9c00803a,4490b329,a69506a8,3c7c8005,2cc472d7)
434 Z8(610a2a54,9e03eaca,ee446427,63469aee,8d9eb2cc,4815db52,dfb2a4b3,5da5234a)
435 Z8(2fa81c4f,5b93a4f7,4981205e,25fa87be,655790e5,74250d4d,290d062f,ca17eaf1)
436 Z8(ad76a0cf,753feb13,86b3fa5a,60cd9e6e,a1784e20,58ad488c,1e777ea7,f19e5afb)
437 Z8(5f44e128,7a6c1d69,282c8c0e,85ef3b4f,3d8e10b9,2978a42c,7d520e68,3a22ac5c)
438 Z8(16787a6e,a913fc9a,8b2b0900,e6942d2d,0485c40b,20c94470,efa45bfd,2fbe9e68)
439 Z8(e0c16af2,0abbf073,f5d6bf94,6cfc6395,60b6b19a,65d1bf29,7812e263,81724f15)
440 Z8(d6dd4be4,acc8e4e1,040bf9ca,6aa87c48,752b13c9,6e207697,64f97aa7,49bad747)
441 Z8(e318856a,362bb7f6,55fb34e1,257f1def,828fe68b,fef81f03,f1a795cb,60f9c568)
442 Z8(89fa0414,333c5e6f,651fd552,8211dd64,e4120a56,6d264133,74c9a54b,80bb2305)
443 Z8(5b11cb97,59c9165d,1f65011c,0e2b72e3,9d167ab0,db9b4729,b1eeecd2,6af5bf0c)
444 Z8(2f9605e5,a80fbea1,81ad2f63,5bcfaaa5,4c7f5af0,dabb0f5a,c88b926c,0a4289cb)
445 Z8(1edc041d,8196331b,887a104d,4ad5ff75,e840ed15,972576ef,08ddae5a,c1d5ae3a)
446 Z8(924f1d81,35628452,ade4432f,edaa4083,34c0eabb,d04ea2e7,e4f06e04,a73c9800)
447 Z8(7de7648f,6fabc0da,6c9f0187,11cdcc1d,a44032e9,4edd46a2,eefda105,0d6f2b04)
448 Z8(09348209,3a8e2c0f,f04e3e80,61016297,6af1ebb0,69753a6b,6113e8a7,86869ec1)
449 Z8(02c322ee,fc64bb48,c24a72d0,4ce86d0e,4bf84854,65d6915d,95441441,b545c9b0)
450 Z8(e1c0d8d9,11ca9b5a,dcc771a8,952181ea,d8be314b,680754e2,5fe634ef,42fd8083)
451 Z8(b6c21561,8a33a328,a2fc4672,7caace45,f7de5cbf,c2b5d4f0,16e52e07,cb4dd2f6)
452 Z8(0a3d726b,44150391,dba4f2c1,c1c375e5,79b5f27e,38f707f6,46f10dd6,99bc3b62)
453 Z8(928e3376,279e47a7,84004249,5cc33ddc,2a387cf6,eb470539,c186d2c4,a3bc8f5a)
454 Z8(fd9f40d5,21219b40,39f70763,813cddb0,d598fe1e,d7cd052c,ce05866e,4d1c71e9)
455 Z8(3ffeb8b3,ce3bdcd2,aa26d3cc,38b667c6,ddba9233,f6862a8b,91e681c8,8f900a89)
456 Z8(819ad4a5,a31e663c,027b8001,4cf5014b,18ec47b1,898a2c81,60f7420d,b22f1f01)
457 Z8(64081ef5,c5677ffc,cccaa2b9,49506dbf,c83ab954,aa305a3d,7d5f2ac9,6fa5ee04)
458 Z8(bd00a01f,a38d9852,485d1cfd,63893e13,3260eb86,2624de1f,970c74b2,3bc14e6f)
459 Z8(26d4fe5c,162c495a,335bc7fa,085f62c7,ffa94d1b,2884be51,8affe4ef,2b9e4a10)
460 Z8(8ce98941,005461ea,8a2c516e,183127c3,0b011936,35c18ee6,e40abee9,6df3bb64)
461 Z8(0931b7eb,47a92fa0,9b449153,6de1b799,612dd296,a05f104f,30d0997d,509835f4)
462 Z8(83d064b1,ba3062d8,b3fbbe80,0284e29c,2fee0176,d4d00d0f,3d204abf,e2db2124)
463 Z8(517c73b4,0a0ba981,f3aae28c,cb73f073,aaf5d0da,b87390ff,d4f55752,a06f9130)
464 Z8(71a1cab5,46645a6d,055c8cde,cc8cd986,70807b57,05c938f9,a6f907c7,18351486)
465 Z8(d28e2d06,17a03091,b46824d3,04826338,f080559a,83a48684,29a9caa5,8fe94a8f)
466 Z8(1f64c387,549534ad,0cacf352,1a7960a9,84c40816,35ef8038,e198faf2,8cd4749a)
467 Z8(3fc35705,b4456a74,3aaf0be5,cdd96a83,d31ae6e2,0b4b1e1b,8f7bfb45,fa65c53f)
468 Z8(506babf1,72b176c7,8b6d5eae,da74bb88,4854ccd2,da0aab69,1087d023,88272d7e)
469 Z8(7f9f6a64,2a90da41,2d7373bd,b965c475,89970ec2,35b4d313,a2cda40b,22f36ed8)
470 Z8(00fd6841,a0782276,09fe0f88,9196df7a,9ab4a758,9c94f271,e3be5439,e9f0f7a2)
471 Z8(14096571,ca3d9b10,465bae56,d2354d09,1e78a2df,f734761f,5df73a94,653a45fd)
472 Z8(d2e791f9,da42c901,9d33e512,7c1bec6d,c0ab7a20,ab4bb5b2,0556410c,2da2d912)
473 Z8(3979d55a,91e94bee,bcc920dd,f24dc6f9,9c304167,51d7181d,5cd731d3,1bb9a5e6)
474 Z8(fdee6b54,3976d6ef,afefab93,838935d0,3ad4f90a,ca36e333,af9cfd75,cd42d74c)
475 Z8(873dbc02,ba0416de,0c600969,2ecf15f8,2faf275b,58475376,05efcae9,66475a02)
476 Z8(ef11c4e3,a5ecbf7e,b213e4cb,9d059fd5,a2d47c4f,49b21ac2,a2fa1a21,0be897e1)
477 Z8(0f9645ef,37448d50,c20f40c7,ec4f1c85,749840c6,12fe38a5,c7fa0911,41f83871)
478 Z8(96cdfe6a,75daa9ae,37cde45b,315e71f3,fd3f4efe,df9ae38b,1700fc0a,2b388b92)
479 Z8(de2590b1,1f431ec2,4d18a81c,7a6cc118,a5133d26,4b874563,b96306d1,31da3bd9)
480 Z8(1c2e86e9,5a92bf4e,f2799c5c,885aba65,ef3f077f,a80f855b,6c742aaa,25558053)
481 Z8(ff1c76b6,ca92ab77,9a0a592e,93a4a4da,9f2370af,9d2eab5c,2fa2b955,65da0ca9)
482 Z8(e719dfb4,03fac65d,83c634fd,7ce1e57f,047d37d7,cb318673,2f8b79a4,c0afb950)
483 Z8(012a81b3,a8f4d3e3,9218f1e4,1a70e020,6ac524ed,52aa6254,d6a37ce8,a998641d)
484 Z8(f9cebbef,5d4f7698,f4f48a41,a02b7a38,51f224c9,5f732f35,7fdf432a,e5504fbe)
485 Z8(a88e2f05,4e295ce9,3de5ab56,5670395f,80c02609,ee2423b1,9fec35c0,b902bd10)
486 Z8(a5a02878,76e1979f,662f12ce,9b265cd7,fc96deeb,1d5ccc02,0f681d63,5eb6b6b0)
487 Z8(f5ad88e4,b3005299,43cdd351,2fc844d3,9038ae8e,1da5fce8,3a35f93d,3e1f9879)
488 Z8(93500a30,3f3481f9,ca0f3d1e,d1228c81,a29b994d,e7b1c973,08b8b290,435148d5)
489 Z8(b64aca15,b59e62f0,376dcaf2,dcf4db8a,9a9ddeac,6ce2de8c,d376426e,c58f9ca1)
490 Z8(b2bfe777,ec0be667,e6e13388,ba8c4aaa,b4dbbc32,e3433e7c,38ca798f,620ec5c3)
491 Z8(8c774ab7,82c56d95,bdbd9e49,355c3303,f2e90307,a88738f7,2b8d332b,754837c4)
492 Z8(0ae0310f,f5e79f78,51dc847c,49b75621,24992230,7a0b37e0,6c5bf081,2bdf3081)
493 Z8(96489218,3b0003a5,6b8677d4,046b0ad6,d92d0a0f,f437810b,07c3d7f5,c8bb8fc4)
494 Z8(8975d8c0,73525641,c562e3ff,fed2caef,7f0f391c,a06e76fc,b3bb1a79,b3167291)
495 Z8(d678a207,18508254,8d03c20a,2a4bfbdb,956021cc,15ed9dbb,d953d941,455fc5ba)
496 Z8(19748662,32c889d7,41de65f1,b0cc248d,70ed1b51,c05de5cd,a4bb95ee,4a885848)
497 Z8(22670cf5,6f742c2a,799b494e,63447a5a,f3d456c5,7b3dd99b,71a4ad6c,8c93b4bd)
498 Z8(41a521e0,d1b398ab,6cebfdd5,8e137ee4,7d6d144b,2faf9270,7c493d43,b02d70c3)
499 Z8(96d12cdd,790210cb,4fa711fb,4bbe550c,4cc1c4e3,670d8e62,798ac5c5,97269f22)
500 Z8(6a31ae8f,bc09e0b6,674c7561,45c135b3,a5eebcb4,dcc4ad8d,cf160a2b,1de4610f)
501 Z8(dc43c0b3,fb1b3a76,36451a2f,33bf867a,fab8a543,c442c303,0246b72e,02235eb0)
502 Z8(5a39bf41,7fb8e4ca,a7c4d286,cf81208d,62d1c65f,4812a716,ee93ca35,b6354d4b)
503 Z8(920c0177,32c6cc16,299c14cd,bd7f15ef,346f5ac8,2d13f323,c32a48a3,30ea3925)
504 Z8(aa4c169c,bacec4ce,160e11de,df96e25c,8988dce4,01a986f2,eb42ab5b,a12092e6)
505 Z8(8e290691,f78f45cf,e6682a09,60ee289a,0bbe0d1b,049c0d2e,fd979819,74784a16)
506 Z8(f7ff5380,72323d62,ce2f5757,38083a10,bddced5c,ff96efb5,2249f807,980e8f30)
507 Z8(5620cd87,a4b2b116,01753cc7,a2fd0e89,94df8174,cd067049,424205a2,71dca628)
508 Z8(15359599,84b5117a,eef608b7,4d503fa6,21cf3dc8,9613e554,0b79f89b,590c9c94)
509 Z8(157f2143,900736d9,86820761,75ae6e02,2bd445ea,88309eef,6c2c3f12,103fd3d5)
510 Z8(48a83352,f293f8a5,5083c400,2c4a1d55,2739f9be,8f3001a1,ac6b5f95,48e0ecb1)
511 Z8(2ee3eeca,9e70375a,09c50d49,7578d538,33f85be4,7916ee55,06907ae6,a1a26fcf)
512 Z8(2e24c445,cf80c99f,88c68402,19027320,82102ba2,3feb41b3,4e97d9b0,f8ce8ed9)
513 Z8(0b7149f5,1b9ed568,b1df1c60,527eff8e,0899a18e,eafb8c50,a06b411b,51bdb36b)
514 Z8(9c7200b3,57a49e61,630e1aac,8e455ebb,af793770,b2131ca7,923c900c,e9417816)
515 Z8(5d72dd51,aa3a3d14,766837d8,656f919e,793b4b2a,a64306e9,aa1a9642,00bfa5e2)
516 Z8(16c222b7,a8837cfa,63065529,977f2d0b,5184c500,e567e35d,6cf5ddf3,cea84345)
517 Z8(9a656110,ac3ba59e,86651415,88f39a78,93b7de7c,9ad5210e,214621ec,adb1af3a)
518 Z8(a50ce5c4,4a39b873,04618c27,98f3d112,f2ea6877,1121d963,791864ae,85f3476c)
519 Z8(2b9e53b3,a257fce7,76943f0d,eb940e3c,b97f9163,0b65f0c6,3444e927,a2723ed3)
520 Z8(e995a3a9,bc72abe0,c03185bf,b98be86d,e4a040c6,c0854bbb,3aa7585c,9cf286e0)
521 Z8(dc974f9a,e842258e,40c98f11,ebc60262,37681905,38eee755,c9d9a699,44b24ca0)
522 Z8(a26f3314,9fde180e,91dd5fda,b78d2500,567cf4c2,fbadaaf6,ef074e40,af1ff740)
523 Z8(9d7efcdd,b7634c33,fa542641,6d197262,44d351cd,fe8f0136,324bec11,6d2176ce)
524 Z8(6fa6fb31,0d171391,2b5c713e,09484346,0c7c7c34,ceb4d9d8,2c7cfa85,a15a7667)
525 Z8(773fac44,09d29096,7e1af9e0,e36a6a54,0f611fff,47ecbf65,e8b88ad1,782b678b)
526 Z8(42e0de73,c87bd2b6,2b3a440b,1a2883d1,104f9cdf,552048a8,8a30336c,32359f20)
527 Z8(b8b6da84,986c328b,ec28c8dc,6d6cbd12,732a3b88,014e3795,e3d2a945,10cd66c6)
528 Z8(34eb9a54,44642866,baa78aaa,b4fbe210,29c4f58e,23a9f811,a6a209a2,4e3f939d)
529 Z8(2da8fbef,fe779e58,78fc754a,dc0ad026,7407466c,a2d947ae,c9145112,97474282)
530 Z8(87f6c5a0,7804c5a9,f2d8466c,c435c9fd,5a10e825,b31c0738,71fe322a,093c2c22)
531 Z8(dc03ee40,ed26d33d,a9b25d26,2e5e9836,9c0adbe4,d2b0c42a,9b7fc4f8,14337368)
532 Z8(032fc35a,e9d550b3,8a482575,6a738d55,87567bd0,26ca0775,3788b71a,db3b666a)
533 Z8(054e4e69,edab20c2,a3397ae8,cf2bf34a,b0012618,942ac74e,f05fe227,39c08c40)
534 Z8(78fde40f,8a31056d,0887cd49,9d864f27,320ae003,bf4b8e10,d2630cb6,0e0b49fa)
535 Z8(888d8c40,7ffa5c66,4b154cda,5833dc33,db77ce73,16623764,3c3b6f75,47e432d8)
536 Z8(dc524cda,d06e3b87,db9615ab,a67e3e4d,f6fa153a,ab1ae872,f421d738,2ec9c2f8)
537 Z8(66750ac4,4356d8b2,d364877b,470d310e,4d8dac3c,9a41057a,5a872b33,9c75712d)
538 Z8(5634fda6,90f3a8bb,6909c9a8,e1f34c38,e042ec17,ccfd6b40,5ffb3cf0,3fda7a6d)
539 Z8(a9f08b22,b79b50ed,873caf4f,f9a2b5bf,704e2b81,43943ffa,a5ab6aa1,3133b641)
540 Z8(fc0945a5,c568f3f5,dcd58989,d8c8f252,0dc04c3b,ef9b85f9,2c55f416,581eb7c9)
541 Z8(acc0c38b,40216de4,52df8bfa,627f6dea,a109da7f,d52722c5,f5a2fd6a,0cd2f0e8)
542 Z8(a5aa9488,596f9884,1104dea9,c8535ea0,97985f47,150f959f,63f5bfd6,e960465d)
543 Z8(e047dde7,6a8f3e1c,ad1355c4,04695165,4a7efe51,837903ea,36a9393b,3598f8b1)
544 Z8(06e6f4f2,7ec41821,50e8b0b3,8841c284,ccc44173,1228f51f,d8df8842,63d89b82)
545 Z8(8a48cf46,06167261,55af6088,f61fedcb,3a5ef9ef,f7f76ca3,93c42407,60b78669)
546 Z8(d6b9947d,1de40880,78c6feaa,0e260616,0bf9eedb,45ef0a68,92b37630,479f6b14)
547 Z8(3dda20eb,450c32a2,26ba2ba0,b38f211c,b5916ef5,1f428920,474c5790,86db5931)
548 Z8(3e1f65b4,4b149f6d,fc6258c3,19074999,9b8497b2,07717189,2ad87f46,77d920ca)
549 Z8(15c0cecd,46f23223,514f4fc7,87b1a9a2,7d60c675,85314f1d,8437fcf0,4af76589)
550 Z8(c28c2417,680b5bbc,6fb24f10,9aca6a10,1d1cbc73,47595c9c,96397988,42e91099)
551 Z8(31f7f77c,c664b323,66f66721,6041fece,b172444c,e58892c9,39bd245a,8372c4fe)
552 Z8(e543fab6,58d81014,09c18e6e,f0e8e588,7f1955ca,266095d9,8c3072bd,c6598bea)
553 Z8(03dabc5e,62a152b6,c24fd364,2aa7cb2f,47bc2cbb,80fc28d5,e203d1a0,65a93d99)
554 Z8(907c3ec3,539b277a,df9b4c96,24c6cc17,c4e1f20f,43bb6911,ee61f093,2800d0f5)
555 Z8(a61addfe,40d06325,fee43fef,1efc2691,fea11954,4f409032,dc598665,87c38e0a)
556 Z8(0b5d0200,dc82a4b1,272cef4c,dcd90ddc,bed33f6f,4c95a282,c3d463e2,3cb3519c)
557 Z8(664a5b84,337f4690,425f387f,0775ea3d,430e2ee5,2879f5c7,3818551f,15e9a53a)
558 Z8(952a8c45,05ded2e5,53f3f0f6,6b0011b2,58fd4979,b8e33cf7,ba0c4e81,09e247b5)
559 Z8(ee36adab,b56cb17d,83894ecc,91b9f7fc,8841d510,3c112afc,1f6bbd1b,d460ba5a)
560 Z8(11f3d8ff,b896b844,ecfedef6,c07902ab,8564ae15,a2f9d9e1,43547967,4630504c)
561 Z8(f8ad197c,ba91e7a5,8b461c47,08fcd404,9b098c76,cede1256,1b9af659,7df0a648)
562 Z8(f2015b5e,09a4ef35,35e39803,9930ea5f,c8674023,a1ebcd25,32108959,02b7b5f8)
563 Z8(7bc30d40,62c4315d,28c51420,20b12869,57361b18,ee6a3312,ecdcb1c7,e9b5ff60)
564 Z8(e0262563,9c277f3d,adf2205a,277d101b,095f234c,b9a57105,ddecba8e,589f3a27)
565 Z8(f23ac397,2f9c584e,2cc376f0,ba86e66b,c2b54ef2,71dc7add,5e10b017,522bdd66)
566 Z8(0c513a4f,83886884,c2ebe392,fc97e263,aa5098b4,6d8f413d,fc499e94,5f467b48)
567 Z8(35a27276,0087091a,c8162cb2,88a436b8,96cc26f7,f7c20c92,dd3b6407,c3204908)
568 Z8(3bfa564a,234f93ac,e9e5f435,398e36ef,7b4245eb,7e7c7645,45f5f978,e955d3cf)
569 Z8(6a364ce9,bfaa4dd4,93cd7b93,62d29670,e3e026ed,dc8fe1ca,eaa1c8a4,c8a3dca8)
570 Z8(9f045891,0c9ad13e,bc29a613,d6fa50c3,224acf7b,04847f6d,0d92af70,62103175)
571 Z8(61763c0a,7121042c,d50c9aae,9f1965df,ac92dd8f,0c6a4e74,99b4b1d4,a237a8ec)
572 Z8(26815795,1d7e24cc,8e2330c5,d9377421,3fa6d4b9,daef41db,45f872dd,324c8c66)
573 Z8(f87ef469,6bb9562a,4bddf664,6a63eace,f7aff23f,1dc82c8c,514ed7a4,aab89149)
574 Z8(302ba5ee,bdb7df42,b6bf2968,2206e32d,d2bca852,5b27dea8,88fd4952,62305775)
575 Z8(9076b5ac,7c856ac3,70b83fe7,1c611742,dc3d48fa,45ec41d7,33da10e6,a1ad0806)
576 Z8(6cc3bb53,fe05e2d5,e451bfbd,1b5a8406,a098a341,ad72bf01,d911c27d,aca47a2f)
577 Z8(ab733cca,486522f4,eef289e1,77fc2bde,8eb59787,3ee7f5c4,08457078,371429a5)
578 Z8(7ff20dd9,14bfab5b,5aca1111,cc105d8d,64c6b0b1,8e9c5e59,797587cc,842ed74b)
579 Z8(57f3ed4f,e4538437,b9dff58e,516393dd,b01e34ad,9a8e7d43,09853e16,0b1d6ef3)
580 Z8(aa9074b0,b958ce3d,22f1d65e,d96d66e6,bb8ae192,93f51eba,7ad073af,f5e72971)
581 Z8(39709c24,1df19224,bccf70d1,256afbfd,f859c6ae,81657f41,0cf90abe,d49c0cfe)
582 Z8(1504b22a,a850c024,79229abe,fb279cc2,6b02971d,e8338ce9,4ad08065,a8fbf930)
583 Z8(401f1e7d,2977f5d1,b2bd651a,c51c5657,2275b035,07d21737,9341f412,8d2121e9)
584 Z8(71a3900c,6b19c103,0e56b370,ebd1dfb0,25ae6ea9,22d60633,229b8d18,9b3a92df)
585 Z8(48cdbc4a,e50686b8,e94d020a,018c3093,d2d0ee61,a5b8af9a,0413abd8,64d1c02d)
586 Z8(f332d6ba,1d0bf071,b579674e,e13af63b,8ec9d2e6,cc1f8772,10ce7e44,93661cb3)
587 Z8(11a3518f,1fc5278e,13c5b070,e09cdf2e,9c098df1,6c2eb2f4,2b13f45d,cde8f30f)
588 Z8(ef6f4963,66b954d8,e4f38a08,395c8b05,181581c9,92c76845,d385ff98,ee622174)
589 Z8(d97e5ebe,f85772f7,8c642474,f39a8076,869e814e,0da01871,62f3e547,985cb394)
590 Z8(06755492,c2db51d3,f965aad0,bda43815,84615baf,c899395e,76653a95,11b0e4e0)
591 Z8(aa06bab5,495cc2d8,fb375309,8834a8e6,d98b5726,38d484e0,600bed68,ea8c6004)
592 Z8(afc20a15,493143ba,916c0490,bcf22ff0,51d7602e,9a307a5a,f858c7ae,51b3fbec)
593 Z8(84daf57a,14fbe122,7fd87549,d97dcc9b,1c674161,cd85ce86,ef167391,4ec83d36)
594 Z8(b78c5f48,ec5fb40c,4e336dd4,9bc0b6cf,6f5eef05,3331202e,5f6b5690,68f4e690)
595 Z8(cafc54cd,8431df00,9a4cd177,576beee0,f5afc3b0,96d1fe51,4bbdf8cf,e7d8aca2)
596 Z8(c744c8b3,1076aedf,0d517aae,76525d26,b1b432c9,3970ea56,7e5eba36,9e264ec1)
597 Z8(a5d171bf,24d90d96,e2fcffb1,011bf68f,00713a09,ecf69073,cc80b90a,60385e93)
598 Z8(c7c9dc19,e175e995,7524defd,22ccb565,8dbb1885,24bde171,380f8acf,bb2a89d9)
599 Z8(12ce9801,813d7e01,56b00700,bc0d34ec,06b4938c,b93ad22f,a8e769c8,8fcff3e1)
600 Z8(7164a8bf,f5ae384c,52896d12,e661ed45,633d559a,8df8ac78,04b7e20d,1995aff2)
601 Z8(f2895967,b16b535d,7c79f2de,c7978c06,0f81390c,70af22cf,c97a26b1,4b656a73)
602 Z8(e974def6,7594e4f4,59c4b41b,844e6955,f30ea252,3ba2ad86,56e6bb84,e9fb75eb)
603 Z8(3dab3a6a,d07e950c,cc3dd9ea,c76ef1a0,11e44ca3,28b96adb,85e8b436,cd92fd3b)
604 Z8(aad4923e,28be47ea,2acc6205,d7f74de8,fcfbaddb,79d1b07b,87d598ca,5a95af25)
605 Z8(979b04d7,4836c21f,83d8c3e8,34c3473d,362bbbab,83c8d7bb,8c09aa82,e0247d2b)
606 Z8(6e964600,fceba3cd,2a115632,8c4943fb,45675ec1,8f35f457,4cbd2bc5,8fa2ffed)
607 Z8(aedb478e,c0b0db8d,21fe9ee5,ff4cb772,b8db5fb2,73f6c64b,3ad183f8,f7be6065)
608 Z8(ee7c65c9,4a7e0e9e,4c6bcbfb,3c2e3909,3b099536,2bccc9d3,cae91107,edb358c7)
609 Z8(c0a791a9,9b2c52e7,30ae06f2,86164755,612cc1ad,5413c82f,17d6ede9,b446b534)
610 Z8(6c58be20,3d91b4cc,5ba33888,53d755e1,6cc8d237,ade7bb8f,a4e4fbee,3144ef5e)
611 Z8(6c358d76,c8348fbf,d30ae2cf,3da73773,e4aec310,0667efc4,e3fd37f5,43a00221)
612 Z8(8a552c28,109d3ff3,49bc6f35,6dd88076,86d3ec85,d199de5a,56945b1b,e028d1a9)
613 Z8(f22e1218,5cc58e22,d2bb5963,8a956e19,14930f07,acb66b91,42a731c8,fa32e874)
614 Z8(99c4a7fb,28666c29,e0ccbf26,0ba46327,f59ee1bd,cd1f9e1b,adcc80e6,c0d36853)
615 Z8(12eb7628,2923276f,e1199c4a,efdaeb2c,fdadd3d1,8608dac0,ca39ca20,a7019ede)
616 Z8(2936aadc,6ee60c79,425e4440,fa2f5df8,998aef93,48741035,76afa27b,0e70170a)
617 Z8(5bf2cdc6,005b9b14,1d919d74,545b7577,d13c67ad,01d0d222,856ca329,8d74bacc)
618 Z8(72062ab8,22b0fe46,cd4a6cd4,10f2878d,d7715e15,ff7346f9,b330f0c7,e020efd9)
619 Z8(d54773d4,2ecd8206,92b8304e,3f6e3665,4b972c9f,9df28d7e,845e8174,d4a150e9)
620 Z8(20e149ad,cc0e5f12,af1f09dc,043f14c2,00b50ade,31886ec3,a343b364,488b7c00)
621 Z8(ee30e398,39038916,21e33e10,2578889e,6637a911,d919c6ab,e57cf1c4,4621b73f)
622 Z8(02a032a4,1ce6d4c8,1db9865c,a50cdc5d,c9bac550,b9719778,06653be3,4e8f7167)
623 Z8(0847fc7d,316154b3,66035dbc,0fab2949,91658bf0,d5aaad87,90f35d7a,ec2a9a1e)
624 Z8(217d764b,b0c9bdad,b5287f24,5b1d3a90,ec94a44b,5f976ddb,962a48cd,319f2fbf)
625 Z8(e6a8c301,636f3a5b,b3fb63a0,905c6d03,2137d4df,c758fc04,b765b662,d2484e0c)
626 Z8(829b303d,b3a48b66,31f9badf,098b2f28,bf315328,362ad68e,ddca5f4a,9315e3b4)
627 Z8(e4f00bec,97ba6fbc,122fc48f,b3d3811f,7b4ee276,c7584b8f,29e8fbb6,7c21a4c4)
628 Z8(e0b6bb59,f0b08d1c,ea6589f5,5cb9e60c,5bd008e2,539d9fb3,6f049383,e9c8cd6e)
629 Z8(07edaac4,b8aeb6a1,2939940a,5d9ea6f3,cb2e1f02,6d049ef5,5d8da069,9eea5ede)
630 Z8(406ca77a,9f724f3b,83a3e939,e1b27f9f,7c547041,b532267f,5331ad21,91b86857)
631 Z8(67ff16c8,13d4179c,fd1b02de,673f0c50,460dbd36,473980d8,ab87611f,b6b290d7)
632 Z8(5e705203,b7c85154,8229dec0,42133979,d463b65d,85a3737c,2c8f85b5,e430c302)
633 Z8(5b3d46fc,f3ed3812,a678bc86,43e42c3a,26174347,929b59a0,9e49e59b,3567c9c6)
634 Z8(74d3caf9,019dd823,7d7c46c8,6411e72d,e22bfdbc,945c5f3a,5e978e82,729a2a1f)
635 Z8(a71421cc,78f5f7c5,c198c253,a1559b8c,0ecca69d,155f6547,36569ebe,0e7a61f1)
636 Z8(e1191ff5,2bba553c,da22daf2,e47291bb,f553bb2f,0ade31ae,65b82954,85a759c5)
637 Z8(b1a5524a,4eb8221c,5525e540,66e433e9,cea1387d,651d9b48,bc4ae3b1,4c3a037f)
638 Z8(402c3990,bdf27b08,b1d23d82,4cd93856,ab2edaed,adbb2b1f,1d273e30,872574d9)
639 Z8(d7fc34a5,e2a0c4a6,9dce5d39,1e77bbca,ed219ce4,5ded478e,16dec3e3,58780e49)
640 Z8(c5e7f0e9,0ae16ba2,375d6e19,5ba080c9,075887ed,5bfbe4e4,5bb8baa2,deb6451a)
641 Z8(342c1bc8,8f41dcd9,b1523c1b,5fb51d5e,a52ce86d,696adf3b,6d1f0696,305c94ff)
642 Z8(3d6b6272,b8b2ef56,c5736ad9,6dd04673,a788a2dc,b92acfec,4001a471,6b86c695)
643 Z8(7c7b0606,29bbdbc5,7bced649,f59e1cc5,931fbf9a,4214e0e4,633ce226,d98daac9)
644 Z8(4208d152,9033fe17,f64f3541,9f5cc28f,c0b8ef8d,f0f77fce,4e0b6ded,ea8d8ec2)
645 Z8(3a368607,bd1c15a5,5f2735eb,83fae826,c11b61a3,3d6ea890,2b00bafe,04e38275)
646 Z8(a5f7abbf,a1c27f75,7df495d5,45708d42,19b051d8,a83c6256,debe718b,645ba8f3)
647 Z8(88a8ed29,a11e2c89,90ceed96,05af61e5,ddc96626,6f87d260,1359b63a,4b0f6681)
648 Z8(32da7d01,7a953318,144b6fa9,68dc2068,edc4ba95,775d69cb,5c047408,b0efa623)
649 Z8(5f78d889,f87f5869,76ff1b2f,1f840d24,b31ba5bd,a5e72b53,47a04f10,0729cce6)
650 Z8(89be9628,b209eb36,db812b0c,9fe3a8d8,1cec1aba,29fea239,769ce66f,fa4d2378)
651 Z8(ca67401b,aea7b89b,28a7fdc7,45f8a728,cccdb83f,6fe5f7ed,88f5d1ca,bef87b40)
652 Z8(f6d8a8d2,8fc76060,ba5b3933,37a1d510,a3d623cb,763c895e,1d44efbe,78728e2c)
653 Z8(d3ee9459,8d11c07c,2b6933ed,deda871d,70dbd17a,be137ad6,579b73b7,3e90481e)
654 Z8(dad0a3d8,73c61008,9034f434,b6a55e6d,b1b5e13f,f61e23d5,43f150f3,9cd52de9)
655 Z8(6c57926e,3cfecbef,0633967b,afbc52f1,e58ea230,36466e8a,fe7ff80c,43869d1b)
656 Z8(8b47e18b,f337208a,a1431164,cfe94dc5,5b1c428c,fb509344,95fc5689,0f4ae06b)
657 Z8(e286063b,38ae3230,6e9c71ea,8409483e,8ebf1258,f1534409,173c68fa,4fec18bf)
658 Z8(87f7f809,17ccb67d,771bb279,4d7b761a,382fbab6,bce838e4,f551c1b0,f8e00900)
659 Z8(ba059f72,8d3b3de1,8a133c94,05781da3,a840c21c,8a78b14d,c7d32270,e029c1b4)
660 Z8(da7a85f8,46c7a9a1,0e417c08,149e1893,8917ebf2,52031172,7bd66dec,6e97f076)
661 Z8(fac8cd48,923f5120,226a5bc1,b9a0cf64,de128515,9bf14a39,be0e8475,deefe8b1)
662 Z8(e98e4f76,eedb1d3d,a263b129,de30bc5a,47a3d9d7,5b426966,62a45aee,930d7749)
663 Z8(e57e32b2,514be446,a94b8be8,3dc97181,0cf39765,4c7a11dc,48db1385,8143be8f)
664 Z8(afecc86d,e85872fa,a4674253,6bd49108,df62e534,9c1d4b49,a832d845,aec55fe6)
665 Z8(715b762c,738885bc,c5b04f1b,6a22967b,9e1253f5,ed49d668,8d98e350,aab7067a)
666 Z8(c47e18c7,0e0ce093,902b3c2f,96ed0678,2006e282,89c81f69,1ce0c437,8ae66600)
667 Z8(cae9fa6e,26338d5f,ad4f1047,d87ec9db,8de0f3a2,0b814935,9a9382a9,14451b93)
668 Z8(78a0ec32,c53e2385,d9e77b76,37eb9454,a4369ed0,a4836ed5,7d97495f,b12843bc)
669 Z8(ced9ca9c,04eb27e3,bad5b6ea,ff4020ff,f35a00a5,22701f7a,71725988,2617eb1a)
670 Z8(ce6c94d7,fcb7e576,38d9fb31,a0973b5f,a6b643a9,0a8fad22,8ce60f57,41e0f9f5)
671 Z8(08e7e4ef,4de85f7e,037e69ed,2443f8df,3f68496b,26d893b4,8afb0cb4,e51b182b)
672 Z8(d6868f17,f413ab7f,9a465144,e5e268db,9896a976,8c45fcb7,4d2f1a6f,75135af1)
673 Z8(2e1eab5b,7178bd61,dd20c588,4fcef5ba,e210c351,ee8c76cb,15793d0c,ec23299b)
674 Z8(146d91cb,2bf15a03,cb74ca34,27dbc5bf,8bfb991e,dc222529,91e65de6,cf13a59e)
675 Z8(f4dafa29,bcbeecb0,7eeed60d,2745ef1c,a0325d23,6e3e16ba,f2a6c9df,ea72b0cd)
676 Z8(e551aed6,db88d709,b01ff673,b7b2724f,b493371c,90e45a8a,2a87d6c0,911a5951)
677 Z8(6c3b5453,b7fd2ccb,8efaf860,d88c832c,d506bf79,8b131c97,8e56c8a0,befe194a)
678 Z8(6e628ad3,e59020aa,8fd62e08,2cea55d5,928831b4,9c6134d5,b3d7a107,89e381ab)
679 Z8(610b35b0,552af8ad,2b57aacd,cdbb911b,6b6101bd,86972773,031aa1c3,c0038604)
680 Z8(671e46ad,628b811f,c9e0bc66,09d56cdc,7362cf83,af2451c8,1d888668,08347285)
681 Z8(5fad1279,f8168863,a6455464,99551309,9a4f1ce2,11cbf2aa,31884fcf,bf94411b)
682 Z8(f9407695,328e877d,254cf631,7cfae701,3c119069,9dba7202,7196b8d2,d90885dd)
683 Z8(27e3043c,c79bc297,a06f0f62,254b80cd,1f8a7202,11e16a63,6e178fda,0eb344df)
684 Z8(cf093f01,a0bb2192,c1a15531,569f406a,8693e780,b6aa28f5,ed279834,d4d89405)
685 Z8(5e23da36,e797ccea,ef3410cd,74683042,5a8d64f7,dbc693b8,887adce0,4b9d9384)
686 Z8(37444bb0,c1861c99,f0acc618,d277a212,c0529d15,e816fd98,2083af71,d2fce3ba)
687 Z8(044e7e7c,a3b027fc,8bfd1670,ccbc2ee4,6c77ce45,19890f16,9c3766a0,d57747e2)
688 Z8(b8e49b25,76247f82,cdcff962,28088802,c0fa5aa5,13e42a03,a250e54a,a4d59b5d)
689 Z8(b1d38d77,26d2a612,40a48ec3,933e162b,4ad0bea9,67676e00,4c462745,03006c98)
690 Z8(84f3663d,f784222e,a92f2431,7a369efb,cbc0636d,1996a4c7,d9a47887,a517cf18)
691 Z8(4c7af17f,808c7f64,aa5fa14c,d7d01850,ceebfcf4,58e3717a,f34f00ca,11270d43)
692 Z8(c226f4ce,74bc96e5,ab20d76b,0d278922,e4ca0879,6a112cd3,fcbab1d5,79976359)
693 Z8(36d255ef,ab39b1ce,c75daccb,f230436a,d6d36831,43722ddb,453e3fe1,e3c90d84)
694 Z8(cd29b207,e805dc7d,83a0bf69,202b2fac,ceca1988,feb0bc08,64dda8eb,b6796801)
695 Z8(b171ef24,459a01a4,b2f922ad,4c7ad50f,8fbcd4a6,777212b6,5cae0f2e,69bb9cd5)
696 Z8(67c8a88d,198fc0f4,36570e78,6f171f64,d71c0a30,4d2c8515,cc60ab38,fd2f9877)
697 Z8(cc10fec3,13eecb4a,af8ed210,382a32de,2748a46d,1a87bab9,b341f987,d9954d0b)
698 Z8(8bb0c828,c5f12fe8,d3c67bb4,e57e7395,ae786d8e,76f5a99d,52a10f04,16d96149)
699 Z8(08a061ac,47d44b83,1a51b785,d964298e,0504be82,2cc2cb2e,17a9eab0,22a482fe)
700 Z8(b0fa8008,898c527e,4324ecbe,908291cc,3a89d5c3,fff21a21,fdc057f9,79ff6720)
701 Z8(1e5b25e8,87602c68,955c6cc1,58733cd8,0769ad3f,e7e920de,4f83dd49,f717cd3c)
702 Z8(f0902d79,4ffcbd3f,09c6a089,12dc12ed,c3c1063b,4c8aad29,c09fbad3,7ad4fde6)
703 Z8(c91023ea,aa285feb,d7dd6467,201a06e9,2a06fd24,889802e6,d30166ee,dee6048a)
704 Z8(01f89035,a7daa758,0b371211,474bb586,e6f987dd,3b9a914d,1721e96f,6627a798)
705 Z8(fbc3812c,f29d1319,cb6d16c7,6d3272b6,15c7d715,78fa0a4f,6707aa46,1a0fd266)
706 Z8(7ed2c204,6a8d44ff,083f8563,82fb46d6,8f2cab99,077b706b,6248714c,8e6d80c7)
707 Z8(262a1d9d,2db98b0a,1c79b792,c451a151,b3195ca0,76467ef3,66eecbd9,a5c66f27)
708 Z8(a34398df,61fac6d5,4dff5419,d622c939,c3db45fe,b9b3f051,80356c2f,223fec13)
709 Z8(aa411163,d57d7db2,78367aff,520d96b8,ac123857,8df6ad66,69996ecf,ebb227ca)
710 Z8(47158733,7d1473d0,8dcf4c31,1178fc31,d30105d9,966c7a59,31cab3d6,2808484d)
711 Z8(94dadfc3,ca03caec,4f0d9899,f262032c,66a80bec,e93ec759,be1d08a6,2f686d09)
712 Z8(930a25c1,efc6cc9c,133c1d01,adba45f5,7ae22e37,49773382,b7037632,abb16f03)
713 Z8(1b09d5fe,9fd54b43,30739d64,ed61ab55,8aa8635c,e3efaf02,fa6ca516,53f465d2)
714 Z8(a1ebd856,ab5439ff,487db5ba,6d69c679,ad9495ee,d0141459,e924758e,c9c7232d)
715 Z8(ab987f7e,ed751648,4825452d,5c728756,f81e7dc0,7c89b1ed,99f9987c,54f35104)
716 Z8(c13e6740,eacccdba,ce3533f7,16894321,4ca26ccb,2a3c868e,98d3406d,e3eecda1)
717 Z8(d3e61919,daa99a22,e15f3178,7adbc2ee,5df8715b,f82aa212,21e57fef,515fbde6)
718 Z8(51d61bd2,6581a14a,23520a97,88566024,6e625b1f,b090b33d,36490dcb,17fbab08)
719 Z8(b9e38bf5,0a22026c,626148e4,5b45a394,17d30867,e77f932c,50d5d277,eec20a4e)
720 Z8(f56cd72d,6290c332,28f02100,602ea9c1,c98d9a12,e7f816f4,f3dfa6f0,9983b1fe)
721 Z8(397e20a9,a9face81,35bf6508,301a9f0c,30da21ee,97ee751a,c2255a92,302ce07c)
722 Z8(574ba65b,1712b487,61404a2f,1cce5007,aa1bb6da,a8243ef7,aac8e8b9,88734b40)
723 Z8(720d721e,8cd086df,32486ada,d0faba63,17cdfae0,7864457d,5386bb98,64d8ad73)
724 Z8(effe2d44,a70a4e04,c180ea9f,0786ff3b,ed29af0b,20c7d9e6,1f226342,c69b21f6)
725 Z8(7c5cd7ad,2c0641da,0f9961c6,bab8c081,f9a21ea2,dffeda26,f6379310,26d0f1af)
726 Z8(6fbef26c,892aace0,230a56d8,8da528dd,47798c73,154f7754,f2ee88e7,ba98a9c2)
727 Z8(aa7ea837,da919a86,3b87aa85,c82579fe,38b91fab,94e3e43c,f42b5924,045b26bd)
728 Z8(5a8ddffd,7b076f46,8624b69e,bb1688ca,bb84aad1,826ba890,0dff15f1,e81fc192)
729 Z8(c164ea12,f34fb3a8,6e81ff06,defec575,3ac4a1f8,4cde6f82,8fa9e5ce,01ec1b11)
730 Z8(cf9bf99e,213ced49,c4118115,cd8f3dbb,d90fba0c,7dda0911,d0812a38,52ac24da)
731 Z8(811c3e04,095eab7c,f12199ef,3399ca34,7a0daaf0,75987d8b,0ab43839,900aa6d6)
732 Z8(e18cea66,8329cc91,dfbef02f,e59aa0db,942e7554,332eda9a,0b6dd799,be01e806)
733 Z8(07e082b9,7cc0550b,58dafab0,7ba69b5d,ea0cb108,f4496de7,3ab80504,f155ae39)
734 Z8(0c2625cf,d11d0e01,d804b39b,4abbc7fe,c7e2952c,bbca70fa,9f6e7272,d6143d83)
735 Z8(fa76936e,00bacf3c,6be2faae,039d9e82,5fcf40f6,fe4fa437,45c280c8,21175726)
736 Z8(e6139128,f7c27583,681d1d98,f89ec99e,560b7a7b,f86faff5,f4636074,352b40a6)
737 Z8(6d24e2f3,791d0baf,2312bae4,d8fe656d,089bad10,1be68196,717eaa22,755622ed)
738 Z8(a1e29ce9,19fa4ef7,f07cdb49,120e937b,e1cf5767,e0b85703,bf66ea3d,e567d89c)
739 Z8(c746c4f5,468cec20,c37fe1af,248dd683,3e61f62c,edfd78c5,41b2a815,68d5e5db)
740 Z8(e75cb285,2cffeabc,7218455b,29a3b105,7f82a34f,148e4c17,3a58143f,548151ee)
741 Z8(a5013826,1cd47535,8a83486b,8d3691c4,4f284c8b,ed60aae7,4627fdc3,dc7a3256)
742 Z8(ec8c4f95,e4dd454d,17fa7f70,683800eb,6008d264,622d3105,ac4ee246,52297f66)
743 Z8(ff977801,9c19e5ae,96f69800,03e84d66,43fde5b8,da324265,6798a2bf,5e96f93c)
744 Z8(5f1b54b1,e6e36a69,17d30baa,23db82f3,0847720f,fa088cba,6280fcf9,213632fe)
745 Z8(22af392e,98bb85ea,096a9ebe,d7444bed,d025dd23,01bd11d8,337c0e88,dfc1125f)
746 Z8(fda70f6d,2bc4fca6,b8d0bf84,c7296894,43d17eb9,c4949220,e0895063,f6a8a0ee)
747 Z8(483582e2,7e544a8b,15a232db,c36e3cda,98a6a38c,5991dfef,eb5b5743,fc68e012)
748 Z8(7c908853,222142a6,18bf0a20,a04118b4,51611479,f3178440,0be348a1,0c9251fc)
749 Z8(5ff1ee18,69dcaa6c,a8b11991,d5c6b9af,5cee51c8,10bcb274,09a6fd50,8824a730)
750 Z8(fd24e89b,b11d3f5f,0f7e22ac,ae4fdf8e,6c7f812f,4c26a8e7,b2c73fe5,b0c57e36)
751 Z8(dee53acc,0bc68250,2baaa8cc,0208f2bc,add666bd,d19b99f3,8480fa2e,462bf5c5)
752 Z8(cc4ba397,2cd30f71,0ebcde52,fb3c816c,c4aec712,6550484c,7afed51a,2dc76549)
753 Z8(f0a69683,6a4937df,bba6afa1,52498901,5c359819,82da8b95,395780e7,529ee403)
754 Z8(9b8ac2ff,6ae9b114,5db249bc,e1079b43,12914f36,c07d10eb,2b727a8b,ec0f21d0)
755 Z8(cbc6806f,bb8ca632,652fc8e0,fc5b4419,9d9894b8,5f09621b,83dbb96c,ecc88148)
756 Z8(0a42e62a,5ca4e88a,59f61e67,c7dfd92a,2a0c4dbd,c1102ef3,5a894430,d132f24d)
757 Z8(e3d2282e,627b99ac,d5ec687a,167807f2,177ada19,a5ae9429,32b0a9ba,27cb42cc)
758 Z8(df2512fc,1d0068fb,71d8fa44,58abd59e,ccf8b086,5b066a5d,d946e01f,36c12df7)
759 Z8(38ce18d1,ddd3e72e,ad0c64eb,65a46a7d,42e75cd0,68fa3913,1e96bac4,e373577c)
760 Z8(fb6d60fe,0d3617cc,73446759,9ba5464d,bdd2121c,8906a162,d2bb2ffa,e3158284)
761 Z8(16b2e4d4,53e11093,986d9999,c39f8c3c,f8fe1051,b37a3216,b73c960c,5a162266)
762 Z8(560b4dc5,2c67d626,de9f1fc4,1b47f91d,64662bd2,45d9126d,cce5d5a6,d20262ec)
763 Z8(218546a6,d3441175,3e7ecb2c,c16aea72,842d981e,9d6df2dd,f3609795,b046fb53)
764 Z8(63d7de6f,21656038,8ce6790f,faef4ec3,0ec6c005,4f927376,8275e1b4,84b69493)
765 Z8(0e4599c8,3100712f,36b72595,2ae07542,a28d4175,bb60cc7c,99d54908,f581db18)
766 Z8(74184a4e,5e0860e5,0d4c7359,886b6310,1722075d,bf3c761c,4c60b61a,e6817706)
767 Z8(8d22327a,72c102c1,3c2e1eba,92308a59,15fc88e6,be1e4359,3a7793eb,652f9081)
768 Z8(a78438c3,3b3fd53d,b339755e,e8972046,b112f4b9,45741d97,9884f109,8842c4e7)
769 Z8(993bd03a,ad701555,fb2c2202,e43f8385,c4941d2c,2b40e53e,f0f3bb4b,29875053)
770 Z8(7c9d429d,b16b5916,9a6e4405,55aebe93,9d5f9d1f,c65a8327,7739173a,029e1a56)
771 Z8(2fdf6144,9d66a736,8bd6f7de,c51e4b9e,f25770d5,5e798c7b,9be37040,915771f8)
772 Z8(f482f33a,9ea1dd8f,db061a3a,7bd85d80,39d158db,12cbf015,265afbd6,da532bf0)
773 Z8(54c454d2,97b92d81,e0c2ed3c,a105c8ce,00d1e82b,8723064e,10ec5bec,7a1b1e81)
774 Z8(77c9dc89,e8a1ffa0,f6209708,012ad82b,af1ccb05,c9e051cf,2fc59a3b,cc8fcb02)
775 Z8(c34779d7,d944e91e,4933f1b9,e0111c6c,0cdd1f96,d29758f7,9c2d893e,6f7b69bb)
776 Z8(f1ee0c03,7e52e2bd,4dd397b8,731d977a,d58f1b3f,1c6fda4f,0e80a4b7,13eef8d8)
777 Z8(6df4bcee,9ac41d15,d0f0ae16,4684c484,2baf731d,a11b1052,e0766414,dd180b1c)
778 Z8(fe596ac7,077e0cc2,c789b6c7,aeeeddc4,3ea2686a,7a4585f6,92901bc4,038c1ca5)
779 Z8(f321f50b,617d2442,3dc4b55a,3bec6279,41261935,24b3ccd2,1784f71d,3fe55064)
780 Z8(6cf2fe99,9bf10249,b0173236,a7d623f1,4e27bf7b,3423bbe7,3621c63a,2ee4510c)
781 Z8(ab573c0a,9c7b4f14,818c3028,32783458,fe54540b,9b9021d7,99705f44,c41ad29c)
782 Z8(8a1f7c63,12a46625,2f4232d0,d389de5e,1f20fe7d,77dd21fc,bdcde05b,3a314ad1)
783 Z8(f3f530a1,b9d08324,f7792abd,321bbd00,6c33f585,614c9885,291ca1b3,4b417ec1)
784 Z8(d20a52ee,fe5f89fe,bcd96a7f,2b4a68b5,0a4dae89,eaf3c271,0cd608a1,ab767b50)
785 Z8(f6d60f25,ce5a9f5b,c2642828,fda286d9,834fd0bd,4ee61392,a1b562b9,c1a4a877)
786 Z8(f3797a18,27594946,1d260118,e5530ffb,c3eaa4e7,0e9a464f,22d3faa4,0a027085)
787 Z8(0dbff58c,6b33725a,0801785a,4375683f,3dab76f5,8030259a,f4962146,57daf2c8)
788 Z8(0ce15496,d76c5170,eff02254,e71e9747,c63c4ea5,9945c480,a457c807,5e0d3acd)
789 Z8(e91e0b09,21ff1152,11fefaa9,a0e4dac5,88dc59e9,16d6ff7e,7b0f6d11,973c0441)
790 Z8(50b11b9d,3e786ba8,94f407d6,5970f160,dc09f55f,3a437dac,b65cf062,2ded035f)
791 Z8(e7bdbe63,d04a051a,81a1fc7a,03b42683,a08c6123,fca18bcd,0e1162f3,9d2810a9)
792 Z8(08401a08,2c7a466b,fd1ca7bf,c7ca31ac,7f78b496,6b52e539,e69f5066,3e09fa01)
793 Z8(d9da9945,5a26e38d,3685db3e,345731f4,2236f2c9,a5adace8,8de7858b,e6adef08)
794 Z8(df5bcae0,28826dd5,290f1e6a,8ab7e8f5,1844d775,4931b4b6,98375d01,6589338e)
795 Z8(29701874,b7dc826e,d094b2f2,969539f4,732f031a,4a066680,ab67eeb6,19a9fe8c)
796 Z8(9a146fdd,1c73c423,022e62c1,5f076cef,a5cad330,fbcaaac4,a0c25b1b,135a6266)
797 Z8(674094f0,4674a4ee,72a9ec3b,de017f93,74acf836,882ded2b,5302ed27,6ef0824c)
798 Z8(69e744d1,e5a15552,3787e4d1,f87c480e,dcda61fb,f84cf908,585d1cac,e4705674)
799 Z8(d520a977,047d7758,3e2adfb9,051ef955,e3bb7119,5a1ee996,8650a21e,9c9f9947)
800 Z8(61c3df9d,b039a942,dfe25505,4b671736,344cefbe,7c15621e,b9f61ac3,5797fad8)
801 Z8(217fcd3e,8177b05a,1abc7629,ef34f8f6,ac1346d3,61e5487b,41e8293c,ba79b96d)
802 Z8(1fc33113,515dcfdd,c7789198,c090c0d9,b0ffeb04,2fed368b,389e3c64,263a4561)
803 Z8(a79d7e98,85177e23,b7319177,111d9420,f41f9c30,d810f002,6d473ee9,63287910)
804 Z8(f6cad06e,b31b80fc,3be4a06b,a2d7c20a,891acab2,b1087c04,00c9f584,bfbd79c2)
805 Z8(f08a7089,aaa07c19,9a8ba0ed,0a6bf0fa,61b5378d,27e0ee18,64139abc,fbcdf9af)
806 Z8(ed1ef64d,a138da4d,53ea0ea6,9514e5ac,6462d7b0,16bb4f18,aa6cf379,6001f094)
807 Z8(6f869913,54eb1b15,1ce290a1,4892a4d8,0829d362,196a5744,245f8b16,7c4f1cc0)
808 Z8(bda5c16d,ede58784,71321c47,a48e4ae7,f9af92f6,f245fe07,f6f53064,5086eb7b)
809 Z8(84331ea7,c6e4e1b2,a08713a7,71157e2e,1519ce0a,e7776cee,3daed979,e08f65f8)
810 Z8(46058801,04d305d3,307ffefd,707333a6,f776a651,4f9a3027,f36184a8,a5be4582)
811 Z8(97b3c6d2,71e10ca6,49452f20,7039c248,2e188eef,a96e953b,5ec706cb,e5901d22)
812 Z8(2e79104d,7e15588e,66843d03,9e306e89,11ab5412,69e967b4,8c815a09,fc1abed2)
813 Z8(eb80c88d,10c2e53d,d5ef1431,c37d1da4,d24cb669,079a0a54,18839075,a9588308)
814 Z8(26263fda,fd633a0f,7fe321cf,b0081acc,9da0c3dc,f9478964,fbdb5c59,d670daf9)
815 Z8(76a3419b,04caa3ed,3bcae8b1,e6246c16,e118bcf9,bb836d61,b3d23fa3,bd544f41)
816 Z8(f97f7c0d,a8aa7634,70c572ad,53472c5d,1655f293,1c2d8384,710025d5,802fb335)
817 Z8(8533131c,73f7be7b,3f193ecb,a94830a2,d548173f,4bcf735b,6e9d0433,79f1f8e0)
818 Z8(c1e7293d,68b8fefb,d83b39cd,ce0b4087,5be6cce1,a66866a7,b44ab155,af10a21d)
819 Z8(a8018e18,ba3b13e1,163967cf,9b920be0,887efb09,a341faf8,cc0a789e,72a6fa36)
820 Z8(543382a7,e72da19e,9ff9db2d,8d8dbb06,4fe6b95e,ba57a10b,e1ada9e8,10d3f8a4)
821 Z8(0f00847c,477cdf38,c997a160,6492c252,aab46b5e,5cd89aa3,17234a4c,1592149e)
822 Z8(e41d5b2f,8d0ec53e,f07c80bf,d336ffe1,56825f91,77bcd105,99380bdc,83ac8460)
823 Z8(691c22d5,1a165108,8dbe1121,267549f7,8e1e0813,b5ca7548,8f2192b3,f2a81992)
824 Z8(3117dbea,4f78dc66,bb85c626,2577b781,a4020ef5,80d64655,a716d23b,eb8c4132)
825 Z8(d1884877,0ebf0393,4268d350,c657878d,212fe5ba,a08cb6d3,ffdb08cb,d00046f9)
826 Z8(50a14b65,d4e685af,1ed971ef,e88ba4bc,8d904ae0,dd4ccb6d,b6c917d0,e37db276)
827 Z8(ed2dd9fb,97e72c1e,77073528,3ccb77e5,1113f809,cf461cb7,17780b54,984766b3)
828 Z8(bd202b25,ab09031d,e00b82e6,39f78913,16afb9f1,b2b2f38c,d955c760,47b9b920)
829 Z8(3b63ea4f,435a5850,aa48a450,570766a7,3079fd9c,56c6e691,c43a3449,fd8dcd5e)
830 Z8(caf4f624,6352b492,415625f7,12652840,0a399b9d,3b313445,748cda99,4c22b501)
831 Z8(fc165947,e0ac4c2a,0a814318,6cb071d8,b4eab9bb,59508e75,2706cf8b,29235d81)
832 Z8(6ae48585,814c0eb8,8644091d,49a7ffde,e1e83260,910b25b9,8cd18eca,34a6fd1f)
833 Z8(3e2acbde,d12f448c,5a1045e9,46e85107,c9e74687,79ce1f20,a4027ef3,4ae94ac6)
834 Z8(7521ace2,811c9269,a43553cc,25e5f94a,9aab05ac,6127a4be,d91c3712,d846ad50)
835 Z8(de27e1d3,50b75b56,95cd8f8e,a1455a3e,85dc59d1,1b9f400a,d9071038,233d2233)
836 Z8(cd6935d6,26545305,cb505560,05628416,b77da63c,110603bb,bbddfc9f,6a90502c)
837 Z8(bb2e13a2,2c6dbff5,35c2bb1d,f0a94c51,3fffbe4a,21abe592,c0cd0a10,bf23dc2c)
838 Z8(f55fbfcc,6318d89c,b8a98eb5,c667969a,c70b40f8,87118cc4,9ce0b142,c161bcd9)
839 Z8(38ef5847,4448f8e9,255ddd22,c557e548,39a42e74,6f11874b,d7e3cef9,4d430132)
840 Z8(afb426c9,34a0efbe,70fbf983,716b2a7c,3bd3ca15,56463faa,bc285e11,191e739a)
841 Z8(76f4506d,7c1ec286,f356151f,82a85854,40536370,f2a0c0c1,4aba38b7,6980e9e8)
842 Z8(117cc462,7be89bf0,edafb40c,aa2ac99a,5530a649,6d751302,9fec52c3,b5fe6ec8)
843 Z8(37c8f4c6,42f074fd,e489d229,8e1944ae,a0a8fe86,12c9b6c1,717d0afc,539941ba)
844 Z8(020043dc,49b30b5a,6ce30c9b,7c130719,85a92717,4d49d6c2,27093567,e5161ffe)
845 Z8(2a88d168,be7e4e5e,127166f9,c43fc883,5ee37d6d,b9023d51,a8e5c36c,94d4bc6d)
846 Z8(72d07160,95c03676,b933260e,89a5d419,5d51836c,167f2ba9,d7f8fc05,5324cf2a)
847 Z8(0fa8ba41,12a91d21,14130044,8f28b23d,6a9089cb,e5b16f5c,71d83c31,4ae0a2bc)
848 Z8(fe4a5bc1,f82d16f3,bf15911d,05bf7242,88eaef29,f0add78a,e5e9b9a3,1bcd9fae)
849 Z8(4f20e3f8,31b011f2,8af87a6e,e2b7edd7,b1327726,2e6c320a,1279d8f9,e1594656)
850 Z8(da293ac3,4609c318,d38d3625,def60e69,8181429e,35abd232,549afecb,8a6d41b4)
851 Z8(a74149f2,bdfce6b8,8ee699b7,d784853b,6abbb060,1208d521,332d9907,b68870ec)
852 Z8(e1482016,0dcde3d7,abfd968c,57979e11,dab5f990,895419fd,7f65df8a,a136c1a5)
853 Z8(fe018a6e,aa687dee,76ff4d37,761cf1d2,76306ae6,e214f89c,84108f78,6aa0cbbd)
854 Z8(a5706346,b28f9d14,2e5cf9a4,525f8902,ee8f57d4,bec873ad,30384b78,c93ae472)
855 Z8(5d51f2a9,cce8ce56,8673894a,c98b2f98,e1bbbffd,8529ab1b,87de7613,e0ed4987)
856 Z8(44d9ea90,1d1a7c25,67c52cdd,3911138d,1d003f3b,22cf6bb9,be499a67,a9a7ba99)
857 Z8(3407f126,9e73cdf1,13177818,4c76b2cd,28315356,149e907a,b8aedeb7,0d4076f2)
858 Z8(df61066d,7b06a5bf,87723a80,edee59a4,e2fb6e5e,eba0c445,c7bb6c7e,a9a667eb)
859 Z8(e4244ea0,02f24910,a0f6036b,866dfac7,b10d8c96,88ccc137,b435b3cb,da1ba43a)
860 Z8(141ddcfb,1b624a65,6222fe58,c0344625,6eddf2aa,743aa936,9dcc56b1,db0f47e7)
861 Z8(b32655b0,fa3862cf,7b011e4f,2e261666,6eb85a17,43a4ce4a,be5421c9,4d85effc)
862 Z8(a15ff84a,822bd87a,fdbdecd9,7162b044,02baf45f,a4884e7a,a04669ce,6c434d94)
863 Z8(de6e1cf0,51de6191,4e1c72da,9cdb9887,f1ca58a6,e448a57c,3d620663,aaa83be1)
864 Z8(43cc2fe1,40d0ea99,013fd238,069de9cc,f2e83a89,535907e0,586f6fa9,b5f90198)
865 Z8(53b8beb0,2552e103,acfff366,ef717787,80462b8e,47416b22,40c8675f,46614808)
866 Z8(7e3c98bf,6773b560,399020dd,e5056b9d,35d1dcff,2fa62ab8,53298854,99134ac3)
867 Z8(ee668421,089fa296,17be0e30,41395bf1,56e98e53,2a8b9a4e,08680c16,230245ca)
868 Z8(caec42af,57a5955a,4a317925,e42f898a,3cbfae47,4a4fae2a,a90a4269,9ba3b67d)
869 Z8(791d58f0,7f59e538,c2789d6a,4070c77c,aa948ffb,256df53c,795c5133,e6c22248)
870 Z8(53fb3ad8,016b8189,b08bd9bd,907e9d7b,f5d5a370,4b50af36,d35b6627,f16389b4)
871 Z8(5aa4383d,af379425,404cd677,80a5b242,57e8988b,5a721895,37de7292,79eb6760)
872 Z8(ad2f1196,1ba7de7a,a9cf354f,2594a260,6dd73dd1,b6da7d55,61b6933e,f67dc569)
873 Z8(7744c7fb,ea3e93dc,7c2e9c88,5fa34eba,22b543f2,72458ccf,aee57ff4,6e8f75ea)
874 Z8(41b46150,e8ae1768,69ea7467,6a49aebe,0828f2c9,3c658566,d76f9feb,22ca586a)
875 Z8(266d2a22,73e51576,554ff29e,0690d264,5b0dfe81,b14ce557,a0f49051,b7e2fc91)
876 Z8(ed5c8b43,71a618b9,fa4d7ed3,b418dd16,8faffb60,c010ce4a,20244474,c7f84e60)
877 Z8(e7742d52,f605217a,ad1b67ac,e0c23c5f,6be426e8,b2e240c2,636fad7a,6158c8a0)
878 Z8(c4fefdf0,57c30c5e,be4d08d4,3bbe2cb8,6cfb75ca,2cfc0cac,926add00,3805f10e)
879 Z8(813ee7c9,0b3fac5d,6518a8a5,260daed8,c495f840,59bad400,6f76ebf3,fd29d22a)
880 Z8(1187585f,2b28904f,0a376f26,2ebfacda,295b5c3a,63440b9b,c233ff69,5c8fac0c)
881 Z8(375fee3c,cc6e8b8b,0c2ba223,f88b39c5,08647914,c9042699,258eef1c,90ae2414)
882 Z8(7a2a9a6e,77030f2d,641d3748,a3dd9d9a,a0170b2f,6df1ff4b,64e440bc,12cb1997)
883 Z8(6ed0b258,ec2d524f,5439cf9f,f0c99fb8,e2dd2ec2,39c1ea25,9ee8b0f0,680b0c0d)
884 Z8(c660f792,943b0688,6f312529,80f1c8b0,db7f52f0,d1c832e6,d79fadee,469f6aed)
885 Z8(5cbbd14d,f5565ee4,82fdece3,de65a828,6ff706f1,f68042be,2ecdc6e4,eeb79f0b)
886 Z8(ea202155,5a50ff0d,e76f79bb,e04ee07e,b38c35c1,03d0d0d9,97edb2c4,c9ef5324)
887 Z8(2a558477,bb4797d6,c22e28b1,b4f2d8cf,91acfe48,e18dcf87,e7d8648c,29243f5c)
888 Z8(7682bb54,6328e8bd,010d685d,4285b74a,46b66797,788e4186,7781ea84,bcc6c1ac)
889 Z8(96f7b431,c815cca8,482d2e98,d96dc540,5321cf31,792dd00a,aa0ff60b,ee90a2de)
890 Z8(d0f32a40,08c297a8,48ca550c,48e323b2,6a89ee91,67e5aa12,4861bf8f,cff7513f)
891 Z8(048a7fcb,770399c5,e7b522d2,427b7cec,a964e634,d888c265,551d1ecf,440fcf9d)
892 Z8(ca731c92,822d639a,73433643,fa274f2a,0be7a07c,57d64d65,01d4c745,813ee404)
893 Z8(fae17aff,e07d01e7,47f4318c,b1b90983,10410001,54401330,1cd1de52,45800d25)
894 Z8(04d85feb,baf4db47,524e45a2,ad7bca98,e2d8a7ef,09a30e01,b206702a,503ee857)
895 Z8(1c64036a,00977a93,ba0e0c30,59a86628,c926fe7e,001569bc,6c61dd0d,b440da7b)
896 Z8(68c3c3bd,8bdab9c4,70a75e65,7c395874,9c05d288,4754fb10,9a4982ce,7c80862c)
897 Z8(4a0770f9,f55bb59d,d3cad0d9,a8b8b4ef,f548fcd5,042f675f,2ccdba65,538c35c1)
898 Z8(f3831e55,9a437fb9,fb25cc63,2985459f,6c5d9414,9a9e8192,d6fd77a7,1b1fd16b)
899 Z8(abcdfb7a,831c8ff0,b5426fdc,ce4e9d02,cf859981,ea3697c2,2021c351,3bb716eb)
900 Z8(4ef697a2,d20fa3cc,f3c94bf6,0952122b,40cc689c,16191c78,74cd3fda,fe001609)
901 Z8(7935bb6f,b77fb5d9,07d502e5,8cd5cb42,2de9c18d,2c4c0d88,39346711,7db21376)
902 Z8(427e80b1,ae328467,8fbdadd7,13deda93,4386788c,0250ac36,08ce7557,e005cc58)
903 Z8(33006ba1,9ba11893,b22a6bf3,b6364aec,c311fa6f,f3414520,781912d1,d61a0b75)
904 Z8(a98ed7a4,333b9a36,f2cea1fa,1379eed1,e3d465a1,afb25e64,2fa3b1bd,823355ae)
905 Z8(748e7e82,cedd2e4f,155b5014,caffa6af,cce078ef,b2ad4cf7,33a7ef35,ba4aae7f)
906 Z8(41c7ccf7,10a5973e,869828d6,78fd3370,e216dfd9,d7443783,7f3635e8,82044fea)
907 Z8(422739b8,b0c0b7d3,c16ffa27,f6854e77,48d72a89,8c1a54ac,149816da,2b98d2ff)
908 Z8(ad95b90b,41e945f1,5c33d277,d1b48aa1,b0862a95,04de73fd,563bb610,7fcc6044)
909 Z8(96d5f0f8,84667dd3,847dbb8a,1e81c942,db76233b,f6bd319f,18ad1c64,f7d30fb3)
910 Z8(b870766c,009d08dc,690e04b2,d3ba0eac,f648cab8,7836c8c5,2be2cbf6,a7c60b65)
911 Z8(8d65ac02,01da00e3,d7c66c15,1f121d20,a89a5937,19bfaa9a,0866514f,b8c6cc7b)
912 Z8(22b45632,6cb6f256,1736a34b,167c0776,2ad8c7c9,599acf06,e7238ce2,877aca0d)
913 Z8(c415de32,198d6cc5,2d7263c3,b040144a,6f18606a,730560cc,19170952,4bda528f)
914 Z8(5cceb92b,1761ea50,b55fa777,8ae6aaff,341bc125,5ef0a593,20921a9e,b8aa9504)
915 Z8(c0531781,4d0896a0,df9fbc8f,7fb070f5,2e3bb085,6ad7bb36,2796a186,8047e1bd)
916 Z8(92d66aab,10a8d0bc,aa091b18,28ef8002,496befaf,37ef27c4,35c27f3a,ac506873)
917 Z8(c11b6772,c9b7d0f7,e84b9418,7e07493c,83887c4f,38826985,42842463,aedb2047)
918 Z8(2bda874d,d59c8933,9acd3af4,bb3393a4,97fa4fb9,61415c31,c011d296,0e58d04d)
919 Z8(43b9699b,f54459bb,ce7e9dd9,066e9faa,0a7d2429,f7d428b8,11d04f43,6daad4a4)
920 Z8(598cdae7,11dc349b,d4a79046,69f9216d,bd29a456,b00044e5,9fc46399,507b5545)
921 Z8(731dd1d1,38982526,2f6d297f,682a2642,1f00a584,405a5457,822312c5,c7acd1d5)
922 Z8(d5b01ce3,39d38fa3,223250a5,f0ca7fbd,48dafecc,8376f1c6,a791c344,200e7152)
923 Z8(f3c3ac58,a8cdaa10,03abef50,0afa4378,34a30f4e,5c8324e3,18dfcfe5,89714ca9)
924 Z8(dee7fcbe,09817e5b,8dd236c8,69c99f3b,790ef06b,d87de194,8fc1d483,91396a68)
925 Z8(66fae68a,5c83f529,7bfb3cf5,59a07c27,58e589bb,aa3ff8aa,969c4c2f,00fa0238)
926 Z8(e00b3d1c,e17dfa88,77520d83,249cbc4e,ec9e44c1,369dcf16,47a18c76,c1697864)
927 Z8(2d3ba74e,9ec0604c,dbae22e5,2b36bcb5,de34d65a,ec04ba63,b6ff9b88,851c4df1)
928 Z8(f77c3c5e,96f0b55e,2ea90eaf,b0888ade,c46ec328,9b87ce73,23c489a6,0b0daf28)
929 Z8(90b762ed,b93b9333,10a9bd0e,0dc08a91,6bfbcab2,a1064e97,ec9f4aec,0f1af0ff)
930 Z8(a0c546b2,fb89448e,a6991627,44fd03a3,e2a538fb,a51b4f90,ac77c521,18d2ac72)
931 Z8(2df88bb8,af617ed0,f9874556,f4314eac,00374f52,f25a1100,3ddcf5c7,75c90330)
932 Z8(7cd9f8fb,86758dc4,116db27e,2975a373,5ae164e5,84bfa9fd,f6f7d242,0b71aa0a)
933 Z8(45b52047,df8dd472,fcbe1260,6639f9c9,5067e0d5,ea0d5ec0,3fceb47c,cc52b7bd)
934 Z8(9db9298a,583fbcfb,2fa80754,66f574f5,f4743d4b,0ac85039,a54bf5e1,721fd6ee)
935 Z8(808893c6,2f767a2f,99af253e,7c50025e,0b28e49c,fcdccffe,48a97769,7bbf6268)
936 Z8(cd8a3751,5e6346dd,6358793d,88a7e60d,ed180863,572ba2a9,00baa7e2,6db82c66)
937 Z8(b8cb9749,d9a4bc49,d4906ef3,b04672aa,f9275db2,9ea72170,e83eb5e6,895554b6)
938 Z8(a8befffd,22501925,370f945f,1846358e,ebc4e382,03b5aa8c,e0106774,2bc539fd)
939 Z8(630d3888,4fd63433,fc615ce6,6e9361bd,dd8d0583,759be3b9,26f734c6,a65e0092)
940 Z8(b26afcba,68417945,a7e70110,a74fab83,9e731d7f,0b72f549,f4d43bfa,cda64ddc)
941 Z8(7c90bd24,c8cb940e,bba180dd,6295c497,660663dd,a8356887,87f86b73,17cba26b)
942 Z8(041fc681,6e7acff0,ac773e7d,bb9fa0af,a60657a5,a6b75b61,a64ccc6f,b40bc174)
943 Z8(2d6db811,c65cece4,33031f42,ccd68348,e01ccf07,e94f3ff6,b10bb018,5d57dc6f)
944 Z8(23fe1134,ec55176c,9b8e1ab8,3d695069,726b7d3d,7f42b509,f4d35e4b,2376676b)
945 Z8(411ddaed,f3fd1099,d8d01652,024f9894,c93be0fa,80f7bc4b,aab3efcb,42c47d3e)
946 Z8(bd23daf2,8291b463,251309f4,987fb636,f710a9f7,78cd954c,d861f553,bddccad9)
947 Z8(0dce5e35,a6d8430c,46385ee2,2540555d,456f1545,829a3080,5c30b85c,2348036b)
948 Z8(a338eeb9,7fc1ddb9,0b1a258e,ccf57673,748c4cc8,83245191,1b682ac8,c720d96e)
949 Z8(7e3c9463,bee86e8f,d6e10fff,63dbb030,895af1e9,96935c99,ed1cbcba,b1f648d4)
950 Z8(8bfacf0f,60841f72,3b5f012c,2a50c0da,02166cca,0dff2d4a,f0e05f74,761c0f35)
951 Z8(bef1d8bd,3f0319e3,479e1ee9,589a9862,ae09a958,1ef8126d,3f179d75,4eb6c16a)
952 Z8(f0ae9759,0812515e,016bf128,1e866a4a,3c22d920,8947a031,58ba9c23,77e0d92a)
953 Z8(b390f6f5,ef105868,74925c84,81ce322b,95eb1f52,d78f0be4,10eab1f9,0d9a50ab)
954 Z8(34a12c9f,c2af4637,e9ac5cba,f9370af2,cd745f43,31479640,f434914e,3b66e8a9)
955 Z8(37dc6feb,6c62efbc,2cab26cc,b9fe2898,10acbfb6,cff85243,897a29fd,cadd1e67)
956 Z8(5a370222,03adb8c2,875b515d,43a7152d,1245ad0f,b6f65339,34698d3d,7aef7ec7)
957 Z8(4f27104f,1d6eac70,d426bbbf,004de056,e33233aa,50ff3d0a,2291a7da,bf05dde6)
958 Z8(76b5c563,a10315dd,acc1535c,7e31895f,058b44ca,cdcf5ed9,509c4d44,6098137d)
959 Z8(d5617c40,92edfd1a,af205b38,27b0c179,28ef28f5,b76bcdb7,4acd6984,e04296a8)
960 Z8(973088e0,5fc56642,7ab2c2d5,fc3b2904,52af82e9,a2c83474,5c71e660,e9a7db39)
961 Z8(34cdb37b,78f97dba,e2289c66,63461839,5d053fc5,8be0725b,91f59f6c,7f86a1e1)
962 Z8(c14fe5ca,b3c65369,22518361,95738621,c10f0499,a448652b,a8afc11d,d16961d7)
963 Z8(b66a5f70,19080a0a,405df19d,f46700d7,5146913d,0c2407dc,07e84ae2,71cad6d6)
964 Z8(2c834886,b17ff548,b9e9010c,75236b77,f09ea8fd,d7232e6c,91ebcf54,67f37225)
965 Z8(065ea348,b571fb2b,99f8bf98,187c3c31,f2ba231b,6f13f53a,c80de4dc,8b9bda5e)
966 Z8(2945dd4f,30ae13c6,47489ce6,12e4dacd,f053af50,dd10d007,0a69be6d,ccc6d63d)
967 Z8(0ec5ec45,be9f65b2,02884af0,dac83f4e,1ac17135,8e33693d,f3c440ea,978f89bd)
968 Z8(234aca2f,88bbb2e4,81aa4b01,eb07404e,da18e223,9a325569,262a9101,c5e2c794)
969 Z8(28dbe1e5,242ed9d5,3e78c92b,3a21937f,4b0d6090,5416843b,7b88cc6e,13b37e69)
970 Z8(1dffad53,95d46a3b,7da51012,2c229f71,619570b6,68c31645,6fa2ca94,c4780abc)
971 Z8(8a048ef0,a6b61f71,571de6c9,d4be5aa1,5121a905,51e0122a,7a5006c9,f2e0d180)
972 Z8(69448794,2da0b277,33b4bba5,133663ff,c8363ad4,af156697,6d1f45bd,3dfd994e)
973 Z8(37fc71f5,948c2718,8060eef3,d6659632,7dc1266d,68877117,788c3af6,d81cfe7d)
974 Z8(fccad251,1e791950,a9f5813a,0e484841,68571e42,404bb3b1,dee73fed,fd98a747)
975 Z8(82a8329e,8c0ddb66,a92b8504,9a4501a8,0fe33f3f,c4b8168e,d9cf0fa6,69f4147a)
976 Z8(377638d8,7b843369,9e8b4144,d4aadf65,be713533,e7fe2251,30d27ceb,885fbdc3)
977 Z8(da2e944d,bc8570e0,1a6308cb,e446f6b9,f3c9705a,dd20b0a7,92bd4926,c1b45017)
978 Z8(6d0d3961,315d24d5,b23f6fd5,4ef220de,50819509,d9341b33,e75204f9,bcbd1db2)
979 Z8(a8265d03,92dd04a2,2e8c9d10,5f5c32db,ed5dd915,8c76a00d,3fd3958b,995c3034)
980 Z8(273c7f50,51e9d844,e230f662,c9012cb7,19a7dce4,9ed40b7e,77b3d98c,7125dff1)
981 Z8(49294e74,99d65720,81bd80a8,b6edf984,cf463229,738e650c,40357374,097468b0)
982 Z8(5479b2c9,f50494d4,a9a337f8,b51ef439,43f820ba,a1e16fdd,dcf08419,bc987732)
983 Z8(0ba6e370,52f3816f,bd0c2c76,9a2a5c41,8bd6411f,fabe790e,036126db,41f0b956)
984 Z8(1862feab,b5ed48bb,cb4ae90f,60488345,8c7f29a7,e67be464,03094180,9c04cae8)
985 Z8(c42627c6,8881662b,6c093098,d9dce969,9b8b8ea9,9840ee21,1e1ff856,79c8f543)
986 Z8(e3c86592,3ddd1f12,6b99b854,f75e0403,750201b5,19549f7e,f0410f38,7a35a470)
987 Z8(3fd2fe72,4f73ed16,7141754a,c28c15fc,0cc77608,df87b86d,071c068c,74264606)
988 Z8(be8611d3,baf9df4f,6ee1b303,21d41194,d2c44836,6465b9f7,56fc23db,b6dcea6d)
989 Z8(7b69c199,113bd6c7,12908219,e03b8e45,4552fef9,4e4bbb34,2081f51a,391a560c)
990 Z8(e54aa52a,a6b6f679,f8e987f3,e58bc627,22c7e802,1ed7f111,7578b583,4e752531)
991 Z8(8c448583,d13a8e71,3fa7e488,b89e7882,77227ec5,f25b17f7,b53e706c,8d2b38a7)
992 Z8(1ac98f2d,e42443c0,91948924,c7d5c80d,1ef679db,0e09df7f,927cac5f,3baead6d)
993 Z8(e082fe89,bcd2e3ba,c6cde42b,6e2fdd38,d39f1442,c195b375,d032990f,3163a79d)
994 Z8(6f53b9e7,582e3015,cdfc029a,d76990df,96fb9107,839b9b8f,cfd31c0b,728fa373)
995 Z8(352e12c0,b6de4201,8e2976e7,05c8f3c5,a92be1fb,946ede29,4a699659,55264d98)
996 Z8(c5f7cc3a,4a61751a,fe0aa645,bce3c912,7af61dc8,f10638e3,dce0f4f4,5bc0dd9f)
997 Z8(78bf2635,dcc0a319,044ed4c6,fc9ce7ff,13a62404,6f27fd24,ed2e33da,5ee6b90f)
998 Z8(3b3ff878,8e7ce9b4,e3ce55cf,0d8644d3,2d9afb5d,58894603,d33a20f8,dbe1a874)
999 Z8(f251fa9f,c030ef9c,71e213a0,3127c3d7,6ae61724,275afe54,4c06355f,ab35a276)
1000 Z8(8e7b83ee,85960e6d,6dc01534,850c2493,a84856eb,2de3ee88,74222cfc,4d4edfe8)
1001 Z8(86e7fed4,4834c6ba,eb3dc5c5,f743aa7e,52936042,f0b36adb,df6732fe,2ac64fd1)
1002 Z8(3ea35646,637c0206,d7de53b7,531c06dc,4a0eed7f,469c41a5,fd93bf63,da7ec99d)
1003 Z8(3bdbcaa9,85844f90,034c53e5,d192d7aa,1330e758,d55946fe,2a5b60aa,5502fb21)
1004 Z8(07194796,899a8acd,dd83543a,a3606728,06bd48a1,53dec2df,2c30d21e,84501cc1)
1005 Z8(f407cf9e,3e910bc4,905d3666,29b175be,c2c045be,997489e1,ae8ac909,5f982299)
1006 Z8(e52cb294,bd3b8108,455349ae,a0d62fc1,b888e0a9,00644d13,9e7c232c,411b3356)
1007 Z8(b80fd13f,eb91c402,cb145ada,815d071a,983de4d1,fcd7cc93,cf2be3f2,db71f795)
1008 Z8(600770e6,415b6fbf,6a3bf86b,85286400,cea9cc75,1702b8ce,2c6c2469,19a84711)
1009 Z8(c5e16f23,73e4a959,144fb276,29b1a74d,ff6014c2,fd494170,4a2bfeef,4754fc76)
1010 Z8(6b573143,56c0a817,6603f909,ae3c9fed,e71c58c9,c2c9eb2a,6b1fd591,468f019d)
1011 Z8(fb1fec5e,7aece16b,d66844d9,313708c5,dbc3a947,0420c8a6,38be94ea,5306637e)
1012 Z8(038a477d,e9956b1f,3aa5e583,06b8526f,ef23a74c,7bcdb679,29fd1fe4,37c2c0bf)
1013 Z8(f14d9e9f,22c27e70,a58cbb4b,2cc1e67e,25092a73,034c38c9,2703e03a,1fb21990)
1014 Z8(037571bd,822b5239,9a9743b5,8aad128b,52af2db9,1570b175,0d47c1fc,9d29d02d)
1015 Z8(969ab65b,46f441bd,43065b43,fd71e95b,2bc24468,e0436af9,923423c5,c637a033)
1016 Z8(97c6906f,fe9102b4,d3b27116,b2e17dde,ac7330a5,dd5006f5,c5f79e8d,ff35b601)
1017 Z8(9d0690ca,bc076cc1,d9901715,c85d2c01,b886afd2,0ee85e7e,83ba61bc,cc613661)
1018 Z8(f9d25229,8a185094,3fda3021,bc6d24d5,f3836fc0,74e426ec,6ead71e5,d76d2256)
1019 Z8(59a4229c,53ff1d78,c8a6dce7,f9d230cd,c4c96b3e,86610a65,0c04b8d4,9a6bf568)
1020 Z8(594cba1d,d887d560,d7add407,dcffb2f1,1db11c0b,f9c3ec7d,85dfa887,b6235a58)
1021 Z8(4eff3a9b,b1bc432a,7fc72814,41734688,c3f23d0d,d6108548,43071f8e,7fdd1661)
1022 Z8(1363f282,a20520e3,d3eaf7d7,bb46f7d4,8bd8940c,70029354,dbf4be1d,573e0723)
1023 Z8(746723a5,ca1b726f,53d887ae,7d812d35,34b3b81d,a7847d39,3616a7d8,d6cca136)
1024 Z8(2a335402,449cae80,6d4fc678,409606b9,464f6f96,d1852648,f99303e9,669e8a24)
1025 Z8(38dea4d5,01baa201,c2e4e63c,827c1fe7,411bdc1d,4f5a8b24,8ff877de,25cf642e)
1026 Z8(8ca87ca2,d288aa81,b4b7a793,d755b21f,217bb733,4b32066b,0167d08e,0c94a06f)
1027 Z8(33e31cf7,6c267976,6cda4a20,48e54861,a3faea87,cfa78099,1a1e7c40,92873c28)
1028 Z8(1378a966,31028e02,b57600ba,7b0a20fd,22def5f0,d6a3c561,416aa555,183acc26)
1029 Z8(bf3833a7,5ff2c51a,8c0d943d,a5794670,0fd405fa,9327c203,d48973ba,b1488393)
1030 Z8(9f5f2aec,e42de389,c7458d46,17ed2458,6941085b,0a4c2fa6,b65b0dd5,5cf646b0)
1031 Z8(e5ed7119,d26f88ed,1c90f13d,d59807fe,bc757228,17cd5774,a0b3038c,a30d3896)
1032 Z8(abcc4bef,21b14b72,f7f058c6,d318bf0d,59cc641a,5d2c7f54,7160e11a,a190338a)
1033 Z8(3fcd901b,11755aaa,fa64df7d,94aeaa9a,4203b81f,8e9d5942,978f6d9b,db35d11a)
1034 Z8(200481a7,e6fcc863,b6b74f94,ed177ce4,e9ace9d8,1dfc3c38,2a909fbb,1ef5d676)
1035 Z8(5d0644c8,643e78e0,dc9a3723,b428bba2,6d366f75,f0875b84,29d0125a,7b4561e0)
1036 Z8(42c15d07,c5154037,7242f4c4,b2e9877e,f3c4587a,510e7474,3b232715,15dbe128)
1037 Z8(53c0f731,006208fc,6a989bfd,1973b2c2,cadf0cf5,1b8ebba9,50aa441f,7463d86f)
1038 Z8(e8117b1e,c820723b,ea1ad5db,079b9214,04f2289d,a70d2433,dea322bd,daa698c4)
1039 Z8(25391552,baf5842d,10dc442b,eb20005f,9873732c,78886507,62a2cf7b,eb03da48)
1040 Z8(dfd0b5c3,ed4b5ed3,aeac8027,eda58084,cf4db008,f3c6ae9e,14a26c7a,2b8f8e9b)
1041 Z8(851a5b82,8d2f69c6,66305968,a19dc640,40d78303,881b9605,c28becb4,f5b273f3)
1042 Z8(faebf7a2,95cc3adb,6c36cd2c,f59964fb,05c1540a,aab636ad,6e8b9795,1d615fe6)
1043 Z8(409bb91e,aeede91f,bbed24cf,c743f6f3,77bab28a,08edb7f0,aec5da49,9683cecc)
1044 Z8(f85a2dfe,3c493b37,1c978134,47e829f3,b43c7620,b04d0e26,8983d70f,d37bcac2)
1045 Z8(9c68408d,9a423224,7247aa44,2dd13d29,7bfd70e4,106576da,5e909d05,70863195)
1046 Z8(097afb89,fc9c562a,dfcee028,a2aae63d,ecbbc134,9fc3e1c0,6c869625,09369180)
1047 Z8(d2521351,24583718,5ccc11a7,338e5c85,167bd3b8,12b60587,4a81cd2f,c62a65b2)
1048 Z8(9947768f,a1f85aa7,978c79e4,c9c7a3c1,15caf99d,4e17e23c,bf1701b8,6e17a9a6)
1049 Z8(97fdc967,343c07c5,c6fe559c,199ce32d,30ea04fb,6a851072,903052af,917857d0)
1050 Z8(a697e51c,3420da56,c110c00e,5e6e6ca6,62cdb86e,82f7acd4,b0c9387b,71b98c75)
1051 Z8(eddd15a6,7f526f4c,8937883a,dc39e74c,b73b07bb,998894d6,b5f2e738,c295159d)
1052 Z8(9fce1950,03d51b16,a1252325,fc928a75,e596298c,151c2660,bd3dfebc,650b938b)
1053 Z8(64f22a1b,2db39c58,71f3b3c7,2d33959e,fabd76f5,4d0e7ded,820bec96,6edd83d7)
1054 Z8(b0329c05,d63274ec,948215db,3721580a,3e9a128d,aa6ff57e,c1ed4fad,44b69183)
1055 Z8(8d67d02e,af6429fd,99e56677,ca5c1d2e,61d84f32,40ed9273,1e32d672,21aa643d)
1056 Z8(e21c2a8b,e9fed43f,dfcaa41e,e44a3c92,8e9adaa2,7ccaafec,720bb770,c50dd48e)
1057 Z8(a296afd9,2b4df343,ddf8aadb,fa177547,8f461442,bed699b6,51e77ed2,ad0440ee)
1058 Z8(b7915de5,c91aff8c,af71d87b,7240dc7e,0e1a86b3,e26e3290,1beae849,71cbfce0)
1059 Z8(c784df6c,65272cb1,a727c0e6,16ed3101,d06ae845,595adcdc,1b3e9d32,93dbd00a)
1060 Z8(08547516,4071b030,b86f985f,c0916505,2e3c99c8,df146fcd,166b4b94,475b995b)
1061 Z8(dd1c2e7b,682e73a5,b4c5048a,7be03d0a,67695a6b,4bf20871,16422f27,088afee6)
1062 Z8(f07ec64d,3f1c9b93,f759c525,b80b0faa,26c1ad98,c24036b7,036644bd,45b497d1)
1063 Z8(eff48d24,432baee5,13df1e26,6aca3a03,b79b229f,4c3ca48f,dbcdc748,a328cb23)
1064 Z8(226b8b56,b81572f8,cb7fd0f1,e52edaa0,3d40b3da,7d5c398a,d146c0ed,fa1a1b1a)
1065 Z8(46d71949,02bdbe54,55570161,5a07d6bb,0b0f0326,696a0e5d,0b314a86,5b5651a1)
1066 Z8(e17d4073,8fef5c4c,efaf1de7,36a4fff7,e3e5ba78,8a9de13a,8cd68d43,06854a80)
1067 Z8(9c227bb2,cdde55a2,0c7088b0,e77ad698,bef5915a,fd297e4f,615cec36,9a7d3608)
1068 Z8(0e932ce2,03965240,21dee819,b469dd02,afc106d9,0fa98ade,c7bc424d,27cf27ac)
1069 Z8(e71602c9,39cb4800,9be30796,93e588da,851fb1fa,843d8ff5,a4166d67,798249c5)
1070 Z8(659eaa0a,6d3cc401,3e89ffb2,e489be58,e2bae238,95ae99fc,68bc4c89,0cd48280)
1071 Z8(70d4e962,d610bfa5,5e81bcef,f7d70f40,b6d468d1,10ed0bbd,6ff4fa82,06bb98b9)
1072 Z8(5ce28b99,a8b6cbb1,6047b0e8,2a6d1226,23e43a43,c5c334da,b25b547e,081a8a54)
1073 Z8(7f0f45b6,85196964,918a8e43,a7865a5a,0396324f,a1a19866,95234dab,0257dd43)
1074 Z8(f102b4cc,cdb51882,8a0d6719,560e376e,1aca28b1,71860ada,70f1c98a,32168f87)
1075 Z8(d98527d8,13d1e00d,9e2ca477,5536002e,173021d3,d13267cb,5486b0c9,64782f4e)
1076 Z8(4b8cd341,74213c29,13aae1b8,6e7af832,aef0a20b,27885e0d,b00309aa,dddb790f)
1077 Z8(f9282e08,af91cf97,aa23a82a,a06ed6f6,c262673c,0c5fb6f4,7f09aa6a,fa648466)
1078 Z8(609455f6,cb1e2ee7,570a95fb,cca80795,27bbff0c,96c50c45,08745d4b,d6d7cba6)
1079 Z8(bca1727b,ca128b94,c39f576a,05fd8a12,7b9044c4,8bc9eaa2,ed67cfdb,35fbc1d2)
1080 Z8(42463a6a,34d59a1b,66cc711e,ed22b460,75162bbc,fc77d87e,fb26a033,09d05255)
1081 Z8(9b035d08,1665b5a3,69950ade,1a4c556d,bff16be4,a9fd0f4f,b23df377,bcbdcf0e)
1082 Z8(9a63bae9,64857e63,628319fd,0ceffdca,b481c25d,424a9b50,2935571c,58349d5b)
1083 Z8(3de9123a,62c6a0f9,fe008384,9a8a5273,287633b8,b6ccfa2e,d4c46cde,5c16b842)
1084 Z8(dd360c3d,aafbded1,6c16afba,530fb1cb,ee9ee3d1,494fbb02,12d836e4,325433ce)
1085 Z8(4bc0c24b,9163842d,6509ecdf,8c83e30f,23b138a4,2e8a30f2,2676a5f5,e6be4d96)
1086 Z8(7f08fb28,44fc781a,b27c5cc1,b0d92839,11278928,86db8e3c,93cddb58,570d23f6)
1087 Z8(3789c881,fff73036,ddd28685,5d193d3f,247ebda2,838fbe01,1f3ee707,258f62e9)
1088 Z8(d2dea49b,b195f39a,a78a72e3,e99c1353,dda894ef,c9375eed,f5722ade,5b127aad)
1089 Z8(1ccb7ffd,2e311775,edb307d8,e28cbabf,85723772,3cd8aef3,8f875112,71699dbc)
1090 Z8(17134dda,7f4b58c2,e8f91e60,e4714f94,32aa4fbf,36dd2933,21a791a4,d080dd0d)
1091 Z8(35b32f29,a94cdb28,51b37960,406267c3,c63f3a8a,8f4636f7,d4d80fc2,ff8c8a1f)
1092 Z8(fc6b098c,b3c0d580,085d14a5,b94a91ad,fb48a262,9f5d2d2a,f1b35da2,9a469623)
1093 Z8(457860ec,aa3a9767,8dfa267b,9323a879,9cc8b0ae,494255a6,a774b15f,09d7681d)
1094 Z8(4d6b5876,889ee15b,6f8516f8,16ed5194,5060ed45,a259cb94,e4d9f15f,906c75fa)
1095 Z8(c74a296e,02f248bb,ef45f840,e6a73cac,b352c85c,158c0a81,8d48683f,41691803)
1096 Z8(0655838b,1a545ee6,3c877d32,42347994,1c1e4692,910cf953,02846c81,fc3c8ba6)
1097 Z8(8179a55f,a883a996,d0b38871,765d2d74,0f859d20,7b85903a,bd2baac0,09e45481)
1098 Z8(17acb4a2,298652b3,578a4684,0bac8bc6,142a72be,cb1699bd,a04f9266,60ade071)
1099 Z8(ea6873f4,b1a0aad3,873e131c,94de6524,268d334b,9032513d,fb129fc7,e65881c3)
1100 Z8(f62f1c71,2e0718a8,874a06f7,ca98e056,6a366499,1f06733a,bfdc725f,088c23e6)
1101 Z8(bb8aa694,8209632d,58b3d28f,3b29f32a,bff4cd3b,d7af88d2,555f8230,3c88ae1f)
1102 Z8(3d6ec30e,e2595c56,a5a90145,8bbeaca0,cd4aa45e,899be9a4,eb2876ba,b6067b95)
1103 Z8(523f4d95,cbc1d9f9,6799fdfc,7c1d879e,106ad7ee,4f7807ab,1d27b7e9,3adb995e)
1104 Z8(2fbfdfd2,b63db525,c25c717d,3f46b735,3662dcdd,8441ed05,154997e3,5cc9259b)
1105 Z8(c5c363cd,210f448f,5affc41d,19a8bbb2,fbb10a6f,7c11ff84,0686b7ba,97b39208)
1106 Z8(183f8de6,c7b8ac27,a9b577e3,0ec91dda,e8aa64ea,b6519c39,f40cdf0f,3620d70b)
1107 Z8(3d5e76b6,c6ce4df3,063d7ffb,aafa4dfc,9108ac91,a994e6f6,536672c4,6dee9547)
1108 Z8(80a6a047,3021444d,a74fa06a,83bf50e9,39f43a20,7109a95b,1c3b0382,20242b2e)
1109 Z8(afeb3d7c,116e134e,3474fe93,f3cbae10,7b3d4444,f90e5056,ca8c974d,e51c00c4)
1110 Z8(75cf5c7b,afe40656,f41d4674,3c094201,2afe61bd,a97b85f9,3091073b,2f502792)
1111 Z8(870685b9,36e03878,d2d27968,b7e1f389,9df3033f,1fb23834,ff943d6f,71c7e4cf)
1112 Z8(d4a76e82,4431ce1f,2d2e9cf4,47a80314,de994e26,a9e41245,653387fa,21bae49a)
1113 Z8(f893d9b7,6ce4c917,4dc2e153,76241b62,ddc91be7,e59ef086,266b28ff,da936d5b)
1114 Z8(efe83c35,62b8c3f1,cfd0a097,490f5f93,a7cf1b12,54cd9c40,b0f6239f,df24dcf4)
1115 Z8(a27495e0,77ea6629,b702a2ae,96cd05b2,d131ef8b,5fd0881f,d83350a6,2fcd5d09)
1116 Z8(4efd6f88,41c6cfad,52d2ab4d,bd3b4077,b34ae921,56bb3b75,b1181e7f,a2fb4a37)
1117 Z8(c3df6255,a83eada7,e9f45fc7,f32993b7,53bb1ced,c06b98a4,b4e7dde4,01cd762b)
1118 Z8(10cbc766,3a3fa42e,6a83c709,4d170f45,8bec2394,f71c8fa5,17dd29db,f806542d)
1119 Z8(5b46049e,dd2e0de7,23933a96,80df7778,1e412239,b2919465,d711538f,1057e2a9)
1120 Z8(9d1bbe4a,82b19b48,77b38f12,8773ed26,1580787c,64a9fae4,95c9ad0e,98e06332)
1121 Z8(0cca196b,30258abe,927b986d,63847ebd,ec1aba78,8f2f2d1f,68680eae,06d37c0f)
1122 Z8(36283fbc,f3e619ca,1b662364,dbd0bbc2,43ece335,536602ab,6c7db599,795eb3d8)
1123 Z8(06bdbf7c,acf32bb2,a4d07a76,f85b1f44,829e0922,0080f5dc,58d2b4bf,7daccde0)
1124 Z8(cedf93d4,fd436441,cb6c99c8,0bf04fa4,f35abe28,a6e8615c,50d95d9b,19738d89)
1125 Z8(add2ed8d,f1edbb85,64fcf0d0,cd394ef4,11e7fc02,74d55892,2c3c63bd,4bc8db33)
1126 Z8(714ff7ac,e4ceb5bf,34d868e8,1fb4e049,da4bfe3d,446d0142,11361852,857e1bb0)
1127 Z8(0af67d36,01586305,af4cf067,1259b26d,15a4d609,8bf7cdae,e3d98955,a937c3a0)
1128 Z8(29926dbc,e0456ba7,a22369bb,4a56e822,f32be0b2,a5b50ccc,65451b7c,d780995b)
1129 Z8(19511fbc,880e1eae,1bd39297,fb6ba5ee,f25a1179,9bef1245,10144e2b,0efd6fe5)
1130 Z8(833b325e,87c9a5ff,2da23382,a49e5d86,012f4b11,6f285c21,a9dc33f7,09d64f89)
1131 Z8(21f8c3d5,a8f8879c,97065c50,15c2ac62,985b81cf,f91a22a2,0f90c0b1,0fc2c0ee)
1132 Z8(5327ad8e,184313c4,39b0bfea,05ac2020,f034ae2c,0500c809,b4723f45,0c2869d3)
1133 Z8(a40c4f1f,044a434d,de3ff27d,3c434098,73cb45b4,ed40fec3,ec6c2085,42d44786)
1134 Z8(eec9c6ec,ed9420d1,67838913,f2417baa,8f75a300,c60d07d7,47464a95,6bafd81c)
1135 Z8(cc04a724,31c9adfb,c2e90837,7f2dc70c,4fbb31d2,8b5a844f,483ac05d,1f289c21)
1136 Z8(54a1d59c,e8017c14,895de30c,e3c8a540,6292462d,7caf60a5,93c583bc,6495347f)
1137 Z8(a00b99c5,58438d0b,68a47a9b,dc8fcbdb,816adae6,ac4e2e37,2b3976e1,0de1b5a3)
1138 Z8(14f0a5a4,e9f002f4,8afb6d3e,ce9f24db,e2216fc0,3c22d43c,e2218797,847b081b)
1139 Z8(e406d4ed,a44250ca,406fdef9,ff7a52a1,4ad5d690,ba096ded,2d9ea549,aefc100c)
1140 Z8(f85c6271,c985aa1d,ba5b1057,15553e55,00a4bfca,06b41a92,5ee1df49,dbdb4c0a)
1141 Z8(5d285860,be654eba,ab9be541,58013a3b,e64ed514,6e033c73,071f38a1,cb4d5d4f)
1142 Z8(4ae864c1,9cbd4dc6,0ae326ae,e82123c5,f543e1b5,bafc3915,f7cfb396,a2a507c2)
1143 Z8(8fa5757d,07a8f4e8,dd8f91b2,36a4445c,5d6169ac,0bbbd75b,7b09c68e,b315a94e)
1144 Z8(cbd71bed,e739ab7f,2056dead,e7abeac0,593eaeb6,99f5e674,474bb1c0,1e154bd6)
1145 Z8(30ccb976,3e59222f,546c6bf4,6a2ca1e0,b0e803b3,be483c6a,b14d130b,76ef2f06)
1146 Z8(0491509e,7fdc8bbd,666c09b5,53ae470f,0cfa9c44,291b6684,5b8ebb1c,7abe4a32)
1147 Z8(022978d7,cbbd4dcd,3424faf0,9533af8e,6f3fdd54,e49c12cd,3f7645df,45555bdb)
1148 Z8(f8ff5c01,790c88a3,0fcbda5b,da978b72,9a362fb0,27b6aa33,7d8f9085,f06eb674)
1149 Z8(73e1b94f,666bbb3a,7224e99e,eb3fbb3a,782453f9,fa99d81b,48ff82fa,31724d5d)
1150 Z8(55420e5b,10be7814,0b05931a,0ee57d89,d9a8fc8f,27ea620d,725f81c4,689412c7)
1151 Z8(f3e0d55e,ec0ceb4e,43d19b5a,78712960,e55d7475,9101031f,a0295bf1,15a3cc47)
1152 Z8(6771de93,e85048ec,36315d55,29c48686,e316eb02,556df11c,75262f14,510e7ff2)
1153 Z8(5e497da1,7d54dd89,09768bee,47507c2c,b127c090,571e8279,5d297f96,3081ad86)
1154 Z8(4cd9de95,ecda9711,43a2cfc2,ff3c57f7,9d7060a8,90a0e465,0fcf9f79,64e25539)
1155 Z8(b322825e,352b3b0a,3bf45ec8,c9bc8448,8a3653b1,67bdc5f2,7eb67b25,d6cf372d)
1156 Z8(8ad8dd10,2692051e,1506e3f9,ade2d90e,5073c07f,b8a22a29,6f51dc55,61450660)
1157 Z8(4039951c,4d30b5b4,b0b6019f,e077d3c3,586d3872,886a1c76,4d58a51b,c9a36cb8)
1158 Z8(ea5e6e61,5aa1bd7c,6b5ad8bf,b4de893c,d5c64edd,352f7d23,d1f02741,a0b99983)
1159 Z8(3af7d32e,94a44876,ab086d42,32c4ae97,abd4fb4b,7c8d7736,7a2dcf1e,306c23ad)
1160 Z8(39053155,d13eb794,35792abf,29681628,6325dfa0,59e393d6,071b4981,c61b9d9d)
1161 Z8(a9bd42be,73cfeb6d,0bd84d6a,9f6255cb,42b187da,00a88c75,879c5988,9802d536)
1162 Z8(e172f101,b41b1d3f,6f9aa4bf,837c5dee,d8223918,991c4caf,90b88399,fc43be5f)
1163 Z8(4114826f,e40e978e,a0ecf3ec,3eade0cf,97ad5ec7,b5f0856c,e6ad357c,c595841a)
1164 Z8(94f42170,f95260a2,3967b320,9a2dc0af,35057e54,20849449,5f95c718,71c4f319)
1165 Z8(c3a6bd6f,a3efa109,23a07f0b,a8910025,786235ca,a696fdce,f9b4d91a,5699115b)
1166 Z8(9e2beaf1,4ecc1871,8365975e,7afe32d0,632359a3,bc32fc44,4a127650,9f1b1f0f)
1167 Z8(887c5bd3,99fee53b,f6751a08,7dcb26b9,13d13dff,1e62793e,a166fff6,1ab02ac3)
1168 Z8(473db31a,65cbf1e6,b403a01b,a9d1230a,0efd35bc,1463c090,a4edf762,7bf8e15c)
1169 Z8(0ec24d96,463758a9,2f11b148,780ad4a3,c1c21673,7067b6c7,e377c849,817daa29)
1170 Z8(eddeb113,f5c0fc54,fe8cac65,75041442,eb40fb4c,03b40842,0a0ddfd2,b9469bbb)
1171 Z8(1a786af8,53dc0fe1,ea8be441,59e23291,88d14d32,8fd2fb6b,be89288f,c29d9054)
1172 Z8(f3fcda10,34b572d4,2a8e3df0,4f1bd03b,18f89da6,b006b029,ac4c11cb,90dcdb0e)
1173 Z8(1454bc44,5e691670,3ebf3c1f,467bce1c,a2e0545b,34ca69c1,e6455722,4c966885)
1174 Z8(43132697,983c2f66,d4721a73,eacefcd3,afb16394,25256f02,f09882c5,f17a55b4)
1175 Z8(8c3b47ed,12ed5fe8,32305940,eda40c49,55f62f77,823a07a2,4684878c,62ac5afe)
1176 Z8(1e20490d,5acbd26d,d5c09ec2,3f2f2057,ad00b7fb,038841d7,c04a356d,c212d7c3)
1177 Z8(e7b1fe0b,3aaa1cbd,7c66ff13,26fd10f7,0068444f,8844fb98,b00b1f5a,978023b0)
1178 Z8(e10b718d,8a67ac25,68ee937a,4b6e20e1,63afff40,6811bc50,cf1b67a6,9cc42d0d)
1179 Z8(63651dd7,ceac0cb5,eeb2f6a6,eead14c1,cb5fb6c3,bf04e41c,b31acdb9,3d9d44af)
1180 Z8(7f0e4be5,208ebb48,48d1bafe,3d2064d2,21899d61,515ff9f0,36bb2544,3e6886e6)
1181 Z8(51cd006b,fa42e770,4be9d286,04887843,dda9e5ac,057f4d62,194f70c7,1836812e)
1182 Z8(d539648b,02344fa5,f459136c,d0968987,7ee79cc5,75d3327d,70c95959,852d05c4)
1183 Z8(682c21bd,01e44d67,0cedcb6a,19c2db78,68021beb,f843afdf,a943cd81,bb092949)
1184 Z8(ee7281f8,f04980f7,6efaa7c0,2184b9d4,855442e8,21163fff,b5e20a1c,9b5ac6e0)
1185 Z8(b9d17a61,fed2ad0e,60e33d63,d8717f7e,137c1660,0a4f017a,1ba7dc50,190d48e7)
1186 Z8(7ec05bbc,579179db,51164d66,754d4dce,280a73f8,3e6ab416,51888b53,98709578)
1187 Z8(a80611ee,e7313678,d47b314b,57c4dff9,4a7b6119,e7c4831a,37da31ed,b857631c)
1188 Z8(8b774a44,5d3982a3,a89380cf,99c79f51,470f5e5e,7c86872f,2d502ea2,caf7a7a2)
1189 Z8(43ce8827,600f8280,f5948658,eee77e6a,9265fedc,d28517d8,78f73f60,d7827e5c)
1190 Z8(9922a2ab,d7ee9a73,8008fad0,20ffdefa,425f51df,1a45afe8,aca9c4e8,88b44aa6)
1191 Z8(2483f318,d2137ddc,3c40abaa,a1807b70,4f2ab79f,b90a1efb,06fbb84b,1111d43a)
1192 Z8(9777ca11,82e6e9a1,e7874ff4,a1760cff,1e9db818,7868d3f5,fc5813da,d08f0b59)
1193 Z8(ac8207e1,95a6d918,29a0fe54,c8ad0eaa,54d2607b,30717cf2,ce40d167,4ed7a144)
1194 Z8(565b8223,0d9c5feb,3fa7dedb,9a948f29,dba50bc5,befcc145,65b2de36,1ff19bc9)
1195 Z8(f459d989,755fb0f5,b5ae55d4,8672fc6a,595e607a,13a95faf,51304f18,cbaf5aa1)
1196 Z8(e7f5a113,74c87b23,c7c801a4,b6a802c9,f9a21979,ace184c8,f84933b1,da54cd45)
1197 Z8(99a6e139,998062f2,7d517a6e,67d50696,a065d5d6,7208edd1,6be0783e,fffd1ffc)
1198 Z8(15ffa111,cd5ad73e,c2d38cf1,0c984a87,df3fb69b,0581f8ec,612efcd4,f90e191b)
1199 Z8(75cc8ad8,d4b13fca,81b23591,94491c38,8e42a03e,110ced88,a4a1af57,8a8d3acf)
1200 Z8(edadf2b7,625f0b76,6f5e3ad7,61e6b6c2,74b43370,7de92545,56898f7a,1340cc47)
1201 Z8(a3fb976f,4f18359a,80a0f3a9,b06328fb,1ba5a3b6,e56d5138,216e9cb8,104763d1)
1202 Z8(75c51dd3,4690a8c0,65ab06de,d7cd7058,be6e0a71,83a2d6d9,69d9e80f,9fb6a4ba)
1203 Z8(ddce7487,23c00d0c,f48d7a6f,21249081,849cf9f9,5b2c4c68,16b1737c,e4ae4246)
1204 Z8(daebff05,6b6b2059,8bec06b3,dc582992,8a993f14,facea004,b727a3d0,7ed11df1)
1205 Z8(42c08e50,d75f3b24,657ac1d2,b709864c,eaa24286,ea7048dd,f5981974,d9360fb4)
1206 Z8(1f5f09fc,66cd94e0,c00dc021,c9febf13,a546bbf3,40eb3682,9f1ce2b5,aee96554)
1207 Z8(37709216,e260c583,df1dc93e,eb28757f,94a2f5dd,48f24d27,b521cd57,ff964711)
1208 Z8(84fe3992,632ab8c0,485dea16,91bc3f93,2b2a3302,91ca86a1,12899699,11698ff8)
1209 Z8(db1ab4d5,7abac182,085e216f,3193740b,ccee9bc2,a080f447,56cddb6b,8d1999b2)
1210 Z8(61695627,6cca0d9c,26946db9,b9109846,4439bf13,3f4ee2b9,c0dd103c,a1aafef3)
1211 Z8(7d48fed7,0be4ff06,fee86825,816649ba,e837dfcf,0a8ae742,4f46adb6,d22df86b)
1212 Z8(4900160a,c07b974c,b3eeb184,897c32d8,695b80fa,26363171,048ccb1d,8a50f92b)
1213 Z8(d525f728,c4fe4211,e77c8cd2,932fb704,c3ac7a92,9aada34b,cf9e34d2,51ccb430)
1214 Z8(1df291e3,4085466f,90ceddc0,dd613ffd,341b40bd,72bdd279,f036b2d3,546f8a30)
1215 Z8(6742f95e,a6d713fb,f5e090c3,4ea7ef8b,e4754b7a,2fe223a6,0d55fd0d,f5333090)
1216 Z8(6d433a27,a2804aee,3e2e193c,efd269ad,70b1081f,78d7df03,8f302143,a69d5ba9)
1217 Z8(71d6bf30,7f8e78f0,f90ab530,f8d3e7bf,15b06396,3cea57bf,9ea2a66e,ed77f854)
1218 Z8(f8f9ccd3,eeb62fe1,482cccfe,63afa43d,7146be0f,fd64d0b6,d8b4ff1d,67a476ee)
1219 Z8(eaf19d53,91c7457b,a4b144b9,62246b05,12a20092,d1d1910f,9325793b,50c396db)
1220 Z8(bd9c39e9,41c68662,766a7954,ce27ce99,ab5b2533,db5d10ff,f375c85d,bbd618a1)
1221 Z8(d95c4f71,f732cca2,5f849e74,1d94bed1,155b952c,accb093c,54b46750,0004f1fe)
1222 Z8(707c7c76,bfc8a7ec,9623e0cb,85dad892,b1ee574e,0487f2b0,43a8e139,d0a8d879)
1223 Z8(f18a1d32,35292a02,6ad2d4f3,9b1e59fd,4a2bf337,a015b197,f3ae330d,55394851)
1224 Z8(d8865bbb,fa6c4019,a5b3aac3,4b23c1ec,6bf91d24,9b96be97,e5e99477,795f34e0)
1225 Z8(20e99d3c,d574bcaa,a7a8353f,1e681d5c,fd2dd2a9,023ff03e,c31e940d,be9e65b1)
1226 Z8(2f5eded2,b393c45d,b08b0cec,52604c56,8f2bfbbc,2783f8de,49bd7206,321efbb8)
1227 Z8(1f70fe19,2230c0eb,87dbe674,29003f53,61cfef78,655e6c8e,329fc38e,cfb9d4d3)
1228 Z8(863ef892,7b73cd2d,d9e0a595,e6e74e85,e48ec654,4ed0f47b,ff248243,6a430c0b)
1229 Z8(3fd2ea1e,e6982c93,75a07c23,a59b5293,8548b069,633cecfd,925ff51f,8adedacc)
1230 Z8(8cb6dc8e,27665aa8,fb1dd34b,1066f12a,7be8843a,eb4564f0,f2feb11c,4e9c0620)
1231 Z8(f0a53da1,65918ec1,9cea9a28,ea0a9f92,d19bd358,1b528451,57968b4b,7a4175b8)
1232 Z8(d9271135,4cd480ec,24c0a42f,07f4095f,b49a3afd,81206daf,eb30dd7a,37eed4ae)
1233 Z8(e6649320,6e6e316c,d3ee4178,01fbd5cd,0a6c1bc0,f4487894,c2bf66d8,29bd14b2)
1234 Z8(81b94ae4,702e3775,7b10dbbc,1adfa17f,8f39cfa9,45d4adbd,7e2aa2f2,dbbcf13e)
1235 Z8(11708b3d,d4a5dc58,5a6ac2e4,a4d4c255,5856e203,589cec29,c6cbb52a,63b2fd7b)
1236 Z8(56d96df5,a64e734e,1c1e5c0d,7b9e95a0,61ed13ea,984064c1,947d3c06,619a6be6)
1237 Z8(e92cc32d,0ee321ef,0abbe35e,91233634,b24a5bca,7e25ac90,bc3789c8,3df21ef7)
1238 Z8(4978bf3c,c7be7c43,a6d66904,28ca1ff4,2ac602a8,f2bc8d1c,5c7e388a,5cf9ccd1)
1239 Z8(8315854a,16300c2d,c2bc7405,3b88051f,fe5c74d6,7befd1c0,6c0a639f,e0fa28f8)
1240 Z8(0d110806,7d0e3c4e,953808d1,21a59a3d,f8c6ca37,d2d44977,6708bed5,710992af)
1241 Z8(6f65eee2,187ecb19,aef96e1a,e166f1d1,eec34c3b,e40a1b41,3e0d8c2f,d10e6cc2)
1242 Z8(78719c90,60078865,08c49261,4d0f32ef,df1c765d,ba8cb146,35ce5992,6c9d6703)
1243 Z8(d8cf3599,3587b144,bbd26ebe,cea29740,ac8e94fe,aa21afe0,bf042ed7,7774bced)
1244 Z8(b813b580,1e20201b,72c4fc5e,75f00619,d55ae56b,2f3d3318,1364701c,4b1f42bc)
1245 Z8(accea3bf,1cea5897,4e0381e4,84ea2d73,37efb700,ae520f69,4f82d598,dbbb72d6)
1246 Z8(7ec19c68,ad64745b,a17515f3,92e45e0a,0f2ce7da,3b843dae,ac4f1a5e,cbf960dd)
1247 Z8(1ed5bcb7,1a8aa82d,10fe1cb4,1458991c,80cc1713,2e21d15f,0e557163,36ad5f9d)
1248 Z8(281ed812,972cb8d5,4c3c4887,69429482,372b0461,06da6830,6cbffb94,c5c9b8b4)
1249 Z8(f1c1b34d,63f8b7f7,783a5100,fefabfd4,67b8edfb,86015b4a,0ca212a3,38be2f32)
1250 Z8(9518f10b,93ed7534,b3b4e499,0abc36df,dfbc5cac,df8a9fcc,16cd5b3d,5b9628bb)
1251 Z8(8cd4acf8,d6698335,1da137d5,91870a8e,4497598c,a67c1423,349c0a0c,80399fee)
1252 Z8(591d2d24,0f9ab945,851207b1,a5ad4144,a17e9723,25a81a91,d723b9c7,feaf1f83)
1253 Z8(1e482207,d8f94106,2bbcf6cf,95bda6cb,18eb481b,893a5867,e0974425,443006b0)
1254 Z8(97f7d527,e8041309,3c93cf8b,1374ed0f,d56f0fc4,d9e9c259,ff5a7346,933711d2)
1255 Z8(3eb12e05,cffc104c,33fd5576,1ae6f855,d9f6344f,addce3c1,f3e8e5ff,8fcf5b5e)
1256 Z8(319c7a72,de69d9d7,283e1d0c,fd9bb0bf,18a0ba57,b4dc1b0f,a08ed831,81e56986)
1257 Z8(29597619,a316fa62,6dccb52b,c94d5b71,959043cd,64639412,88880a3f,a24b4f07)
1258 Z8(b09cb99f,02667d6b,927d4b63,2e5f12fc,490c397a,157ba9ca,3451f25d,9f74864f)
1259 Z8(dad2ef0d,1ecb3701,c9862554,65c1dd61,af2dabe3,1f784d18,700c40a8,c539187c)
1260 Z8(7cdff604,9146d965,5559ca84,5d96a815,8899e85b,4fc9723a,8239b5cd,4184a1f4)
1261 Z8(fb179d49,8d1511d6,e2198d02,44100e48,69fccdf2,9c93adc8,e3a7f956,970a41a1)
1262 Z8(81ece8cc,f80ae81d,bb02901c,967b4f4c,18d69cac,1ab85b1a,d7910c7b,9832588c)
1263 Z8(46a30f68,2df03633,57621bca,94595a0c,3538559f,11551d80,80d6443b,8a90b44f)
1264 Z8(e685b19a,8b133050,219eb233,f3ba8b38,b6401b3f,5130fdf5,3a0a8f71,ecdc4f5a)
1265 Z8(75e22f67,ec28a16f,dd7ec3d4,8884d3df,c6021582,79205bd7,8c29a887,20022b8e)
1266 Z8(bb79bf2d,61618f97,efff8f75,c175ed29,81fabc2f,90a293f9,1f28f5bd,3093824d)
1267 Z8(65453358,4b12c895,f49cd15c,b4000661,0bfa83ee,51811312,f7e0a2ee,4bcf2e00)
1268 Z8(b7ad4f40,bdab0323,6c6cd756,bad454b5,f1a7f1cd,86352a2b,1f898da5,ecc02c3a)
1269 Z8(ea6e82a7,ac9ce282,cf8e88a5,0d8acfeb,7f301c7a,88d383bd,ca6435eb,f623c5f2)
1270 Z8(19a975fd,3a76cdce,786b94a8,6c965661,23b558a7,140c741b,debd643f,b11687d6)
1271 Z8(d1e764f1,620d1e31,d51a940c,8dea0fac,5cf770b1,508e70e0,7be1d8f7,5dfdd635)
1272 Z8(6e259b7f,11f128f3,e92e6487,fd8f7800,058f5841,31570e54,72295731,f983aa5b)
1273 Z8(e469432d,960ff56f,fb32e061,0c5bb07c,3b465346,e28c1082,32de6edb,1805cb5c)
1274 Z8(f1202545,ab555219,d7fb931f,640110c0,c54a617c,1eee7ee7,72c1bf7a,5e33c49b)
1275 Z8(84c3a776,8df9cec2,ef38d18a,69c4cdb5,8ffa4896,1ece70b0,4c5eba54,f31cc291)
1276 Z8(ba7d2af3,f725f0d1,c90d5dfb,d3892912,1a862895,7e588770,a08d15ce,2eb668c0)
1277 Z8(34efaa96,fd7768ba,811d73d1,83b974cb,e4e6dcca,e34f2f05,43071c43,cc3832d1)
1278 Z8(098da0c1,a14a448d,cbd7e3dc,aeacd0c4,2af53153,489aaa7d,a75b1ea5,b7ef4f34)
1279 Z8(71dca9ab,a8abe881,321947ca,dc544137,98fec1fc,d56ae93b,7cff14e8,a57d7c06)
1280 Z8(555ed278,8ded75b7,6147f63c,0a9ee22f,6eeb50d9,4a95f587,34b0ef94,45829bc6)
1281 Z8(2c121812,1d9781a9,555fd93b,73361733,3b191dd1,a2cb6cde,bc9a14d1,fdcef086)
1282 Z8(5cfc4d59,632cf194,a05db085,7806a933,fe954323,e82e5283,2e8b78a3,e6fc100d)
1283 Z8(7f6ace3f,11f20fb3,23c6cc78,94da158c,fbdecfb5,77ea44ed,02535bf3,476d6a1e)
1284 Z8(64d10835,d32b30ec,6ddefdc9,2fea6435,7471d352,03af6be8,d538cdba,0821b04b)
1285 Z8(29638181,24db0337,c17014aa,41cd5233,55f6d445,d5172102,ccb4bcbd,5e9ebca2)
1286 Z8(5952262c,66793e53,e835834d,02942edd,29bfbe95,2d65003d,b09f21d1,18339c3d)
1287 Z8(d22119eb,1d46239a,c9c7233d,b252e08c,bf011931,6e5dabef,3da98563,9e93ad70)
1288 Z8(8269f958,44ccea74,2a273de6,e1a6c79e,207bc70d,d3a40ead,e4931058,fe0eef84)
1289 Z8(d9117ac2,6b1ea815,1e377818,e0c38c01,586c47a4,b8cf5ecc,58c87681,c00ba529)
1290 Z8(28962720,f335a2c4,f050e591,9767d6e6,e064f209,21618579,80b234d4,89203fee)
1291 Z8(8b280839,b0436afa,be0f5b75,cd0e59df,a243017a,926f1b9f,c5df795c,69b64ea8)
1292 Z8(a4d87d65,e1291e33,927f6c9b,fa7280f4,baf39933,afea4730,61eae7d8,031a06d1)
1293 Z8(d46db5a2,1a2b14c3,156ab644,afcf0d0c,99f5bb03,da253042,7ad67e5f,94abcd6d)
1294 Z8(96879937,9954ada1,96154976,c95a100c,04d2c143,f493c5c3,4d3c49bc,44fe6d04)
1295 Z8(aba3311f,9cc421fc,c79bb796,277cb528,e491c927,e6c1ccde,1a3aad0f,beda8a51)
1296 Z8(50b5267f,4655c363,b4b66a27,6ce65a3a,68351f0e,538f0387,921a889e,21fd0747)
1297 Z8(6bae497c,3b8a980e,b025695a,118e2176,eb71f628,949bdd8e,ddcc51fb,b78dd828)
1298 Z8(52887880,42a03db3,05db6953,a17b8d0c,b6fb8890,268bdaf7,6b820913,e82e67ca)
1299 Z8(78fe90bb,76417375,aca15b76,c722313b,732c1a0f,6b039d3c,eb518c97,b38123db)
1300 Z8(51b10704,6d3ed8aa,55358ef9,6c214bba,1fd7f870,95b39ea3,a9bb8546,e02f42f7)
1301 Z8(27ee5cab,bbbe1dc3,1677ec4e,603900d5,7ce117e7,e91fe18d,b95c36a9,ad7bab25)
1302 Z8(5578785e,b8eaaf35,76ec223c,bf9949ac,f75979c5,7a1efa9e,60d15dce,91fecc60)
1303 Z8(758754b2,6238cba5,b762dd73,364d677f,37eca352,f02d2374,aecb653f,7d55ff31)
1304 Z8(10614994,2383ed5e,57a9e026,0ad27019,e56d072e,f378a2c6,5e35bdd9,f3e39db0)
1305 Z8(5ce2e454,ceb69ebc,eda4dd20,87011ad8,60266fe0,f1f8e077,47bdec4e,271dfc84)
1306 Z8(8cf4d650,b12b9ad8,0fc9da07,a3e50fa8,f21f3476,67e05630,2aadcdc9,2d32b661)
1307 Z8(c147ca79,6e777b8c,dcf961de,623b38cb,1a455c06,ac235445,4da824d2,102e07e0)
1308 Z8(15e4ed0f,99cdf865,99c4eeb9,bed8b4d4,4509190c,3738f82f,eec99626,b71cb75d)
1309 Z8(b3b85229,64e3f040,2203152f,9d45360b,3a0f086b,cff82e38,c6f0cbec,77430549)
1310 Z8(67413bb3,00651a5e,0ca29623,aa436bd0,94a2b9bb,1217e0cb,07769fbd,03c31469)
1311 Z8(b29816dc,1160eace,2e48aba5,94c84ea8,c9115fbf,8cd67f7f,c02308cd,fa88fe57)
1312 Z8(25859d89,89d5f829,91d9ce69,63899108,19b684a0,983bfa90,4413a657,36084b1d)
1313 Z8(befbbb3f,e7e231d1,b1cac89e,27658436,848d9764,c472bc16,a0338ef7,b1cb5410)
1314 Z8(c4308cf6,f21b3d34,08589e8d,269464ab,b3a2cbf9,2bac2c48,89bbddec,66435dfa)
1315 Z8(9c82b553,74856e3c,cc86c436,872e8ee2,c1121e6d,28a070d3,b799d9ba,02f50f68)
1316 Z8(7dfca024,1fdfb991,2b41e315,47747e2b,b3d0bd56,150c706d,56147655,f4d9e9f0)
1317 Z8(0c7e9c96,04c832ed,5618d166,a3733712,06591876,0cdadb21,924befc4,9f6db52f)
1318 Z8(7f78f9e9,aaacf08d,f2d5f9c2,daf0d157,15309848,10e3c770,2fa03911,ded72656)
1319 Z8(901f7247,15c222cb,a128e7f6,33729c1c,ed066f0c,6d0fac05,18958fbe,b76604c1)
1320 Z8(8b998b42,ab55835b,584506c5,aa287fe1,f3c5b4f4,84a57edc,dff76022,1cd8a7f8)
1321 Z8(e02d154f,d9dec870,ebf2139e,93c067a3,9c6aa6c0,03923b45,410853e4,d6524a2b)
1322 Z8(f7d82352,c372d0ff,ed2b3ac9,ddbbca3f,58a04713,c6ce9e6b,e8ca1b2f,975e03f6)
1323 Z8(0f47b4c8,802414fb,86157d1c,a134555d,5270f11a,ea104d86,b65c8de9,bae2e447)
1324 Z8(c7349815,0160e65e,82df1bf1,6858b990,4e4d85e9,218f87c6,3974087e,c391312d)
1325 Z8(e74f1cd7,397c120a,c95f33b4,b681e439,9980a37e,8c913194,9e881513,b5b3462b)
1326 Z8(6998a217,c54ee01a,d83e8631,b4c7821e,48dd2077,451767a4,bc4c1ac9,6351ec75)
1327 Z8(8411a18c,d6ea5b77,485ec700,ec4ee4fa,17c0356e,7f0887ba,08fdde3d,fa10fb83)
1328 Z8(7c2adf1e,b88b1386,70ad58eb,22e7d7ce,a1216533,5d2840e4,1d491ff4,cfc77d9b)
1329 Z8(c88200ed,033e0951,f8934cb9,d89fd19c,542c5130,257266b4,c5a01b4a,cd9604d7)
1330 Z8(4b6a1848,d2c2af62,0d3bdefa,7d9d60b5,5174b6f8,af48de4c,95a11293,8ba4af2c)
1331 Z8(062a715f,8dd2da65,442c63e6,4d7bbf16,5062fbf5,f6b2bc8d,fd8602ed,b8c5af7b)
1332 Z8(3d47b922,7c2b6f4b,c15dfb85,1c073af4,e20632ec,8aba9fc4,8d935aec,96bcd18b)
1333 Z8(9e7f9049,1bcbc84b,91dc5610,c072142e,6b199ea6,b25b8df6,4361eb1e,ba983f79)
1334 Z8(268f5b4c,bf75f4dd,75c119be,f4807e59,ff46868d,59e92f50,dcb89de4,8e000af8)
1335 Z8(1bce3f02,e967b29c,8695a6e1,03cd5875,fa418155,dd81f161,b2751c80,ddcb754b)
1336 Z8(505fd732,59c1e17a,7ee13b91,79eed108,994b8458,400600a7,f6f7e985,d01af557)
1337 Z8(1e17a4b6,db23b237,d0a65f19,467f8094,2a876649,8e9ea412,017526eb,f19f59e7)
1338 Z8(d9b6c13d,a5102b67,2d6fc9c6,9ccd8a63,a8d75223,c6cc91f3,eff263e2,653af79f)
1339 Z8(b2a3358d,d180c8a5,a02c2855,856cd4d9,897d2783,fb540d1f,62e81f26,be845b2e)
1340 Z8(dc3bf5c2,c7174ebc,75995259,dead9ef0,72a66b4c,e3e61943,f058daa4,208b9db4)
1341 Z8(63c8dabb,245a5b90,27837d53,e91603f3,c4d5b5f7,0f0aebd4,ffd0ce72,dbdf7acd)
1342 Z8(cd05891c,59075901,95c9c647,9bea3bb9,88edd749,78cc2ab5,2dbad4c6,7273c87f)
1343 Z8(26e4fc8c,0af6f8ab,d7e3a74b,76f8b464,8bb81240,2484bf39,6828ba2b,087f3a02)
1344 Z8(afc44c7b,75d995cb,4d1027de,4fe93b72,939843d5,e0a22434,cbadf258,a079fb79)
1345 Z8(963bfae8,da7d8360,2784483d,010ac61c,5e51ea71,f87c39be,5b38177c,7b9467f7)
1346 Z8(fd683b56,72375a05,2d68c3c7,1785242a,67ea97aa,13b2736c,fe7d95d0,3b31061d)
1347 Z8(22686fea,317aaf2e,ad0c6b26,d3c716c8,57fbaa5b,f13cef93,556f6cb7,6b688d83)
1348 Z8(4c348455,0b2a1c30,05ad32ea,7a2b1ea3,b9eaba3b,0d780ccd,c1f50087,4f77e39f)
1349 Z8(1caf02c0,57fa9070,d953f422,090a1108,0d85e2a4,aa1f9b94,821364f1,66fc84b1)
1350 Z8(c8afbb22,235f870f,fad2cfa6,b7eba71e,ca53c09e,6254971f,f5e2a470,e8cf6a4c)
1351 Z8(40cae7c0,2884ec6c,86a9b874,b14bc36c,f1f256d9,e4e5ae63,70a9a532,e963b7df)
1352 Z8(362377f1,1bcfd9bc,bb3aa87b,f17e822b,81d544bf,a4816ab5,7c009bfa,dd917ae9)
1353 Z8(5c9e4fdf,463d2e83,e42997fd,3033a194,21d81310,41d65e32,5956da38,925fbc2f)
1354 Z8(2ebda0e1,62475719,2e6dac8e,c7ca825c,8119afb7,bcb1c956,2931caca,85723a36)
1355 Z8(136e66fc,fc642407,4d6e7afc,3a6db1ec,98ae8d86,e400c82f,620bd8a0,1941def6)
1356 Z8(16e68267,907ea7e0,40859c2c,5f233042,6f78b9eb,734d89d1,24ad8655,4d389c69)
1357 Z8(fc30dc08,55923d69,24d26c28,f7ad38aa,1e1ae198,8e5c4b3a,1d5e264d,a492ec44)
1358 Z8(4d695f11,f28f5138,dc7f4ffd,0ea98c38,481c7e6e,d4db5aa4,8480e8bf,81981404)
1359 Z8(f04c3619,7dd28219,65562742,92358274,f586e018,c19edc5e,30f7d844,54915d5a)
1360 Z8(db2526af,781b309e,b661e62d,d9148c0a,0af719dd,8ebd6820,6ff2622c,c068244e)
1361 Z8(d8a492e3,63ab552f,427527fa,31e85e30,a1cd57e5,15e31260,c6c944ae,3aa1d00c)
1362 Z8(e97ec2cf,e82bf2d5,132dc3f2,a35a66d1,6260a914,3df5417f,93338f5a,d1886f84)
1363 Z8(30af4a89,cf2eb536,20eb90cc,c897d34b,b53952b8,b6e2ab02,761e8503,efaa1bcf)
1364 Z8(4e4f52dd,2d7dece8,e046d33b,9d30248f,bda00fbe,e3969963,c33528e6,f3b436e9)
1365 Z8(f524831b,0ebdbcee,977751a8,bf57cb5c,8fddcac6,86aee555,4991a480,6bc2397a)
1366 Z8(117c4d41,23e54355,9d46d3db,432ed3a8,a2783a7c,1796a7ed,594497c5,91f586a7)
1367 Z8(38763744,95531389,45b255e1,5dd4d8e3,4d649d88,b4d39e53,289c202f,0ce7d97c)
1368 Z8(1f261956,dc4a4073,318f5419,4846d9ea,45332765,f655ca2e,a60eb1a6,5a7dff86)
1369 Z8(23744f38,6492eb2c,b79da006,714df221,0984d306,70e2e1d8,1244027f,817cd12a)
1370 Z8(8b48c456,c63c93aa,bfcec52e,14122b03,6091a5fb,17f47241,3d4b0431,8997f615)
1371 Z8(83ade652,47445204,0446c9f3,205fecd5,065e42b1,279c7151,0fabd42c,2fe25761)
1372 Z8(1c52acfb,1934875e,ea54430e,bbd342a6,c62fe634,c363c11a,b323e60a,ace2cdd8)
1373 Z8(7edc8843,1f4d3c76,acb00a94,5ac26560,171fd27b,9d0955cb,74031852,4e0992a4)
1374 Z8(d7b6245b,a3e15fd4,f753a150,aa453e59,5a47992b,2e4fb601,99b9c6c2,ac135a40)
1375 Z8(4f254378,c6e6250c,e68ed0c5,f2a4141c,8db7c9d7,76f40aaf,89e123b5,9d227d07)
1376 Z8(e15b2c99,2548606a,74a6d1ca,39e88039,d6be9208,a877ba39,af09cd2d,e2769751)
1377 Z8(714e9eea,18a1f523,cc013b62,497dcccd,a4cf7a8c,8b07f5e7,8135a013,b787ee15)
1378 Z8(63c09667,b3bd8a3c,fe0ce629,ae9f81ed,28adcd7c,1612c963,bb3b7aa1,1837ec72)
1379 Z8(79323731,1e9bfdd9,07aad183,4539adf7,59a64365,ce728949,7e3782a8,2f5ce182)
1380 Z8(001c15bf,e86ee62a,08c0e147,76bfef95,2871c270,45543943,0b9ce26e,7da078da)
1381 Z8(cd73d66c,13e68864,d641f715,a6f9e8bd,3fa3d370,529469da,7c790885,efa982da)
1382 Z8(710191c0,50ab2623,d8d23179,838541da,c5800ab1,bd6a5330,e899bd2a,e18580d1)
1383 Z8(62e2fcbe,8f06ca99,0e4def12,e83ff630,fea264f3,2ae786ae,f5df6929,666274e4)
1384 Z8(4d007241,b71976aa,5d89b385,fa784db9,acdded9f,43402be3,daabf4e8,271920ab)
1385 Z8(e35e3126,8e953fa7,44b0c00f,2efc9cfa,2c1de10c,24c04c53,fbbe1384,80b3d717)
1386 Z8(f46e0ea2,938e9e47,3900bea5,d3afbe07,4f4d2510,a164fa30,9edfd6d3,febad840)
1387 Z8(c404188b,e2e71d1d,d0ac1cce,5cd27722,c857e447,a9a4e462,302213e2,6f98987c)
1388 Z8(0a336d94,39549ef9,f0d16458,5b047ae6,ec69f6eb,0f752d86,799b3c44,c539d47e)
1389 Z8(f2794f46,7cd35101,1368e9df,b3145365,b5869d41,fff938c1,978101af,07e24ed3)
1390 Z8(9c2251bd,324137fe,c024ca40,f20e5a67,84516c34,eecae227,cf35e8c9,021ff73e)
1391 Z8(86055c6c,ba5e976e,787da722,19053cc1,ff83849b,3b93c4d1,bd44b744,93009410)
1392 Z8(0639cd03,a5214273,cfd62755,bb1253b8,98d17474,f607a5a0,49b7bc5c,9b1d28e3)
1393 Z8(780708f0,6bf8107e,216d8104,bbfc0f29,fa3eb9fe,3560d91a,74947fc9,90020ff9)
1394 Z8(732bfe8d,52684573,a89e6738,4f348342,7f779c7f,251dbe5c,222cf016,687fda9f)
1395 Z8(6de2bf99,13d27d2a,91af5105,36cb901f,646a9a13,181f6eaa,079cc034,473acdad)
1396 Z8(77dd652e,e3e22501,4024bd33,96f27719,2d938989,3b4f9392,a6d50df4,c5f01a8b)
1397 Z8(8546f104,7c499967,8e58bd9c,5bf178af,52f731a4,4ddf0b2a,ecb8390b,712fed65)
1398 Z8(c8592854,2172cb96,9e38e1e8,897232b1,efc16d38,02742504,d56df423,3eb2ec63)
1399 Z8(b5cdff18,8ca727ff,e401bb41,e2d18c23,1282e091,674e9f16,6a7f4e6f,ab02cfe8)
1400 Z8(40c0553a,3ae1662c,5188b182,69ccc617,5ea8931b,57be5814,cd717988,f5b2918b)
1401 Z8(03b0ce4e,dbb93120,6969ecae,e22334e1,115ac805,10abea2b,5c4997bf,eef19a9f)
1402 Z8(b710d889,a6b2f057,50a80170,35409450,3070ac04,faa2eb99,d6ed8419,857ee505)
1403 Z8(87f81cb7,691c9f69,36d659cd,2d681486,85dfb6f9,8b7ad15b,cc19df9a,c9ebc639)
1404 Z8(70ce381c,4df36ec3,466dea5b,b3ab97d6,19a5ceb0,230b7349,589903f1,8ff85ddf)
1405 Z8(7dbdcd4a,dc8a54fa,3225170a,3bc0e4ad,1f00b519,f88f9dd7,dc352406,a549269f)
1406 Z8(cd078dc3,a4381f72,b8b0a80c,53f249ae,bd3a5b56,646f3ea7,2dfd61ca,1275bf0a)
1407 Z8(fc4be8d2,96901301,1f1c2fa2,599e8914,d3ca89ad,5506757d,c2c23c0d,3ff77bbe)
1408 Z8(e0e10639,7c3ba00d,39f63f00,3d15255d,4608453e,436f69ee,08557697,9d3b4502)
1409 Z8(4730a873,c0511349,42b7624f,88d224f9,04a9690a,2e486b6f,6febc5c1,1c82245b)
1410 Z8(f3e13254,9f27e43a,23aba80a,b61972c4,02efdb24,5599d1f5,7b648343,813d23c7)
1411 Z8(88c99668,981245bb,3bb44a0b,a5af62f3,59cf7011,a124221b,97566b20,6bd7382d)
1412 Z8(1a042461,dcd83ead,9cfe3ce5,176b3f51,b70dfc13,15c62375,0a36ec2d,283fa20b)
1413 Z8(08edf53e,4beffbb2,37cd8309,cde8c10c,6f606b14,b4b6a8ed,5c1070ae,23e6abf5)
1414 Z8(1aba7bdb,98905887,e9c5cafb,9a8e17b9,636d1eb2,f108730d,ae252184,aa55ba8e)
1415 Z8(2b073aa6,8f807db7,8654e88a,4dcca0da,7599baaf,eacd85fd,c73d9a75,447161aa)
1416 Z8(424cf602,274a9bd6,32be174f,501c8d13,c44d85ba,9e05e1a9,b089cc9b,eead7aef)
1417 Z8(cd973439,2316c0dc,0690a1f3,46da2374,70357fe6,712725f7,d3292acd,5da5010e)
1418 Z8(21c0e188,76107e9c,96543df4,72989d97,09521404,52a956ee,5d7d97a8,bdaa0900)
1419 Z8(7123f7c1,b912de49,3b27623d,ad069709,a5c745f1,79712589,24f1c98d,c38801db)
1420 Z8(fa108ad6,68743d53,97706b2c,42ec549d,0ca67057,2b29aa7b,8e487384,c3abd56e)
1421 Z8(567f761e,c9a0a856,19722fab,e83bec7f,d1f1f650,ae0d3b9d,49d23e34,0636eb19)
1422 Z8(ad33a1c8,bdbc42bb,25a6cf17,d83673f7,c6d1113b,5575e890,fd870f5d,cd94f8d1)
1423 Z8(4059787e,3d736fa9,7f2b129d,e53626ac,db1ed883,e75d458f,f922e250,fdf95703)
1424 Z8(f72483cb,f62b2fc7,1a11eb8f,bdfe158c,5fc907f6,1c293f68,1a5ceeac,b757b0f9)
1425 Z8(a37c6987,969240b3,e58ab60e,8ba172c6,4b332069,a5ec417a,579d86f7,a837df05)
1426 Z8(e858b7bb,53b8b60c,89f10a5f,fb230dce,6fa6263d,32a8db37,f6367dde,e5458e28)
1427 Z8(0636ada8,96c28fae,6aad3ff2,db8b6a3b,003562bd,c8d77356,7ede1f06,b5594e52)
1428 Z8(f06d9d39,bf727c08,ef145876,ba950c3d,8c85cce9,2bdfa68c,b603e9d6,7ede721e)
1429 Z8(262e556b,75bdc115,ad789318,7cd26e3b,9c5a214d,84825f3f,4821ad88,e52af8da)
1430 Z8(73797e0d,f2e10e9c,b2be81c9,ac222c88,152b0e16,17ce4886,a7e7dbe8,07e1758b)
1431 Z8(80524efe,454879a4,505b29fb,bb1f61f9,48ecd832,4325b6a7,c4147f4f,d25eab3f)
1432 Z8(a39253a2,5e52aa44,3ef6ff1e,bc782900,dec49381,a54b709d,c9380ac4,0f797f38)
1433 Z8(3e0df34a,730ceff8,533caefb,82645526,9abea011,6fbde1ba,a2208942,196adab7)
1434 Z8(b00f53b5,26e4a2d0,a9f58885,b84c7c8b,b8f28691,47f64841,220089a0,9dba738f)
1435 Z8(239a15ef,98090186,de8a7020,96a04a15,c6b10667,a3128437,0e55e016,1b3b3f2f)
1436 Z8(544263dd,a310d393,4a03145b,9b3f31c4,e900bfc2,8536c1af,f9f2f5dd,bd06feec)
1437 Z8(55e05aa5,c96e39dd,c4537767,66918b7d,8ae56024,53e2920c,a64c57f7,318b5795)
1438 Z8(a2d5f73f,cb0f5cc7,0c8faff3,3fcf0543,81c55f24,7e395be9,f7cd62e9,85c68ef9)
1439 Z8(0d272ce7,f2fa70d1,f5579c87,8f732dd1,de487d6f,eaad0b8c,ff18f425,5e63e5ef)
1440 Z8(2f29bd18,0b360281,ccfa08d3,1fb346ee,63006920,4dcac38b,5233426b,aeebb506)
1441 Z8(170ebde4,05268f9f,202df2a5,fbc4162f,2ed530b8,943be3d5,6145d9f3,516697d1)
1442 Z8(50eea761,c3d175ab,7429163c,1dc02218,4c90927e,860e41d6,b5c49f85,8d5e05b8)
1443 Z8(4a0d3863,98747fae,3f2527c5,7c09e6e6,3b93d9e8,661f83c1,d181f371,7dcd1a6a)
1444 Z8(17048087,71c6ff3f,f8a13fda,f4a3a2ca,f981573f,085feac7,b0f5f63d,e40fa605)
1445 Z8(53373b0b,6ba755cc,36cbe753,c0e5c623,89452be9,7ffe4a37,02cb4e66,291ba851)
1446 Z8(be972b16,a26878e3,9173e475,c2380999,3a75a8e7,01ddbafb,c62d742d,3ce3a85c)
1447 Z8(eba0c1b2,ebd230b2,0f206011,00d2ef92,0c126e90,6f2229df,363f9874,54c8df70)
1448 Z8(e5e9e294,26e9d675,6e24e54e,0098d942,6da5d965,c7169dcf,9e0a8563,ec2db046)
1449 Z8(b31ba9e2,421b1e6d,bfc4b5ac,011a231a,679bad92,24313528,a81afbcc,22c74166)
1450 Z8(9d61e1dc,bc7296f9,7bfb943c,7b5471bf,f784e940,c5aaba59,fffed1ee,6a8d5aa3)
1451 Z8(cdd14393,4e76c420,a8d7e6a4,b4284232,0ff2a8d1,0e7b0cb4,fe39f8b8,091afc64)
1452 Z8(f49bfc88,7afed6f6,53c4f243,96e56c19,cd95f46c,73f42f01,e968a65d,6fcc35db)
1453 Z8(0547e284,4192abdf,a5489a2e,813fd150,8bd78a06,cc14eb88,d8feadee,56819174)
1454 Z8(3651bc64,9ad449a3,86a9ab06,00341387,cc711092,a5782d24,701b00a3,7d8e7da5)
1455 Z8(f49d15f8,0c3f004b,04ac4a3a,1d4fd4fe,38255c44,4ee2d3b9,93c83663,de330ac8)
1456 Z8(23242aab,04b89e4e,2cfefae7,bb8aa63a,74aab751,d479bcd3,9d8d1ba9,ffb2a307)
1457 Z8(e77d653f,d8b1983e,f1307588,5a97c946,569a55be,661de221,13a768f0,9f1b5e72)
1458 Z8(902ef8c6,58a4a252,52406d87,ad9cf441,65480203,37a0e1e9,7fd93a2e,559ff47d)
1459 Z8(4c8d5215,5bd71d1f,a83b93d3,4e506170,97d13875,03df3622,e151df1a,556c6aae)
1460 Z8(cf931bcf,8a1a7c0b,67e1cb04,9d8d73c7,dc246210,7b66f121,fec7125b,51230001)
1461 Z8(d3e8f91e,a9d25c90,b2e05589,8ea29b35,1a2121b2,90da2a58,6f12f9ed,ccb986f6)
1462 Z8(716fd0da,e5b99404,fc5b8f23,3e7a545a,e0e1fd19,d1fd1bed,976c0199,14682872)
1463 Z8(4ac8752f,960a5413,0e6a3cc6,62a19b54,eed60084,b28f3df4,51422837,6b04a4cd)
1464 Z8(b02aad01,d0dec652,762c8a43,69748a1f,4716a26d,62bbce54,18408143,3c14d163)
1465 Z8(5380fc89,fb282bc8,cf6713a2,6de2e902,d87c1b1e,6e0ee632,41ef8d4c,f63a4a92)
1466 Z8(76ea1ea5,1bab7979,69dad99b,d0b0972b,e8f245ec,7b7f2836,b92a4ff0,831c2f1a)
1467 Z8(62a58184,dfb72847,d64840f8,f3a01315,8d36d95d,8394cf93,65c6fed5,6e32adb1)
1468 Z8(e89ae6d8,1fe96403,6b4a0796,3e239ed8,b2063f00,f3214bee,282b7317,f83fac8e)
1469 Z8(627c8229,8c069722,a6048960,8a376184,8bddeb44,42b6191f,6890f36b,906f8ec9)
1470 Z8(44cf655a,90ead655,0c24c74e,e9627fc9,916ffb25,28713e3c,760bd3f3,9693e1d7)
1471 Z8(4c5e0f0f,95050137,a21d1cb9,ba720644,c6f872be,8928302a,6a26b00b,66547394)
1472 Z8(607000c7,fbcc75f4,4f6638e9,eb8a93b5,dd9400d8,edbc53d3,b64de2db,b5775855)
1473 Z8(6ef524f4,888a1ecc,09227c50,d87bf90a,6cdcefd4,157ab593,e1ddd4c9,95b4b602)
1474 Z8(622cc639,a016eb5c,401364cb,aca65b30,a0aec251,4b1a434a,1986884d,bc62181a)
1475 Z8(95c3a337,0c5c096f,0d386a5b,3b91a99b,1fc0a5c1,6fad40c8,2e85e7ad,d6d6ac6b)
1476 Z8(ba9e71b0,a39283b7,0b45dd27,6fac20f8,046e111d,abd878b3,2ef9f400,a4f7eec7)
1477 Z8(1e4213d2,3ef624a4,feda5097,c34e85b9,348c4309,7ae80437,c8b38914,190bd041)
1478 Z8(8aba95a6,e4d5ffa5,4c8fa8f8,ce03cba7,f89a8f1d,bcd647c0,34d2d34d,eeb742c8)
1479 Z8(797a9c6b,57d08190,94929481,f917a480,a3e8af6a,bdbef089,5bd88e6c,f11ed253)
1480 Z8(7962ceb4,e6e1cade,9db63c13,6fe99ea1,ef97e327,fb8b25fa,0d95e3eb,63c0d8b1)
1481 Z8(249e46c2,50eb5448,8b7dd1ec,cdf41334,c31a6c20,08fca2f3,620f32a6,d825d623)
1482 Z8(270c604e,aee745b4,86d41c35,b9dc10fb,a683f736,a85e0974,ee222b86,19cda2dd)
1483 Z8(89d822c2,6b2f6b5e,c032ffa4,70dc4f5f,c5fa6dc8,21352f90,399eecc6,0ea0b745)
1484 Z8(65b2ae7e,f38dd844,634f0d3c,ba629d4d,c6c118a3,12549887,4afcc2fb,92e9158a)
1485 Z8(8bbd984f,b221afb6,e6db0177,a5280dfb,87cb2f75,1d893663,a5b470f8,4b473748)
1486 Z8(44364124,744619b5,e30cc63c,996d9ce7,544c1e09,8c07c857,fae8308a,45ca60ef)
1487 Z8(94a9af74,8a3a5a1c,159a7049,4c0c6950,703010c2,ba626a84,501ea295,df7b37cf)
1488 Z8(89bdc6cb,9cdfe9b1,2bf94ae3,291a3744,ed1660e1,4ed99d45,c18e44a0,5ea2a289)
1489 Z8(7136a1d8,a7afe5f9,d9cf0f08,07358f85,04837218,0f9de99d,4a3e605a,ee277b86)
1490 Z8(64709497,ead451ea,99def992,38c92cf1,d0900126,9bfbe4a3,86ab3852,74c5f0be)
1491 Z8(2902e218,7f5ecbd6,a8bd5c73,ac0671bc,5075a3d0,ddf87b9a,42195f70,0b05bb90)
1492 Z8(cb257300,099a691b,e0e4371f,d9bfba0a,26bd12c7,74697af3,0dbc32cf,19c2f56e)
1493 Z8(03df8d64,45adc4d5,da125dfb,2e1f9161,06c258ce,9dbeb359,e7082cd7,80a59273)
1494 Z8(5812a4a2,8ba18dd6,a14cc22f,cde15de3,beeda686,b00ae6d4,d83749bb,a94a7177)
1495 Z8(25bf6822,caf47c3a,324dc2ba,47515a2a,002d2445,c43c647a,a2e62e4e,11d1d3b4)
1496 Z8(5c6d12fe,4989973e,f628bfb4,62227827,f849353f,5544a556,c46f57d9,5f1d64bd)
1497 Z8(53dccf96,8d8916c3,a61dc8b2,560d792b,7061c43d,01209655,61f9d5fc,8c6bb70b)
1498 Z8(26202855,83378405,338c9c42,5b265795,335251a0,587ae378,7bd925dd,5a8877c6)
1499 Z8(2c06c3c2,112f161f,af8df44c,c4e83582,61e65e76,95e06828,24d8f5d5,2750fd22)
1500 Z8(cd066f77,1bd7f6e0,f7920027,6721eb63,fce8785c,6a2a4488,0ab03033,60a265d5)
1501 Z8(18f039a6,a036a529,e1969b3f,ed3d8383,905e519f,0a9e7ab8,9f8aa1ef,8fe47dac)
1502 Z8(020ae2fd,a125ce9e,34fef9a7,d4e77816,a2138074,e29661c6,685a7b76,2f9a93c8)
1503 Z8(5951094d,7f869658,aac95376,5e023399,f66b7f29,551c2920,0c7bf813,a59126c3)
1504 Z8(c4795568,6072d800,dda81ce8,77977769,21f1d0b1,3359db9d,8533bc39,a4d5e97b)
1505 Z8(e7ae833f,73302f85,ff386a6f,8e7e8c43,cc6f9b33,20fdc4ba,eb135134,032d8cf1)
1506 Z8(bb45cf31,9a2c7cc3,418ee32f,f6f1201b,3c3d681b,2382b2f3,6d8c922d,f61bbaf4)
1507 Z8(158835a6,8c2fe866,8d3e1a92,45a8c052,6e061630,4405e012,5521f46c,7578c723)
1508 Z8(fc19ac64,aad634aa,1d1dd46a,feef6f87,004e721d,c01fa38d,4e7f9b10,04302593)
1509 Z8(039f36d0,13d11db7,57adbd5a,fbcbd8b8,922f5eda,059ccdc5,ed8e15f2,283e9a67)
1510 Z8(7ae1d410,33c258c8,e392a82e,9491a0a4,0e3e2eda,5be829ae,040697f9,af714338)
1511 Z8(8c256305,f8d7fdc1,8eac7d19,0441f702,5f9506dd,019245da,40e10b34,dbdeb1da)
1512 Z8(d6503fed,ed577f29,57808b65,2cb8344d,5ce337d8,b47c6833,49bf5bfc,83acd365)
1513 Z8(6d26e729,9bd721d9,19724fde,6a6664ee,291a064d,ff949d3e,7ba11d65,25875130)
1514 Z8(fdffcf18,aecb4366,0f5aada1,fef1ab6d,6e6f4b1f,ca88e98e,5e04b492,a321876f)
1515 Z8(304095b1,161a0384,281eff11,0bff6d1f,396fd0a3,90284c3b,74e36f63,8518235b)
1516 Z8(cfe0b28f,5ba00fcd,b61f1de9,4cced297,cb281b73,477a6c1e,b56402e3,8a978309)
1517 Z8(0e55c559,900b210f,735713fb,4930a4d5,afb63241,6d6056b2,37bb63fa,d4e8da71)
1518 Z8(8bc223b5,037af640,9693d21e,4d009f5e,cc80cf26,cdb726b3,023f4dbf,6ed2bd25)
1519 Z8(634d9928,25d758a3,7fb7027d,e256ba8d,79c07867,af868ac0,9059fcbb,0cfd4cc4)
1520 Z8(5f96f2a4,47827691,3b064822,bbabf7cf,75c10f6b,266b1e5e,37f6cb84,34090f70)
1521 Z8(1671dfaa,521185df,d6a309eb,111ca154,1a6e25ac,a15390aa,a220fcfd,fc57326a)
1522 Z8(18eb6f5c,3cfc7fde,bd55a681,a6fc721a,62656dc8,de36d26c,1a837770,63578531)
1523 Z8(cc99ca81,e705fd00,9c635996,f21a28f8,087fc076,d2ba8d43,9c16be2b,28fd7f83)
1524 Z8(7ac486c5,eb631523,21b9f6f4,dccdf6c1,aa40df50,7fdb2747,0f80640c,26ca6322)
1525 Z8(bb8fc7af,b6662f95,372d0f8b,bd1777b8,563a2575,a656d499,e97d7d57,bcc27280)
1526 Z8(4a318c50,e420663a,c840d3b0,9365bb44,8b9d155d,20e8a53f,79ebc6b7,48f82af4)
1527 Z8(31c96a0a,22ec4246,8287d2c2,dfaf9214,1087a33e,92c92350,8880aa46,43515c60)
1528 Z8(7fb68a58,aa93145b,6220a898,6de91753,0c57bbde,3c892e62,38706560,92ef3972)
1529 Z8(d301aad3,fc82d2dc,97806abf,e9d115b9,9b176573,0c927165,6a3cb503,6ee1359a)
1530 Z8(b0b16ecf,f657f780,03b68478,a3f7a935,a593199e,a3b434fc,1a4d6ea0,39fdb8b9)
1531 Z8(623fef98,7fb7947a,a91a1d7c,d5eab813,025b3fd1,a842293d,8ae7b398,7b4d4b6e)
1532 Z8(f71e26b2,59ee8214,f55ac98f,26714665,e24c0c80,340503df,d6ed94ea,12e897fb)
1533 Z8(b92a2b95,31fdd14a,fb08a24b,38254794,c64fe437,1dbd364c,857ea8bb,ee4798de)
1534 Z8(c461b00a,85d5753b,54cf5fb8,59e4bb51,c2078022,0a28cd0a,32abb5c5,6eb32e38)
1535 Z8(9fa7eb6f,bb76d3be,ba27fc00,5134403f,abd8c97f,54669238,502ea8e4,563591cb)
1536 Z8(d34cc34f,e65cbb8b,b8ea57a8,ab219061,17c77790,ca2004fe,2caa06a9,19256df5)
1537 Z8(dfa1efd9,5ff3e937,da731fa9,3b359cbf,62c03724,b2294e21,65f1aa60,e3100cb6)
1538 Z8(2b5c649e,27e16eb8,95b86ee3,24e9da5e,3d12f371,98434f28,63cc4aa0,7a0e0537)
1539 Z8(7332dcee,09c5d148,62d58e02,ea47600f,5a39b742,25e3208f,84a0be7e,c5b2fa00)
1540 Z8(30bb32d9,4d5af477,a8f6a343,d0614ee3,33327990,a9900380,30512208,2a78734b)
1541 Z8(941297bd,67bee25c,1dba4a80,389b38d5,d7a18e6f,53897349,f2c00033,9fa9eb4a)
1542 Z8(8e4a8c27,672a29ec,cf30e3c7,a49a5d25,e4d63fe0,b96cd567,6e3d45be,2cd18b41)
1543 Z8(cfe59545,62e080b2,72e4c638,4571797c,37c44ed0,7cd1d1a1,8131d90d,0df056cf)
1544 Z8(c5462dbc,540b9fb9,e4521e25,8a098b25,92061f85,b330e89a,6a73ea75,909dd777)
1545 Z8(cbc30e09,0c27d6a6,d9a7babe,a668077a,19e235c3,44566edc,9f402cac,687a909f)
1546 Z8(247e88d5,dfd205f7,af0b6e8b,14ef6687,9594f6b7,11709563,5cd5b2f1,ca5f9594)
1547 Z8(f1058e79,e04ecc00,1dd47f9a,c9577682,a29ae593,0d7a5e16,9deb14a1,18aa3fef)
1548 Z8(0088cd84,648ec802,cac71dbe,2cf29060,6c274143,df4bdf11,3e7e9971,4eaf842b)
1549 Z8(92363865,5b51b787,d9acec17,a827a841,3a777bfc,e58adce2,23859641,aabd438f)
1550 Z8(8ce9a5b1,7814bdd5,1ba3f206,cf8964bc,fc142b62,bebfd5eb,b70575bb,fb445441)
1551 Z8(f302a6a8,c68b63c8,853c177b,d50cb98b,8bbe3744,b1a14f1f,011c14e4,31ec7af9)
1552 Z8(9b9c6868,b6fd3f9b,52e636bc,da0fec92,f40b434b,6fba40a9,6f133860,0ca30121)
1553 Z8(b9f4dca0,879ccded,6549e1f8,34c889a7,7ec9468a,383b1fc9,391c22b7,8f1b2b38)
1554 Z8(cf88bc24,37489b32,f5e64d6c,6e6e7c27,24aa54c9,be1ef999,d0c03cd0,b4b02aa0)
1555 Z8(be6f297a,c3888222,f17c5085,fe7a08bd,f44c8bd6,746f7618,e20ea9e9,a0c45505)
1556 Z8(304df305,b5eea4c5,84adfa5d,9e77e2cd,5837d25f,a2273a88,9eb75948,fd6ca853)
1557 Z8(923df237,52db13ee,4f988d10,fbb2caa1,90466fbf,7a75c8ea,5dd39d3a,435db652)
1558 Z8(3b9796c3,d79b158b,d3742660,a5be50f5,4494d259,2db3f4ae,7ce70195,e7b65354)
1559 Z8(d0bd1b77,3b977044,e90707bd,a59b44f2,20753875,80823269,18d6fe2a,eed7de4d)
1560 Z8(f76d44e4,fad69e49,960bcebf,ad42a379,dd3ed328,e748209c,caee1cbd,f106b1e2)
1561 Z8(29e322c1,ec0c8beb,9158b2fc,864c0d45,bc37cfd3,fc85fdf1,5cd280a3,8aebd95c)
1562 Z8(365e38f0,820e1a55,12a80d1e,7d9c47ad,c40f9a60,6ad83b3a,17cf8363,743621d6)
1563 Z8(3cff0be7,bee72213,46fc3f7c,93adaa7e,4b17da6b,bcdb1528,e78a0091,6a915482)
1564 Z8(2bf17679,aa5488f7,3f3d8af1,33dd4bbf,9acb29b2,b711d45a,f274aeb4,4f267830)
1565 Z8(3ef8e1c9,8e31790b,813bb19d,705daf8c,8203ad3e,ad8a0d86,ca9e402e,8c7bdb6a)
1566 Z8(c32ef618,a0ceda6b,fb6ed5c2,7d814beb,46dbb906,6250ef02,fe0f6a6c,eec1c0cb)
1567 Z8(7ab36ff7,ce701644,cdd7090a,bc4d613d,7481f83e,97b8393e,d028388a,88c5c9dd)
1568 Z8(a49b7ec8,a4d4f74f,f42477c0,c61022ad,ff508686,e136400b,3b979530,07e966a9)
1569 Z8(f85402ae,54b36be4,038de0f6,818a026f,808c63d4,42ac08d5,a8d9919e,c7ada550)
1570 Z8(cd81eeba,0acd0548,6b4d7396,5b5b2b1d,229e0d34,23434d91,448af11d,bc5df138)
1571 Z8(af265635,a466e08d,2b05340f,f9a50e18,3925ddab,3e4fb6c8,d9f26235,9a4d777a)
1572 Z8(3839adba,9815fba5,d9df0755,b67a2354,d20bbb67,de1bb1ee,b0da9fdd,9918b6ce)
1573 Z8(c20b20a1,fca992b2,aab0beb3,230d2f86,4c2cca32,f7999eef,166a62d0,fdb10a3c)
1574 Z8(24c484c7,dc60fd03,2437de2e,722ab150,17981405,82637471,d9e7fb08,d1fa2a46)
1575 Z8(49b9369d,a1f46f2f,46208c43,0a4f3a86,99b64c6d,2b6ad99a,b48dd161,ae6a60b3)
1576 Z8(aeabd842,bde0679c,2380c922,976a1e75,93168ea1,1a9b31be,e1b2cb46,94c56a25)
1577 Z8(929236f2,0d5f3128,576af2c5,936d7f74,7a920bc3,07c6c45e,0ba270e3,2e408e30)
1578 Z8(1f7ada45,ce29a409,4a033932,f82c9a99,fb3a6cb7,44c1b2c8,6f8f8277,8ed23610)
1579 Z8(9a15657c,b0862b25,e4f6f615,4d47985d,c858dd6e,ba18121e,77787233,1261ca22)
1580 Z8(c9d15ec3,1abc4752,02144900,70765014,b72d9c4d,7d4613be,53adad2b,92334314)
1581 Z8(ad402231,f9bfb9cf,17211cbf,713bab68,010c9524,369e13d8,3c306e45,2b032f31)
1582 Z8(a2417925,b70defe4,30c578ef,7512a2e6,51e299d1,c6157154,b6622fce,fd673540)
1583 Z8(cab2bbcd,1999016f,15783201,2c45ded9,3e938b76,3c4e7945,1dc47c6b,388bbf83)
1584 Z8(eccf1bd8,84875c39,a0151b9a,51e8069e,6eaae180,50a55c6d,6c8265e2,bb1cc0fa)
1585 Z8(e2ab2b6b,680363f5,18bb0826,2735e4bd,8527cbfd,ec2f306b,52f95fd6,fa4022c3)
1586 Z8(11a8dede,dd95778f,e24523f9,17c9fda5,41399cda,64754bf3,e077c214,5c9093b0)
1587 Z8(dc2c16aa,ea3612b4,f2545644,5a3a254e,5e11a573,dc27eb90,d6215db1,e1af90ee)
1588 Z8(d84418c0,963f8c0c,f455070d,00f90d91,334660d1,0654ca9a,a72d8bb0,f06e3989)
1589 Z8(c7a402dc,35713543,992e0544,d7164cfd,e8e9c716,ad96e2f6,6a0e37c0,56a97069)
1590 Z8(ab9acde6,e3802114,8bdeaad1,b8a3b3fc,60caa9d1,7e706e52,1c388e17,7c2efad4)
1591 Z8(8f8c9c55,969ca9fe,72b4c292,d3cf56e9,f27303df,d559cc12,451e56f3,a5852c8e)
1592 Z8(417419d5,a20a9cc5,ae739fa2,b1113f5d,a94dc1e4,a2fafdd8,1a350afc,3422a695)
1593 Z8(dde7772f,82f97329,6614dc88,d67e4cbb,36cb1191,5bcfb591,c98faee5,c65d3034)
1594 Z8(28b8cccb,3e89e88e,031672be,9655de0a,26106812,c112b1b2,a3ef7e90,75507475)
1595 Z8(bc6639b2,d837b311,29d482f5,a96f6e43,84055efc,4677754d,316c3a37,fd33f258)
1596 Z8(f882291f,1735e719,2ce6e7f2,8d44c44a,8add33f6,8a6e5866,a7857342,eadb8a1a)
1597 Z8(9981523f,b9dcdcbf,891cc8dc,e64282d5,5fecb3ac,ed2840f8,f924c821,53d738e7)
1598 Z8(85c997cd,eb88277c,ce125fe8,17f6aa1e,2676c88a,1be9d8e8,e10b7989,77977ea5)
1599 Z8(38f8aae1,d605244d,a9e51b62,9efb5d17,08c0804c,47d6c2b4,286a1bf7,e22456d1)
1600 Z8(9e9bd14e,e1a3c61f,8be919a2,2e1af62e,c1b5a523,7922ab2e,a6bf3685,ee26ed17)
1601 Z8(d8684a11,d491182d,7f7176e1,30176923,1eb94c60,3720b2fc,eebdd349,27816341)
1602 Z8(f1ecfb73,d08c2f8f,60be4a6e,01fe5481,a0e937a5,98266955,82529290,f2cfdaef)
1603 Z8(84d6b5c6,a94c32c7,635affa4,960d822c,d5afc34c,ec570a5f,34695a12,6478a993)
1604 Z8(4d832eaa,f38b1d5b,d3a829c8,f19d7613,c08d53c2,7875e720,345762d1,dd5020be)
1605 Z8(15ed8308,14c1c4aa,b56c891f,9e7b5e14,4f251692,4531a3a9,89d599ba,ca1acfdb)
1606 Z8(04f57918,074061d1,e2256d7a,6ca4258f,120f70bc,33ef05e6,c3da0a69,46fd6178)
1607 Z8(9eab1817,df0722be,70b7933f,70a5ad61,1d70f001,12baab88,ff30387c,69b4734d)
1608 Z8(f5a88191,c7d95cb1,af3af6eb,8a4e44ea,45b94188,c2663b6d,159a547c,ab71ac31)
1609 Z8(8e64dc92,8211d5e6,c5525d44,13e62232,e80ae705,640e56db,60ea1fa3,8c78ca8c)
1610 Z8(9d7fabba,0f41c568,44983036,ebb12e26,44527f11,f7a44fb7,cbe0d63a,11bb952b)
1611 Z8(d16b2429,a222e3d7,8affc27b,dedd4b6b,c523abcf,459abd6b,ed23179a,a29b7401)
1612 Z8(4210f18d,7b94915d,4db2a165,e09a6496,d5b9b4a0,53d10fb9,8f0aa441,65a61d1f)
1613 Z8(be3e0160,df71c137,8f89c578,1ccd504c,04a12c0a,80d61890,f8f8b67c,8c652fbf)
1614 Z8(87a6427a,715dea98,cd53a354,0f396334,afa686a0,92942826,a0b2a889,ede932a0)
1615 Z8(52f5ed6f,d865e852,2b1905b5,bae3d71a,f7ac0bf7,752520dc,38bb5422,4f61214a)
1616 Z8(9ba8a740,b67c4c40,4b8baee1,7f076271,e7be7261,20fae518,dd83de36,2a7f4d9d)
1617 Z8(ad1809eb,44300e09,f76ecdb8,03db5a49,25f3442f,0a93735c,3be94f05,60f32084)
1618 Z8(54ece803,d2d7e2e1,2ddab7a8,9ef6689f,8d56aca9,91c3cf7d,bca38690,46e5a728)
1619 Z8(633e5b8a,75bb351b,6e05d50f,6b693903,75725b3f,535f4476,2cd85e63,a4cbf5e6)
1620 Z8(40a06294,35e9271f,7298ddeb,737c3a28,7a86763b,0afc8e77,40d0af67,f924d5b3)
1621 Z8(1656258c,40bd8635,714553bf,6b02288c,720e7a9a,846177bb,381ec2e5,b8e34718)
1622 Z8(bfc70616,a8da6801,cf283b57,846928b4,023c7292,48d4f10a,98949a13,731720c9)
1623 Z8(e86c3b19,0ae0c9ad,01331577,51057f86,2d122d03,d7bb714f,9dda9810,a7d7e4a3)
1624 Z8(b2f7ff77,bcb04996,e2b65d3c,c0ac9dd3,5ea3e8eb,cf10c372,fafce1a4,d8dfb65a)
1625 Z8(4093ab9f,d12a8788,31704923,5fbc6ac2,55608d43,42c6a7de,ae9152d7,8967c729)
1626 Z8(54b464c9,8d7a3ccc,35a4a700,99dd5e63,c095f4f1,82937ef9,28d4f197,35780668)
1627 Z8(284e486c,580488ec,7deb3043,685dbf85,542952c7,1f24e246,ddb11b98,7d3de5b7)
1628 Z8(56cce2fd,556f5646,0eade45e,01ee9ddf,8bb04c53,604ff8ef,505f450b,77a8f82f)
1629 Z8(9c6db302,54cd100e,c13829bf,e99833a9,15f0f695,a16effb7,1f250a2e,b0555c2b)
1630 Z8(44fd2c6f,cc35b22c,bbe0441c,22e7f3eb,c575133c,2528b144,aa033fdc,0d51a93b)
1631 Z8(e0473a9b,279e101c,f9a50e0e,e5e5dc9e,cfc0c6e0,08d55816,159759ad,011330f9)
1632 Z8(5529a8d9,b16df326,6eb86363,04818720,8daeeb68,0d38f3f0,87c09b04,c95b91af)
1633 Z8(78e87cc4,79b2ad0b,d288ff93,96997a4e,7400734a,9d66d779,1ba1f8ee,f54a7b51)
1634 Z8(e38dc379,f1adfad7,c02446c4,d287abff,d78dfb56,54eedc77,a313fd01,bff717aa)
1635 Z8(f33f80ad,51a632f0,497805a9,e9019868,19486633,4accc5ed,93418c07,f99c402c)
1636 Z8(721d44d7,6d1324b3,3767a410,f60df824,d7b3e4cd,ba342453,4b39957f,48e1514a)
1637 Z8(aa90b815,5b56157d,edfd7460,5828dca3,02d68ea2,93231e2a,e3f12d86,7b92e9bd)
1638 Z8(2e15aea9,9d5fd4cd,7c236ba2,f18515c3,20d80d05,48dfa910,7715aec0,91703da8)
1639 Z8(b7719cd4,252b0a18,487d6fa8,792f0b35,8694580f,979d8b84,dd7433e8,02f90672)
1640 Z8(8acfd937,4ebf5a18,62161ec9,2cc661a5,1d0b8ae1,0f5d00cc,7ba2d37b,43b84dfa)
1641 Z8(d1bfaa37,3a897964,a928cbda,0480de58,60fdfb74,db407de1,8aeef1f8,261fbf43)
1642 Z8(4f175bfb,32070075,b88c45fa,8c78566a,f45bfebc,d780d91c,b9f56f5a,1b30402b)
1643 Z8(b823d10b,b005863d,a404cad4,8080d124,5da45544,96231d82,9d51a007,151b1c04)
1644 Z8(42c65ffc,e3aa22ab,99206756,23a9bf00,336ae318,5631549e,5e19eb01,b3723087)
1645 Z8(d0e6a1b1,80ee4d2e,af8ac680,7b8802dc,4c9fee5c,c7d8fc73,45c71b8b,776f2dac)
1646 Z8(cb44c322,60255eaa,6a1dcb9e,a3f2143d,ba350248,c8025b53,4e6d0155,d958f0fb)
1647 Z8(d898af92,72f7183a,95c7061e,c91f6542,15facdd9,c13e0fc5,317dd93a,1bdf92a4)
1648 Z8(8e0c3707,9e2498bd,a78a5002,477a4a65,874ca621,cb544703,38dc6d91,c782806f)
1649 Z8(d5f7a7e7,09e1817f,20d37d29,a2cd4b89,9d3b6842,2e18c6ad,030e9b81,d0c90c21)
1650 Z8(07ef4bc1,36afff60,49baa82b,fea6940b,25d8f0b7,df870b88,e215f9f8,08450f43)
1651 Z8(753eeb56,b0b8043e,a820efd9,04f69f90,cfb065d7,d53862ec,b8c5f9fb,4ae87be1)
1652 Z8(edd9c440,91b32c41,24d3e3e2,dbc7f4ef,4353fd91,184084aa,3dff8b49,a95516e0)
1653 Z8(8964afa3,7625df05,0389371c,e8089828,e1d9205f,e75c7aa2,3e83dd5a,98dcb36f)
1654 Z8(520d48b3,c2b52f7b,27b24f71,f9ffaf4d,54014541,9e963d37,6572d095,e4aa2c35)
1655 Z8(5797e494,c34dd16b,47c29223,9775bcd2,2b62dbd1,e4310ebf,6c7e03dd,f76270ac)
1656 Z8(4350b749,515abbae,52942da8,703580d6,b1f2e33e,dd4a3e3b,b980c5d0,6af9adcd)
1657 Z8(a0262286,0bb25bcd,c28dcca6,32dc9f0c,42d6fa12,0654d793,b5c73408,89bc7fe6)
1658 Z8(97280740,c60cb571,1d09bbab,c96012fb,ddaa5beb,10c6a4f4,aaeb970f,623d21a4)
1659 Z8(014d588d,9fb09793,8d9b1648,6bcee7db,1c59d361,3eaae9f7,26dc072c,6192d081)
1660 Z8(2231339a,f285f63f,dc593213,6198214c,d80bc2c8,1a32062c,96956976,53095cad)
1661 Z8(a51c63cc,ac54986d,f32663db,d75a31b8,52655182,b3c7d560,f34e5bb7,7f35ef60)
1662 Z8(f20ea1f7,eddcd018,5ad50d5a,701283f3,1d0f8bd6,84812393,19c13064,b95aa971)
1663 Z8(140621a0,7a440cca,aab3148a,057d1b80,74d00138,aa7c058b,af011fcd,da01f60e)
1664 Z8(59c639e8,cdc0592e,257d00c4,d8710d98,27cbbe4a,0876e36d,36e464dd,2f9403e1)
1665 Z8(2e08e4de,9e1f7269,d9209aba,0160eb50,62178979,c4cd4b77,91d01327,d0da47a3)
1666 Z8(611a770d,9821651d,5b0e2bdc,fcebab83,c9bbfb3f,ff4cfde7,570ee6df,4973aed2)
1667 Z8(94aa288e,7d8918dd,9e773b5a,3e07dcc8,fdd118fb,21d20f63,1eafb197,0cdba2d4)
1668 Z8(32fc4ecb,ea68b422,2d9e44d9,42c8fc86,cd40dc4e,7ecfec1e,38b5f023,88bca151)
1669 Z8(01461826,7d2ef73e,54d02ebf,725877fc,68c05473,75c97a39,199cceb1,3eaf648b)
1670 Z8(d1efca04,38d09f9b,d1fff6b0,cbacb3b0,832abe37,7bfdcfbe,b3a97771,a065422c)
1671 Z8(91909947,8b322320,33bc0125,8c7c62c1,18ff3879,7d6236a7,6bfcbef3,99f77ad3)
1672 Z8(23654b18,de3c58fb,b257a23a,20bdd2cc,2a2131e6,f449b192,03082dd6,a0b50fd2)
1673 Z8(4333a04a,db7cb6de,f8f8220f,67b451a2,af49ecc7,9f10c91a,01f21f28,3a46fe53)
1674 Z8(3a0f5164,9503bde5,e5f5fb4b,706d89a6,dba8d9b7,1b2d845c,80d867d8,9537fbf4)
1675 Z8(e2c4d089,5a27975f,6739d7ba,13001446,579d503d,32ced8ff,37edf3eb,6fd37131)
1676 Z8(9b466c48,5ef5cf3c,808536a7,ec720b66,290adfab,90bc3a04,6c16b12b,cf266666)
1677 Z8(f270a207,97e5ff4c,263086f7,9bfa2099,8240d705,6e20a0ff,dd9831e6,36ad0280)
1678 Z8(6ea2371b,a3b85a1e,68fd7b13,322c2bf8,6d7d6454,a493fac2,9ebe46ec,dba2f464)
1679 Z8(87520ef4,4c8b43af,cb37b3e7,e55ea834,a689f11c,8d51b36c,cca90ec0,adf734b3)
1680 Z8(7536e650,5546c15d,0fc72daf,793e8b16,d3f5c6b5,1117ac72,17e7cfb4,7bd95392)
1681 Z8(3b9ed924,52eaeb13,ab6bed4f,0a19820a,4147e6a5,31448064,a43b73b0,9acfd1ac)
1682 Z8(94b6783d,fe22e50c,70ca3031,dc2f55f8,c3e4a38e,6d82217b,8cc65e80,40c5deff)
1683 Z8(7c1f2b65,d01bc922,f6a5b85a,f5e7c780,aae29108,7bf204e1,6cb381c4,508e73c1)
1684 Z8(dd3bbb95,a1aa33e2,a330025b,fd7b93f9,041c1d9f,34aace94,e7bc6b9b,1fa3ccc1)
1685 Z8(583c2497,2e650722,80a5581e,3f2a7c9c,e501500c,5c4b5b8e,e76bdfa1,95c05088)
1686 Z8(13ec0758,bfed2378,069458cc,4637eb10,ab2b3539,4349c047,ef2ee7bd,c630ec6f)
1687 Z8(828bdc33,34453bfb,b9343e7f,37904a8c,981e74ec,a86f6b59,d2fde1dd,de9d7253)
1688 Z8(93844b59,d29cb3df,1e2f72d4,de28054c,856b5f9b,ce567322,dec08a6a,0d190223)
1689 Z8(22d3317e,1dfdfc7d,e86593ea,23fd04d3,5d2417fe,8428f4ba,c12e69dc,7addbc72)
1690 Z8(ff5cfa40,1090b562,6bb9363f,231e1f5b,237c8a33,378fc388,2d47a147,7bd52818)
1691 Z8(974e6934,9e5a01fc,ad29bc59,874ce2fc,6e04f97d,fd2590d9,f07e4bea,fbbec9bd)
1692 Z8(08cea682,4574afee,93b2aa36,4c39d2e6,6ccb9c52,d0c997b0,f2365a46,a463fca3)
1693 Z8(9a77d35a,792d7c48,90cd9d57,e64e9d36,24fc8089,e0c61a35,091bca03,ecb57460)
1694 Z8(e9b1137a,83a39371,aaa90958,c38caa09,d5d62609,c9c5f4fb,b299c30f,872c2b87)
1695 Z8(bab323fc,d82bfa26,fa81df15,ed6adc9a,b896ba82,1aa8b337,b733792b,8ae1cb8b)
1696 Z8(7488c870,3424267a,3e6ed740,4476e354,c0a584a5,aa953e2d,dd59eeb9,ba684379)
1697 Z8(58168d22,9f6d1d27,380a0504,108f93ad,b8c79819,030b413d,0975e308,b5decd20)
1698 Z8(7b02b9ac,d55d00e6,1174ccf5,46908261,1f1b9948,e503800d,313bfa92,59170a91)
1699 Z8(cb2ccd72,b85f1ed8,40b70336,caf642d2,dd60180b,0e5fef9d,d53797ca,8c7ddcc9)
1700 Z8(9ce77536,a51c8d22,aaf18d53,e84a7365,753bcc1e,7b0ebb07,95b802a8,1a003ebc)
1701 Z8(5c7f3a87,386af20e,f96b7bc4,8ef98591,f284e080,267a1916,9878c5dc,9ec122f2)
1702 Z8(0042eb1e,5108ba7d,057252a3,e7a7f105,f207691f,f34d8801,90cf8691,d29b651c)
1703 Z8(4db2a0ab,ee8327eb,280b550b,a7940453,dd7a724e,ba16c257,2ec707ca,99e7a7c6)
1704 Z8(a0d6edd7,3f14a133,70f305f4,5c48aeea,751fde9d,60f36de7,3763fe69,24491e08)
1705 Z8(a9daa465,83827655,cfdeaa27,de868ee3,cc4dcc5f,baca8d09,10f61d30,b73b52f4)
1706 Z8(d0c8beb3,47784818,2970c6d8,a91ee8bf,1466158d,7b1b3044,60b52a3e,6ac3bf2f)
1707 Z8(259616dd,25512c0d,ccdcca59,3c9a8513,85a02504,af5748fa,4ae224ce,d37028e3)
1708 Z8(181ee0f8,46aaf820,51c39433,ab926f67,81d5c728,2ad7fece,9b47c83d,f4ac33b7)
1709 Z8(4c4783f9,9ba481a1,e6d6830a,a652289e,12acc474,14115aa7,4da61704,87494edc)
1710 Z8(c5b7ad77,ec10443b,dce11b0c,c1f589a3,51f59e00,db586065,2408fe1d,77f06b9e)
1711 Z8(9c7e0b38,cde05423,e0f67847,f32401bf,4f0838ed,1f518a69,9fb003ae,1d904ae7)
1712 Z8(2e18322e,fccdfdfb,2bff2db6,dea485ff,7e43ad7f,0d81b626,efda0f76,ceb39582)
1713 Z8(180b91ec,f938d261,d1b15cc2,19165547,89b6af1d,4ba0cfbf,5bd489b2,8d5c8b0d)
1714 Z8(3728836e,be14aecd,47ceb86d,4549af3f,c319de52,08e80a14,d1d7920a,245e5bbe)
1715 Z8(f4702418,dda9a13d,ca2fa179,74ada683,b97c4918,3ce95a6f,ecc88b13,2466f155)
1716 Z8(08ca6e7e,98d10dfa,08c7621b,6a9977b0,ebf7a6b1,3e7845a5,e0dbc28d,1de34ccd)
1717 Z8(c78da9c1,123dce18,94c7494b,48be4cda,ed199e0f,a1ac78c6,622a77f2,4a8eb9d6)
1718 Z8(9e90f210,31de0bc4,b80c8ec8,2b06caa6,65fda265,69b90d1b,671f7b96,d83211d1)
1719 Z8(a24c775e,25502698,72e1d200,e31a1ba8,f899b652,df3c323c,e38e9b3f,77b228fe)
1720 Z8(d3fd1156,70fd4139,0e914fc5,d07842d6,9f19520a,509e8ed6,4a395f8e,ccff6504)
1721 Z8(69137590,1dbf1578,c54c8b11,382e885b,9f218d96,cd42d4e6,5ec82dd6,1aae09da)
1722 Z8(a62b01b7,ab9b1731,d1b7e0ab,f8f42c6b,58d00fe2,5a3b1445,bb0eeec0,24bc8002)
1723 Z8(2199aa70,3cfb9675,d9b46106,c7cbc566,382ecbfa,7e2512ca,4b5b2735,81198ecf)
1724 Z8(fce74681,3527c33e,ef971965,a9df4a0d,89a9a7b6,0cdd4b6c,65df5edc,2137d0ea)
1725 Z8(630c44d8,72358686,fe47daa2,bb3a6f96,6786c864,ef8f3db7,347a5fdc,09cf41e2)
1726 Z8(bfd425f5,1ab277bf,de65c3ca,5b8e6ba1,0627a74c,9e8c9b82,d0c7b3ae,a36a5882)
1727 Z8(e0b01b48,463c4fc8,93f4c5d7,edb95c21,142990fe,453fb14a,4394cc56,476644c4)
1728 Z8(9a23a668,7e6c577a,38bdc4a0,7c4e63b8,b3c16e35,9b39af61,4a652a7e,99ce6097)
1729 Z8(290b6935,731f83b8,7df0105a,1933ceaa,6fd94f4e,f3574565,3a14c7ea,7921624c)
1730 Z8(756b23db,ef7f966f,1e1023f1,f3b8e410,5a6e9f44,6de00f4a,f6e6f9a0,e7607f9b)
1731 Z8(46f26034,23327a8a,ff81b848,64e4038c,a61cb84a,2f9a8c1d,5cdd984e,0c925c8d)
1732 Z8(ea81cdea,2626a199,2929bf9d,81488c05,c7c15525,86577831,2b04c310,616f1fdd)
1733 Z8(7898f402,a79019a6,0080c7a4,1ebfc564,43a685a5,c9f00aed,da460ba3,e376b819)
1734 Z8(2a62760f,d18d56fe,8621cde9,07b84ab6,e012b055,d36078d7,97af6b03,e6a41441)
1735 Z8(baf86dd1,020d1c20,6d4e13b5,f1983188,30c754c4,2360ae4a,7d624c00,0e4b980a)
1736 Z8(f1dbf23b,d2518d5e,d8e3647b,b49759d1,6e0edf79,cb45a21e,4ce69ad8,74096bfd)
1737 Z8(f3fce937,75aa48c8,52188249,87b63c0f,33e9d711,29a8936e,877a941a,cf6ebd5c)
1738 Z8(7ccfe177,f06f4429,cf31b1ac,87ee5705,10620d33,3f7934d0,e2d321d0,4b3721d8)
1739 Z8(c03b8f49,b46cdf79,228d43d8,368f9f03,da5517c1,013dc2a3,1ce7661e,c857ff26)
1740 Z8(751bea46,81faee6d,38ff4daa,435058fd,17338de0,67c10455,d5120103,5d38d99e)
1741 Z8(4aa8e3bc,535bb263,ed52efa1,c44397ac,343dba42,dae4d90a,8f46fbce,e8cbd58a)
1742 Z8(31a4a929,d20aa71f,c0385d43,b3637ee9,9de04922,2a93dbba,8d365387,d954bdc5)
1743 Z8(b25bbb4d,579f7af9,0152e74c,8277cbcd,3f77d833,12da4fb1,9d1323b5,73cc5af3)
1744 Z8(68f8f4cb,76f7d7a9,c8b67e6f,139a6bfc,1d622ba2,757dd8b2,5224b055,099cf151)
1745 Z8(c87c7243,494f8a38,f369a455,dcd990e3,b2edda84,a73171d9,9a16a0ba,086b05ec)
1746 Z8(44e075ec,d44d32fc,27fc66e0,32841bb1,10ed48f8,b6e9edd7,46a3765c,611d977e)
1747 Z8(150e31e9,a071f9cf,06aef18e,fac5b78b,c29c79ff,41f99c12,db7e1585,a7a783ba)
1748 Z8(9a82b49d,c6f7999a,287eb113,9efba619,c3bd5de0,859d2187,f0e1d62b,6df60879)
1749 Z8(304da8fe,7e18e0f0,c76d5c96,5dd800dd,490acc06,d75177e4,675ce1e7,a906b56b)
1750 Z8(c65140d0,4c755c6a,90d94e56,fb62f284,f2112889,8936dffe,2ed38659,13e63c6a)
1751 Z8(80c5ac2d,0eff7b08,7256a82d,d713198e,deb6bfe5,26ec4b37,2cf1ecd5,7f383386)
1752 Z8(c0588a6f,e0e44238,f4ffd6e1,afd85a13,71a8a87e,be91b944,87321d3a,931e6354)
1753 Z8(d09096f9,fb477db8,d4b87b53,a8449dd7,ac1acfe0,b86d3076,b9439077,dab131dc)
1754 Z8(9057ab2e,b4a4e8f2,f5169920,4d5d5da2,e7236608,888fb623,4745ea64,fabc947f)
1755 Z8(35b44a34,6abad3ea,7484f02d,2ebd7ad0,d2cea2d8,6e432762,4022f31f,5cbb0de2)
1756 Z8(f9f5bce8,8e3d70c9,3d32baa2,2436b9be,a3672411,14f8c9f1,3bd7aafe,909e2711)
1757 Z8(2e920841,d044ecca,cdac3828,cc2501ab,7ceddd59,9020880a,1b11cbbd,6cc7c3d3)
1758 Z8(aef92fca,1add679a,b218043f,7192b976,4b86d4ac,d49b34d1,8c1f4c51,5f8abd9f)
1759 Z8(a1e5b13b,bc7d5d33,1be064b2,f7f75d90,37445092,58335dc9,3f95dd3f,5f9ecc3e)
1760 Z8(5c68d877,9587caa3,01a429f0,a0018fd0,6f8dd138,25e5c324,2e2fd3c3,6a0e9c64)
1761 Z8(58d38a15,fa7a7272,e1089709,a86565d6,e0593c37,f21dec9c,486b080e,2506b096)
1762 Z8(610cbded,8b493876,8a3083c6,16186ec2,7592e3b3,138e6d25,c55c0e20,c887b711)
1763 Z8(77896c91,7e5a7c54,be4939af,375038d3,e2b95c76,ed798f2a,7e692a96,bdfd2e14)
1764 Z8(532de006,400a6c6d,0c630b6f,8b109f4a,c2a9b8bb,ce0cf55b,36937885,7ea37951)
1765 Z8(f92d351a,67916341,73919042,4cfe26cc,492d3893,1d885956,c741b727,f017e303)
1766 Z8(587f79ab,3bdda4cd,d5b16721,696f6f93,5200f1ed,8f4fd2c7,c572da94,23186093)
1767 Z8(8d2ce6be,0b70a4e3,01ff60b4,fe061c7e,4ca16c97,1b3c9495,fd11ed48,34e7de5f)
1768 Z8(237add52,fae088ff,0460285f,e50ac3a5,d2f3ad70,315708aa,462210e0,45d31a4d)
1769 Z8(5e4de7e3,386bb615,27c59ac0,71b37ebe,0ee77bc9,5fb5fe5f,413d9b05,4f36e754)
1770 Z8(6e56a720,2e3a24c7,90a9f912,8929c88b,45db0db2,6d86d4b6,7afdeabb,edfce6d1)
1771 Z8(b589ccdd,049c9ddc,b12ac0b7,c94829e5,b5a3a4d5,d17d82e4,08a5e627,97930d89)
1772 Z8(30fb8873,d6655d63,a9df95ec,cb7a0bdd,1b95a40d,f785fd5e,9abc1803,7d07461b)
1773 Z8(3e6e975b,4a9a2aff,b9963359,6f434532,23cd4ace,4598d75a,cba04209,8f0b0a24)
1774 Z8(22263ab7,8f3ef602,d61531de,cd5781db,f897f469,30126888,a2bb24ce,e3537ffb)
1775 Z8(adddb49e,3c5c438b,dd202e1d,766c0503,27044eae,c144b945,e3170844,cf82f7fc)
1776 Z8(038a3476,a59a87a0,b8f22634,f9fe5a38,31c99582,87431857,633d7400,4dd2c4f5)
1777 Z8(c92f3349,556cfe3c,12076c46,fae3b105,5597d37e,0f6946a4,a6147a51,a6ab9b58)
1778 Z8(85230c4c,a5c39c9c,0c6f9991,7554c807,82c757c3,9f101934,b6ea1cf4,041f9f0a)
1779 Z8(be455c12,235947e7,c510a3ba,d5ce92ea,21c24064,adddbcd8,fb85f5e8,8f8b14ef)
1780 Z8(c044d454,1488b79f,c6c30e10,3d413e3f,0b3230f9,e120b545,dfc146f6,1a41ac2b)
1781 Z8(b2769a93,a337a159,e9208332,3c7587ff,dd1e7c23,fefe0ac0,b33084bf,0c2dd6f4)
1782 Z8(9c702421,0c6cf357,d3e34923,b3033531,5268dc2d,3bb6ae06,9581d437,6ac9d3c3)
1783 Z8(4835d324,3109b84b,649b8da8,e92fbc1d,ea444a5d,d3816f50,2def51ca,3f3e1c73)
1784 Z8(5805bf0c,12fff876,550980c5,0a5f2ad4,6ec61c4e,9a393b31,397378c4,67790811)
1785 Z8(46ed0177,a2db9593,d230c2ce,8c2bc0bf,74d81271,729b0ea1,37330114,aa472b52)
1786 Z8(54d14eea,7b5ac4a6,090bf753,0d46d356,c308cb80,0f65c5fd,a8ae8ec2,1373158f)
1787 Z8(4806011c,872cf023,232ce410,f5b45f85,00c309b3,bfe548c7,ec85c526,d64de4a9)
1788 Z8(83b9601a,e725b042,cc4b4204,33411a3b,b97487e6,6dedccd5,d764ecfc,ba013302)
1789 Z8(f7e3e5f0,a010ac5e,66993aad,a7c92188,c6c36e8c,34ac7ef2,d64cc2b1,b474db56)
1790 Z8(253cbc6a,167c9748,a5c383d1,eb9f9a5a,7910cd20,bf573dac,9674bfc8,8cc3ee79)
1791 Z8(9e2d7e93,570275da,450a6703,84c5eebc,2210adfa,3bef6b88,413cab5b,6c8b5573)
1792 Z8(46c94f8f,e1c2fcf3,04ab86d2,515bbf12,5196e9df,7a1af850,4b9f6cbb,ff6861c0)
1793 Z8(31bea978,ecaf42df,a2258cb6,0f2f2b2c,c5ca8c83,b2a8d5ab,f09edb82,4bd9290b)
1794 Z8(abbaed5a,9cf213be,234bf07f,6323274a,7f4b1091,d1b64712,4113a3ac,8819329a)
1795 Z8(7123ea0c,f0c15e6f,4a0d13b8,4365205e,86eef405,861f5d00,1634b9eb,550765a5)
1796 Z8(33d1c1dd,af0e0aba,5af86606,4b7726de,c9cbe7d6,b4392639,437fd669,36b347a7)
1797 Z8(6aa722bf,d0d5b23d,23e7520d,60c146b5,2c00b016,68185efa,95fc7d6b,5bb53c80)
1798 Z8(1e00d798,52a62474,ee7268d1,2ad34471,5bb620b4,8f2c9e89,c96970bf,534dc286)
1799 Z8(b94ed4a8,b5a08d93,50cc569d,03be6af1,3eefca5a,f16c7fdb,c0e68e0a,a7483394)
1800 Z8(4cd35bfa,6b70861d,29ad88a9,fdf5ad3a,7087926f,7f660805,1faf7094,98253b63)
1801 Z8(790cba6e,d73951f4,e1e9eeb6,2b250997,72690360,936f66cd,9dbd5b6c,c0c27dac)
1802 Z8(76bee1bf,3d99dbee,790d6cc1,8bed161b,f45ec91f,b0439a24,c0a2d8b6,57c5daff)
1803 Z8(bd4c7b7f,4849b0b6,02e18333,90319ab8,85af3769,805ca8e8,41d03a42,f576cb4f)
1804 Z8(d9566b89,fd97cb66,bf19086d,26c9e817,a824380c,0a07fc3d,9a8da5fb,77c96216)
1805 Z8(e94b08d6,cd4946b3,b89f5eac,36521f06,aabdd3e3,f6b275ee,fe231a38,a761d3be)
1806 Z8(0a8c83f6,88699b9c,2f6e4cd2,2c4f4d6a,544a6464,a942f701,83c8268d,f2576801)
1807 Z8(21fb9ce9,d358ac56,b834aeac,bdfaf51c,b5da4acd,741fcc30,d1072d1b,00fb9026)
1808 Z8(08badf33,697abe14,7a068c69,42cd55ec,ace3a6c9,708ccf4d,05b374c4,7d16311d)
1809 Z8(fd5d402d,b1004cf6,a8bc4cd2,875ef5a3,0b94c482,cd805bf1,9bf8b125,6d72215b)
1810 Z8(7679ad17,e7d589ed,1c58611c,c0054c1c,e45d269a,050d9da6,2942f9dd,3701610b)
1811 Z8(7ade70a6,b76a46df,356b0d1a,8d8fe1c2,139920de,5b9b47c1,2986d24b,ca531de8)
1812 Z8(5c52f0d5,e70019b6,d59b0845,691ebe91,57e122c8,003229b9,2b35b4a8,ae8c0772)
1813 Z8(776119d1,6dd399b2,cb923bcd,052fb98e,2ba05e80,1fe2568f,dbddc609,e937ddd1)
1814 Z8(6a475899,84cc47e6,7a63adce,90d1e82b,f352a5d7,90316f92,164caa2f,96b9e7c0)
1815 Z8(46bbdce5,fc73d794,843e0993,f2fe5c38,a6ae3b2d,69529381,3de4a7a0,ac731bd3)
1816 Z8(e66ac51a,f3657e01,6b7d88bc,5883b5e2,8a6d87f3,32c83827,2e9cc03f,7becb1e7)
1817 Z8(73d89140,480e12c6,5effbf80,943ed5a8,c18ddc09,56b3ac87,0f522160,c8e52004)
1818 Z8(4886a5a3,81dc5268,4155560a,3adb2b73,7fb426a9,fea8de12,4db626a6,52bc27b8)
1819 Z8(07276d82,c9ca533d,29b7b89b,06dc7197,5d879fed,b69758f5,58506420,452f6228)
1820 Z8(086e8bc2,70071dc1,b36405ac,e0446e90,0cc7f7a5,2fab8616,71faec92,96d1c338)
1821 Z8(cc4f650e,2bed647a,90586864,4694ba03,940a6a53,248ddce4,15a88d86,364db3e4)
1822 Z8(5fdcbc07,6343ed4b,95fe4bb2,ce86f7de,c5cc16ff,d978a042,9846ad2a,be969017)
1823 Z8(f2133494,7db9f9b7,3fe64299,bde86347,52be925b,6ae1c560,d835fe2f,ce827c3b)
1824 Z8(0a170c24,a4fbb323,f6acf6d0,42ce4990,0a13bb83,598c626e,ce20fb22,66de15cb)
1825 Z8(5b56edec,1f8f4fc3,76ed5761,5dbb1e69,2ca0accf,4ab7719e,d6b166bc,d1d7e493)
1826 Z8(02ba9518,29aaf7ae,6a47d8e1,cd77e530,da1b4709,a7cdf8b8,c6911ad6,71b982ca)
1827 Z8(f149733c,433d14be,0f0f8dec,ee7c5e6c,921862ca,91bd9068,b70ca66f,7ca6a0ac)
1828 Z8(980cce36,15bd438a,17235e58,a0c02814,267bfeaf,3d052a8e,ba05d912,501598f1)
1829 Z8(2510f1fe,75816fe2,a93e16a7,33cb178f,7d796521,acf22f9a,17f6652e,5dd47253)
1830 Z8(c5e72196,9b42c377,15e8f44e,b942075b,31c25f64,542a0630,788c6ea5,c8ac3b73)
1831 Z8(4405328a,ee74fe80,9c9083f1,118782b1,1be3b315,371ab357,9516f209,ba3902a5)
1832 Z8(3da4d693,f2ef6d33,08f3bffa,031ac558,b275ea04,7d1fb15d,e33c72f6,68f5ad6e)
1833 Z8(234afc78,dc2c6217,b06cdbe0,ee7798d1,4ac5b150,b942426b,f5153e9f,ca26d532)
1834 Z8(4fc16886,0cc1c2b1,f44b0ab6,0ac52de0,e78242da,254802a1,86e8bcdc,b9477099)
1835 Z8(0f7a8947,a6f8dcae,cbf31492,7eee200f,ae258a11,75dd7153,6542858d,75f71e7b)
1836 Z8(df5500ce,7b759721,5bfe1895,ccb3b591,e39ec991,ae1789f2,9ad124da,8868a14f)
1837 Z8(e7a2cb6e,07456f0c,f5be13df,0472edc3,c59370bd,3def6483,5d78bb17,954b0571)
1838 Z8(b95ea78d,91bffb26,eb0016f0,3aa81462,69980dbc,95b6b8e9,3815d880,83c117ce)
1839 Z8(a053a56a,6439b1f6,7105586b,3985a989,26e6c1df,fa12988f,262a4722,aa0fef89)
1840 Z8(fb04db75,f848a2ca,e3176074,1d561252,956d9a6a,dd7d78a0,1a827dcc,eb32f25e)
1841 Z8(6c28dc4d,a938e725,c6bf49a8,84e1eece,642ff0f7,01954eeb,352b320a,d83055f6)
1842 Z8(47f72d70,7da2a6d3,a11becc8,13d430eb,00e845ae,cde56a32,62e3f081,43200b26)
1843 Z8(392d8ce1,346e8b35,cb7d1911,21abde48,e83adccb,9301a4bc,b7764d2a,ed0959f3)
1844 Z8(c7ef0eb0,0dd6fb44,9cba8e52,49ac5d9f,50b095da,745f969e,ae8ef3da,02b7c8d9)
1845 Z8(9b9532ba,c5b7329c,65849245,c3aaf17a,6b5deaaa,78501306,20cc7c54,20ce4820)
1846 Z8(b3ff5cf4,eed3f4c1,1bf1a239,a1967f26,e2fdc943,cd1db626,a27b0d6d,e20a86bf)
1847 Z8(d4c9888a,a0a7ced5,b919d049,293c7093,36e4b638,158705d5,d79525b4,cfd73f55)
1848 Z8(6722a8cf,ffe57aa1,46a25a88,71d66d16,49b009c6,2dea97dc,63669d88,8e064b3f)
1849 Z8(c9be8ada,1f91d799,f865cbeb,778cbdd8,521b46d8,f359b473,4e922221,4f90b322)
1850 Z8(918282b1,024873a8,c86b9f32,5ba779fb,1bd16947,895cccc3,9a6f2f4a,8843b388)
1851 Z8(8df6dceb,d3b9533b,eaa575a3,75e3a4b7,2ee4aa93,6cfeca82,80677af0,fb6f6218)
1852 Z8(69bd8816,a394c8b8,2464905b,244dd334,19cb7c6b,93525da0,1b874f1f,b1afd8e7)
1853 Z8(86c0ee7d,d2180f30,e4e39e61,312d2ade,a4225596,682a3b29,ff38a967,a36aea8a)
1854 Z8(7a2b3083,6a2e159e,340be36d,aaea6cdc,bf607a64,d3ff39d1,ebdda28c,970f4d17)
1855 Z8(fd03dbed,5e183bd7,0782ec37,e0eb2eb4,4f362b62,f1e1f7d5,42344330,01dfb051)
1856 Z8(fb7185ce,7bc0d3d9,43f5e1ee,cae6a5ed,cac57779,61b2ed55,8afe5f00,dca425cd)
1857 Z8(9c9ea008,ddc17954,0c08df52,0052a097,6cd5a7be,46fedd33,f8bab6c5,285f3e90)
1858 Z8(83afe269,702a6cd5,2ea6becb,cab998e2,8049fa03,2a34e63b,2c2cfce9,991c1845)
1859 Z8(eba0cc74,5eed6701,20e9909f,1939ff68,098da512,5bb7e081,af26e423,93a6cbef)
1860 Z8(c11aac50,791431d0,c6f919fe,680a0ee0,ae63983e,019eb216,df7c02c1,5351e600)
1861 Z8(8bc307f9,1ee93044,5c58ea7d,e2810e80,2fb2b4fb,5c8335cc,3133594a,9011aa57)
1862 Z8(11597a56,55ac3e16,5849131c,037fa0c2,ffeefece,86b12d36,a8c57c0a,d4912a20)
1863 Z8(b656b717,33d597a8,5506c9fc,cc27d89d,300c207d,81391a43,5f93f3be,ea328a0a)
1864 Z8(ea95a777,213cbe01,2cd70c4d,8758f8ef,ad300711,5c9b12ea,54550b15,18975b26)
1865 Z8(b811f643,287dd141,a9b92e42,e9c01494,25e4841e,6d3d8859,c581aa86,15ba2a2d)
1866 Z8(76b5dc2b,153be21a,fc4172c7,aff62580,b9e2ffcb,955eb0a8,031d42a5,e1755585)
1867 Z8(5bcb50d5,38305325,5123dcda,d08ccd55,0942f9e4,ed14133e,45ba173c,d80e9b84)
1868 Z8(3a828deb,9b49b906,7b6389e9,618c66eb,4f5f391f,c5a1ce3f,e7af2675,dafbeca0)
1869 Z8(42640c63,957a94cb,d48a412b,b41c1544,3cb6f318,b61e05bd,d9ce2897,bb72ce86)
1870 Z8(cbe41a2b,3b3cc419,c9045029,5872d95c,e99d65b8,14167d88,c0a91535,83946895)
1871 Z8(36de1028,37321241,5dfc2732,93802c4c,138ce47c,c2a593a3,dc73c5da,bba63903)
1872 Z8(0868fb02,0fb3dc65,51291d5b,befe6a7b,c2869c70,2b4452c9,017ab1d6,176b0585)
1873 Z8(60901507,57a454e7,a80b2fff,ef1cac0b,1e418faf,4a341f76,995ea184,b93aaafa)
1874 Z8(e10668b0,8632b7bf,176ed32f,4e43a223,1f41b717,ce6506bb,39324a48,35f992f6)
1875 Z8(66c67fff,76909e55,48c91f2f,1b5e6948,08c11d5c,8ef713a7,71e3c85b,ccd3e78e)
1876 Z8(83a2ead0,1f4a4750,edf859e9,c04aaf63,12b23463,25418c32,7eee1220,1db3a350)
1877 Z8(d9aa5ae7,531187a0,b01933a5,1a3f0850,de463ab7,4c8142de,cf3759d0,7b715073)
1878 Z8(3ceed410,f545c91d,9f446915,04b26636,5b65afb2,e7e67bdd,495a9559,a3b9cdd5)
1879 Z8(36e3a419,c7317837,a2085985,ec7b7153,fb4df77b,d4e9384f,493b030c,4d5949f3)
1880 Z8(220f8d18,a6aa093e,6a22e4bb,d35435d9,b1dd76c5,0f47c7fa,baa82641,8fbce82a)
1881 Z8(b2446408,4852e87c,1cb50c84,66767c8a,5846e267,6ae1cbfb,f88c9f9a,af4a0fb0)
1882 Z8(c41e616c,74c0253a,0e3a4846,019eee75,77101b44,eca53360,2441c349,49c3b3f5)
1883 Z8(8b679e5e,5c56b2f2,deaab967,c8cabe90,a6b4e7c3,793853a8,d96a0b0c,22efd10e)
1884 Z8(2c1682d8,1a491b8a,82889a61,f993f6ed,653299e4,0b55d51b,ad08cc4f,e2b3d0f3)
1885 Z8(0c07d7da,c9ea2cac,e95fde9e,cc5bfc31,fb9167b0,13308fe8,1f89207d,d6d79fcf)
1886 Z8(f3f14268,df46cdc4,c76de5cd,9759574a,cf38f038,4e02fcd0,c5e17c5d,b9cd71b7)
1887 Z8(2b21fab0,7b4c07a5,c9ab6ff2,2b00982d,7bffff5b,f4e9d7d6,5091aefc,8b400da6)
1888 Z8(3f0e4133,f40c46a7,6b064188,1bbe07ca,a544f5d8,147f2aef,0bd42a7c,e3b94afa)
1889 Z8(6c1b1839,9d175111,3fdfb317,2ebdb34d,a209e18d,58bbfde5,f8e99546,ae741687)
1890 Z8(10fd4e8b,fcc8c784,0492db4c,cfd1b320,fbeb5bf7,a032f49d,30ca007a,8bb375a7)
1891 Z8(87d5c5d8,f73d5c96,734b2bd6,d236a9f0,cf4fe740,dd97c6d6,3076dd01,a0ea1598)
1892 Z8(ea4cab04,1c062458,012a3381,e8ecd823,d1696aa5,43743cf2,bcfa9f4d,974c869e)
1893 Z8(a0bde6a1,98bb0d49,d48e33cb,39081c72,a0dfa989,11ed50a6,f9f6b9df,3bed4762)
1894 Z8(d4e10d3e,ad4e61f2,8681532b,abdc4460,06863774,57147646,579f183d,28e275e1)
1895 Z8(c482a053,5bea013f,02f3f9ae,a704e316,076e9171,82eb7662,c37dbb25,43e21d5b)
1896 Z8(93b1d63a,737b80a8,00cb8e82,44f6d7b5,9b341aec,918e6ebd,a18bacee,8d4d37e8)
1897 Z8(1dff9852,7a77724f,3c9782fa,b043f425,492cefe7,f7abed11,1d050349,6d64858f)
1898 Z8(e50cede4,16c043c4,5a8680ac,7a09220a,68365a4b,843028fc,48aa1dc3,cad5d464)
1899 Z8(2ab5b79e,964d1d3e,4007f590,f31c8568,c9da8b78,4688c362,f4a6ef7c,d3720a30)
1900 Z8(3ae21974,c1c3289f,32c80296,607106ee,6fd6cb7d,3e7630b1,85327f0a,dceb64ef)
1901 Z8(f1a55f41,59a2a895,09896c2c,a35fa956,93c533ee,f8553aae,dc7416ec,e45ee4b9)
1902 Z8(5d29f522,02ff90d5,117833a8,2c140309,48de441b,bce89d8b,02fb2d10,7da4c124)
1903 Z8(d58998b4,5386bb89,85197da4,aef2ce29,31f02eb5,8ec46d05,610daef4,8cefbc10)
1904 Z8(380839d8,7dd5ec94,72c297f3,dfd25833,968848da,1e5307df,58e0ace1,95bec368)
1905 Z8(5922e359,b6d2e1a8,ef8dbee2,fe78988e,91d83558,97ef4614,619dde23,3f9d5eec)
1906 Z8(8c3e7a4b,49865a20,b6ad2a7a,3e37a8ed,12958f0e,549369c2,90448344,c8482aac)
1907 Z8(b3aba320,da606c1a,0d73d040,9b5f8780,e675eef3,57564bd6,990c8f05,49f32da7)
1908 Z8(afbab41e,ce868f4d,7495e02a,58a044ec,3deb0214,57c19884,794aada6,94f5dd8b)
1909 Z8(f4933f1d,f9d873cf,2297a79f,8c6e388a,39a29cd4,7ab7d9cd,00f25d49,5de66438)
1910 Z8(a34887d3,7f1410d7,41a06013,3d4cdbf7,d0ec6499,25cef2f5,ec61b251,c0a965b1)
1911 Z8(0efaa295,c02bdaa0,7264c926,eb0352af,6db68069,8c0d9726,6c8ff222,45928cac)
1912 Z8(57313ce3,075231dc,c1fbf763,efb77714,5fdf267e,e909a564,f0222a98,6af3783f)
1913 Z8(5a1396f8,56a4a5df,8f8ad35c,5e2eab6f,1656adaf,9c5c1d95,e59fa3db,b7ad2025)
1914 Z8(8bd3efb5,bf493276,bf693bcc,7fc22c59,280bfa83,583ce7d6,82d10d5d,87a93f10)
1915 Z8(8da862d3,bfdcbdd2,29872e75,50c44a5e,a4cccd03,88224389,ca002665,8c320b7a)
1916 Z8(9d3d4361,2e0c456f,7cc32ea6,34889ba6,98450e07,274b5ae0,1a3fb62e,c88f1232)
1917 Z8(2f1cbd02,e1de27e7,1e8800d8,9be753c0,7b463997,8a07246c,4566e636,cabbf675)
1918 Z8(31662e2c,4e1837b8,07b56f2b,fa84c76e,867b8820,0ba61f51,08e7fa13,be4e7034)
1919 Z8(61a14cba,c962f6d2,e1e3b64e,ac970c6e,b19cba06,8c8ae0ec,723d910c,886180d6)
1920 Z8(9233cd76,7987a0a6,737592fe,7440aa3a,e91fd354,97f10e9e,af4bea93,b0e6118e)
1921 Z8(15c7a0c7,c46b7406,c6aa0c04,5a4f71a2,971cf472,025922c7,eca87963,c31b0a3b)
1922 Z8(14078dd4,1622986f,dd6d1651,dc195205,3f7f425c,d438581f,6ac00761,083f5784)
1923 Z8(02a29b8b,3aa86498,99527bfc,f8f4f5f9,27ff9b66,fbe83417,67eba34f,59099dd8)
1924 Z8(9960317b,20eaf4a0,1d63c098,55bdd7ac,c38f093f,6f8aca92,72b581b1,8a65617a)
1925 Z8(1191527e,4285d260,2e853fb0,9606a334,d388bc6e,de5a11e6,b1c83a70,f11a8b79)
1926 Z8(f525db1f,61f39162,eeceeafa,c430cdd3,ef221f02,12228034,0b7f6b3b,c2d557ff)
1927 Z8(53ee8716,08953a9d,f5d8d739,94d55c8d,a77c0161,2fe7b8a4,e4d70aa1,230ac40a)
1928 Z8(f229fef3,a4c0b379,53a26b16,fd6d2337,5fe3baa6,233b1df6,9622d9b3,8e0cf071)
1929 Z8(957c7714,11d61770,b6935bc1,3763dc2b,794122cb,e6ddb461,11194f6f,cb84bbd3)
1930 Z8(744b25c5,2e509f28,02691bde,cf5ba5bc,24c35670,09d1aa3e,5a9fe595,41cf6d4b)
1931 Z8(30ed9d4d,28277b8a,3554e11f,056db1d5,73bb1a92,406a866b,4fa1de95,4ffe68e4)
1932 Z8(da1677b5,a365fcb6,0eee3b51,37d0dc71,94c249f6,bfce70f9,768739e9,52e4e4a4)
1933 Z8(3c60744b,aeda5671,8ec61c4f,7c6adfd0,12498d88,92155d00,cfcc3078,d9d832e4)
1934 Z8(e6ec7f97,b56926fb,ebe983af,33665522,2533cda8,1401b20f,433ed799,e66d9810)
1935 Z8(a264e4e0,85c6323b,cb5192a9,e871436d,028ec890,4d1e5449,5a9f00c4,4f521f15)
1936 Z8(9b0454e2,0221394b,c5314d2e,0e939efe,504418d5,e82bbc9d,f517f9a0,9d4059b0)
1937 Z8(5e0efcad,8e1d75a0,5a1f23d1,4bbeee00,749eff9f,6a307d6f,102addcf,04254dac)
1938 Z8(763f4dfa,818b6823,270c6315,d70211bc,c5ee6a08,960010b6,7d15a1ee,f74c2778)
1939 Z8(631e6b9e,0fafbe7e,82b22900,3b528bb5,2e29c890,59476f14,d331919a,3523b958)
1940 Z8(6e64b08a,c36b48cf,2e79112e,956a44fa,c10d3bed,f79ec810,12fa52ff,8f85ae6e)
1941 Z8(1f8ffb56,196e7c30,7b142c79,d8418038,078996a3,fea58906,d91648ff,4321bdeb)
1942 Z8(71d46367,f220cdc0,2a2c5ad1,051eccc2,1bd0a390,c897e7f3,88817346,cd6df0de)
1943 Z8(9b200c69,f5093969,905706df,5c6b7e66,b68abebd,fdf39988,41762eee,35870047)
1944 Z8(b9753813,66aa9d68,33d53736,c37534f5,341ba410,64131587,dfa1f6f9,e7cb73c0)
1945 Z8(526f0ff7,386624e0,b650e37d,f3ebbc68,74346f65,0aba4ff2,06609763,dac8a667)
1946 Z8(dca05fea,2d8f990d,c296f834,d1639b8d,f8dbf919,887c6bb7,67e3de7f,8aca661c)
1947 Z8(c95d7ba0,755916ac,78948a5c,c7874e50,aa150206,18c8f543,dc1b339d,855c0716)
1948 Z8(17b29f1d,7e5353ca,954590ee,2a0e4911,0c57261f,f690db32,6dd6a8eb,1c704d7a)
1949 Z8(cf52f1d6,7442a742,fab21d62,0d7c3bdd,aaebe31a,e077ca60,f79c5dae,c471dc49)
1950 Z8(68aee2a4,be32b6f7,3d10361c,ce4e1ba7,727faa0a,f0d98098,08e07365,2e68338d)
1951 Z8(392cfcd7,076acc2d,a9989733,519bdec0,79af81bb,d220ace0,cd4c0f99,af3f42b5)
1952 Z8(12768e02,1cf6e589,67484515,9dabd91a,2951cac2,789e20dd,138dae70,11c78b3e)
1953 Z8(eff14881,5040d9b3,0b09bc16,ef158fb0,8556f681,07107ff9,c56117a3,49b8c0e7)
1954 Z8(efd5333a,0d84b8ac,acc89f29,5a600153,4ddd0a63,1491317f,6044367f,be94f619)
1955 Z8(fb872c1d,cf13ae15,d5f188af,316218be,6df60ecf,ef2a985d,eec4625b,ba4c3ee3)
1956 Z8(5866ef72,e2822c20,52c13cce,c87f64f0,d9fffaff,18192ff3,11b6ecd0,fae6acac)
1957 Z8(b5803e5a,f00fa507,c04d8a5b,d792b681,dcea2df2,9df1dcac,ce8c71fd,9a7f7b66)
1958 Z8(28d9921a,c2ba6be2,6f06edc6,5f44e617,336f7008,51611c51,25529c86,fa29df27)
1959 Z8(e9b4b842,c0666356,a0a8b1d3,3791a61f,75b023cc,19a29546,1c31683d,94cb6f01)
1960 Z8(5afa4099,89566267,c850cd74,4fe4df47,4688892f,2659967a,57dd35fe,e7b6cfb7)
1961 Z8(c8080328,5b479107,9c6abd86,8515992a,32404442,9a97dab7,e012a850,9601097f)
1962 Z8(ca634d01,e4335cb3,76de156c,a33293c8,4b837ea7,d6d70776,fb9b910f,3d8db05b)
1963 Z8(d3f11194,86d8432c,a1feaa0a,f14fc860,97395d86,efaf79d0,aedb75f1,79c676fc)
1964 Z8(83aa278f,3e8f22c3,a7bd1227,b1e3534f,a720d542,8d379b22,56ca5dc7,13ee88cd)
1965 Z8(31ffab52,39d25067,a278b60c,d3d33b6a,63119530,b44ab647,2adb1191,18237ef8)
1966 Z8(34f22b51,090f2ab1,41911288,934cc14f,4ae3f63c,8aebc180,482548e6,8cf24603)
1967 Z8(104f1887,fe0caee2,256fb806,3969c5d4,5748537b,cbfaf6b5,5d5b40c4,32008fd6)
1968 Z8(27fd9d3a,5ac1e543,489061fd,58d893dc,11b1847a,f8cf2d80,0097e897,69b5ce6f)
1969 Z8(96770a6a,0b1b86fc,1b112eeb,12e966a7,572d7df5,c474e8a8,456a2dca,01167807)
1970 Z8(494cfc22,9f43b959,be85e2cd,0c0559e2,2acf87fe,a701025e,a041561c,f7832f76)
1971 Z8(b9b5fa0b,531cc86d,a863e924,b64fd5f9,6306bcc9,7d1f5f90,cee445e7,0b91942d)
1972 Z8(a335916a,fd3f7974,35bb95ca,3df7cf9b,0fe9cdcb,792e5107,9558d0f9,21c1b2fb)
1973 Z8(455fb438,404b3bcd,55757560,9cc09b93,261f3c74,800132f4,7b52b23d,c374216e)
1974 Z8(0b4d9d63,c8135a19,246663f0,8c5b0866,efed5745,a1bdd3f0,2b0da37e,d9c0d748)
1975 Z8(7b9b3231,07a9efd4,ab48427c,21d7a1db,fe6077c5,d9c8c990,67f2bdff,c38ab429)
1976 Z8(240d6bcd,b2756011,3476ad24,e92eb428,44378719,becf7645,253fdc5c,c2b44222)
1977 Z8(38779f49,20d499c1,769be459,f8119a83,de84b55e,e2d32d02,1b0a9226,3ec31c17)
1978 Z8(378abf49,01d56cbb,b9885dc2,5d3b1d5a,65e94d44,e0ce58d0,68cd3907,903f0438)
1979 Z8(77f3aede,6cbdc326,a5c6a6f2,886e45ca,a1595410,5fe4f4cb,a3d851da,bf3c6749)
1980 Z8(cf89d8b2,1eb7d0d7,552ff617,bbc8c71f,bccb72f2,920e5c68,b15e9c6a,7de0d9ed)
1981 Z8(66442932,57eb3acc,23d73566,7616b661,9926ac0c,b04d54ff,c21f101f,e24bd5c4)
1982 Z8(c751cba0,5afbcf4a,eddc1cd3,44d6ae12,818cd49d,f3709121,a3035e01,659dbfa3)
1983 Z8(adc11a63,d784be58,7235b332,e4fecfb8,412b7173,87b3d59a,d0a4f2df,b7361143)
1984 Z8(0dc59cd8,c9cc57a0,8f07a0dc,d2bcd617,57aa07ff,276c0953,134879c8,c543a017)
1985 Z8(7a0c3f01,40e1b0a3,10666b04,11388e41,5a8e5f87,d0527e11,8cb487f7,0dbe7b1f)
1986 Z8(08652ea7,f824a5b2,f34a36f3,6cc33798,3789e49f,ac6aedee,2ee38e78,d42136fa)
1987 Z8(084e9f25,bb942228,db5fd45b,3b67eac8,19327889,378748f6,035b8fa5,d4270257)
1988 Z8(937783e9,db9013c5,e968d8be,0ab07fa7,96fd5f73,22271dcd,715d950e,dbdeb0a3)
1989 Z8(1d272b72,304f25b5,e5536ea3,d5ce8752,3db315d1,764dc96d,e0100eed,5058c177)
1990 Z8(b8fb625a,1a41db4c,f81b9fd6,bebad89d,6bf22cf8,aa40c34a,1f0020b5,68430638)
1991 Z8(c4b3a894,f36277a3,f93ebb13,dd6375fe,7a70ec8d,d3a2c6d5,3535a3ca,50d5625e)
1992 Z8(002a2178,f787012c,f39a1f9f,5d5d9e38,d8d3df06,2ef31fb5,82043f4f,00275494)
1993 Z8(aee63d9a,790149d9,ad703190,8fed2f8a,9549d6ef,caa2b467,8402a9dd,7d122e47)
1994 Z8(4c9f4744,de5f442b,e8945760,920af509,6035b8e7,9ae8dbca,b9b4825a,851b9995)
1995 Z8(f3d7daef,203e8179,12e3808c,d0049540,8cac4356,50f08770,f00f5e62,e3d8053d)
1996 Z8(3d16dfe4,4f4e2b1a,b70fea41,b90ed626,7ef51d38,8e950b49,531081b3,9f59c5d0)
1997 Z8(1248b6f9,bb53e43b,a6c5053d,a392424f,9b330e07,b0b438a0,68559ab7,42a68b18)
1998 Z8(512f5ba7,35b50e20,6c9361d5,237d4b44,d52a2452,a5e839f9,42cecd23,1deaeb44)
1999 Z8(bea98ca7,841f91ee,adf0da30,1482ed18,23721a0f,260ee1bd,93239c75,8fbd791d)
2000 Z8(8ef63181,0cdb9482,513aa662,6f501995,67d3f857,c9fb6c72,cf4e62f9,41b1ea6c)
2001 Z8(9cd72189,4e3f8335,9d26a616,4ca32fe6,271e8718,3e27d444,fd97d16b,cd2ee356)
2002 Z8(141b262a,1d01e205,6eba6da9,1f082717,78395517,76728243,ff7b799f,6f93a478)
2003 Z8(c1988cff,2baa86e9,7b1ea9de,daa8bfaa,3ccdd5bd,80368961,5b094c65,b7932432)
2004 Z8(4a1934d5,403aae60,488b9de2,1b66d58f,e771e0fb,79f5f12e,041af483,5f76693b)
2005 Z8(1af267ad,6f4be88e,436fab32,9241cc9b,a5079d00,977adfee,3503543b,69ef260a)
2006 Z8(2cc740be,74a0b795,2359d710,989afd67,15a877e9,c5d5e8a9,2bb94854,e55e4532)
2007 Z8(3b26a376,99d71a20,47cdf26b,6b5561b3,13489b0e,b7baa198,70cc7ef9,150cb928)
2008 Z8(ae1ac2ef,7fc4ecd7,3a6ca36e,3804abd8,ede01f46,3198f1b0,b2fa9e73,5ed01f9b)
2009 Z8(faee366c,1f92383a,32139529,3ab501a0,489caa95,1ffde425,5b48bcfc,00380da1)
2010 Z8(e80e62e4,206b500d,7d385b8c,c89baaf2,739dfadf,f4b7a674,345ea91b,75841b16)
2011 Z8(3556fbcd,7099f371,3b57d593,6ad6f3eb,6eece405,37c5626e,44b662b7,3a3c724e)
2012 Z8(e12efdf9,87062869,e1e03ef2,3fbb6780,2c7f66ab,c62125e2,0e78354c,14529da3)
2013 Z8(d37a2ed6,bd62653d,4b577e9b,0a3192e8,ca69a059,874bb077,a0a6208b,f6a64596)
2014 Z8(d36db6de,e24e030b,a1fd2daa,4c46dab6,1686decb,1f505ffc,ed03a431,d61b49e4)
2015 Z8(c9ceb6b3,ebfea720,a8dbf39e,d913c77c,a23a2f21,e0394296,26f08608,4e28edd9)
2016 Z8(b6f27bf7,8b8bbc42,7739c858,1438742a,be1c1053,3ca73462,713b2138,e9943437)
2017 Z8(6e7dff4a,1d9303e6,187e8123,346fc1e2,59cf5d39,e3034b92,a5307f8a,3ddeab31)
2018 Z8(5557f78f,388ad3dc,af57db99,830b8eec,1ad01b1b,25f94e9e,bb92abcf,d31576ff)
2019 Z8(18b5f816,d5167116,73e11266,11e02e74,ca1ea6d9,a5252fbc,19e0a46d,ad8d5697)
2020 Z8(c600777a,e7874461,94dabec4,6b1172f9,d0e43110,a2c1f75c,54e02332,a486cac4)
2021 Z8(29bc9132,ee165314,ae3d7a61,749dbeb9,ab77eae6,5d13e354,bc8402e0,5dad978b)
2022 Z8(9eda5a08,d0d55936,efbd599e,c73497cb,a6f04e50,917ff255,ee205871,394e2047)
2023 Z8(6e3e6165,a470420f,27f0ffb1,d8ad8eea,12750660,2423bf0f,5e4615eb,5af53749)
2024 Z8(22fce5b7,ad4b8c4b,cd96f94d,cf2c404e,6774f94b,1ae80598,b39749cf,3dea2f5e)
2025 Z8(3c347bf8,0a119cde,398916d8,fac3d022,8c83dc3b,a63f25d5,13c49b6c,4cf60a21)
2026 Z8(d7cfbbff,38deb3b5,7c5153f5,140f7ed4,96a38ab6,7ff989ba,7506b093,c0ee8513)
2027 Z8(c33141ca,68055cb8,f845cdf4,a88c3b02,9d81eb55,cae61097,fa0b13c4,09f23850)
2028 Z8(472f2740,ee6f0dfa,76256e8f,d843387d,814f0387,2a164dd4,4de3cc19,6da0f0e3)
2029 Z8(1cdde009,d2f6ad35,658d1607,e9faba7a,921ca703,a71d908d,93d21b22,6a7917b0)
2030 Z8(907af181,ef4e6354,7b328fe6,21e95923,c15e1c2b,b70471b7,caf3d4f3,9ac69740)
2031 Z8(6c98cf56,d71fa87d,2b8c5538,27db6db1,346f83e8,42a8768d,aa840f4b,916cef9c)
2032 Z8(042b6024,4284b16e,82a8c1ff,21a3a737,8e2f9fe0,ad6338fc,adca5f79,a1719607)
2033 Z8(a4f52e75,b24a4af9,bc298348,89a3cc2c,f8b21e11,b158b4cc,c9061b1e,c85e3fd5)
2034 Z8(ef1f77d5,f95e82c6,312ae7f6,80aa94a9,afca6cf7,2e29edf5,92e20898,5db315bd)
2035 Z8(08f5f825,6b6cc4af,60a8184d,17fb0c46,daf512f3,3fbab2f4,d98df0f0,72070f4f)
2036 Z8(d9c8d86a,50dfd02e,4970758b,7afff5cc,b8cd9d5e,14b364f5,f314b8f1,8bf1e282)
2037 Z8(5df87172,67e5c491,83edbf4b,0d796446,627b5b0f,47f404c2,75ce847e,67b8ebf0)
2038 Z8(3a36c55c,c758790b,fd4ff1a7,db5a7cb5,19f66386,92c2479c,f9416183,d503ef96)
2039 Z8(2ae80e9d,74f7749a,a8032e59,4c22df3b,a56c3dd3,f730b811,a86b7524,4a43169e)
2040 Z8(86336353,6f4fcffe,460df641,7ad162ad,e21a7e9d,fe970f12,a5ee43b6,22334114)
2041 Z8(323c0d79,737fda5b,46e2b91a,febab074,4c99b23f,e1b326f3,7d683dc5,45fe5d0e)
2042 Z8(0b624021,36fc2c4a,b441a4af,f3cf2309,f9afa603,ac695197,dbf9deb6,f588e00a)
2043 Z8(ef2308c3,ab7f27ca,592dfd40,0debb9d2,5ecc4c70,77340cc2,d7764116,23c826c7)
2044 Z8(7a34ccd5,05120cb3,29520a8a,c656fd3c,e9626d67,f45384c9,7dff5146,a304f3e1)
2045 Z8(b4b1c0b3,6f956b7b,312b7069,d74a9232,1ef2be13,33f4634e,daa7ce67,dd533bd2)
2046 Z8(fcceedd1,fa2b5251,9c6adb93,664f6f36,dc5093aa,bf66af66,7be3c371,dfa6379b)
2047 Z8(af35febb,d38bb7c3,e242e238,5537eda2,5f321064,ed9e71e7,edc8b2a9,f95b6038)
2048 Z8(e0356b7d,9bd231ce,d5c51e2d,c589e398,8663a6af,c8506dfd,3f6b0da4,db6befda)
2049 Z8(5d78a19c,f200c6e6,60213c5a,56dea8a0,76734fd0,e6ae72f5,fd9ed41c,28e9065b)
2050 Z8(0d83015e,ed25d1a9,7cf119b5,6998f95a,e7f9b2ae,9e64064b,86622f04,24016127)
2051 Z8(6b722595,43785623,10caa688,6d095a8b,586b9ac8,76ebf0f7,199c27e0,6e88d40d)
2052 Z8(0de2d678,9227cb92,d003cbae,a4eedf8f,2ec7a941,675fc1f4,efdef86d,e35e4bbf)
2053 Z8(d22c7843,0e0d137f,b4e456f7,d0f87ce1,624cdc3b,fdabb2a1,3b8ce899,38f65c19)
2054 Z8(9c7cff3d,bcc89077,de8a054d,6c005b36,61f7cb36,20a6a433,eacc5bc5,8501d100)
2055 Z8(d6861dc8,be710da6,503e50cf,0f5d9b53,b715eec0,8a1487d6,73b81d29,d6797a0b)
2056 Z8(76d6e904,1b8bc578,ff38592e,5c81ed47,83d75092,769160d6,c2552f69,584430a6)
2057 Z8(37b59aeb,18a58364,a0eb870a,dcaff3a3,272c6106,a5ecc4ad,201005e2,3775df4d)
2058 Z8(4a026a38,a7fd681f,c7715a91,02575e0b,244972a4,3c5be0ef,a75a7805,5087a1ed)
2059 Z8(8afa6dd2,49ab17c9,694b2c47,0535ecd6,3923ec1a,27a3111e,b97fb10d,2a2b65fc)
2060 Z8(31ba26db,da0e04eb,ca7541a1,bb97b52c,a0bda983,76f6ab6b,a62b572a,3a42b8af)
2061 Z8(8f579afc,e088f148,b0a7fd96,8f5938c3,48934b9d,0234e22f,4ab00753,4bd10982)
2062 Z8(380dd1cd,0685317d,b72320ac,454eb31e,19ef87b0,4bdf25d8,6d584a5b,710cad6f)
2063 Z8(61ed02e2,5509de27,816833c8,d9212077,0c167d9b,cb54eaf5,1a7a48d3,24883bb0)
2064 Z8(a2ecd21e,d52c2e51,3f065d45,9540ee80,95636e93,5a51922e,41b3e231,5e1fa394)
2065 Z8(a9f51965,a05c3846,4f9ae951,0f1ebd76,a4f703fe,b637b4a8,824ce169,4b386d27)
2066 Z8(3c6789e3,3d655dcb,0ce4a093,8b67bc14,38729b45,abc5915f,7c568252,f4db67cf)
2067 Z8(fca97dd4,47efe23c,b71ab552,8130674b,2464c6ac,3387290b,d2308b48,e7478100)
2068 Z8(df6caf9c,acffc33e,b414d8f6,d3d8b007,d4b7e265,e7a92a97,c0437c36,3fce9c8e)
2069 Z8(c7ffa4ea,7c539d7c,fef96341,d9207c34,781188f5,7c877f23,327dfd3d,8757a134)
2070 Z8(5c6976f8,2c25bc66,007e1feb,8356df7d,d595208f,2743a82e,541ccb41,a2b3fe4b)
2071 Z8(531d508d,3d2ed6a5,eb53bd58,da570da6,90f1429c,f37d92b1,5e0b41eb,4f0b7e03)
2072 Z8(617d97af,528452d9,05ddb62a,b12bf061,2ab8ee12,45a0dcc1,5bddddba,d4aa1124)
2073 Z8(e205193c,0c1d6676,4852bb1c,da1a935e,e002f4d1,a7611d4d,18b5d3b3,aabe025a)
2074 Z8(227288b3,ee8d44e0,0eabc778,67956366,f2c170a8,835c8748,63bbf42a,37c4bc7b)
2075 Z8(99fb7e68,7af0c53e,e305d750,9058ec13,07a12e56,88abacc6,756510c0,82994a9d)
2076 Z8(e0ac4c58,d4fbdff5,bc3415b6,d9d0541b,990f1c2c,ffdeb7a1,7ee43f3c,9f54faee)
2077 Z8(495555f1,7cf75b36,70807768,f24b212a,91d609f7,ee3e9075,ac48acd3,5aafa526)
2078 Z8(d9848f05,51a85e10,d0bbe9be,b674572e,f5f865b7,fe4218c0,f959e921,0fba2735)
2079 Z8(d4fb20ec,ddd79e9e,cd3abd5e,f67a1cec,66458baa,2aa3b64d,8f6da594,fa92ac6d)
2080 Z8(0678a6df,8e64edbf,70c8bdb2,59480918,e7158502,fb565b1a,c74946f8,dcf87c74)
2081 Z8(d0e12a43,0cd65293,65aa53a0,0a8f6b04,0896bd10,903daf58,d6019a51,dc06d3cd)
2082 Z8(cf519cff,e0013882,a4b2c100,ae9048cd,ba6ea75d,573aff0e,ed183677,df367020)
2083 Z8(b34f7f6c,f417cdbe,530d90d6,38d75d22,82ec4214,326ad758,d754c52b,ca82fc1a)
2084 Z8(86452cc3,1b390a6a,4ae6661f,7853a0fe,bf2e5575,70efd24d,201d18de,379e9a89)
2085 Z8(33648767,4780cd99,415186e8,489b1457,1eabd875,49749826,15722813,12192a39)
2086 Z8(0f9d9e64,90eb856b,aaa2b10a,03742d52,070feb82,15c1c1f8,f8a829c2,97d08a83)
2087 Z8(12da5fa8,742a4c11,4244c8ee,8d3c90c6,a262f9cb,eaff7cad,92e39852,28562f48)
2088 Z8(63b89ef9,f6160bfb,58ca3259,093067ed,ecfb5b90,93cd20b1,bd3dd108,7c3a75ad)
2089 Z8(aac1d981,6e1f8126,f6ffb926,5c8eb573,6883f90f,2d8e4104,f7b04922,59d82c2c)
2090 Z8(c360f322,7b4fc8b3,e733a82c,7e4a8e59,94eba6fd,3c1cc349,75757683,bf340692)
2091 Z8(819716a6,7bbda089,3c06cafa,2cfd032b,6eb00a44,b3f440e3,ac27d3c6,e62c27ca)
2092 Z8(d9931f39,447506d4,8e959868,70693517,73267928,5f7e07e6,8df30887,0aa1f879)
2093 Z8(25331363,e02a0b4c,2fabbfbb,836f790c,d9a27574,f0e50107,979ad5ad,b89fc92f)
2094 Z8(1a6841a9,9a72bb07,c886dd3a,c6bbf512,f7e2ccb8,9f231998,840288ed,52267e55)
2095 Z8(170e5163,05e08a4a,8987792e,42377ef9,c5648a73,f8511a7e,c8dc0383,67487e08)
2096 Z8(da599547,14a879a3,87879dc1,7b6c66ee,00fb7697,15b4e05d,765703a3,81f7a129)
2097 Z8(663a6220,2240e9da,6b383b81,b390f43e,91d185d2,38a11ccc,5d30bfdb,bd724a3c)
2098 Z8(28df6cf1,60e7b069,a1c39dc5,be7728d9,45b383a8,fbe406b1,ad3313b8,aac90247)
2099 Z8(7a2336c9,8a5deb31,5b84398c,820acadb,2f3448c1,7b3b1321,90583f3a,b0c98432)
2100 Z8(0a30deca,d77d6949,bad2b9ac,210a9eeb,2a0dd401,bd51ea23,756710f7,590c92d5)
2101 Z8(b871cf3e,cbfcfafe,f102f537,7a9805dd,6fd217ca,d50c747e,397dd177,1fd2b8f2)
2102 Z8(cc4ac825,aa4f8a57,a41647bb,6df9f82e,9360ec3a,8fa17ab5,427bb9d4,223b6b39)
2103 Z8(191f2694,5ea03380,b8b2842b,d92b18bb,af7c3349,85652499,36cff368,e70e2f94)
2104 Z8(37f76237,cfe5f6aa,5f188e14,ee46cbe8,82f401fa,4604c36a,a557fa04,8467614c)
2105 Z8(fd4940c9,02d53d28,38d54b90,8fb15cf2,634a2f0a,1985ab47,46eeb283,9a485cb0)
2106 Z8(a202fef9,34fd2ee8,8530ae27,e07ed453,c55a0056,1bb14dbe,2aa12532,404fe805)
2107 Z8(346e146e,14102bb2,604a0f47,536c6d41,404e81a1,690ac879,0f74e2b7,f14081c0)
2108 Z8(fe0c784a,ad96e4d1,972cbeca,a2cec724,182c3fe8,1950e5bd,2a4ee2b1,a41fa4e0)
2109 Z8(a328da9a,f1016aa4,0b16da45,2580f54b,d5fec81a,77aeee38,7e464a08,0247a324)
2110 Z8(a0dc7375,fcde85d2,5b173e6c,e46d73ea,fb3be909,cefd0023,a36e4a18,42f55790)
2111 Z8(77cfcc5b,bfd20c0e,1744809e,4d81f48c,55829a2b,a3a2ca31,58378e31,0eb767f8)
2112 Z8(45f110ed,26446929,a2e47654,db07a5d1,c84e0262,e04246f3,84b06dbe,57020389)
2113 Z8(b37440ee,d5bbfe97,11ec6161,0bc64018,9aef84c4,37371b05,409820d8,7980c81b)
2114 Z8(59562849,f20f5a45,6bd1301d,ba606972,f973d1f7,aee644d8,23ff069c,68f1f7c4)
2115 Z8(67056da2,1b34308a,76483a4f,583c4ed4,13461ee3,9b47c50b,1beaf03f,c7f94138)
2116 Z8(e6a7fefe,92e0f63b,cd0cb793,dc699ea9,bf1da702,04a3ac23,37d93a34,ec829f52)
2117 Z8(c87a978e,b75a1465,42aa67a4,0b68d509,32af8f87,fb366819,bac621ac,d8f122af)
2118 Z8(3bf26782,9cf95acf,7f9bd344,c054d19b,d4b18126,9a847c67,cf67c550,ad75642a)
2119 Z8(bfefbdfb,cd92dccf,987fc207,b36afb86,ba1dcc14,3582866a,6575067f,9b42924b)
2120 Z8(8524b3ec,0599af72,c44e99ed,f8304f36,6b5bc313,36a01718,395d7dd8,2fe8e2f0)
2121 Z8(88462a2d,c9bbfdad,94c823d9,a67c1654,6e706f35,0bc175cc,23ebe41f,82cd4831)
2122 Z8(7e12213b,66ad63cb,0e444b9f,8b169390,998301ba,d51a4b16,c09adb02,c75d140b)
2123 Z8(3f957e2c,99865934,a1f44cd2,2bd0ec23,82836b54,637f6b39,1a2f82fb,7b00e399)
2124 Z8(b817f1be,1f2e5608,ce36828c,1cb98d19,b5cbd131,78fe92de,63c5771c,67f19e30)
2125 Z8(f3c65e8e,aefd0336,3a6b5880,3e01363b,8e9ff588,e306d2a8,1c5e0857,895db568)
2126 Z8(bedec84e,9c3e0053,18474e05,1212afad,73ceaeda,20167c53,15a1cea2,6ba852fc)
2127 Z8(df576899,315e23c7,a9e8f00e,df5d20ab,7ba11092,14b12361,d935aa0c,9c7c27f8)
2128 Z8(818c494f,8c87c5f5,6086044a,d279fca2,12c66c97,53899ddc,0038e73b,f9e2dd55)
2129 Z8(c2b30d61,1cb23304,40a32246,a7e53f5f,45d7ca20,c99f98fa,ab373836,23cd7056)
2130 Z8(3a91ece8,2fe8cdd0,182b9e95,8e5b61a8,6d80e154,b0f75d36,b0ee01f9,137d7394)
2131 Z8(2a77e398,5089b706,bc3b12d4,79c4c9c1,7235d17d,5b764b6e,27edb848,f70dd20e)
2132 Z8(437e3e63,3bfcd1ed,74375121,7e57779f,de8409f8,47556467,41dd9965,2b349d90)
2133 Z8(d3f745e3,a445ef82,f1d378d4,64434ee6,3a836239,44d3ba2a,0fa99072,3e0c00d1)
2134 Z8(f379098d,0898e848,5bd31c53,6f2b16ca,2026d022,c371546f,3cb4709a,6a743a17)
2135 Z8(16c2d5fb,08972fed,3aa4281f,71ad5ee3,9260af03,47f7a77a,dca305af,1da2c02d)
2136 Z8(36f53ef5,3d796a38,e6decc33,9a2eb35e,fcafcbe4,a78ad89b,3a2ca467,df6ac43a)
2137 Z8(a9bb21bc,a348cd1d,d98209d9,11a913c9,1598cc9e,9702a1b9,05973c3a,361fb9c5)
2138 Z8(d80432c2,4165c7bd,b342e57e,aac11329,273d262c,e6e11661,192daa12,b0953172)
2139 Z8(352e528f,e1e70657,14a355e3,7090eddf,2c00f9c7,21a816d3,ee329cdd,88251ef7)
2140 Z8(b8e1fc4b,0f1b9410,400a8ad1,76847474,7294ac7e,1a2d1841,62bfbc57,f2c21ca5)
2141 Z8(b0639035,5ec44a54,09a95236,714a7c9e,3afe86ef,8a17e2fd,23ff409f,45815384)
2142 Z8(c7ba4ae6,b0ffe725,5ea2e235,059c156c,3cc708c9,5f172c93,fcafc902,156c57cd)
2143 Z8(7e13bc73,5d75ef6b,a7bd5c1a,f445617a,88caa926,cd960952,bd1f1e2a,52a2d6b3)
2144 Z8(55a5dd23,e433f83b,5d0bd8bf,c62f4f5d,946c3cfa,46b86973,26313b0f,7ae8b690)
2145 Z8(4d581964,b9ec2f26,37e8dca4,49766248,ff8894a7,876e30d3,32930d0b,1f6cfc43)
2146 Z8(2737b38c,c94f0b7b,396003d8,ab01e0fa,7e7da00a,689c0776,a8b99234,3818d033)
2147 Z8(edeae20e,ea569480,ba2c0c99,933c5f9f,a0cd9dfc,ebf8e83c,ae57f1d5,78ce29bd)
2148 Z8(2e718916,16fbe37a,c8eb5cde,f50e3581,413bf711,a86d5736,2272566c,532f5601)
2149 Z8(0cac3d0f,191205cd,dab17120,d69840ba,a4f2a13b,ccd8f380,3347b85e,93d293b6)
2150 Z8(588c63e0,1e1d1f30,445f8abf,bf3ac884,825e12ee,3be70d19,6932ca1d,c27b373d)
2151 Z8(93a157b3,8ce89d90,124053a0,7ca79de0,32783da5,34925764,7fa19c5d,39401b7f)
2152 Z8(7f382971,737585d2,ed9eaa6c,ad0d323b,44eefe22,2f99dc51,995b442b,d99fe7fe)
2153 Z8(06994dee,78a85d0f,cd645a0c,9e18dfc1,607f2092,9f7be76a,51a428cf,2411a470)
2154 Z8(f975b5fc,b48b8f17,278ffec9,c4bc0581,29e2132f,ed7af2a6,cb918ba2,da95b0d8)
2155 Z8(81a28e7a,2779e557,6ec1c814,102172dd,530f3c46,485f6280,31add9e5,19dbdfd6)
2156 Z8(52cf6e9c,1bb66f79,e1f590e9,20789a40,c8726c8c,3c61c8e8,cb942bea,21733b0e)
2157 Z8(ec687bce,c4ab9131,40b96824,486b9da5,39e8e72a,2a323f3e,eab7a0ea,857cb599)
2158 Z8(fd538e3b,3662ff8e,0860731b,c9a0154e,5b9b5985,74901953,a4cef002,277a1967)
2159 Z8(d3a6d916,da2024f9,46f7c1f3,3e7ea0df,75eff166,d2181f68,4802b376,2a3a97a2)
2160 Z8(b5402b40,84010c3e,40763314,924c8d3f,4cfe0984,2a6695e8,644a1f20,a84d3eaf)
2161 Z8(c9425a45,9bc29b0d,4feae866,c548b907,3a1000f3,f9b6bb5b,da3f6c02,0c13f26f)
2162 Z8(edf0756f,0914adfe,400aba1e,cdea208c,c85518a5,114bc957,5d4b7b9f,0a69dccf)
2163 Z8(1ad0f7d1,81034e21,38e75a60,0c9a4e1d,2732166d,2d8013c1,d777a532,72541d67)
2164 Z8(77212d52,30eca897,c8e460a5,6a24c54e,dcdffc74,6186f682,868b003d,840abced)
2165 Z8(43c93463,50e65aa1,00c925f4,c437083d,3942e172,8e436769,f49d2928,c2d66be5)
2166 Z8(c0b21149,8dcf8652,51e77a9a,006cc427,1a2c8679,c3018d2f,68ef8843,3e37e7ad)
2167 Z8(46d725dd,a241bdc6,571c58a2,28ca9e1f,90efc2b1,a21ec147,e2407f89,75756a26)
2168 Z8(1c178395,c85e4da9,42834b10,e99607fa,3f3e2571,4bbc19b6,1e578316,95ff2eac)
2169 Z8(a42d48e0,f2ae1f2d,0cf40674,1cdef8c2,aab10703,1a50076e,e77607ca,78a569b9)
2170 Z8(5e58d6eb,4414a090,1d9e63cc,6eec1dcd,af7ded6f,c69a0dce,230cde53,74037800)
2171 Z8(647e03bb,914d6387,3f5c92f0,be1fe916,a1cde46c,5afbd37c,549b2760,6978165b)
2172 Z8(fbe7b434,1d17f0a9,a6d39a5a,9a820a1c,9f171a36,70da6e14,3bc62d66,5ca0afe6)
2173 Z8(60b97847,715606af,fc8c4249,49f5290d,0a21605c,09eb18b4,fc5b6a86,652c9e0c)
2174 Z8(3faed52b,7d5d2b35,26e4e849,67612086,6e1dd4e0,bfa96af8,0e167036,7eaa8222)
2175 Z8(9d183300,02048316,e9d480a8,7f23e2d8,38f8377d,b2951c8f,07d4b9d8,fee5c725)
2176 Z8(1a778b41,b9503cef,1cd52dd3,40ecc838,64afd17f,d8a05947,8c84dce0,f9621bb8)
2177 Z8(02e54ec4,a781cc8e,c7377e54,8ee3f7d4,8efd4a54,f5819f66,51049100,ab457256)
2178 Z8(1d4ff1ef,26f79d63,d6422f25,19224b76,1ab9880e,632dcb68,62a7a660,8c20c25e)
2179 Z8(2471e8a4,3d1d524e,5adb256f,a7fad713,51aaf23e,ae9174be,539efeda,a0f3118b)
2180 Z8(6b787f8f,d8e2c96d,9d7c845e,1d9e129b,0532044f,a97197f6,76383982,401639d3)
2181 Z8(845e7f63,db71dcc2,4916f953,3b3da736,dfb21233,9b377014,b48b57e0,5c0a8220)
2182 Z8(2e9cf2ad,ab5e8284,7052bb8d,fee04a97,6afb9ae3,4c8df78f,1bf69d3a,f3f595bf)
2183 Z8(6c048d10,4856c153,a359e3e3,96982360,e99487a9,0906d719,c66845ed,5834604b)
2184 Z8(5450aee8,2aaa1858,9898ea3c,3b4ad1cb,a00e0a64,28ac90f1,682f5ac4,7cbcfc65)
2185 Z8(0a493f83,cbd007c1,3a20c286,eb06b537,2db94e01,78f12a45,0c434f6a,cbf54311)
2186 Z8(0535fc14,13eea8ac,86f9f9ff,738456ee,44fa0b8c,c1d45e0a,1a4fb556,b84184ed)
2187 Z8(9cd46952,7659ea5c,197ec220,ae1f74dd,d71195f7,352f27b4,3ee1f106,25eb97b0)
2188 Z8(9a668b3b,53967484,105a4f51,8167948b,9e85f206,54014f7d,a7c342ed,252bf954)
2189 Z8(8f6ea3ab,c88382d9,7e4697ce,c60cc582,33a62bec,2c7cfd38,d01bb4ca,f956177f)
2190 Z8(663a5817,717fe608,23a6befb,e2604bd9,507a8543,c0edfc38,099ebd1f,71d87f1a)
2191 Z8(8ab1eab4,edacc487,3b7a0e16,4cd211e9,603a3e26,938a851a,9668047c,ddcb01d0)
2192 Z8(3f478b11,852b74e8,5f979c17,588e63db,f17ed717,c189f86d,0035c1ad,14dc23a5)
2193 Z8(498da3ff,eea2c5e7,9bc5eff0,b935f7b3,69eeefbd,b68340fc,b501d34b,767af842)
2194 Z8(13d83d53,a34aac73,b21c438a,0631f3fa,10e83743,6ad0a041,100ef1c1,e55df455)
2195 Z8(cd8edfd9,ed117627,7a3d77bb,3c451aab,927dc80d,3dad611f,55c62293,548a802b)
2196 Z8(fd40c371,685bf20e,5fa02e9e,41d1db9d,d8ce9cd8,994664d3,0430d55e,c24bdfab)
2197 Z8(bd57a154,2ced1501,5726ede7,63dd18b9,99adce08,aa63a8ed,7adeb28d,f57487ba)
2198 Z8(de7e3454,d7d20d9a,b9f57918,4f50b4b4,59f929f8,2616b827,2852959f,92007bd3)
2199 Z8(bcfd1e9b,2d533014,62820f06,73c189c0,d50558ee,acdc1df7,2b9d4abc,bb9e0dc6)
2200 Z8(d4570ad0,c963f3e7,9c650a8a,a78a59b9,6be66334,f9083c54,ae15f530,5dfc3ea9)
2201 Z8(48263fce,2c450348,17a25bc7,e2f827a4,3095cd36,35bc0552,0b87dcab,aae7583d)
2202 Z8(3a963f67,a7b13502,bb784ee8,b9015eba,386f598a,d15f8c07,40f117b1,723f54c2)
2203 Z8(37acc48d,dc95cc04,e3f9b42e,84e869b9,6318a339,cb86ba93,f2b500fd,483d09b0)
2204 Z8(a39125fd,1e9db006,abad4db1,7d22b88e,a1e61c60,006b2a9d,ac0afce4,32421a3f)
2205 Z8(9c43331d,bc009e80,27e89d4f,8197fbd5,772baf18,94f914bf,b904ed83,9381c0a1)
2206 Z8(57fd3b3e,dbdeddb4,cfe63350,e74eb6c2,996c7009,f0135247,bc9911fc,2b2d3e24)
2207 Z8(8da2a3f7,81e09bca,52063acc,e1c37b1e,2daca98b,3d10150a,5c025c82,11f1403a)
2208 Z8(4b9cd773,7c14341d,d07cfa5d,58a6d96e,6c656a74,fc35517f,3dfb491f,f8461e8b)
2209 Z8(4bb00e27,7be6823b,9cf0d4cf,98a5c79e,9cecb731,351c050d,e1c063f2,870da919)
2210 Z8(5a822112,b8adb3e7,bcea51f6,427c548f,b566cd7f,3f321159,824b16c3,5a41d26f)
2211 Z8(47d654bd,1d8878f7,fca6c531,cfd9868d,a70672fa,6467fd61,695eab96,875afc20)
2212 Z8(4f3fdec2,eda583a5,3e26e27b,98957ebc,8e42549d,4ec61f7b,057a280f,0bc59bcd)
2213 Z8(341f8be9,c2585526,f82eadce,8ca4e2bc,69a0ce6d,1ebcc56b,7ba53da5,95d1e195)
2214 Z8(dc226c77,e0be2c30,83235658,2c9841cb,bef0b79f,bf4c04d4,9d85f809,ada71dbf)
2215 Z8(be361413,5123b07b,27480dd8,067346f0,162c387f,70a276dd,5f2f833f,9770cbc0)
2216 Z8(dc98fe7b,1257f51a,0ed35c93,aed1961a,d21435f0,e18f24ad,e3a1891b,30ffc5a0)
2217 Z8(f62ea4f3,78631060,c5e8af27,bc9fcc73,9c05f856,5b2430b6,302772af,5cba64d2)
2218 Z8(ad16ea47,491d5214,df52fc9f,95468e9e,af18ff74,c1c86162,b1e26aea,41e9d4c8)
2219 Z8(cddcef17,b0550189,eaf7eaa1,47cd8b08,88bbe782,303a3487,9390b4cd,c23180cf)
2220 Z8(64b1604b,0132fc92,bbba9e18,dbc11034,1a1469dd,df3be67f,ad06dfaf,9ea20bb6)
2221 Z8(5f2de789,c75faed7,dc965921,d5facb80,e1bcb915,cc4fce47,467e02e4,0449a3c6)
2222 Z8(99027a9f,4db24449,bb26de5b,736c0a4b,45cb86e8,b71f5af9,764c249d,5fba2962)
2223 Z8(825be11c,fa962062,1c8c0cf4,b7ac75c7,44d7228f,3fe0bb44,e36d8a25,b38a5066)
2224 Z8(3ef510f2,94a9df98,6d396803,7a20d1f8,e1e6828c,80b7c103,8388c5be,b0131156)
2225 Z8(c55b12d2,f244e2cb,25b6d049,6991ddcd,bec838e3,de5a3276,ccfc9f90,ff5bc085)
2226 Z8(64fc3f08,2af7e171,54dabf78,3fca648f,77f02480,e6192d8b,53512dc7,8f224b11)
2227 Z8(de288fd8,4a6c0d72,07cb577d,8f3a49b1,9a3002e4,88d933cb,a6afc5c3,88b3714e)
2228 Z8(ec72ef00,5a503ea8,3c25147a,2dea6aae,d4f0e561,59c78f17,a26d1fd1,909ebe47)
2229 Z8(18195bb6,76cfe046,65236b5e,082371d3,3dde6946,f945c6fe,58488395,5006e1d4)
2230 Z8(4939742e,973209f4,f0eac926,4de1bb87,f229b080,8dbfdb0e,cb251d54,014e718c)
2231 Z8(b4b52238,6654e1d1,b60a1b5f,29df90ab,b352e7b1,85b5d269,58ca98dd,112f56ad)
2232 Z8(76f8db93,e86b6318,b510f8ae,e10c6f5a,d6af7452,1cb3d2ec,e1284fd9,96be7ff8)
2233 Z8(87dc0b12,77e83b72,94147d82,4fba86ca,ccfcf808,d0beed36,4316521d,b0f2dfbe)
2234 Z8(88b0c35a,ed229f83,b54b45a0,7938b958,02315fab,fdfe00fb,4915b891,83565d8a)
2235 Z8(cd5107ed,98ec091a,a171a78b,ce05e3aa,a8d5405c,3d726a17,3ea46056,e2fc7ac4)
2236 Z8(0467d7b6,3f47f6db,0362363b,c94ee58b,896078ab,2695ea17,efa1ae2a,af19e783)
2237 Z8(41d2e363,d1152db0,997fce3a,b92e8c16,8d5cc645,6d5a8c93,6d83e585,b0540923)
2238 Z8(a52feecc,195d9f50,4c490c87,d7cbd120,e0e1539e,0cb1f323,aa48c726,8d98e93e)
2239 Z8(629e7f9c,90338ede,06af7200,ee638267,14946df8,7ea54a5b,e9f39858,01d648ef)
2240 Z8(446da695,ba46e56a,d6e62337,e01b48fa,a0ab7b9d,70bd203d,b5da39c0,fbb02610)
2241 Z8(0fdc2831,8a23f915,c17eeacf,b6c66c6f,ad7ae1b7,6de2320f,52055e24,d6b27f3d)
2242 Z8(6c78b99f,f157e43a,2b34206e,80ff74dc,269a93c0,ccf3e5d7,7a3f7ef0,0133b279)
2243 Z8(8e91bf42,963ee831,edd5b7b4,d02d9d93,3b21003c,120e2a45,f43cf487,a63512a3)
2244 Z8(13571a68,c6374440,44b9d321,0d3d9dec,989034f8,bfdfc91f,b2dbbc6d,cd76c0b2)
2245 Z8(72de0ba5,a3fa58d0,9e72bb1d,f2c13675,81626e1a,91745eb5,9bfb9616,f0f12e2c)
2246 Z8(f7e7e797,4249c36b,a42b8558,b1cbe40e,2b75566f,e43e8c4d,f779d109,2e1b828e)
2247 Z8(c2d10c8b,deccd12d,11a5201a,aabbc514,85a15792,57528a77,b4b5a2b6,1bcca4e0)
2248 Z8(ee932714,a0c91f9d,05c042b4,581d559f,d9de534e,c49cfb8c,c55a7214,d969033a)
2249 Z8(a9392c4e,62b71f04,a353ac8f,2652d083,fbb5c569,119c41c5,caf8ca1d,50fe7518)
2250 Z8(21826356,eee9d959,a29ae754,c03039e6,8899cb91,3fe537af,6747d614,3b4379f7)
2251 Z8(2360dbf3,faeefc22,e8fd9549,11d5c129,b409b454,f1586a5e,622caddb,3061a6f5)
2252 Z8(2102c616,00ff3eea,fa8c2076,264bd3d5,ae9f6920,18bb041d,a2c6d51e,788cbe2d)
2253 Z8(318de655,95f6ecf8,63844730,ff2fe4bb,f2fcb247,8b654b13,642de029,f95577a7)
2254 Z8(ff146da2,b5ec9b5b,f5ab4274,67059950,3c5cce48,23c866e7,d464ba6d,9fc4b60f)
2255 Z8(3c309fd5,7d2350e7,c488dd99,d56c938e,a3f48272,60ab5359,cb1dc14e,96873755)
2256 Z8(07b801d0,7581de52,62464483,475cf3c4,2019057d,ecf4ae0a,c1caa68b,d7fafa09)
2257 Z8(7e741a33,3db10c1d,b660933b,6bd02b8a,42a0b4ff,2b0c04ad,759df1b3,e08b7bc2)
2258 Z8(9df24d34,c06f416b,1b7cfe73,9b3f30a0,11aedb6b,8dad3fab,22fefaaa,dae03aca)
2259 Z8(966ab762,fb8d5419,dc5193a8,8c29c8a9,c91fe38f,e477870a,28642cee,7192ed74)
2260 Z8(9b38a28a,8bb196ee,eb6aac61,bed30b97,0fb7391f,9b78469b,e4e81fc1,54d27446)
2261 Z8(9deda7f5,b213b57c,4c0b52c5,6ee786a8,6f1bab06,0538aec1,56be3b1a,8591c213)
2262 Z8(8e31a81b,a852e1b8,a9899296,48c5dcb4,d24b0b3f,5cc6f79a,4b59b55b,9c83b0e5)
2263 Z8(6a482f45,609477f9,941f42d0,30d2dfda,989f8903,f29cfc2d,6df451f7,79528456)
2264 Z8(7242d0ca,ddf1b444,fcb19c1e,e54bb6df,cd474df6,75cf87a0,4b6817bd,f09167d5)
2265 Z8(7bda6303,2250337d,0b1762a9,ced990f2,5bb06ac1,5f58e589,47aee0f3,8f70471b)
2266 Z8(2d28ed86,0f5e636e,425c9da7,b6788626,c821e5aa,dafb5152,4b4f1317,46b85475)
2267 Z8(2a46b82b,bfc4d94e,a84bd986,6701d3e9,5ea59406,0c86cf5d,b48ea3ad,e103f3e0)
2268 Z8(5574292b,4be769d2,ff9cff09,27d03131,ad5776aa,e97f8e57,e49b270b,6cadc168)
2269 Z8(c110c296,140ff616,b5c9483f,1d8b9eb2,c5ac635c,cfcbe6c2,f06ec0cf,656dfa4c)
2270 Z8(edbb8761,3d3d1c39,5adfc86d,a0f65511,19c327b3,110a4d8a,658248d9,fa5af7e5)
2271 Z8(91b05a75,4d3d56ec,11291a4e,7845e62f,2dd465d6,5b075370,36894876,15330055)
2272 Z8(38e14c56,4fc09d7e,020803fc,cd5814b5,5b5fd022,6a8aaf20,a81f7623,bb723044)
2273 Z8(570bb090,c8e055fe,03d22e89,ad232d4c,0603803f,6669147e,0491cf4d,9ac96796)
2274 Z8(8e70fb57,f5474f7a,0372c652,ed6b06c0,8a986e91,9eac9b26,77070578,d9f36ddc)
2275 Z8(07a7d396,4e5dd11f,795e38ea,229bccba,95f1c990,de607c9a,f9d03973,542170da)
2276 Z8(b406da15,f15181e4,34308b8e,aababa66,cf3c9209,520614a5,6f78a1ba,dc4bd0c9)
2277 Z8(c11ca492,beffc79a,53dfbd80,3a6c39ea,f0c1cc22,59e252bb,e3f5236d,fd534c4f)
2278 Z8(c656a2d9,583cd0ef,d9f7dba1,fb4fe1f5,20a8969d,91b9292e,21d1c089,9379bee9)
2279 Z8(f45e23b6,f7123315,59d542a2,f0ec6c77,bbf2413c,33b0ac14,2ea189b4,885b8b42)
2280 Z8(e65dc555,1bf1d476,6620a1d3,b21610c7,357e8376,1d5237b1,1a80064d,060e0829)
2281 Z8(cc9922cd,cb01603f,1b323389,61fec952,138d8784,a6f46a71,240ac200,d5668b7a)
2282 Z8(beee5c17,97c53a1a,7a965253,56d47515,eee564be,4e0b3095,9378ab5f,b8467c1b)
2283 Z8(ed2cc6d5,7801a681,87d30fe7,4b6b46ee,04b092b0,a2933bff,ec937742,ac7a0116)
2284 Z8(35689c30,b7723c5d,cd493ff8,3700ab70,b6058125,955aade6,cfb6fb42,eb79c685)
2285 Z8(53a4212b,fa3c15b6,7e0bef29,62728386,d3fd081f,5a565035,fd7af5df,debae30c)
2286 Z8(4c5636ab,765757af,46981736,26c3cdf8,843aa7b6,fbb47b88,85ac881c,597df775)
2287 Z8(6e0e2301,7d850c67,d71a0b6b,9c4c7d01,a7e77db2,d873bd57,9d9cafa3,f52d70c9)
2288 Z8(61cdfb62,98c1dbff,8cb3a786,cfeb69af,4ffeabda,64c38ad9,14a84fd7,4e05f853)
2289 Z8(afc36a07,8a18776a,a3699c55,2fd4e9f1,28e89134,78fc0479,6dfa8837,dd4fa9e5)
2290 Z8(2a26c6ae,ebed9cd8,fd642e3e,f8ea8e77,3eb9436b,bbf35781,6973261d,ce85dabb)
2291 Z8(db0ffe6d,92422ff8,38f41a55,0eca36a8,2bbbce91,1a887996,50e6d18d,dd09a8ef)
2292 Z8(7fcbfcc4,d2516766,9c6f0b1e,100b05f5,e6643357,98f2be9a,b23a2884,9a1b3aee)
2293 Z8(b98a403e,b2a7e949,fbd05284,e8c4b007,bfd90336,11cf9e23,c430dfcb,e217da54)
2294 Z8(344c500e,a3210550,c9be789f,316a19d5,a36c2f05,c2724e2a,d4723b63,e342ac0e)
2295 Z8(95ffc577,2feb58d1,fd72456b,d98795f3,f7eb8aa0,8fa202cd,c1cdace0,a6512bcb)
2296 Z8(ee6c3510,3f18467e,6f667c02,ccf48294,39a98801,6d014eaa,c3801a58,902e4f7b)
2297 Z8(6425a843,d77adc5f,b59cc541,babdc104,4594f4a0,5372cd90,69b5e334,8a9f5fcb)
2298 Z8(d8b22b9d,7df95802,1bb90cfb,487f3960,73e89601,3cd12f68,25a4113c,91eb158b)
2299 Z8(1033875a,37870480,142598e8,2dadfac3,d101a54d,5e5d45da,594894b3,be92d057)
2300 Z8(61a8ba27,a0e4ff10,607015bb,2997e256,66cc746a,a7d88e0f,93d9dcde,86b271e4)
2301 Z8(2f3173e5,ec52f687,742d7f94,31433249,38e20620,96e15608,aea4d485,6fcca12e)
2302 Z8(603ca4b2,3917c9d1,43c21360,c913621f,7d16b296,0f5285d8,036f03f7,c9e70144)
2303 Z8(2fcd9aac,801ad177,8169a445,d6cb327d,24b4015a,092b78e6,b023a542,3d42b13a)
2304 Z8(71b85e47,a7efea1a,db1f31ad,0ef4111c,f076b4f5,1a299a26,2023390a,649b9e53)
2305 Z8(122b5351,831924ab,b4763b66,95795aac,b9710f3f,bff2adcf,4c98d891,a98e3744)
2306 Z8(a9cf1bf7,0aedaaa6,2b84f01b,dc1cd48d,b5d49c70,0fbfff1c,b1037813,83ef5071)
2307 Z8(0c745021,02d2cf18,b1cd4a62,e0d70865,d5571a9b,fba7fb13,4d57bde4,7bd5323f)
2308 Z8(6538f897,6717387e,62e50df8,e1841b31,0272f90a,1b532f27,ffda8362,f7d1438d)
2309 Z8(a1f1892d,5b635553,d1e929bb,a8217ce8,2fbd462c,11000ecc,4bca7708,78ad18de)
2310 Z8(484f592e,e1024daf,c368c496,7cf938f4,e88c49cc,39a8f8b6,af31c372,c074eea8)
2311 Z8(d4afb568,d03a8528,d27b7465,a79f939b,9c960792,51dc4a1e,ad9eb076,d05b2b01)
2312 Z8(8e00f590,da599125,8bb7eb9e,6fca0f88,23db1250,1da5ba0a,f31ba770,adf3da4a)
2313 Z8(2637fdcb,4d817cd8,25d36ec1,94a49d95,144911e6,4a41d43e,c7a17a8c,d4406ce3)
2314 Z8(4c6607b4,a908f4e2,67e9ed7f,a034c6d8,83856782,1b1fd48a,f9872163,75e91fd1)
2315 Z8(2b1af688,e6895bfa,c6b5142e,cb6e47fb,518eef77,11a940ae,2e94b1d4,84207108)
2316 Z8(62ed29f8,7540e6d4,c8cff5ac,97da875d,3c79dd92,d9e61408,646936b7,7debb96f)
2317 Z8(7c07a506,cfb86155,8180e8a3,bbbda89e,fa3063c1,ce5b4df1,763de9f4,00b4093c)
2318 Z8(a31ab712,91f8ad74,b6d5ecd3,c3e588e0,0a3e3734,096baf6f,ba78c906,fcf93a42)
2319 Z8(97d72d91,088a0a55,aa0f5039,3eb36083,fd6d278a,e8f5f0dd,fdffb5fb,77ccfe70)
2320 Z8(2ae559a7,647cbe20,35d1f916,e11235fc,6e6c1117,285db21f,8f0a1bbf,70138071)
2321 Z8(73d66e97,ef034598,1337c5f3,13f5b314,a17c8002,d7a4656e,4dc10948,1dc398b0)
2322 Z8(b63da69c,fa9457ec,b662d2e4,2f423160,bb07415f,cd060187,d1fe3f8c,1e3c90e0)
2323 Z8(5440b34e,1227293a,2c7f128d,9d6043ea,dc292628,3c46a502,6c560a93,a9f886da)
2324 Z8(c73d8c43,e5836e3a,2c5ef6ba,29d17e18,c84bf4e3,f72ae9f5,42ee8ead,e989be14)
2325 Z8(5309331c,bfdecfcc,6c592403,1a1c54ef,4235e2e8,4ab1c52f,b2c568d8,de1fcf5b)
2326 Z8(6028cd4b,03ac1451,9ccfc687,489c479e,23ff6fea,87ea71d6,0a99609d,5f01c27c)
2327 Z8(4924c3df,af09f359,d1798462,2369ffa7,77b1760b,e8674dc6,43b83d08,66b6fed8)
2328 Z8(7a38bf41,6d751999,1f4bc3b8,f16637ea,63eaf166,a17a3e88,728b6946,09f6c0d0)
2329 Z8(9b52b216,9afcc7f0,962897c0,eec881f8,8cea66e4,b6e891d2,d2b6f345,2456f093)
2330 Z8(5137257b,fa2b23d2,d5928e54,7a3e0e19,8a65612b,6bfb99f7,ab2c5ab6,85e4d0af)
2331 Z8(5f1f9ee1,fd1a8794,b44d30b0,8becdc24,57009891,e568e6fa,1e4789f9,818ba0a5)
2332 Z8(066617b3,a3bedc0f,7c6c9df5,dfd011ad,98ae348b,0afbd340,936c4a56,8a6f8120)
2333 Z8(27fb4176,d48c6c05,9414a3ae,41f4917d,7d47cfd5,f8da0361,c0bd78ad,5dd57127)
2334 Z8(8a9ef961,ac3e364d,e1eae686,ef32db36,afc920ea,a7b95040,af4e640c,ffdc3d19)
2335 Z8(ead9401c,e2552bec,7be8235b,d1e09ca9,04f7034a,b036e70a,3abe790f,7819f0e2)
2336 Z8(a5782fae,dedec677,05eb6cff,59cdd56d,5c2ca135,ffb121a4,06e5bd27,e86b485b)
2337 Z8(2ccb7e23,a12dd97b,f1199982,9eb4ccdd,525375c7,1c6726dc,e155f8be,46e56c9d)
2338 Z8(56080695,ae816ebe,99149abd,ae389dbb,7bee9169,6d383962,e5af7fdb,f5711db8)
2339 Z8(bbdbd718,93129a63,dc6db1e3,91f345e7,22f72c53,a87a9df2,dfb0fcb1,e54f7a60)
2340 Z8(ee82f3ed,f3ee3b73,63b57aa9,6e596d88,ef137123,e4a5cb66,43d78a16,27c4ca85)
2341 Z8(3e4d4358,63433d2d,184eafe7,3ebcd3ef,60f903e1,25430744,7b6ec3eb,61de2e59)
2342 Z8(0e3105e2,87853efa,4728ff00,c4d97a75,6f010c0a,54d06da7,d0c19406,dcc9d37f)
2343 Z8(4767110f,ac72f22e,77774ead,e6f15a6d,095aef62,48945e6d,79632c86,c970d366)
2344 Z8(768c3ce0,ff2539b1,f79ef023,0b9413da,b0cf2ad7,a89b3d95,0bb2875a,5727afec)
2345 Z8(75440989,16e64272,e9162d48,ac09b365,2ee66510,dcb7c72a,b216cb8f,762d9aec)
2346 Z8(7259530f,83533aa0,08689368,00e8e86d,eeaaecb1,0d00f8b8,a582df38,77c5e11c)
2347 Z8(9411b922,4fb182ca,afc990ed,c6f0ee66,8b4cc790,1943cc5f,110d991c,ebb2dfad)
2348 Z8(6f752895,25ce0e0b,8bf752f5,a57a3fc9,4fc6eedd,0d9c2354,860c1d11,2fbfe907)
2349 Z8(77c15548,8a1800f3,39882822,44e386ca,bf0987bb,602049a5,157d2b88,9b11a3f0)
2350 Z8(cfc5ee1b,b35141bf,91be484d,8f551c4a,ed07612b,92584c70,a69f2299,01c3f41b)
2351 Z8(5acdab56,7b472e1f,7b93f306,a09b169b,cc77c271,98ef926f,422e4759,cb1be915)
2352 Z8(1376d45e,cff0fc80,dd425f2f,0929f3ad,03abe71a,7191d105,5215bfcc,5062a7e4)
2353 Z8(791c4e95,67442cbd,056e5380,2628a545,42a708ba,9e71ec5e,9a5bb933,e1a3f85f)
2354 Z8(d9d47ddd,bdf4ff77,400fae64,e9c056c6,179e2546,d4cb8ea3,477ae50e,b5a49130)
2355 Z8(797af702,992dcb34,9c565796,8c87accc,b85d30b7,e87a150b,a37a6f21,9045d361)
2356 Z8(06f07e60,b0c306ba,08df25be,25686351,7f97299d,2e141046,97faa978,a58b6c29)
2357 Z8(b80a2d6c,f1713abf,c3261afc,931e79c2,484d9b3a,262a1051,a4f0e129,ebf7169f)
2358 Z8(6f552a9b,35492e1d,99fcf251,edd3c08c,bbf622f0,bcb9acbf,a14fb1b0,11a69283)
2359 Z8(95e247fd,6db45dca,377fedac,39d022c1,296bdf6d,784e28fa,cb33b900,1c829ddd)
2360 Z8(f6ad64ce,c625bd30,a7c81f59,c1467b9d,7a4c54ff,e7169e99,2f859e9b,bac693a8)
2361 Z8(c328dd95,ec22a15f,952521e6,e4d3d933,1394fee8,033e0fe9,f19ff770,65cef723)
2362 Z8(2b9b511b,e9525a7b,d836d2aa,5feda65f,b80e4327,1b77bdc3,3ad2cf1d,bd5e5374)
2363 Z8(076e0644,37d3c42b,73c1fcc7,ee7de54e,c94b46cf,ac72d9a8,125e1ca1,db70d06a)
2364 Z8(9eef6981,ce260aae,bded63aa,4213d437,bdf7f302,7e8a258a,2c3a852f,19a5d281)
2365 Z8(cbfd7b93,4a3ac6f1,fa2ce09b,dd164031,958e49b3,328a0858,1d423a0b,df960ee6)
2366 Z8(2f71223b,d1a3f3ea,4ef7ed40,4f1d1158,0003c862,30e38c17,90cefe16,ba78c602)
2367 Z8(5f0b79dd,3f2e557f,a980581a,587f07ff,26c2b7bf,185a9759,a09b0715,48f05fd1)
2368 Z8(5f2446a8,a2e414b3,24cdd67d,d2f5fa00,f100bca0,4aab98b2,976addd7,8daae11e)
2369 Z8(e3a544dc,ccc5b710,eb917f74,cad531a6,483c0438,2abce623,a1a856c3,778e07e3)
2370 Z8(aa872f4d,07cf0bd8,b014a636,fa8dca70,9837517f,2d0d7184,0ca860cf,493a5b7a)
2371 Z8(20b9f5fb,f0b17bce,70476178,406c4c56,32e6029f,8023345f,9e0f3ff2,8b4d00cf)
2372 Z8(e1acb9d4,55e63cdb,27c57f6e,46159818,413ca327,0d45525d,9195a487,7ee6f16a)
2373 Z8(b38455e2,af229323,a905030a,763ed744,00d4e1f2,d09896c7,f9d09438,c9dcc6a6)
2374 Z8(78e3d613,953891b0,70055d2a,c7cac96b,06c4274c,5545ef4e,38cb9aba,357a92ee)
2375 Z8(796a885a,debb772e,7d6a9570,847204e0,603a675c,da4e7170,3e26ac69,ba405d33)
2376 Z8(92cd16e3,34faec15,eb9be7d9,45753d7e,a20dce93,c32d8ad0,0e2c1e8d,2f3d80e6)
2377 Z8(dfba610b,763c8bf3,6c1d6e2e,0372174b,54efbedb,7fdc684a,e2101862,ca474688)
2378 Z8(0e8c6ed9,fb81cd41,95a0cca3,a6bb8177,e9deb217,3e650ad1,084c914a,889acef5)
2379 Z8(fbde23f7,935d635e,66f21562,4a0f57cd,7b95144b,4a94272c,d0506a75,64fe41aa)
2380 Z8(cc333293,688e8c55,3b6483d5,abefe4d0,90b7ab9d,156328d5,19e2c0be,d7ad5c2f)
2381 Z8(62f75217,cfa80be4,d04570da,bcb772b5,e992da56,95a70d07,4e566505,a69f866e)
2382 Z8(a5269c45,050aab33,d7e361d6,87c14c2f,d54433d4,9e7116a0,dc2d5ea1,1a542522)
2383 Z8(66f8c9bb,c53c45b6,5b6225ab,32552fb8,69f881ae,b85c542d,a4ee61e0,2d5dc702)
2384 Z8(cf132337,84ce62ce,4664dc49,2cae07b5,27c33114,2bad602b,c42365e5,16f4b675)
2385 Z8(377b939a,9aa53c88,f34a1414,cbc0a619,6e741484,ff4c3987,d6f9be21,6085995d)
2386 Z8(9a1ed953,4f801b5e,3e008a3d,249322bc,a38ad1f6,5c73b9af,8c87b7c4,30b3719c)
2387 Z8(33845d54,1b275047,a79d10bd,9c649524,70592812,690c9801,c0381ce8,dc9cb39e)
2388 Z8(40773637,dfbd208b,5e834522,aa9b747a,5c6a2284,71a51e40,d7168a4d,9732bcea)
2389 Z8(9eceef7d,6c7d9378,f1aeac0a,b0746ddc,3dd3fb6e,f23ec644,5628ee6d,21dbceda)
2390 Z8(36b0c89f,148c7cb5,2ecfadc7,dd68b519,20bcde90,bd161211,ea198089,ce92fe1c)
2391 Z8(b8133cd8,d7b4afd4,1a5a797c,2881e7a4,7d092188,c079f617,d2568d36,f910788e)
2392 Z8(49d92407,c895ac04,f6f86016,441f966c,ea25bbb5,1bda6655,35614bfb,fd2cb96f)
2393 Z8(8ff4bc9c,fcedbaf2,f14c2cb3,7b95a096,161a4ae6,78ad5842,0183b80e,99a56c90)
2394 Z8(724b6ae2,6ce4b9db,cf0bfb24,35140fa8,65e9da8e,1af051d1,6f41ffd1,05588cb9)
2395 Z8(2ef27cc0,5a155cf0,d9f1a979,05bb443c,5341738d,a73e91de,27f77a59,3f47cae6)
2396 Z8(116d9171,2f6d5c66,240d6c2c,61c9a399,2c091e95,13182a2e,43eabe2f,38f9cefc)
2397 Z8(42e05d64,e2277056,14e88f9a,4ab3fa95,c7739240,7c34dcaf,855c739e,0cabb4d3)
2398 Z8(62ebf381,51bd9ed3,9a10bd6e,7b75f42c,d2062109,e9617bcc,eb967590,34e119b5)
2399 Z8(a558d929,b8e1bb97,c5e8734e,43d20c78,aa17a975,b8332671,641bb653,f0e21ee4)
2400 Z8(ac99bc46,471d1d3d,dba61f78,44a099ef,8e73be93,1fce56b3,e63d0ab0,1d9a5f47)
2401 Z8(5e6ba13e,85800d4a,43bd7080,e6ad6405,745aab25,1d4cadac,25517d6b,b2539f28)
2402 Z8(fc9f6c09,2321114f,3959d0b9,e6e6607e,ec2b8985,e051d233,e5efb715,7d647d92)
2403 Z8(e3641b02,3de81bda,2f4902dd,e4bdf9ad,2b49f9ff,b65f8d71,2df65e23,fd0aa30d)
2404 Z8(f965fc03,8528d9ed,0fa6370d,aa5626b2,df6ac5dc,3b011248,a546d951,b112196b)
2405 Z8(260b89f4,03ef0786,b0b12348,b4eb6cc3,9b77d3a9,899facbb,2369d688,3762dc4e)
2406 Z8(1c418a52,fdc2d958,fef1d902,e5db4a5e,096f2649,f6bab61b,a3ac7d95,a7650642)
2407 Z8(4e3e7bfe,b5013c38,025187d2,f8edaaf7,c3d508dd,b8ae6f4c,c399abcb,8b9a41e3)
2408 Z8(c8ce20f9,3ea85da0,2ed21a61,16eb9831,364d7eee,3d0e4f1a,3580ca1e,f8adac0d)
2409 Z8(49e965f2,6fa069e7,52a93a5e,7bdecfb1,3299b4de,b0566aa2,1023b459,19116d8e)
2410 Z8(13aa621d,b352198e,a7071d88,2c30b93a,ba3b9428,9bfdb470,d68970b4,68b741e6)
2411 Z8(c679e7b4,03b9b399,be381086,ab8b318c,da0d97d3,3f75a798,4bb04cc9,bb9fb5e8)
2412 Z8(ad52e737,bf14eb2b,7a0a8341,731b3c4e,db1e859a,40fed235,57656752,e4142c6b)
2413 Z8(8e1e2860,7efe471c,93feaf75,db80bf6f,b1538de9,ed9a6880,f850f9b2,2c0153fc)
2414 Z8(ffa248dc,8c827fee,58b0e672,4cf97837,798eb238,b692a0b3,edc0d6c8,21c53cfe)
2415 Z8(e1b7264f,cf471610,5f5d003e,b0629220,38a5f3c5,5c665e28,1c8dac5c,72277dbc)
2416 Z8(7eef04dc,b6955168,ebd4336d,d835c16f,95d14bf9,64145c09,4610f87f,66002690)
2417 Z8(2e7df485,0dcfe433,954d4858,c34f97eb,a1611387,47a15967,5a0e4ade,2f30a4c0)
2418 Z8(ccae53cc,58073f55,c8c36793,efbfeb82,0bc4ebed,4ade7c73,880266f3,baee76e7)
2419 Z8(0c2ca287,5f93bd53,5572fd19,0cc156d6,85a43491,45116f40,bc90311a,8693c37d)
2420 Z8(c093c432,5e957293,4746f80a,5f95dbf0,65433a4e,068ab477,baca87b3,92f33fc2)
2421 Z8(f4e0e8a3,76da80d9,a6e6c6a9,ce8970aa,91bf0837,623989d3,40ed43e1,15c1e850)
2422 Z8(a1171a39,b4bbde9c,60cc7489,007e7d9c,1eda56b4,dfcf2460,0a40a1d7,90724102)
2423 Z8(e4618fd5,aa215215,624d407b,b8225c9d,e038672b,ac018e35,039d3e2c,b86f736f)
2424 Z8(060ae3b1,2c5bcf3a,b5aa3377,3a90dca7,54f1b8d1,7af09fb6,c9732065,652bb747)
2425 Z8(e7e16ecf,caf62f64,7493a521,4280488f,c750bff6,d9e2ec57,acae33a4,0a890cf1)
2426 Z8(44a186da,8e986808,5817e290,a1980eff,5c95e9c7,d64f2ee1,40fcf79a,d81b9a3d)
2427 Z8(2921f92f,a526dfe6,d95fa4b8,85916152,0236d639,f409129d,8b703963,c516d825)
2428 Z8(8e46c5ee,eef8a59b,1e1c2b79,7d5a821f,f2d309c4,b8296629,0f986c65,17a47959)
2429 Z8(64efed58,97d79567,e845f856,51623b4c,56fcd505,40fdb1eb,30d2010a,3b48f14d)
2430 Z8(f5cd52fb,a54ad888,a200cbeb,50b41664,c63e4671,3e4158e6,3f3c6a98,6eec0125)
2431 Z8(0ca79e87,65245f6e,de0dc5cf,be8f4020,71a3e350,d9b78f04,419beab4,00266ec7)
2432 Z8(21bdc6a0,0e25e897,697e9293,9036d94f,8a8e8281,ef1c1605,1d21eb26,ace98c2e)
2433 Z8(c6a73ac5,153485d7,c5b1cc83,5f00c5a2,1ed599fe,6ceac9cf,2419d0af,adf7a49f)
2434 Z8(6e15c9d3,e9b98fa0,59bfe9b8,5d6a33ac,543ecd12,f7d98716,ba9b7aff,bb4d7936)
2435 Z8(88a3bfdc,0c333453,82a01bc4,adfcd18f,28671be0,2d43e205,598cbe14,640db20f)
2436 Z8(baefc57d,e86d152a,28b0b822,7905d0e8,9905d037,39e4bb3b,0bac4a14,689cc2e0)
2437 Z8(d20d3bdc,fedb827e,a0114b62,c2c72952,6be313cf,786ec11b,bb39cf8c,d128d10c)
2438 Z8(d500d868,72796ef6,c28397e4,8a31e818,344d3122,1907f7b4,d851959c,42096ded)
2439 Z8(f37a41d9,d623633b,a1e672dd,dfff72f3,9bcdf744,9116fc77,51ca3fc9,d75c41ea)
2440 Z8(3e8e35f2,98031d1a,254abc72,0e65b2c7,10f025d0,bd64640f,752f55b1,242e9023)
2441 Z8(1b13bb21,ebe86252,d6e8744f,7787dedb,c2f53f07,3fb1e045,777cf11f,d02e8b19)
2442 Z8(b97dd591,c2c36c61,38bcdf7a,1f256273,3c20376b,a6dc2196,be1a8454,5392cd8a)
2443 Z8(23f37b4d,c63b5c29,e5557418,33de32ce,e4241815,2d5edf0f,e9325e6c,b234d140)
2444 Z8(fffab36a,4dc8a765,91264e41,10f9624a,31896303,d8a64ac5,14c70836,61ad6c55)
2445 Z8(81ee5e90,733c6757,608b33db,d2e2d194,85191cc5,d6d3d470,1c8750c3,17ac5f93)
2446 Z8(f905a539,7441cda2,97b5b17d,ef67a51c,1c8d2c8e,20345ec3,480fc388,64de21a8)
2447 Z8(48c4d433,14bf6797,56166eb7,3531d0e5,4defa236,8c9b4bfe,442efdb8,d7d88ea6)
2448 Z8(52b21696,528b1e2e,2d186a64,dc06756a,5ccf8451,dbb362af,8cce3747,37a24e6a)
2449 Z8(6c2ef6b0,14842df2,4ec0f9b8,2a33f3be,12d353d3,bcef539d,6fffe7c4,2112a49d)
2450 Z8(8ee32558,63542e08,e1f3d94e,61899086,b0829783,093e1d69,cc605ff5,5947c529)
2451 Z8(bb601eb4,b16366b7,d20e52ca,02062e9c,2490da4c,b9ff1ae9,b4a216b0,aae2e5bb)
2452 Z8(2a493b17,b1d57457,e06ddef6,90daae5d,155fb454,9e717ff3,95271f99,f778893a)
2453 Z8(7ae5d8f4,18ca0e6e,1083822f,7d2012c0,d5d6d8f0,48d649e8,c8abca07,3892fdcc)
2454 Z8(3aa5ef04,3c373bb6,0d7cb031,9e093301,1044d707,b7a9f58c,4724f3d0,f1eae917)
2455 Z8(643f9d82,8f0bf98a,88ccfe26,0f4dee43,8759907e,2fccc86d,42cc28eb,933e0866)
2456 Z8(5065ba8f,2b56477e,947bfb3b,96a911bc,91f1d81a,03b4503f,530fc162,429c2ecd)
2457 Z8(c93b2762,d01d3980,6425dfac,8b42076b,8cb914d0,fbf3f6e0,7d3a7780,83d775aa)
2458 Z8(aaeb5f46,24a1313e,8a993cee,37a37e79,b5c98bb1,11fb4c25,1c388e5f,09641f78)
2459 Z8(8899457c,51b5610c,006d3c78,bd3fe9cd,15ffa51b,4a3828ba,9e016ae4,ecbd7a28)
2460 Z8(0350da4a,66ef0687,c1144074,c2aca536,7aa09696,b078a13b,3c21c225,5bdd7f91)
2461 Z8(b0b9e0e7,1ee48e7d,5b7e08c0,917c8a41,c695d8d4,63afa2b8,fe72a718,47acf453)
2462 Z8(d7ac9057,cb2fc73a,fa5b2c54,373b4c43,e6c95f3d,58fd4506,5eea6f81,b670bea9)
2463 Z8(abb500b8,cb1bccfd,7069f622,43c63df5,5ea568a7,0ac41139,97d4b4f2,707d8a45)
2464 Z8(76cc415d,c5af1198,844cb095,6f027ceb,3ac4b6e0,2083809d,d57b47a6,a9ac30be)
2465 Z8(9088c2c8,81c5d5aa,8b6ad0ca,6017f943,593af066,4784a26d,ea34c41f,5d658178)
2466 Z8(3aef813c,47cdac4b,b2580b90,f8c353c8,285089c8,b0ac52bc,3191ac56,0c4e0870)
2467 Z8(d8f26dca,cb44eaed,6cf71ade,1a9102ad,3d56711f,b8cf7e96,bf9395df,007785dd)
2468 Z8(4f0fa133,265be9a5,3c721c58,8127e70d,8036f2bc,c91c8b5e,b364a074,09c27921)
2469 Z8(fa9fbef3,7cd0e4d5,6837e641,f2af9439,14428b6d,a00840ed,d933e219,ca315194)
2470 Z8(80dc57ce,22e84ff7,91ec6f88,26a3d922,249cf590,558141b5,d1da09f3,783110fb)
2471 Z8(f33f24df,6395f731,2d814f65,9845f9e7,88a1e8f1,da0cd423,20aa833f,a9f9ca61)
2472 Z8(c6dbcfba,b845a7e0,065be030,9d6a8839,899b6b14,e81e2dc5,7a732fd8,59959326)
2473 Z8(84727387,9a580f07,8617bf55,6a18a118,8b63b0d1,387240cc,c6d78433,0b0b1cb7)
2474 Z8(e5f1752c,35237e67,da6ebbfb,deb51086,12223aac,a14f98ed,f447a243,349bbae6)
2475 Z8(053c74c3,23c26791,237e89ce,72f9f742,b17a7d4c,98c9eafc,d9c897d4,268764e2)
2476 Z8(3b8f57a5,39d732f5,a78a05a5,5463369e,8e689aae,47739cac,c6010098,9e6e8d0b)
2477 Z8(58f13f59,d4b41b3a,092c6c64,f0a3f218,be6e6774,bb741d86,a65a9d22,6ea4f224)
2478 Z8(764b7e32,418952e4,6e120f1b,e9eddcf6,ad1d6506,8751a5a1,0c9319c1,5ebcf0eb)
2479 Z8(d7d2a328,72a31f86,745c0b15,50e0dd97,750d31fd,74dd51cf,6bbf8d3a,1ebb5cd6)
2480 Z8(69ba8070,a862c2fd,a48e8dfe,93951e81,b56f7dcb,aef939a8,5613850d,d9f61827)
2481 Z8(341ef7d9,4c8a8a58,068ba76e,eb771978,fbac59f0,c0ed8281,ca09768e,56ed7585)
2482 Z8(83d0cf75,292bafe9,2832df7c,063c57fe,cec29804,2b0db64c,d32dd8ec,f3e48d0e)
2483 Z8(6bd1a582,c69460c4,997976a2,460099d8,9ab1a6e6,a175baa1,3c79a9f4,bdb51a59)
2484 Z8(09e6844b,0b74e21b,fee26581,a9515711,66c864eb,9fb1f926,b1b05537,31f6ced1)
2485 Z8(1d099880,b8297a30,055c6bcb,7d47ee8f,c93922e9,a0cd222a,c0606acd,f2aac943)
2486 Z8(442ebafc,889aa107,fce93189,7b3673c4,877254c0,8e5dc037,769f62f3,091fbb2c)
2487 Z8(c1d09294,d23f29a6,e9841586,f2428640,c73607cb,8ef53bc2,225b0741,069127ae)
2488 Z8(2f788c47,8aae5807,1203a9ec,1b793e84,94e2e724,f8eaf401,b96c86e9,3dcacb97)
2489 Z8(e5f9cb82,860aae79,fe21f1af,027f0223,f41589d1,e039ec5a,5e6e6677,06831b9d)
2490 Z8(db3b757b,7057679e,6ed829aa,7c8c383c,55288c4c,05f688fb,e2153642,6f8e019e)
2491 Z8(5d260f85,c620cd1a,b064a431,928c6016,3b8383cd,4984ee88,d0bddb9d,25af0332)
2492 Z8(d9ab8c9c,f89e2e62,62b6d795,8efe373f,add42122,1ea2e9ba,b6a8efab,6c7dcc55)
2493 Z8(dc438025,9b4185be,3881647c,217200f4,761f4754,eee4437c,bcd8ee36,0e0de0aa)
2494 Z8(986bed93,a5e3d35c,8fe2ae08,ebe7d2d3,fa0a3fec,699b18f1,fda51671,3e6f4ac4)
2495 Z8(bd49d4b4,810eef13,8469a875,7610f801,38b094ef,130799bf,90b4adea,6d74e8df)
2496 Z8(5e23e245,1b042486,e3e5ded0,954916b5,d2a3d027,58b9c46b,c00df9e4,bbac988c)
2497 Z8(e81ff2f5,65602033,80f00af8,1b02036f,d60d674a,82c2170e,0fa2bdce,f2645f7d)
2498 Z8(3fa3c22a,0c7af46e,7cab598a,71c94701,a65e2dfb,05d9b554,2da1d119,f97d4674)
2499 Z8(b48ddc27,9c86e488,9f67c22d,c8ccc3df,c256ee80,bffac15d,bae6cab0,98b013a3)
2500 Z8(6973b3e8,67ab6b1f,b84652b0,0f9ceb99,75e81ae8,b2d5552d,22b3dac6,013532dd)
2501 Z8(24e01427,be5551f9,fff5a123,fc836f31,af385315,9bf9e9f2,72f43017,1f9eaa6f)
2502 Z8(806fa86a,819cff7e,fe962aa9,e02824e7,7062e2fd,00a4f49a,52be905d,a049aa31)
2503 Z8(967f2743,d685468d,4d77cfd1,6771ee06,e7724a29,9b96e0a6,d663b65b,ff138a12)
2504 Z8(4359d077,80d8e55d,022230d0,e6bb0427,1fcfd8d6,c07bf262,bada1359,f29e3480)
2505 Z8(c8762f55,7a6a18b7,99000ce6,1acd4a7d,9b2f74ee,3789c5bc,facfe46e,ca638068)
2506 Z8(d17919b3,4918b1ec,9ffe10a7,f1a46e96,34d129e0,182609fe,f845e1cd,74462897)
2507 Z8(ff9ecc6e,a6b18b1b,2cd6d010,24291371,55e6e609,141f515e,3018eacb,8ea1b526)
2508 Z8(f630218e,2f6da052,8e04d3a7,d03556f2,844bf085,acb85b11,f0a53e02,d0d5e59c)
2509 Z8(06ac449f,cdb9f0a8,94c7957a,a378fd3d,8d544cae,79945a87,9d02a803,7d9e6b1c)
2510 Z8(13977c1c,a245175f,89085d9b,086e9d46,e69d5a0c,ec29d84e,19ec2c62,9bca449a)
2511 Z8(48bf61b1,95df6774,edb91f61,5d9c140f,23550f43,34fda29c,25c7276d,963ad5d2)
2512 Z8(8bd4c1d9,889f4fda,3e30e0a9,db7a7f02,1722a79a,47511164,63343d1d,80b08cce)
2513 Z8(2eb04809,811b1307,1ea35f12,7614121e,5dfc1a02,28771c85,e418ec25,0c1d0e1c)
2514 Z8(66e7bf78,cc8ac8f0,ce03c1fe,c471fff6,0372437e,46aa089c,a32668b1,c5706bb2)
2515 Z8(dbf6d062,c4015746,fba87a8e,a2cdcb10,fd35946c,a3025ac8,36bb0c67,e741a113)
2516 Z8(3ede39db,ab59169c,9b7e1421,1d9e2bd5,9f4ce05d,034c11ab,1eb33550,285c84ea)
2517 Z8(42afe364,8fbde714,0437d164,266ccf51,40d899a8,a95fd0ee,0a09f960,3d6c1366)
2518 Z8(567de8de,036c9679,72fec915,cf7d7da6,6ad8b210,ed1fec6c,5159626d,afa06bb4)
2519 Z8(047d0157,b27d2fd7,02788995,baf1bf4f,36969a6c,949ba3a8,7b7674db,6b83e67c)
2520 Z8(4c7532ec,e0e38fde,e2e7eb76,01bdc212,eadead1f,ea694993,44eb271b,c72b3176)
2521 Z8(b55b0757,84ba2992,6f0d4902,2a129aa5,e549c413,d78943db,55e68864,a4c8051b)
2522 Z8(28fb484b,5fd07fe3,1cee0791,c7e3cb5a,8a433e16,2d5a341f,7b0864af,503416ae)
2523 Z8(ac28dc4e,41b348ea,4867f571,81199df4,1bd93bc8,5dd917f0,1d7e2eff,2394dee7)
2524 Z8(7cdf7c55,97fbe543,df8cfc98,9b059eae,1155775e,1718de8e,0bcafeeb,f57e9655)
2525 Z8(9a9f25f6,d62613d5,2fff2858,59bd8c30,890e5a68,1dcd7e96,3a407b9c,18af433c)
2526 Z8(353591f0,a2e49a11,420724fe,892e52e5,42ad9e0c,aafc2061,03dba901,92e156a0)
2527 Z8(b7fae92b,845b91d4,e0cfa63e,3b7010d8,2d1729b2,b847deec,56426835,9536ad2d)
2528 Z8(7ebc8d61,72d16945,322e885b,a8f29bba,55a3518e,a797b1dd,d0805454,40d0d229)
2529 Z8(00f1e47f,ba1439af,0ce391be,5828dd2a,4bf0b73a,eef28aad,12383671,0606b905)
2530 Z8(5f3b9553,b5878241,72ad6473,cd4538cc,6bb142c5,5efbd767,221fec8d,4a222b77)
2531 Z8(51ab79d8,2857afd2,fb64aa39,47822e76,699e33ee,f46f931c,ccb53267,bf368bc5)
2532 Z8(caceea02,9526785e,2a910532,5a98ee8e,0cb44051,257801a1,f764355e,b3839e9d)
2533 Z8(94b779c0,5b833a1c,653b83c1,3577441b,d4ce6488,d456ab6a,5412ba6d,e0d740c4)
2534 Z8(425324ef,b556acc8,0b5d9925,b688bd3c,face3e50,26338b7e,ce6c4039,4ad42eda)
2535 Z8(c6f8e91a,55c0fb16,8f0f056b,a4df39ff,c63cf98d,499e1a49,f64fb205,960a20df)
2536 Z8(b1f9cd81,221e82ce,853b435d,085e6382,b106b7bd,c1aa9afc,8acbebf4,06bd4bba)
2537 Z8(9bf4a4d9,351dc11c,1d82919f,5bb6b959,3c2776ae,8d6d7c27,d8d0dbf9,63ef2a26)
2538 Z8(fc94f734,57767da3,dd2b2213,2b88d46d,f7ba9a51,85ee2b2e,ac1f6ad5,adeab1bf)
2539 Z8(9701d6f2,feeb1c62,59c20537,e49a9555,a24db612,72ca9898,904a2ca8,fea97efb)
2540 Z8(61744383,5422b5ec,b5a6032a,60b8413e,322fd0f3,58e16a2f,95e09aa8,077d05cc)
2541 Z8(a252c846,ea1e89d8,6bbf4064,2a493cd4,cd6b5ddc,1dcb2791,f305e52c,6cf68aa8)
2542 Z8(82a5aa1e,3d7a8ac3,d4d04c1d,06ea1c11,30cd1210,aa2d9d94,a8c08a63,4797a28e)
2543 Z8(759ab934,c8234314,4caed4f8,662665cf,70c8f888,a98b90e9,06146f1d,3000e784)
2544 Z8(cd2f3da8,d0074d5b,a42137e7,96234295,2ae13d13,e54cd16c,e36ba645,f52c8cd2)
2545 Z8(b858b4e7,089614e8,92fa21a6,a8640749,d423f1e8,3e8a4b7b,464ff83b,71f74b7c)
2546 Z8(4922beb8,30317100,d1175b84,4a34b019,f7a3d15a,06a38e01,58eee977,fc3f13e0)
2547 Z8(434e1a0f,e3756d3b,20c3f3ba,26f21bb7,6e210a00,6aadcf39,4ee1d26d,6a1f9eb0)
2548 Z8(9cb172b7,88d3c875,c53e5c08,2c8cb9b5,454c4284,b00dfd11,904d0464,439eda07)
2549 Z8(fbf07a3c,02bfd1ea,d47898c4,c8a7d5b8,4992f83c,6a2c5842,ac30dcc2,c60d4b3c)
2550 Z8(1855fa10,027c8f7f,4413cd25,4f0010d6,44c841f2,52ea70f5,b8ab2445,54343f7d)
2551 Z8(21528c07,9ba3fc6d,6dd3fd30,b1621276,2755a87a,71c2154f,c26a3b0a,0b01767e)
2552 Z8(f0b7d4eb,be719f12,07744c3f,b5dd45be,e566ad3c,33677009,fa0cd9f1,6913dc64)
2553 Z8(c756cec9,49848de7,84b4aa2e,f0e5a54d,629cc6c1,47d47c14,3eec7e6d,904c4f00)
2554 Z8(dd143a29,3b0bddd0,30d1d115,cef24a69,8466b26c,b9df93b7,66a4e5ad,c1c5b014)
2555 Z8(89ee14d5,c81f55fa,530241ad,cc9065c0,42146687,b303baa1,8118136c,927e5626)
2556 Z8(b4e80fa4,39af7c44,8dcdf25f,a2079845,074bdea8,e0849840,060637fd,641f37da)
2557 Z8(eb7004fe,46a927e4,2d3acee1,dc7a7c32,b9c84644,dc7686da,fc301d78,82c637bb)
2558 Z8(3525ebad,73676441,647fccdf,6811f1a8,c4852498,f348b569,5bf683e0,0174d6c6)
2559 Z8(a06efded,e2b0de09,53c35401,7093f8ad,0f76ece8,e8d60378,7a5993ec,9f8c45e0)
2560 Z8(8ccb9931,5a531600,c22d1c4a,4070e37a,ddde57fb,a30eb147,8ed86a48,b22b2296)
2561 Z8(d5d05093,e7b7ce4e,1357b282,1fa3a4e8,4fc4a44f,9c047c28,8f395a10,ca89ca50)
2562 Z8(06353f65,d6a3251b,d23aa5f4,3504de0b,242ad5da,e01e183a,694d99f0,76833885)
2563 Z8(bdeaa24a,dfcb9099,6cd36b11,ceeb8d13,ee39cf05,63ec6deb,3d1a2d81,149f5ea3)
2564 Z8(6afaa033,22e94dad,1fcb8d63,cebe7a1f,d0f59db3,098ab739,66f15283,44e103ac)
2565 Z8(61f6f273,8eac682f,c4805d99,76ea5850,64cd92f6,a2fd6d08,6a228909,bca3ff7c)
2566 Z8(6831da14,807c3220,45dac9d3,ec18c96d,c24fd23f,69dabb23,ccd18252,af037819)
2567 Z8(c83e1611,e2bed73a,b66e53fa,72557dd1,1a1c7afb,fa9cd9c1,f43f7e9c,6d78fbde)
2568 Z8(c3bd937d,b0d6b4bc,cb0a5cba,f4907faf,0ce69df1,860a774b,98040d87,538ea0c1)
2569 Z8(418fc6f8,da471fb6,02231b25,cddb4faf,40ee75fd,a00f4b5a,832544ff,aa6d43b7)
2570 Z8(d8991020,f48906b7,10bea83d,85dbf00c,d066739b,dc2ca45c,217ddf51,a59ff340)
2571 Z8(ef7651d9,f1bf1647,f2d54f6b,0eb4ff03,1e5cd0e1,4e2411c6,268137d1,0ced2476)
2572 Z8(c08fae75,4ba7e452,c06dfb35,78e8c9cc,c2058eec,f15f6eec,46ff2c83,a41b6626)
2573 Z8(a6ce14e6,cbc758db,66249a5f,cc55053f,34869c86,050d7993,7fde8c49,246d5abf)
2574 Z8(e5270234,aaa4bf05,c7bab166,d2519caa,3b140f45,393412d8,98f2d50c,407b3e5d)
2575 Z8(3a9b0baf,1b0f16aa,5b48fca1,b582d316,964f86cc,a79a7889,2a28a22b,d497bfb0)
2576 Z8(f9b6a3d0,8527c462,a03a45f6,74986758,69060803,9bed7d12,6b2422c8,613cd5f1)
2577 Z8(48f1d99d,89bfc90a,c24fdb92,bd80a7f6,2ea8af18,4a9b537e,73be392f,cada6a63)
2578 Z8(8a265a5d,5e543099,7119ffc3,abbbf34d,e0e867e0,ef580996,66911152,18ee4fed)
2579 Z8(959e7d0f,6260ba6d,95235401,a1dfce22,4a83808b,ca6d32cc,1503cb19,9f304d85)
2580 Z8(c369b05e,2549c028,2276a7f4,f2a27bdb,77ae081a,3eb3f97a,69a080e5,81ea7d9b)
2581 Z8(c1159f1e,9fac1b60,fd397588,d08ff8ee,74cda7e0,7d9d49bf,749fc5ff,d02b8dd8)
2582 Z8(668c14fc,bd8c0a3f,13ba47af,c393876b,5b780ff8,cc5d3b3e,1dcb41fc,a05efbf6)
2583 Z8(bbef38ad,cd2f0edd,0cb988d7,c02fd68c,1a0fffc1,09a7a15a,be6327f6,bd2d2e1c)
2584 Z8(989be821,7524d28b,81eeeb2b,e27c2e25,5fe06c06,be61d652,8a31f8c5,09f646c3)
2585 Z8(e1178a2e,c5e10291,72b6387a,ed68e0fc,9fb59f1d,619005f5,243b4352,8a4bd5d9)
2586 Z8(12ed07fa,a1de674f,8ea99387,cc12ad0a,bb44392e,e95524fb,f28c2de3,4825c313)
2587 Z8(705d288b,ba82e4e4,cda6fdbd,aa85d7ed,d1cb5ab6,2cc227f5,1849640b,984258a4)
2588 Z8(e15f5080,462a13fa,0182da03,b36212e9,3bc842f3,56de2510,61df0c4e,cf9c350e)
2589 Z8(1eee0dbd,34a9cd5d,68725494,2c64c059,e7fe2ae4,045b1c8a,760bd67d,3771dad1)
2590 Z8(0617b104,94819b05,9785e8fd,5745a3df,42ccfbcb,f459b117,67bb1823,ad044901)
2591 Z8(5054bc8d,4f4c4444,82ea31d7,5c2b3662,90aaaafb,38664298,3881c777,829bf0f7)
2592 Z8(38de2c5f,dcda4a61,f2b8ebc7,afe2edfe,a1fe5fa9,92656327,4706b8d8,2f41f966)
2593 Z8(b88a052b,7c0a5e1d,a80ad130,64d9e4b2,25e90503,0d662823,d12daee9,3002d95a)
2594 Z8(2fa652cd,2c2040f8,58ba309f,3405dcf6,7a8e9022,a41f5bc5,3d5c8534,2cc93381)
2595 Z8(dbb22c17,bee1744e,44ec1339,ca7fb623,26c59e33,b189e1d3,066b6dd0,47ad09b7)
2596 Z8(329820ce,b35b529f,a43b86d2,6613acc2,9160e187,c68e45a9,efa16f22,d2c990b4)
2597 Z8(56688c15,21c5e9b8,bf772dbf,1f981a6b,6a521c1c,6aaa9e9d,cca9916a,2c5f5d1e)
2598 Z8(a2b6e386,c35325b3,7df870e2,9d1b60eb,bea48e16,d034f527,112128e4,bb0f696f)
2599 Z8(7893bb42,2ba849d3,efb1a162,c5ffae81,3a240564,d49258b0,f22848fc,3c8a992a)
2600 Z8(999a07ee,d197ebf5,81847652,3030719f,a4f09e60,74c8ee10,58a09213,5c96b4cb)
2601 Z8(97a93926,e52250d1,af57830e,cb125696,974fe4ee,125f9145,98fbdfa5,ad26c2f2)
2602 Z8(f6a59084,e7aa9459,bf1294ff,9802e59a,e9b05eb1,a0bd9f53,530a19e9,0f52953a)
2603 Z8(5731365b,1a667fbf,2e953616,c23b9c5b,d2f8467e,db588768,bf30c004,30ef44eb)
2604 Z8(3773a533,73228656,d8030b46,f76e387f,34dbf9bd,3e6c7456,d7512ba1,a2a34833)
2605 Z8(b80eb18e,39e6b22f,a3b4835f,92b9b376,8aaa4fe2,80195418,bc970ef6,7dad3cf7)
2606 Z8(4bf3202f,b08cee0d,2a1b5349,3b318536,c60e5893,70987778,28356121,8de4f0cd)
2607 Z8(45349112,4157f31d,6fc656a7,297097b9,ba98742f,7ec7ee88,b8b8568b,42bfe394)
2608 Z8(03a0ee2f,677aea8e,a45fb6e7,449187e2,8ceed919,1cc3ecb8,ba847ef9,a1b50e7e)
2609 Z8(7a1c11ca,a67543f5,f87c9b22,79aefaff,38b29de8,dfda0c7b,c9118e32,f425b77f)
2610 Z8(923bff0f,bb62f54e,2fac7c2d,c5c65842,0391e3fd,4c3e4eee,56f8a9ab,1de7d666)
2611 Z8(f11a2c9b,8e9ad58a,e6609b25,689b9864,b425f197,83a3f9c3,2da146ad,65f755ae)
2612 Z8(e453bb2b,57cec152,917375e5,37b6a77c,c1822f97,bf1f14b2,d5b70003,17190c68)
2613 Z8(2fca6ce7,f6864a5d,830df26b,bd4538fa,d768adbb,9621deea,4d0784f8,71292a47)
2614 Z8(eaf6b323,15b7f882,44a11287,ba2188e0,381fbc19,72096840,b84c6eb9,b0e0df3a)
2615 Z8(d45b33c3,336d1be0,bde280c4,5c735f9a,6c2f6b73,9e5bf751,cce3247b,e0aa7b2c)
2616 Z8(d70bcaf8,63b349d3,dfb08f60,32848ff6,fd02747f,15bdb641,f0516284,9c39c2ef)
2617 Z8(4ab81b22,10f2ecb5,23cb3b98,25a1b531,f8f7f211,2386fdd5,7d71b586,d6a43be9)
2618 Z8(ef6e6ef5,fa63bf04,22c95a32,53023cec,70a95dd4,d59a37be,7adbc77b,a1972488)
2619 Z8(fadf8d51,bbdc4bcf,3c1a0118,17d9849c,65d98081,1b31742d,5d81f6f8,b0d4a197)
2620 Z8(f03e10d7,9f21032e,90c7dc8b,2e6775b9,b1ba7774,3695d7b8,73633046,1400e7e6)
2621 Z8(677a9879,061f3558,42374d6b,141690ad,263bbc14,f14a0c85,2c273826,aa369f93)
2622 Z8(3edf8771,a6e13c6e,acd7db0c,025b3f4c,f919f470,479383e4,80628501,e39513ef)
2623 Z8(13c4693a,7a8f05d8,aa67a26e,768b9a56,b34932d4,f6851cab,403dfa31,c8af55f0)
2624 Z8(e87ae715,06d6a912,d57bb8a5,fdf8e5c2,4c749446,856c0035,e893b7ee,70dde994)
2625 Z8(85ef8c3b,4ec0ec81,fa96d02d,0552992c,01c13eb9,c46462a0,6038ebcc,14521c3c)
2626 Z8(0da26cfe,c33df6fc,c78f6a24,b08d8942,aedcf2da,f849dce0,afddc324,58fa31ba)
2627 Z8(80dc506c,f04922f5,9d9c19db,972854b6,7fb81ee3,aff7871e,eb5180a3,f882184d)
2628 Z8(5d02a4c4,02fbd99d,984f9700,6ef450ed,76d86676,e05da6cc,f314b3ab,bcf17d7a)
2629 Z8(00813c9a,c9f23806,664e32f3,cfc8990e,668c25c7,719c0d9a,d72c3ae6,96aa9971)
2630 Z8(21866d3e,9c6709cc,c270559a,fb23296c,daf69535,f6a65b91,e141e0fb,42668c60)
2631 Z8(60897aec,2411fc04,cdd83b9b,1b680dbe,3b8bc47a,e0e05e9e,98ef790d,70c23100)
2632 Z8(38a3265d,eaeddae9,1fbc8b11,a17194c0,41510b45,d6e16756,48847fa7,04db7731)
2633 Z8(c0ac78d1,865f6833,17728891,3726f7c1,02868257,1c764c4c,715a68a9,cc291f30)
2634 Z8(da31ffb9,f27b7659,2609811a,0894324f,020456d9,9088539b,ee7ffeda,dc587b5c)
2635 Z8(75bbe273,6d94b140,d746626c,f396e9da,92924454,9818042b,24d94723,27f02f10)
2636 Z8(73ebfddd,62312aa8,776c1df8,40b1b278,c30f39de,c22925e6,892b504f,a097ebba)
2637 Z8(503c7238,72639546,81152d80,d8379b9d,a5a2dc03,3b52f823,2c473452,36d3e5fc)
2638 Z8(109a5ac1,a1b9ebba,7ec4294a,f4e6a5ae,f89430e2,2335ef66,2d04773c,4f2132c9)
2639 Z8(1646e845,b8ec529a,abfc155f,541123c2,be718b8e,f43776d6,4ff081c1,d825429f)
2640 Z8(3a6d2bb0,35c3e30e,acf6c48e,c0235a54,393d57b1,4be84484,f2f15206,bf0da208)
2641 Z8(1e551462,058955e9,59479af5,cdbf71f6,a6a76cff,161ccd6c,2a1ed5e6,8479a9f8)
2642 Z8(a3cb8109,eb7b06e6,bf512d65,12d37c9e,7c940527,a5d2d20a,c30d9ae1,33adc5ff)
2643 Z8(19a14011,9e818c12,8735397b,ccc62f55,d94e566b,5682760a,ec78807c,42025cd0)
2644 Z8(39f68651,395c2bb0,ab6b10e5,31c5eb47,d81effcc,2d2c49f7,dddec51c,5f9ee9e5)
2645 Z8(6b2a9372,4a0775de,04327ce2,43c990f6,a6484d53,a78a7ceb,44c98aab,e427d8ef)
2646 Z8(19761aee,be67251d,44f24725,0c7aac79,ecaf6c3a,f228cbe1,951cceff,7177d2e4)
2647 Z8(150a2f4b,43624a4f,d1d6b84c,07079dfc,1c06f1cd,a42a30f2,6e298524,fc08a739)
2648 Z8(7ca275bc,a6e45272,62c0ea01,0f1c0fd0,20e34ab2,e64ae14d,c742bcc9,c869ad60)
2649 Z8(6d7ebecc,af9387bf,2c42942a,ea1576fe,71e6f17a,9c9c72df,1ed1a0db,7269bad7)
2650 Z8(dc1cc271,11f91345,5e0fb236,23ec1a74,3a9f988d,d523ada6,e4b5c74c,a58fd1c1)
2651 Z8(2e9fcb77,d64b2fbd,340516e3,39520cf3,a2545bd0,ff657e45,14a944e2,e81c0be5)
2652 Z8(61d7deb7,e0c72489,387c24e3,d7fb023c,717bfa1f,70650c9c,691cbc34,14cc2c23)
2653 Z8(50b7117c,5585296c,5664cf66,b886a316,f4d29ab3,79bbc199,47f133aa,855c32d8)
2654 Z8(8cff4851,07b7785f,12e510b1,77fbd323,d0d55fb3,81f0fc33,d053b461,9a8b608e)
2655 Z8(63199baf,dc07ae5e,1397254a,1a38e091,682a9335,82442938,faf6b86c,5f5a4833)
2656 Z8(456dbf48,83135c13,7e85a420,750cad2b,b091a93c,6da37ce0,ce6bcd76,2c1e770a)
2657 Z8(beade43f,69ccae3a,796184f6,a09992f6,00b277bb,f27f5661,c562ca42,3caea6a9)
2658 Z8(16d557de,6dfe6971,a847bdf8,ef1b5d52,fac27958,14a2e2ed,80d629fc,615915e5)
2659 Z8(7fd5f9a5,9df4bf48,01b86e44,8f214593,6c6ccf50,18f05c3d,84f5b280,aacf8e6e)
2660 Z8(f9fe9aba,138eb9df,6083feac,5a44e2d7,e6944d4f,1a949ea2,b0fcc85f,52c927f1)
2661 Z8(e22937f1,eab0b925,820ec370,4a8476dd,2087095b,c2b83f14,cae871eb,a238d3ae)
2662 Z8(73975785,e88d65ba,d7d77452,8a3b61e3,f0c9fe3d,37fe354e,ff182afd,d5f20203)
2663 Z8(a5332598,79421d64,8dd4b23a,d8c69f86,f591f891,c1a59b84,e6149da4,e7a2d70a)
2664 Z8(d62a8347,76cad2ea,733c0f35,8b80ac5a,f123de87,4ad386bc,be621d9b,5f49c264)
2665 Z8(21b4a2fb,2fd4f186,615e3408,b2d330e8,2b159a58,483469f1,c198a803,ea6629b8)
2666 Z8(c02f6209,3e27ded8,0e116604,69d12e76,08dc55a4,2e4f7b2d,80f8cbd1,3f79728f)
2667 Z8(f5fe61b4,bcdaa9c5,fb9d42d1,40b2b299,d77996e9,6a8a768c,1bb14798,107d8375)
2668 Z8(da0f7c36,c842a490,f40888f3,529c9807,7c8dee49,7382d4cd,c6063a24,48abbe45)
2669 Z8(b8099dd6,90a03bf8,97c15dc4,22f976b2,01aa00a2,fc467b2a,5f3003ec,7a0a0303)
2670 Z8(ec29e322,a7e38d91,fed7377b,07f39ec7,332c23bc,758240ac,cd45fde9,1b038b45)
2671 Z8(54d735a7,1047c684,a7b59951,f3f3053f,11454856,4ece0ea3,1b112d11,50b38ac7)
2672 Z8(5cb82173,741fa18e,29b25b98,558bfc71,48bbf5fa,37195202,914ff712,eb0ecfe7)
2673 Z8(db1aba7e,d3b922c5,0a271dc3,70a51a96,ac99acc4,dd561cef,fb6db42e,c65c49b7)
2674 Z8(53f04181,ab1f88c3,d625e295,1afd28cf,10fd3082,504b46c9,37c23bd2,1c63228a)
2675 Z8(4ccec845,e6c04c0b,b0af5f1e,517b9d3b,cefdaf16,a3b8fd4d,a7e613bb,657577ab)
2676 Z8(8e511cfc,fb50acdb,b48f3e68,53c2904f,34303bb5,86d4ffce,97364ac9,f95e5740)
2677 Z8(b39e81eb,2f1a84b2,0808a9be,33ac3688,2b24ca55,321aa249,e92aa577,beda85c3)
2678 Z8(9e96a708,a9132578,59b83e54,3715d85a,74291f7a,30878391,39fc1d80,892420e1)
2679 Z8(27e7e69b,b4cc6118,3697793a,5f306865,c7d9ee97,b9958104,87fd5ed2,1d772ffc)
2680 Z8(09cb9d48,8a47f260,ba2ca81a,24a4e88e,66295a74,8132d4ea,5e0310bb,1728a243)
2681 Z8(192cedea,0e991793,6ec4ac58,a6875b89,f91c850c,f6f37b95,5bc43b7e,b52a5942)
2682 Z8(8c2ac657,61fd0946,f8508e78,787ef7cc,266d26d9,30339e90,1ce0acbe,846b017f)
2683 Z8(3fe89f06,9ac368ab,b9f98307,92bad912,a95e27c9,71ce6350,84effed4,59604bb5)
2684 Z8(71a74fa0,21a9bea9,b5cfcc6f,46435dca,8b0fe044,03475967,8d5d55ab,0bd0e6cb)
2685 Z8(fbf20111,832821f5,42b51b22,54aca0aa,722545df,058a715f,f64a3679,8fb5b8ba)
2686 Z8(8f4d6916,9258a9e4,c023d188,2a16b80f,dab19229,d71d0dce,34e1a6cf,856a2b6d)
2687 Z8(ec4dfbe3,e550bb9d,02ed94f1,afee3ad8,fe16e64a,865405a8,7b94a8a5,7736cfbe)
2688 Z8(fcbe7509,ccb258db,89af3603,3a7b8aaa,93aa9f3d,5811748c,40a6f672,94a56f35)
2689 Z8(0a0ea148,4b313ec6,e96dbd92,5e0f28d0,69ad0ff3,ec15caad,e0d81586,546032d2)
2690 Z8(37b68616,1c42a436,269db45b,f90fadc1,c6aa7d2d,744ce7ca,3022d936,6a5aedff)
2691 Z8(8b54c939,15abe590,7000578c,5f6f7b81,d41cf4d2,3de64f17,04b75fbf,5f4a48ec)
2692 Z8(c09d4318,022a2466,5e9f0ca1,a2d4eeb7,13ec71e3,888aa64f,a78344d0,dce4ba3f)
2693 Z8(4a3ba731,163e9b02,a0d5f085,69843e1e,0ae2207d,c14ca55e,119c9442,002db15d)
2694 Z8(31683b5a,96f571a1,e04736d5,cbeaafd9,5a75aac0,0dd2eff9,41368702,484c9bda)
2695 Z8(1c7236fd,aa25135b,3ddb29eb,e1d32ef3,9f73d0db,e15fd187,0c50a3d8,8a3fb6e4)
2696 Z8(ce33df4a,d1c57f08,6b17e4d7,b1e0f7c2,51a4e69a,82ec8497,ad5f40a6,f564cdba)
2697 Z8(b72996b0,a615ab2a,c76009e9,997f3505,5722601d,e2e8d219,705719cc,b1384e38)
2698 Z8(375101f3,82b033c5,107bf2e4,7a11b580,2165d46c,47410c23,bc922f95,af8b5018)
2699 Z8(b92a9557,4b73a717,57018778,441f0813,e188808e,025e60da,983fe53b,49098e88)
2700 Z8(adb47cb8,75770ac2,cc5be076,052467f2,67b64e3d,391f9301,bb263a81,07ffaceb)
2701 Z8(088f88a7,6be69f44,cd3be04c,fa4ef178,fcb1e87d,9b7b6ce2,57220ec0,48d28ac2)
2702 Z8(c7216dcb,e431ba12,52e0bf81,0bd29104,adc9d9cc,9455c285,a9a2b447,dd166627)
2703 Z8(92613e38,860e6971,22997ebc,1b9b0873,dad5d9cf,78add210,3152a5fd,078ccfa3)
2704 Z8(f169ae28,0e0b542e,da502d91,459d9f62,52d33073,d32b8157,8ff115a9,ffb3bc32)
2705 Z8(e4594795,a3a963c5,96f5ef57,2f6110ca,28c3971e,052f4626,b9aeb4ae,e4c4ad8a)
2706 Z8(5c902d4e,1a43be1e,774ccf98,614d0b71,d84faa6a,d72be32e,d53a8afd,b29885eb)
2707 Z8(42f6eb24,9bd4b758,f6bb38b8,8f008b00,e9b1bb03,318a57fc,0a56ec7a,21e07eb4)
2708 Z8(2041b1cd,af2091dc,55774607,ee4c92e6,9e715adf,23c30bef,362ce980,a7d584cf)
2709 Z8(b20101e4,0e94a6c6,fc3bf63c,0d8b767e,44f53136,9ad3bddf,0d8990aa,15711cf6)
2710 Z8(6808d4ca,0e23bf75,932d834b,ccaf96a5,99d7683b,c39b0c6e,cc938122,8b3a4073)
2711 Z8(74a0d14e,b1caeeee,a7dddb9c,c12a6161,750e03aa,5ffdc94e,c68f587d,91b12a78)
2712 Z8(a6240b12,a46245eb,7e37bdcf,44018366,5dd451b5,c771588b,9944fc80,3a769172)
2713 Z8(5c9abe8e,89639829,aba5d5d4,6dd1c3e7,e9e56d5b,03fd1a43,e05c9c97,a21a3ca8)
2714 Z8(b45e6a69,9f945ab9,1e795222,1c58b262,6d5997f9,48291494,64da94ab,eb0ab1b3)
2715 Z8(b57a6374,ea0a67da,b719eb8a,6cd49209,ccc753a5,94d5b21a,b15c66f1,d23f3bf9)
2716 Z8(68013a9c,f1c29456,3ffba60e,1ba92d78,5b1120c4,99daba33,c02dd0b8,00ad48f4)
2717 Z8(9135480e,20184add,718c4e48,eb06ce52,c7f04870,cad26baf,d653f325,467f5571)
2718 Z8(1e1ec4aa,a3cbb5ce,bd37f51d,dd8fdd31,735458cd,7f5d42ab,cf329319,682096dc)
2719 Z8(ac2c3898,33d0d248,01c084ea,97f76292,b9c62d1d,16c27d5f,78b99d7a,2d0958ed)
2720 Z8(6380235c,0d51933c,27ca5762,b48a515c,679b9a4d,10160c49,d31896b6,c2a9fd71)
2721 Z8(da57ec58,81abbdb2,622667bf,aa8d1aa7,1fa462fb,23a605e5,898fcc20,ce6f375f)
2722 Z8(e13f7cfc,684404d1,cd8f867b,78b31917,273c87e8,7992657c,1922ef00,4a20f8a2)
2723 Z8(edb045bb,d1154565,eefa4d2b,50eef811,47a6b1b3,b1610403,12dede6d,e9ab8674)
2724 Z8(015dff8a,78bf163d,26a89a69,08527f69,eca4db17,7f339845,09cf14a3,964a6dd6)
2725 Z8(4c0aee5c,8313d0b5,d08e8146,419a81df,e94065b1,e548497a,2f45024d,ed715d99)
2726 Z8(933e83c7,aefbac0f,a82b5ac1,b0a68b6f,61af8f1c,6afb7fc0,1d20fb8c,d400c979)
2727 Z8(5938b56c,e5bfe3b9,fdf2cb6e,5d4f3e6a,d0da9483,137c1942,f8cf2582,bba7bb14)
2728 Z8(a8253fa6,70ce52b3,f1ab488a,f52c4a8c,a2c2698d,94b7b46e,7dd3492c,dc1fb0ca)
2729 Z8(61dc716c,f3a9c9fb,fd6e2ee0,8b42d0c4,0564b7bb,5ae95e34,507360e7,cd5a2e65)
2730 Z8(25126dd3,d9ed055a,f29c6971,e81d4c23,cb0d43ee,be7a1185,c01122c4,a2356805)
2731 Z8(627900a1,ba71d0dc,4bf6976f,76c14f9e,6f2c981b,2619fb35,9d113e2a,3c4ef84b)
2732 Z8(9ddb7e3f,b446ff53,447daf4d,08ceb8fa,7141b438,5c9982d0,11e83c65,0c697c0f)
2733 Z8(f676180f,e51335ef,2395d531,bc3f4f20,0a68b767,40b51b48,bddff6d3,e8c690af)
2734 Z8(2df0557c,5c2fe528,d408429b,4b8bde06,2fc72aea,2b9380a4,f3a4ff85,8e48a5a9)
2735 Z8(ddf9f7ee,e20ec99f,b63cc257,9ffe8fb0,76b92097,64a44f75,24800835,969811c8)
2736 Z8(d8ab8137,057be1e0,4583dc90,c1c93e9f,102b37bf,3de3c238,778eb0d1,26fe71e2)
2737 Z8(b0317346,353b5083,90702a9b,20d4e067,c656f28a,58b4777c,44f48017,23ad4801)
2738 Z8(36624762,f8379e5f,1568760c,05ff0e76,b6ea671a,4d7e5a84,735304ce,76ecfda0)
2739 Z8(ba5f4da9,0754e772,5b46c84e,276b7094,b03e1cc2,455c8662,8ae3b9e8,495a0543)
2740 Z8(b2c4555a,29af9899,d2e79ef3,b5d7d157,3e350fe8,358290ee,5e801b6a,7f3e3898)
2741 Z8(823dca27,e9bc9284,2424c266,9dda246a,5a71c570,ce14db33,51331a1f,b99fe0d9)
2742 Z8(dabb82f5,4de0111d,9b2bac42,5e8b03df,01ffb8fc,0e3874f4,497ce216,2bd7b489)
2743 Z8(89bb14cd,e7678b74,84a4cfd5,16b4e8ee,62816fa8,376332c5,a0112de2,d075f273)
2744 Z8(d1d2ff69,7a6dd146,1437fd30,aba45951,45d2ceac,e28db2db,2eb5753d,e62dd852)
2745 Z8(eb760a45,a8743e44,a61b26c3,575f15aa,d9f580fa,ee294020,334858b8,0b9425ee)
2746 Z8(3279aa33,24d0b73f,3ff7ad29,2077ab72,4ee3763c,656a661d,661e41b7,d5d7efba)
2747 Z8(82f6752d,44da9534,93542145,922ab1eb,0d085e40,60a170d4,2209fe4f,a330ad78)
2748 Z8(3729f83a,0f74ccdd,5ec1f0e4,31dcc4dd,4ad6522e,7b777265,a31d9198,50de8a27)
2749 Z8(c18ab031,08b8ca8b,10006693,41523f6e,8b89e6fe,02d93560,08c38fd8,139d277a)
2750 Z8(7f363938,fc79f6f3,359749a3,1adf144c,11050a33,045f3880,f77940a1,74b6e5b6)
2751 Z8(083c6bd6,6158f109,8c1d2459,df1cd684,ad66f9e4,7f2cf4c1,339a14e1,32ad29dd)
2752 Z8(91d26e40,5e6c0376,e8a2e874,389bd169,7ca1cf97,a2fdc091,6979145e,3c18181d)
2753 Z8(a5eb6b46,595d82dc,0c0e9978,4400360c,767502ec,1c4c308e,2c8a6320,3c6bcb6b)
2754 Z8(8c2538f9,2b0b9b90,362dc818,d0e1a022,8b78b85b,1c4c24d1,c169dbcf,b51d60b3)
2755 Z8(62ff47d9,1e57dcd0,6db54da6,a09e08da,178e6d83,f6225d36,e0002f4a,15b86238)
2756 Z8(22207026,a3937199,c2eae029,ac77c7a8,6019e93c,1558ae57,d9104941,35c96e5a)
2757 Z8(5b9c76a2,bd564685,c36eef67,55f408d6,55355f91,6ba7c43e,b72b9863,243cd244)
2758 Z8(c332e663,9b714ac6,065c2adb,1e1c7e11,ff39c154,8258b9a9,9d1b5911,97b56922)
2759 Z8(79197da4,33fc298b,ecf5ce3e,322f551e,29584a6e,79917f0b,1a94e375,1950c697)
2760 Z8(9e9aaaf2,f321eec1,04648d2d,71722053,0ba6fbc1,7b6f043f,039ba2ce,ec3596e5)
2761 Z8(fff20f67,5bdef7b6,f007410b,4d9e9d7b,606f7d6b,d4fa23f3,083c5d71,5df2cd54)
2762 Z8(96c6bcd7,eef8caf1,c1af672a,f9bbed39,61ea1176,a8a8848c,e2fd042d,7a27eae7)
2763 Z8(ce83e52d,0fec39b9,62b9447d,d67e18f3,77d9b714,9fc510f4,8e15ae2c,b3d07d76)
2764 Z8(3e94a7e0,f9e86598,0c09cd81,27e78fdb,d968f581,df2dfa26,dac92d7b,af4ed43c)
2765 Z8(91c2da46,ebef374f,b355c529,a9171add,1b5f18f1,8eb0850d,4f52bd67,1b42dd5c)
2766 Z8(6075889b,3e073f0f,eab19a71,53aa849e,320de8cf,6d4f78b4,af1fa39d,bbfc88c9)
2767 Z8(7ffacf0c,104bbab8,3aa19a09,f1347443,8d675e9c,df7bd72b,c2417f70,3e9a8245)
2768 Z8(8cc68b69,1b5df9c0,7ec52e2c,be9fcfb4,0487a966,544e2721,d60e6350,d9e702e5)
2769 Z8(2810195a,f44772e6,4ba3e319,65886955,65f60a50,931ce8aa,f0e3203b,4aaf57c4)
2770 Z8(53d7640f,00c837e5,ebd48b0b,152f72c8,60f23f50,1dc89ab5,c59e6d2b,835325ac)
2771 Z8(6c3574a6,21e0a710,71a3bbbf,65df6950,adb32892,96aad8b8,58ed44d8,3d831752)
2772 Z8(cb009c94,5239d15f,afe6a040,d66188e4,cc9e94cc,82378f2d,221af444,9a1cba07)
2773 Z8(63b114b3,9c14fcfe,bbb15fc8,e267962e,98f7ede8,75467d5a,25dd0683,0a209a9d)
2774 Z8(179065e7,b41b22b5,b78d21fe,4aa56940,df23bf01,14095c69,018fc641,18f19c74)
2775 Z8(3b4638c3,e7d228c6,db473866,42e60415,bf54e4a8,576fe7c9,bac4766b,b97524a0)
2776 Z8(ac61bdd8,86f2fabb,9cbea239,e3b8d8e3,5694718e,45c68177,58624c7a,d8af97ae)
2777 Z8(889f8b10,9ba06405,6c91f976,1beecdd6,4c164dc0,dde90fe8,e1ae90d1,6625d102)
2778 Z8(3b7e5b67,cab6c4fc,6293935b,2e5791b9,65a59cab,d8a1f609,1ecd04b1,921f8f34)
2779 Z8(4869421d,00a81b0d,e83ed8f8,bb1a6827,6cc9e68c,8d02d6e1,92955027,8f6f5a9b)
2780 Z8(41cdfa82,c786c25e,7ffdd56a,098b15d3,28d998d8,1da2e26e,101f2a90,aba525e2)
2781 Z8(31c6d58f,14b34442,6e5c5823,58d689f2,a933ecdc,24ad7b5e,effcb16c,2a92c843)
2782 Z8(55dc3183,956479c9,57a50fee,21f901aa,898d1076,f2c32053,f844133a,d32bda78)
2783 Z8(76c79def,f5278fe0,c4e3aef0,c21a2120,1e2fd619,c9f68260,33d2ad27,dd965965)
2784 Z8(eb1c20f8,9752c22a,a4dd2654,bee4b389,ebbe216e,45cfa25f,994b0905,6c932ec7)
2785 Z8(2eda9a3d,e557b1e4,69dd5710,29a842a2,31276a25,32279e0b,129ada49,c27925c6)
2786 Z8(f882e2ac,e5963b3c,0c7bb52f,fc840a26,865e3ac5,9993fcd0,121cf72a,b545c72a)
2787 Z8(c9222bee,a376dd9e,a0fe034b,c2fe582c,9755753c,561f4a6c,4f4bd8b6,666a0780)
2788 Z8(ad564fea,2b16da9c,75bd3616,cde3d2e7,be440d4f,fae696ca,e4b29215,d7ca1adc)
2789 Z8(5860bc10,a1e6f9bd,baf9db0f,b8113a91,7f4bd4cd,2460a9cf,51307642,28cf9aa0)
2790 Z8(90882946,166aea6e,a774a6ee,c422d005,e693e87d,12575791,0659ebba,3e645e5e)
2791 Z8(4670d859,6fcc2185,44147d35,c452479e,e68f6fdf,63f9b0e1,48d9d5cc,fdab80d0)
2792 Z8(6beaf824,1c759f65,9324728d,bd8056ab,e7053715,e16a1d48,6e760d30,434ecbe0)
2793 Z8(8f746c5c,225e12c4,d0edfafa,d724cd96,c57e0de1,ae2a6492,833a0cea,88e59eb3)
2794 Z8(b712756d,4ac1c0f2,a3bc24ac,f6af9a66,936dfb00,6d541837,2e407e1f,c3534651)
2795 Z8(1393e5e7,dfa1539d,0393bdb6,de0006a1,aff34003,6675f9da,c08fdb43,e301c24d)
2796 Z8(7a13870e,633602af,8662bf72,c26f9ff0,680b686d,3b7aec87,b6dde0c7,9464eb9a)
2797 Z8(462c8733,d25ac32e,91a1284e,2354ee28,731bea6d,483cb9f8,da4eb473,6a7b1cac)
2798 Z8(82d13f94,c1fe05ef,2893f33a,bb8486db,5deaf7ad,f070c1a9,4413f45d,902d11e7)
2799 Z8(9532a491,aaf89f15,099faa13,bedf794d,b522fcc0,82bb4aba,b53798ce,8e80a982)
2800 Z8(a5a668e5,e90a72a8,0004ebcd,8b8b2388,afc7389b,1a98c25d,587fdd9e,80bc42d9)
2801 Z8(0270d419,f8c0fc20,33b375d4,4ac13ea0,ad7ebf2f,35f7906e,7672e77b,ee9ca31a)
2802 Z8(2e283baf,672839e6,fbc968db,09e877d3,a489c3fd,f4943a65,35d9a1f9,470483b6)
2803 Z8(bbc195bf,ba8503a7,6e083bdd,6f932771,f12807da,8e725d40,c523987f,029b2813)
2804 Z8(ad6c4971,51602236,1c020f10,81d998d0,97e95701,a1be0d65,03f91cb1,afa52910)
2805 Z8(84b53b76,94f6155c,34b4ae18,5d2c49fb,b82fd80f,631b4715,0836dc31,dc098d28)
2806 Z8(f8cdfa3c,1dda0686,04bb4b2f,1b4f5728,2d228630,c1db5f2c,10022d67,536ebeaf)
2807 Z8(138fcb2b,cdda6bad,5a00cc71,35831b14,d05e8809,4a498ea2,1953bf6a,e1d6c078)
2808 Z8(2848362b,d0d85a44,8b72a7be,6303cd97,6f659baf,9054a783,3e8fd85d,a1fdd8d5)
2809 Z8(8f19e53b,2b5771bd,25816c1c,8c9f0733,04ce7c47,f6a28d81,08644ac8,b2b7caaf)
2810 Z8(69adfa3f,142bd147,94e110d6,5c8402e6,a4979e63,c3ac6bc7,8882553e,20132a72)
2811 Z8(01b3bd8f,f8d33c19,74d3b5ea,ce96677c,98992629,7acf99b9,cf839836,27d37e58)
2812 Z8(cffb9f85,6c41d914,62caad36,f984d4e3,e7181b99,ca6b25c2,1e887aed,17d4f008)
2813 Z8(7d69cf4e,6d020b38,980e5f34,0f318132,0eceddae,5cbff485,10f7a4bb,d8e74524)
2814 Z8(a034ab8b,66372b87,b13e1af6,a9272703,40f2bec8,2ff33b8f,464eed37,69cdfb94)
2815 Z8(b02d517c,10b5056f,0675aaff,18728cf6,30a39845,0609c0ef,6a51975a,fcc66520)
2816 Z8(2ddd24d7,21149bf3,8bf918bc,c7409172,e3bf8191,41581d5f,a5a3cf40,7383c87d)
2817 Z8(f489bf36,eee6a84e,89b42956,97fecc91,5e647bd6,548416ea,6e856bb6,0d4ab22b)
2818 Z8(eabd03cf,e95a3ca2,6f9ee838,40587d47,ba0880ce,13545583,8b061311,e583a16c)
2819 Z8(ea8b6c80,b4a4af9e,6a12ca0c,d7bfd0cb,477219d0,309731b3,fd996df5,469f56d8)
2820 Z8(b7989352,f14af0d9,43a6d57b,31a07275,5b1ec477,c51738a3,b9ec3a2d,0ed9afad)
2821 Z8(52067ee8,7af5d8c3,4dabc9e8,5de2fc47,58eb4e3e,f2f981e7,ba2264ef,0cda7569)
2822 Z8(ae379af3,8f843de6,ff82c489,c02d7dad,37333f59,c1970215,ba9e85e1,737c3a8f)
2823 Z8(e02b6307,7d1b7267,17c85bef,cb0b1597,6ae6a5c4,3caebf55,bfb91bc0,fd61893e)
2824 Z8(b4a5c93e,477f0e59,e6c4f9c3,0719a761,418570a3,3d9c5b49,ca2a0510,2ea8f417)
2825 Z8(e50c3277,5edb832f,25a5af9f,1d9ff844,9d48c097,2c6ffe2f,42f85b3c,38ecd4be)
2826 Z8(b584b53b,bc64c7c8,2e3bf4f6,f314fb16,fd6f5022,e9e5957b,6e8e2a43,8621b128)
2827 Z8(eafc328f,90f315e3,26cefb4f,205c906e,c6fb0149,c5fc8835,cbf26056,76f7088a)
2828 Z8(ce86a30d,df4d01d9,5ef83340,a234ed14,6cd007e4,db9f19c0,b88936b5,b0d8667f)
2829 Z8(20d7649f,345f8a4c,42375964,3fa085e7,08c776e0,c6537f67,d0913c0b,72522a71)
2830 Z8(9eb8e439,ef6e478c,ad0d7eb9,d3104591,e9b3c850,155ebd2a,4c68bd5a,42dbf996)
2831 Z8(978a8194,5590d2b4,59ec0a43,2d537b68,cb0da98f,32a22fd3,9f64c8a8,81b79da9)
2832 Z8(0be07223,5942778d,216885f9,c42d7b98,9e1d3a21,f21af731,b03d0f27,40113a3a)
2833 Z8(4c4e779e,17f0b8e9,ea2d34f1,8528389e,01226a1b,2369dea3,7bd13de5,1aab9ef5)
2834 Z8(b6db7a5f,12adabc4,20c100f6,b23b5479,d20dfc56,a54e2efa,acf4b400,7590ca94)
2835 Z8(95c70166,faa5fc85,98f188bb,be0e841b,0b8a43ec,dd14a7cd,bb12c425,6f498dbc)
2836 Z8(6f71b9d1,d78ebe45,f3cec11d,cb944558,e06d8ecd,baf7aa8a,45998ab6,b2c0c21c)
2837 Z8(60456dae,a94425f1,84f22667,861e8c8c,310b6873,af154022,0498e2d5,ac5f69af)
2838 Z8(a6e11801,4d3c874c,1799b81b,f5a2753f,229774ce,916bce87,b1f6d7f7,d827c7cc)
2839 Z8(0fb4d504,87c40cfb,8bc0abf6,2ce2e730,41b95f5b,5e9d6cc3,369d1ebd,e62f304d)
2840 Z8(34e29a9d,d9aa67b1,5b8e0413,cc357a12,6fcd9db5,78cb9152,0cabe806,e215d180)
2841 Z8(9a584347,d07f4124,b7df0fbf,cfafe4a7,233b4ec2,2128595a,6f9359df,8acd2de3)
2842 Z8(07c13726,9cafd990,a5cfdbdb,c30af077,3e659f52,ad7f916b,c0639407,a14c8dc4)
2843 Z8(d07c1ee8,c51cc17c,f838f626,e230c892,6f36a101,0ef480f6,dbe7d200,9f7511f9)
2844 Z8(9e27bdda,4de36e50,cd10874b,7c3513fb,43fc16a3,1fa5bb66,9dc0229a,a8752870)
2845 Z8(0eda163a,4350ad27,7d97cbf8,e9054a61,32dd2691,9ab36339,934a8284,a15033c3)
2846 Z8(c910fabb,c4a49feb,943b73bd,ded03c09,f791da2d,bf58cc91,d2f6adf1,6edcf906)
2847 Z8(d0a53aee,64f5c0cc,179f3a41,47a0a83f,26d0d4d5,ba9aa43e,e9026030,c4f1c5f7)
2848 Z8(4113a267,a78a6df4,79d27ed3,4a305463,1e81ae4b,0fa5e9b5,ae2ff41f,5716f76e)
2849 Z8(c1339300,1b38deb4,9a163219,cf142472,a405275a,42cf2341,26fc00ec,e7a45556)
2850 Z8(dc586052,3e08d81a,da67f64c,1316953b,6c5752e0,a50d01c6,bdacff22,7d33b304)
2851 Z8(f4bf5a54,ffb3cd77,6435d18d,e0217ebb,5d13f71a,fe4e4b38,738b8478,fe7b2d0d)
2852 Z8(8cd54ff4,38676d0f,48e7b575,05e93340,e38d9461,19abfa01,466c7d1a,0a17c381)
2853 Z8(3709b945,2516136d,af95757c,2a5f911b,154ce075,a345a8c2,5dfba3b1,40de02a1)
2854 Z8(1483192f,e63d2eaa,b9545425,a44f45f1,d3c3ef87,42509bf0,53c96eb8,b067d886)
2855 Z8(b38f3e0e,9b0963ae,4b917df9,aea8ee8a,03a9f5d0,b7691cdc,81acfc27,4f8a5538)
2856 Z8(2cef965c,0d14581c,99957582,d616ae87,b3b9db94,c65c9598,aca524a9,9c8c94d6)
2857 Z8(0452a048,f785614e,7a4256f2,de07defd,6da2f656,0278f4fd,730280a5,e1cdfa52)
2858 Z8(cffb2cad,325948bb,26d70c1d,d43de355,9a775b00,5caa2dba,62f002f3,5a9622a0)
2859 Z8(9eef0692,14009f04,48e65abd,4f3755ba,fa949af3,d0f8c346,8b7ac9f1,9019f4f5)
2860 Z8(84bd7d37,146c6260,e931e139,97cae39e,c4e8b543,20c61d6e,ebb6bc96,bdaf93a8)
2861 Z8(ff28e4d9,05fbc893,8ce5e846,44cd1b3e,105d5836,0b9b2aec,af106256,473e1010)
2862 Z8(b66708fd,5fdb92d8,0dc8d6fe,ddcc673b,7643d6c8,6581fdc9,da88105b,da4d15a2)
2863 Z8(a7a46eef,284a352f,a4f59891,6168cb15,2c99de69,2c18c870,566043c4,f36b3d16)
2864 Z8(d01e098d,4756eb39,90cf3016,87050ae4,f9e09d05,b47fa79f,b10eca95,690de2cf)
2865 Z8(37b60998,437be0c0,8d96482e,d4b9f3a8,8f11746d,8567842d,75840827,d8d47e5d)
2866 Z8(e75ceb2d,96080452,5ba1cc3f,a28cde8a,3568d779,f242dc61,f45cfb6c,2a02647f)
2867 Z8(1acbe823,62da8daa,0dba279d,365836e9,2bd8def6,662846bf,cb89d477,615bb08b)
2868 Z8(abbe7553,d9a01605,7d31b512,13a3e19a,44d94ee4,e0469c1b,f8d3dd59,5412a33d)
2869 Z8(2d495611,f6a2128b,c0705971,7f80fcce,37b6e778,82e1233c,82032647,1252f5c3)
2870 Z8(e255580c,e8d24efe,e4f89aee,2fd21908,fc943425,35faf731,92696aa4,6f7d797c)
2871 Z8(6b415169,989675a5,781ea549,c6f1bdc5,2dba2228,7cce1a1e,08c73fa0,f9e1b338)
2872 Z8(cfa54d09,54569c2e,acbe97b5,16ca315c,c587a86a,b090e999,c3f2b082,b1ac5fa1)
2873 Z8(3fe0e335,19ec389d,3e497bdd,4ed08c11,4b2e09d2,0d4bbb08,60bceb52,10e2abb2)
2874 Z8(09878159,885869bc,2937ae37,e5b72e2e,3bdeef8b,4d2f33b4,8959a2c2,125670db)
2875 Z8(ad59b4ed,fd99813a,6f254236,bfa3e6c1,930f18b2,fb6a2a98,f35a15b1,f5bfbe95)
2876 Z8(f3378b80,35fd05a9,d66f8405,49a220d5,de7146ae,f91a74dc,424fe2fd,687d82be)
2877 Z8(ab696d48,7a48ac54,1c90f7e8,46724491,f1a78984,ef948a3c,4276d942,2af28661)
2878 Z8(99f414e2,e83df521,18783932,e934078e,2c07f089,af0a1b37,a01b17e3,87ec24dd)
2879 Z8(0f50edcb,57831ddd,f5f42367,31447178,5f17bff3,e29546d5,77ed7e32,92eabe89)
2880 Z8(cd87896d,73b24753,b89b9c24,4d00e74e,4f00c74b,7eec7007,b88ea2af,0faa8cd3)
2881 Z8(e8bc8bd5,bcac60ad,dd95915e,e4c91686,9cb3aa84,a27dc1d4,42d89afc,4a4f251b)
2882 Z8(750f5bc0,7c053d55,e9b5eb61,cb33b992,7e416ef6,0c4a3480,e258807e,82e680c1)
2883 Z8(914b19df,c8dff8ec,53c01b89,7e58508f,eab1046e,091f1651,1b501a09,075bf74e)
2884 Z8(dcdb2d43,cfbfed23,7f0c222c,b14a5792,60de8a25,1e87141d,70d1f0e0,2f0ee0e1)
2885 Z8(ac0ea292,d730302e,397c4d8f,81b4f9c5,bf482bd7,5b83e11e,7adb95c7,484bdd94)
2886 Z8(a9de16e3,38d9c127,922d9d22,ea03a07f,cb7306bc,19cf31e0,94b3f82f,ca870d45)
2887 Z8(229b5ddc,30380b61,75be285a,26c01b90,7f3cb2ae,de1d1167,1fa7e858,a556743c)
2888 Z8(8ed8bc1c,1e11a374,2e646929,9dd6f5c6,22cf000b,08cbf907,e5e7973e,62a39ad6)
2889 Z8(355d51e3,df5dbe13,4661edc4,aceb0a39,2ac558d2,72ee4b8f,7c3343fd,4e6ad7df)
2890 Z8(a02aa01f,3bcbd8be,eb75c113,2a42a009,73c16279,1ec8a187,fbcca458,bdb75556)
2891 Z8(ca883405,fb86cd77,2aacaa5a,e051242b,73093588,6e3d9374,7c852f84,a0e1a0a8)
2892 Z8(24b83823,9903ea68,466822bf,c7c6db30,eebc0309,78d23a4f,39ad5e4b,20e43a8d)
2893 Z8(a94d0de1,744ef929,cbd4f9d2,36dfa120,e6845137,f3b96f32,53f9cfa0,906217ff)
2894 Z8(54e49c38,40920db1,ba83c45f,0bd48d9e,d9ba4696,4c092e0e,77a86b6a,54baffef)
2895 Z8(693326a3,44badce6,f0dd3580,824c9b2a,34fc86da,dacd36b5,c498f408,2dc4f65c)
2896 Z8(b435327e,c4c1a0ec,1c21cf94,d85f8ba3,63d8196e,f1cf3f9b,ba51bc80,ddc72a04)
2897 Z8(34f5f9d1,cf2a0a43,0a1fb245,aa74f617,6bb9fddc,9445109c,3716c973,05abfe95)
2898 Z8(ed89adea,061d5e8d,57ad2c44,5a9decef,9bd441e3,60751740,b5060f5d,1e15681a)
2899 Z8(a059c9f9,457835a0,92cad68e,f84f07f6,6df5bf56,6397cac7,f6601a34,bda850e1)
2900 Z8(a9bdec25,4ab05b3d,ba1842e4,f98d1768,4d5c268c,48d0144f,6742ee4f,33d79fc8)
2901 Z8(aa2b095d,a4076872,0adcd0a7,db86e59e,ee004b5f,477b988e,29ea8d34,5b6ef3fb)
2902 Z8(185ef97f,35aaaf4d,630c486f,110812f4,13f8429a,e772e350,d60ee5b2,bb7e799c)
2903 Z8(b035bf38,ba515f92,49cbe723,b8992c13,9f29e360,9bbcbea3,06915971,1deced7c)
2904 Z8(48d059d2,3d6bc29b,4a32e9f6,2aaf66d3,66a6b104,23aae730,80afd8af,07c27974)
2905 Z8(525330f5,0bff6c82,240c4baa,a9a65e25,f5b74b38,93261398,361241db,25e3a52c)
2906 Z8(dd8021dd,cf10862e,03f1d701,80f76ff0,1e7af9fb,9486eaca,87bfa96a,2b761068)
2907 Z8(d1fbb33a,9f1a266b,d0cbcf01,f4ed09bf,f753265e,eb3a87c5,7b25f161,678e824c)
2908 Z8(6fcabe86,43dd87c6,a4466651,d9f4c24d,5264fd97,934df9e3,7a6023ae,db7afc26)
2909 Z8(bb5a8917,8884d576,ca1d58ea,97c20e9f,20588246,1802c32f,44955891,d2a34b70)
2910 Z8(ab7db9e6,7da88f32,f072b430,322a172b,fc0c83a9,a01ac0b6,13923e0a,6d19e59a)
2911 Z8(58c076e7,f1b85686,d3cdb8d2,52c605d2,ba4e5b62,0459e7f4,3f510e4b,f14966c4)
2912 Z8(67c0f1f7,f74fbba4,2addbf6a,c6f9d363,a78178f1,f7884fe9,4cffeec6,b34beda8)
2913 Z8(f8152ca3,4fb495e0,5073acc4,4da07cca,42244ac7,2a3dab0b,8caf5bb9,b58fc47e)
2914 Z8(d4e05a7c,525dcab8,c39ecf52,7ee62df1,2cc450fc,6b96d199,296d0d5e,15da5f99)
2915 Z8(4aeded74,2f114b43,a7447a3c,55423d67,c6ee9cc3,6d11e432,758b95b8,07e7207a)
2916 Z8(7aa6c92c,1094dead,b7ae6dfd,315438e4,d9a05df3,fab12361,42769719,c639d7b0)
2917 Z8(fb2a694a,73ba67a4,05995d97,3c7a3482,a96e677c,f76e7efd,4525e94a,09162caa)
2918 Z8(8aef8eb6,5d41e584,17a98a60,99d20154,87b23bf3,9f6ae612,c25f07d8,942edf43)
2919 Z8(f419f690,fb7ccc9e,58b544ff,b9ffa6cb,33c7a4ec,5e05a794,9e1e9e0b,29db1de5)
2920 Z8(737ba69c,f7dbc12f,71f49660,a10aa47b,ca44aa8b,6be20256,e607c389,24dd7618)
2921 Z8(09cdcef0,1e5c0cfa,00cc0bdf,7a5d0ccc,df5e265e,27e318f7,480672c9,14c0d43f)
2922 Z8(46d6485b,e9651f59,0f56b5ea,4bec5c8b,34a0c919,ee64627b,48b7ce61,300c0372)
2923 Z8(7cb825e0,7132214c,272fc944,01325ada,9aa885d1,dbad6346,a8a78851,85eda194)
2924 Z8(363c028b,651508d2,ea272261,d1d73a2e,904f6bf9,237edceb,595539e6,6de06a97)
2925 Z8(27013885,efd83dee,15862e2d,fc140408,f53f7132,5fd44606,0a6b44bc,2676266d)
2926 Z8(7e30a926,5622b2e6,d5c47413,8ae3afea,d10e8c9e,c0220924,eaf83cd3,5c19bb65)
2927 Z8(8b6735fb,c2d8023e,71d96cc7,a6bddee9,b765f740,72a94311,19276865,dbcf8ece)
2928 Z8(21d2b57e,d4fb23db,8d617a05,4c71285d,ef5a375c,fd781091,49513ff9,0f8a46ab)
2929 Z8(334a700e,ffad98f9,1dd30c06,291af134,24968172,65c19a22,15917ee9,b177804f)
2930 Z8(c6366e60,8948f982,044fe69a,89629cbf,ffb1fd20,cba4e4ce,5af3eca6,b8cca47e)
2931 Z8(0724156f,464bbd51,b6ce5232,c91d86e0,1cb5466f,4098c6f5,916f4c79,4e50f2ef)
2932 Z8(a4eab401,e4995642,a5e3bbb3,7142e289,0937d41f,9902bc48,69070d26,f9375938)
2933 Z8(18006dbe,376701e4,06cc6eb9,15271a0a,01102b39,750648b0,f6502cb4,fa115e8f)
2934 Z8(d4e51945,a0d1bd85,27c578c8,c2e061f6,41095b6f,1a11a4d7,4b10b41c,9bd0b931)
2935 Z8(a7792989,80bbd59e,905abc00,328bf05a,908638c1,96c1b21d,87622f2a,72919e2a)
2936 Z8(726e6729,62755a9f,2e9493d7,ad1eda99,1dde7ebc,adbbe7f6,78b43650,cf9a5762)
2937 Z8(10ee9fed,cb0f0e2e,b81de811,9031e2c4,6b1fd8bb,e7baaee8,4c9ac0a1,14c8cd01)
2938 Z8(0b796f15,2728dd93,6fe903fa,9704889d,68f8bba6,f5dcb53b,a3a0d75b,5f8935fd)
2939 Z8(3227648b,76007e6f,a9762390,58112c51,5048e983,fce91fb1,09f7ea9d,37c5a7d3)
2940 Z8(7bc60151,ba6d4fd2,14949515,bae4ff3f,3bf647f2,6ed68340,de3ee596,a6c848ed)
2941 Z8(675baf0c,a0cfff42,db361c4e,e445aede,1c477a67,cd9e99b6,287eb31e,42f4342d)
2942 Z8(c396313b,49de1bfb,eb07cd45,0d9aa71c,ed748d45,2bf282a6,557b6c99,29067b2b)
2943 Z8(b1a879a1,0792cb6d,024c27c8,62450b0c,2c9ad95b,cc610c47,743e5013,8944ca99)
2944 Z8(0cf3fdc4,d3d94a80,52620093,ee8f7418,e1487d39,53da2aeb,4fcd50b9,ad31ce7a)
2945 Z8(cd11dba2,121b94fc,4198babe,165e569a,84347ac6,5bbf2daf,9d55db6a,eb04c60d)
2946 Z8(65617b8f,23ad4834,8b480a94,6f2e5e4c,7772b3e5,56d02df9,70fb084b,e1f105cc)
2947 Z8(189228d5,7f243fd8,ed823b6f,c32a6acd,ff5d47f0,888cd649,715b993e,b99d2d20)
2948 Z8(c9b9fe61,80e725d1,147e9688,0eba4488,f77638d7,d167994d,c30d2707,edd25224)
2949 Z8(2e451dac,f8f63e3e,138c1970,ff4bc9e7,8e9b436b,0b2fa503,6d2b7068,0e30a696)
2950 Z8(3bbc1d39,32b7a73c,0c49178b,fc604aba,f936f647,43e9892e,194040f3,2ca4b348)
2951 Z8(a76c9708,1a5d6263,30c55c60,d8e15157,86a9777f,9f4f62a3,2f3f61e6,bf895e71)
2952 Z8(833f9b60,6a4c5122,a99ba136,fa7b4f4f,9af9d763,774ea8af,f3ab249c,ad7e6fc3)
2953 Z8(c7b9423c,06777b37,aa6e2d68,575a34af,6cb4b435,cbd7b74f,252dabd4,8583e3b6)
2954 Z8(f8dc7888,4720bb7c,851ed91c,1b4f22fd,37df42e1,dcb59519,99e40152,e9a3a985)
2955 Z8(382e98d4,8b585186,4495e0bc,5b9f3ddf,844a7e41,77c697e7,f2c00072,ec4ef5b9)
2956 Z8(251c04ef,60dec5d9,317aba73,06d70099,f82eb4ca,648f47db,ce5b0420,4f0477c1)
2957 Z8(75759116,8dc761a2,bbe588da,36d40002,a9c5fd5c,1d07aa6c,61fbdfe1,01cd69e1)
2958 Z8(bf171234,267e234c,9f485354,096e67c5,93f6c08c,fb8aa06b,e5a1efe9,beeaaa85)
2959 Z8(d8c4439e,10162c63,b75090a4,8959ab8e,ecc05889,e2a627be,f1c30e3b,2010944f)
2960 Z8(cde24be5,bbbc39ec,a8b66a5d,4bde9075,31a6de38,ab0a0047,ac1f5521,23a8cfbe)
2961 Z8(da63d849,c03b20e3,2056a027,9094272f,d1f5452a,8a44e200,3968f1fb,c250dd8c)
2962 Z8(cfb092e9,4d2e3752,621a5083,967943b8,c9166e5c,049debdd,bc42645a,bd28c1ca)
2963 Z8(e13286f9,68a34c8c,039e1fc5,ea10f141,70c13b02,4e035f29,4c6d3884,38360d8c)
2964 Z8(d7c95ab4,55a06cf9,6d7f1602,49041446,c31655ac,807d4a0e,bbda9053,75684de9)
2965 Z8(69c049d3,bd3b60e9,b51f3ea1,fe2ddb75,b85160c7,e163280f,d4841926,fa9a927d)
2966 Z8(203b7032,469571c4,c2c11011,b56d7809,48685190,4397092a,398ed421,1ca42a0b)
2967 Z8(df0fd894,92b2f87f,d6810ff3,c05a3e45,296dbbef,ff9c882f,0759bc5a,53efec0e)
2968 Z8(0d6a325a,8437e866,cebdec3b,58cce9d4,10124f53,bafd822c,552ceff4,0f1213af)
2969 Z8(6c8d9999,dd265f25,9e2b2982,4bb9fc41,7fe90463,1c78252b,e00b3527,d548bbda)
2970 Z8(8b81d54a,3c887a47,af908992,c086d09e,211c4a0f,eb5efba3,8c5af565,a5552cfe)
2971 Z8(2b161fab,888b4848,0fa72ede,c979c54e,cecb3e59,85d70e05,f28c47b4,5e1c21b9)
2972 Z8(542d3414,9fbe5ecd,5e079884,889df948,f11f755b,1e7833c4,345310f1,48cd0adc)
2973 Z8(4d0ec4ae,44008fff,15e6cfaa,910eb993,2b6d0460,aadab932,161b8291,dc7b6e51)
2974 Z8(ad03388d,bddc5451,968317bd,de0735f5,5a375fc3,6de81896,e0c0c2af,262604e8)
2975 Z8(32462c0e,1e9be548,9c48feab,8049886e,cc62f502,ea7ce1ba,ab3c9b1e,95f7c3b0)
2976 Z8(01df36fc,94006423,ebe78c69,958ed2a9,611493b8,41cb1c45,d55f5dbe,61cf98e8)
2977 Z8(8cf8f734,773c72a0,5a509320,fa5f5111,e036261c,75e43ec8,ff867e87,3e1a26e6)
2978 Z8(9df31413,845df54f,d7b70f13,b51447f9,db5f734d,ac2d7320,fa51842f,537c57fb)
2979 Z8(91e63af9,5bae7f8c,993d53d4,8c9a7498,51968628,55947c60,7bd51988,ccc85020)
2980 Z8(f6b36da6,41c65d4c,c7366e25,6003359d,d2ed36b6,97594296,550ba77b,d2e15f8a)
2981 Z8(d0857af8,01478ea1,5819585a,0b8c5538,c37088e7,dfaf7862,bb06b24d,5e511288)
2982 Z8(40f88b7a,71738bb9,997d8eaa,c892ea71,b5fd7ba6,5f6ecd27,9d238df2,8d2d75ae)
2983 Z8(8b6f72ba,a032c912,a40c42de,ce246737,667bc6da,d094d6eb,10012cfe,4c448b73)
2984 Z8(e9df77d0,e0a7b50c,0b22dc16,4f88d34a,fc2a54a8,b5e5db35,d4acf6c5,b2e01473)
2985 Z8(945945a7,43731ffd,22ea5f09,4499c099,77d1d022,a73f3f92,14ae6232,a6e33e9f)
2986 Z8(93bb3e11,f1a242d0,da9f1f2b,a5ffd7e1,4eb3260c,2cc9e42a,3485911d,f53e9551)
2987 Z8(b4380195,f15b9cf6,d83932bd,9def7d69,9ae75b42,a70b8815,6aa89d87,a35200d1)
2988 Z8(661e9b5e,fe8b9a19,fc2970ef,88b73070,b5467b24,97a45dd0,23154d6b,98208564)
2989 Z8(9d0fdea0,39fc1345,2fb0ecc4,937e9ebe,7ebcf61c,968b3d85,33447464,8a47fcbf)
2990 Z8(7031ff9e,56eeaf2f,3633ddbb,cf764b36,82c3f6b3,9b2ff617,6639b97a,a2b25b0b)
2991 Z8(b88b7bca,1276768d,82efa174,ce2a61cf,d1bb8621,84652722,1b9d0860,cc2bc145)
2992 Z8(0c58d361,d4b72631,49e5b1cf,804a36aa,e9c2bbfe,1c810ab8,9965d370,05681489)
2993 Z8(4ebf9b9e,8c1e0227,b7c00a32,f10f0c8c,c7335625,097de10a,212b15ec,3763dd66)
2994 Z8(d7c07019,5dcefef1,13705b04,874b5ee2,03ab412c,5aceb1db,7f1adc9f,944da243)
2995 Z8(a5400d1e,1dbeb865,68cdbb61,a27cf32f,9ae0e69c,4dd47cf2,fcac3f5b,c01c9f5a)
2996 Z8(066a46bf,138d5a87,295b8947,b63505aa,ad9c7acd,8b472dc0,8b821ab5,b0918a3a)
2997 Z8(778729ae,800098aa,52c72cdd,e2f1414a,98013ac9,de471951,b486f0c9,c1a2c4b8)
2998 Z8(468433f3,be17ca5c,f8bd3b3a,9e415dd0,7efa1e64,ccbe58ca,498c35c4,3aeab7d6)
2999 Z8(fa8c445c,ee0bed67,702b4dcc,dd039c81,5f3efe2e,2910812a,26086f92,716739d2)
3000 Z8(00120581,4d26d32b,702d669f,2f1f5874,bb9d4d58,0e2ed156,93ecd048,3bfef344)
3001 Z8(677538e9,69067e2e,23824d52,482988a5,be44aa96,9ae01881,20a3328d,bca60947)
3002 Z8(a06ed10f,a0542fda,744ea04e,12f55098,a100e9db,12ba2c17,5de54595,65dc1168)
3003 Z8(55cb5147,11baa11f,347f7b66,b399ca41,e5ae7aa9,85883bca,4270b97b,9d4584b3)
3004 Z8(ae81d895,8656767a,67cc16b6,b78d7691,305940c3,a252b102,07004373,bef79803)
3005 Z8(e40060a0,a3bc6755,63cfbda3,658b7045,cfc74367,07e19dd6,265b33a0,c0a13446)
3006 Z8(439e7807,edd01bb9,0092824d,1e7a168b,d25500cb,6704a627,26b8bb81,115a44d2)
3007 Z8(03e2d33d,fa66d1da,82b2aa21,c8715df6,e03b3a3d,5911c66d,4e44157e,9b682586)
3008 Z8(91cf3f89,15160c7b,99ff6278,3bc08322,8d85fbb2,96862baf,3ae77c97,61296af7)
3009 Z8(99893f23,28c8a32e,69781781,3bd98d33,3d9780aa,3270a3f3,a5953897,c5e05951)
3010 Z8(04b82965,edbb719f,203a293b,daa5347e,8d069a90,7518bf57,6f65242d,b16aa64b)
3011 Z8(858fb4e9,a2b618d4,9f266a7b,b5091681,8d0e1f43,0412c78d,69a9e192,8b121fdd)
3012 Z8(fa9fbfea,5419cb00,6513f467,d93324f4,6b4405be,07f30169,94b8652d,b5188cd7)
3013 Z8(a09de94c,3324391d,2d06238c,94f71ca2,35bfc43d,631dfcd1,a53c731e,8945a316)
3014 Z8(99321a65,858dd82a,0d256148,2a00c6b9,ca0b54b8,9ff4df96,4dc4d900,cf7d56d8)
3015 Z8(b09c6090,d591a67e,54fbd6ce,decedaa3,be7ddfb3,2e4b0c5e,2db4e4dc,3fb92934)
3016 Z8(91bd8729,31c83aa0,48d8487a,843efdbd,4ebf02ea,acfd0ec6,c682aa80,d3be8d8c)
3017 Z8(6c7424db,8ff53cd6,f2c0a968,a7457b99,a6e27773,e8fabdfc,4858bb58,568d0b6b)
3018 Z8(010637c2,2147646b,27cb06dc,93274a07,1195ec2f,c53ebab8,f9fdf1da,925bbd83)
3019 Z8(2e8666ad,f3c17291,3ea5b62a,53f10a42,903f6cf3,a35f09a5,a7fb07c8,b554ce99)
3020 Z8(c8e28fd4,2a6a0f69,656c0043,a76e05a5,2bedd1ca,bfe45d71,0953224a,aa96b19b)
3021 Z8(202f3871,e7e85874,65526f61,30917e7e,05ec8e50,aaa16998,c62d838c,0ba7d782)
3022 Z8(efe8700a,3158ba53,b699418a,0c5b7381,6ba5bfec,edbe0e10,faf985ee,ec3f0d72)
3023 Z8(d28c908a,a2bff952,4e8f1373,1af929cc,c9d8510a,0945189b,e2a7a514,9d778cc1)
3024 Z8(bfbdb80f,732edac5,fca71999,e86ac4b6,64cf7d59,5984f97b,ae2e3895,eaedf354)
3025 Z8(29dad521,0dc97c46,b317c326,41dc0852,9be45d5f,dd83573e,3b104b55,37a0fc6d)
3026 Z8(55831bc1,0acfd370,db738bea,d18c20e0,f6b102d0,da47e16a,a079c8d8,2bb41fc0)
3027 Z8(4e840101,688292f5,54772134,821ca958,6c436a00,96b5ab73,9e9d116a,9598a615)
3028 Z8(70bc7239,c5792e88,801d8d31,eaa3ae10,23636603,b15e037d,bdf5363a,591ce745)
3029 Z8(720a040b,93b88f0f,7519c557,55088be2,cf38669e,8a2a9188,f8ed0d2c,fd16ea94)
3030 Z8(b0fed025,c671a2e8,975be84e,1f9f13c3,3fb4c1f6,95f0da7b,e3cb19a1,52669e67)
3031 Z8(388b2789,ad398128,d6097a8a,20b44b00,6a3d3744,0703f1e2,fc06815a,00a8ef45)
3032 Z8(26d07950,f902a73c,634c83f8,45fb9d35,d6d65e6c,cb284d2a,f101fcf6,6f8678f6)
3033 Z8(035de03c,2ee2ef8a,2ef6ada1,ad576c77,f5d57c4e,4286700a,1e783014,915298db)
3034 Z8(5350b4dd,56680c69,4117f412,9bfa3a21,370f1333,f7bd3e4a,3c7cfcfe,cf4e4776)
3035 Z8(3e88fa73,ead0a1d9,80cf17fa,46d33348,20537c5d,29eb43a1,86402160,97eb3280)
3036 Z8(65185173,e89d8e6d,097ba7be,caf9bf04,256e7be0,1ac6ce9d,57cbb50b,d20e906b)
3037 Z8(f34567da,996f8985,afc39694,5e178392,ea8c8e98,b42a24f7,d9207c3c,278c4203)
3038 Z8(bcc509b0,7979d7b9,98903df3,966fe843,be47686f,48885dde,34e2f50c,94e764dc)
3039 Z8(62799046,808f5ba7,f54cfab5,76cd573c,b00d72d1,8bc7693f,2215400a,60921620)
3040 Z8(804650ff,83d8ccde,c21e262e,3eb9f382,031deada,f29f8cb5,1266dabf,cd75779a)
3041 Z8(b025d6b8,ad6535b9,c7460dff,69495b3b,74721dcf,1cc75cdf,a0dee2b5,71a91bba)
3042 Z8(da3850f2,e5485810,420d40e3,426e8113,a5d8ecc6,f6128e97,3b151682,10e56d03)
3043 Z8(d125f315,7e494f47,42dae8de,cb569ac2,7af1fd1b,aa2f3802,7ba49a47,3d0ae619)
3044 Z8(578357c3,ddf6ce8a,476e586f,ee81aeb6,af4c7514,381e5eca,1faebc83,cafd2d5a)
3045 Z8(c9fb1ac7,2124e8e0,c1b93461,565a3f56,9b9da690,1652a3b2,0e334f34,ebd13bab)
3046 Z8(185c3b85,609ba7ea,1e2c03a9,efdf72dc,0a3a4e1f,221b47fc,ee93c90d,5dcb2828)
3047 Z8(8f263ae7,800f49b1,24b68f54,b561095f,689f36c2,b346dde2,65f23582,6c73d698)
3048 Z8(0bfdb869,9c41a7ad,e08dd903,7e3f225d,9bf1d7c3,c044844a,a13d30cf,a8896734)
3049 Z8(2019ffc0,ae041a80,274cb80b,a67022dc,d5b736ef,7ff16054,53220ebe,60f9e42f)
3050 Z8(b3d76a43,a52c0b75,1edb7d9d,b0ea7cb8,38efb3dc,4997787f,263bb8e3,4efe568f)
3051 Z8(816c95bf,c938ed77,8fd9941c,76ce6764,28d985eb,9a204a42,5c81b7c1,720634a3)
3052 Z8(7dc7d8ff,15e43ff3,9dfe33c4,bee88ad4,21bd89fc,732809f3,1fe9e44d,0fefbf47)
3053 Z8(5db17d5f,97aa8786,6378f78c,a8414a92,e00724ef,50f42edb,2eca3790,fdddc733)
3054 Z8(b0de9b32,4b5a5f99,157b9801,dd561043,824c9338,95db7fe2,b6921d48,5cf614b8)
3055 Z8(06ff74b8,148c0692,cf6717c3,1af65de3,345a6b37,fc930a17,bc457086,dc8f36ce)
3056 Z8(16b8c180,dcf82f52,975ac1ef,73d1da2f,c9565067,275e1cb0,2ba9ceaf,27b01824)
3057 Z8(41a23b21,071fbd9d,7386560f,5d5647fd,b66ad4a5,c97a49ac,f1250324,29381c69)
3058 Z8(2b2dfd47,619375dd,06536830,c8a61536,971bbda7,b7282831,f0cb06e4,025e4f5b)
3059 Z8(d765dcb3,69e659a1,8ca62afa,e8a469ca,cb740615,9bb5527a,cb9f4bab,b91f299d)
3060 Z8(02212fae,0bf4ee53,96ac9bfe,c6b5c455,d5525c4b,6e997d67,9f023fca,b36f8dd1)
3061 Z8(2a2c3cd9,de904a40,eb36f95a,aedeca8a,1b528309,442fa9b5,948c78c8,275bb57d)
3062 Z8(2bdd88e0,853eff7c,762ea3f6,ebccb9d4,5a685d2b,d17638d8,ffb3317c,09a67004)
3063 Z8(97423234,f0b73b71,0143c41e,2f87ce69,39447a09,c9241a67,aa9c469b,41ecc7c0)
3064 Z8(df22572e,5c55d7af,77676ea1,826feff0,2de4c405,3652c90c,f3e404c4,e20fe838)
3065 Z8(de57bf57,8a0396bd,7b9ba83f,b4296d9d,64f600e9,59373a5e,dd30beef,65abeb16)
3066 Z8(aa501e66,05dcb038,b63cf8a8,79524f5b,69e233c7,911fad67,53a9ceae,908757be)
3067 Z8(c585b9ed,bf59291d,caa42e6f,68545f1a,b2771a73,56bed22a,755520ac,3310e41d)
3068 Z8(fe5e6850,1440e5ca,bcdab7c7,a0f62f8d,94ee82a8,1339d722,00abe010,9601cd6f)
3069 Z8(730086a6,b8ae0ab8,da757ea9,49734009,45d9c9ab,a285ad7c,11a4ff34,718231e9)
3070 Z8(29d13f2f,cf2cd257,74364967,826e5292,3462b18e,2977121a,33a2a591,8f5373a7)
3071 Z8(f26e5613,5788ce23,d4f72505,fae12a2d,3c058f51,9d035b07,be52f8cf,b8d14d48)
3072 Z8(34d692f7,aaa28e03,e8d298ae,e277cc10,9b772c64,ea53d222,94ed8bf4,b5b1fe61)
3073 Z8(ac19f4fc,3fc07583,495b697c,c35e6f05,6cf181f1,8f3dba54,78d92c61,ddbe98b9)
3074 Z8(6a3444d1,95db871b,bc1f4bab,5df51063,598bd8f5,560d48d0,76f6ffa6,e7bd7096)
3075 Z8(915e6a39,39303bef,06ec2a20,6b4826ba,89a75de5,f5d8e318,be83d580,992dfa53)
3076 Z8(289ab106,cbc4d2d0,73ff649e,be1f10c1,8617a282,e6a36b30,cf383168,7321a97c)
3077 Z8(40951d9b,afd4bb1e,2f9dc889,5ebcfced,20c96f5e,8853bbbf,be858fd0,3de6d6ef)
3078 Z8(b7aff58c,a2ad6403,d85b0871,b268140d,e58b6088,ac9d7639,d9225531,d062a9a6)
3079 Z8(f38aa569,54dd8046,4f767fc8,f24f4f29,4feece8f,060fe2e3,2fc91629,dfdc345d)
3080 Z8(96934cc0,781942c1,e308bde2,29535179,00e54dd8,df52d8d5,73ee2e4a,63d4b8f9)
3081 Z8(d123a8a6,85a99cbb,4ac00738,9f4c7fd3,6c77c06c,1422b16e,5e72b0ef,929e9e40)
3082 Z8(a471e317,fb52e736,86848536,ca07fe82,f5436bfb,fdf95967,9330f095,0cdaaed6)
3083 Z8(78792c33,3085d1b1,a94ab1f7,c6916edd,d7d485d4,b4ceee9b,efe6998d,12ec0a89)
3084 Z8(e72a8add,82eb036e,5ed80a21,c0ccc7fe,4966ba33,8c6dbe84,7a522e09,0bc32ef7)
3085 Z8(1a021b03,a4e673d0,f674174f,f1598dc0,2c80c820,7404e150,cfdd067d,bac814ff)
3086 Z8(984c92a3,caa32b9b,80529b80,00e3b96b,c5ba0cba,00d513f0,0eb88f1a,c92e1dd9)
3087 Z8(6e4d25e7,83f2e73f,ac5e2eb2,db819899,9dfe024d,565675fe,f483b033,400ebc26)
3088 Z8(acb01b8f,6c56768e,3aa54c66,a8a9ed9d,552cb269,e5a69730,1eb31453,9a43ba11)
3089 Z8(278eae12,c4296240,c27656b2,3002b50b,d618cafc,3e729c99,3942c09c,71e7b875)
3090 Z8(4a5c58cb,f70f0a7a,e997c6f4,952280c7,d090df6e,b6924768,6f13cf2b,75e812dd)
3091 Z8(ccb92fca,f1e4302a,47410993,cd9374e0,7106c445,3cf17277,26c539fd,fee880e4)
3092 Z8(8b451eff,b6fe32a8,1b67de2a,67b9e75c,d6ef07a9,d0a98b63,14e3cbf0,b09cd522)
3093 Z8(01f69b1c,75ebe744,92e48271,03c36f5e,6975fcbb,b0b0df6a,15ab829c,b412b07a)
3094 Z8(04ba2f1b,09304920,7e3cc92f,eb623590,c9bc8958,50704d95,a907024d,0b9c287c)
3095 Z8(e23e9bde,d981b276,488063f7,f603e75e,c13ef384,3af0934e,e7bd7ce8,9bb75a4d)
3096 Z8(d82b01cb,251b92c6,cfd818b1,0f80a7c0,7b8800f2,bcd506bd,1e059a5c,5cbef7a8)
3097 Z8(ebaae95e,2fd3bef3,0c0dbfe1,5d77f30a,eff58423,9fdc1b2d,e82c038c,1abd1a79)
3098 Z8(abaa8d61,9cb9d3a3,2ce25d7e,d640ca8c,033090fa,b4faa517,9b9577ac,7e88afa8)
3099 Z8(12bcaaee,0ada618b,24d090f5,aa411417,936c1975,9323eabf,2fb65687,cbde8ba3)
3100 Z8(cd8884f0,e5265406,79ef126b,ce9bec6a,dc29a2a9,25be2754,d4592442,0f0b86fb)
3101 Z8(a6bb76af,7978789d,abf37628,eeb5c231,01acf5cd,80493e69,bb627cb8,2124c721)
3102 Z8(e323dc24,04fc20a1,ebb08520,12603f3d,ce1cdefa,222ff0b7,f0d7e4b6,a8b3d1d6)
3103 Z8(43e1231b,ea98a3a1,197d0f84,7f4da506,24464bdf,7dac1194,ca6cfbf3,d6fdc95a)
3104 Z8(42a2f452,456cf6cb,dc468415,96e58322,9c48dc89,77af2a47,daf6ef85,036ed785)
3105 Z8(ee92edbd,8db8b57a,45b44a0b,d3a86cea,903fa6a5,54aeec10,96da36c4,4be63dff)
3106 Z8(0a9f8fb6,f5d855f2,11e5f94d,39502958,ac6b15c3,a1eda073,77fa2227,27052c6e)
3107 Z8(e008e018,c8665508,722df837,ca05f6a7,8dd1130b,56215316,bc8a795c,f4fc679a)
3108 Z8(ee5831f8,3a2bc900,ebf054fb,c10240e1,2eaf30be,b8a0ff8f,39adc3dd,978ecc75)
3109 Z8(519c5359,e2696070,72220392,275176c3,e5c7a0ef,cbe13175,9175eacf,a0c966f3)
3110 Z8(72ccb96c,b3610a4f,a08d6754,386afe7b,7a60e637,7c958a0a,0fb4468d,c33e9fbc)
3111 Z8(054dc3e4,d09f8777,57231dcd,e93a0b21,ea691ef6,8742690f,223cd47b,e21a903c)
3112 Z8(959608dc,14efbaad,3b473af4,a15601dd,09731a86,39983c8d,b81bab08,ffdba646)
3113 Z8(7254b4f1,e038f804,37118e78,81f1e264,ed5b9785,2f7179f2,a2dd458f,650b99bb)
3114 Z8(0f3aeae8,ca94f051,430d11cc,b130fd1b,2901732f,e4f09ac1,d9e82e13,806f3e9e)
3115 Z8(84da59e6,902d930b,2b36a1e2,ea5f7b4f,f12562d9,468420fc,2bcab129,a524c405)
3116 Z8(ee337e77,a6b77c57,464ef9e1,6f8f207e,6be78925,6cdb5d40,38d28db3,bbcae60b)
3117 Z8(6de1599e,e42b3d87,1fb08a99,a4091b30,6ea5a74c,4dc785b2,23eb2c1e,a0707dc2)
3118 Z8(dec35338,d666b7b0,bae5cb5b,0b362fc9,26ebca65,22c7eedf,83669603,9fd97bea)
3119 Z8(61649f52,1f3080cb,1baf44e6,2f23f67f,0747c947,b0c8788b,877ebe0e,224dc993)
3120 Z8(5aa97e23,f202b38a,6814ac26,11d4f268,231c2c2f,52e857cf,5e461b22,5e8360cb)
3121 Z8(ee11f0c5,c1cbb950,793c972c,20217edb,f79927d1,f664d0ae,b0668b7b,d1e1ad20)
3122 Z8(e6edfac7,4fa94078,bfdedc3f,54758ab8,ee747068,1d0f9c2a,a17761f0,f33daea5)
3123 Z8(80a34140,35d84a19,2c1115b1,0961f5be,0573b94a,7435532e,4423d13b,58617603)
3124 Z8(87312b0d,54cfd8c4,29cfc2fd,104fa8c5,1c40e5a5,71af55d6,078c1dbe,222689e5)
3125 Z8(6c4343fa,47d2d80d,87e0bbd1,9d9232f3,a76df00b,91cfebf6,255c3d23,e565bfd8)
3126 Z8(59907fd1,0adb17e1,3833c93d,fcf7cd3a,1ecb9ae4,50f370c5,391c509a,632f5953)
3127 Z8(05b60a81,3f853ac0,09301a03,a932f088,99dd12c5,f6737641,262bb572,b97bb62a)
3128 Z8(eee23790,671e24fa,4aad5fee,0d92e59c,d11d8f5e,b4a7fbe6,35e308a6,47603b0a)
3129 Z8(0dcee4f6,37f98f9d,e31a6f58,c43d08de,d4d044b6,837a1123,0426506e,171261d3)
3130 Z8(562962d4,7e22814a,02ba169a,e812bf25,7c649cd2,8b6cabb6,7321750d,2073f4e2)
3131 Z8(acfce43a,4ab2a841,bc26ed5d,28f4aa1a,0cd3cfbc,4d4feef0,59ff55fa,f20c2a2a)
3132 Z8(56cff010,56aec095,cd26bf67,a5da2ad9,b67243e6,2fe62195,ec210060,84a32cff)
3133 Z8(07d6db47,747faa70,f00316c9,a2653d94,1c023d10,031f11d6,c5854b89,dc44a727)
3134 Z8(35750226,470044c5,e18d55af,0b6fa655,f01224cf,fc03f8d5,e36e201b,73d44dee)
3135 Z8(23ff126e,a60d3be6,2ae801d3,64b2ba82,7b8ae956,e4e576d3,e816b5b7,c4c70a8a)
3136 Z8(fef4b3b9,34f03333,f7775447,3ff81970,a95af69b,d3f7838b,880be4d6,37b6bf30)
3137 Z8(e4828b58,af2e6a38,09972377,1fbdde09,59529e15,292d2fee,9fbe23e3,ce684ee5)
3138 Z8(2426794f,03ba72c6,23964238,dbe6a006,185046bc,f8947ccd,db9db7e2,a423bf69)
3139 Z8(d045782c,4b055c37,4bf191a4,e5588559,1d0d0c93,5700c0a8,75b1b9bd,d1eb09f5)
3140 Z8(bbddb631,f1701f07,b83f7282,5e145f60,76c9b5fc,0aa98996,afc74d3a,150a4f2b)
3141 Z8(958bf3b2,9a6900e3,23124f57,06167ed8,72fcca8f,d9a96e5d,49930ad0,56d7b3c9)
3142 Z8(db01655e,e886479a,9253fb6f,701a4b96,07aabc28,f31bbbb3,509ece29,ed00435d)
3143 Z8(17d097b9,c880f133,a597392e,0d1f9b28,2b97c779,119e8468,ae78fe5e,78a3e76b)
3144 Z8(e9b02dec,530718f3,9b09af39,1af25a91,63743d3e,0da736bc,8a1c8229,f5f2ac92)
3145 Z8(f71fbb0d,7c84cd4d,7b770931,14fee532,66ae73c3,3875022a,2e23a5c6,a31b6209)
3146 Z8(2ba441f5,fd200a8a,b6ad7a81,69576e3e,e8d133a1,58436112,9423f791,5731da9a)
3147 Z8(39129f8b,15c2c5de,1c5038b7,3944ed86,6a6166da,f3edd6f3,904cf330,6048e67c)
3148 Z8(83d79386,95d8d529,cca3129f,fc9d655b,3962ef3c,25ba8362,a310b736,476f7bb4)
3149 Z8(acfd967c,f2469124,8517a664,d3955b8f,d9ba6196,75727dc4,e0b0c562,511427ad)
3150 Z8(6cea0d01,93e86f4a,60aedb58,e23b665a,8c251e95,57e73a30,86fb8978,ab5e44f2)
3151 Z8(f8c83742,b0300016,a20a7f2e,edaacfec,44ca4738,3edba997,c8fa2b4c,58de48c6)
3152 Z8(26b5c811,92770e98,d4e47091,8c585338,41a1de8b,89c21f63,5873ecb4,2cb87493)
3153 Z8(162a205e,8cfea891,e7726d01,945289ab,84a4ed61,9da1847c,5d47bec5,7ca9ed20)
3154 Z8(c3bd51c9,219847d9,1bc79d4c,9216e4ad,4bfb14af,9e147b28,a094da06,00c8e2bf)
3155 Z8(752d4d97,9f1587e5,bc1fe24a,ca2c8585,013d9e25,88545ca9,4361d713,e31c4bcf)
3156 Z8(e887c13c,6269e046,d9c4ccbc,6c3152ae,552b082e,25eb07d1,009bfd63,b0e296a4)
3157 Z8(fe25997b,3f27d1a7,4dbe7ff6,5cd3454f,86fe6a66,9d218353,9ed334ef,c8ffc273)
3158 Z8(6bae5b17,9000b3d4,b66b47d7,6e8d4bb7,cf08ca7d,04e55267,8f348f28,c97e0fde)
3159 Z8(90635f95,79d66031,56008fd8,920c0cf4,e2db0c59,7174b123,24a5201c,0e474423)
3160 Z8(031d3202,e174784e,2e817c67,866cc559,ea1a7be9,627f656b,ef9dfc08,8079d53f)
3161 Z8(33e2d150,bc4c1215,db416fe3,3edcfdb0,ef1798ac,27d544be,993c81f1,82ea78e3)
3162 Z8(bf27686f,e9e68682,104c24cb,5e954190,d78f8a43,351f26b2,0f31ab1a,90995e4e)
3163 Z8(abe5f40a,9159eba1,42adba8f,50ce79b2,9bc73a97,a2b559ef,30221d9e,b371c92f)
3164 Z8(7654aa32,769613e2,2e9e95e1,e4519420,d74f21ea,fcbc373e,34df73b5,cfc1759c)
3165 Z8(6ee5d844,cb7843c0,6d5905c9,5e422322,67e3d4a0,a1652ce6,07973078,85c9144b)
3166 Z8(4c5d0b1d,bfa544f0,59f3d60e,87c48698,10b01da4,585246ae,183af30a,7b2691e6)
3167 Z8(e161911b,8e9d4ec8,08f22c02,45d3312c,7e1baf6d,249fff26,e4823fa0,885a4c5c)
3168 Z8(19c16b8f,9f637cf0,276f720c,e0b9bd3e,0ad39e57,ffe9c0dd,1fec3185,f3854f87)
3169 Z8(e8788a0e,56f4c167,ff4f7d40,ab104951,08165517,fed6a1ed,e6143fda,16367289)
3170 Z8(0a3b6cb7,1fe80a98,09f22683,04759f52,c2a0e0dd,0c598626,f9e0e3a0,dc169639)
3171 Z8(6dd29b32,e45282eb,7c88d0c0,35949d51,7e50d832,c165a911,eca7f605,fe118dfe)
3172 Z8(cd03620a,093e1c24,730d232e,81a89672,70a2a15e,2fca8a81,9c8f7b00,09d5d113)
3173 Z8(c2a0875a,84f5fe25,b0411d37,5ee5b509,d55ce1b6,c4384c88,ad338e16,aff86144)
3174 Z8(e3696e4a,be64dfbd,0998f07d,6c96b6f0,f5ffd3e2,b255b5d8,a620f400,c0bc3330)
3175 Z8(a9d43ab1,4e7888a5,9838e725,c6525338,e0e96310,76115644,d73e7291,1406ee81)
3176 Z8(f4663370,f6bc702d,7e2f48d3,86e5f67c,22e459f8,0250f623,329ad737,b49bd120)
3177 Z8(e16c0aac,00c32017,45fdeb1e,7f25ad41,d4b1f52c,81e0c760,fe2077da,a60f95bc)
3178 Z8(0b2e13a9,c576d9e9,a5eed11d,f6f378e5,736a68e2,7414c638,2c6e64fb,25a11bf7)
3179 Z8(a185879f,6efaf126,1b077046,77a6a858,57a54301,916b6083,08be7474,8633b54c)
3180 Z8(c383d408,99f993d2,46d17523,78cbc8b6,f326c264,439f49f2,b4a20e9e,023c1de9)
3181 Z8(09b04cdf,92457948,0610e4e1,5b254b5d,c079faf4,e3cbf0a5,ae6459fc,b1337100)
3182 Z8(e475e5dd,a939c623,2ad78545,07281f4e,f43632dc,733f9492,ab9df290,601b4832)
3183 Z8(1db1148b,f7e89d58,0af175f7,e7d242ec,4bff0b49,926acdb4,d3056f77,028265c6)
3184 Z8(42f93b37,b01f24e0,807a566a,37cf9cc6,939709fc,7d48f09a,b77ad652,9ef3f673)
3185 Z8(5f867f97,a5a794e4,fa2ef4cd,85ae6fbf,32c889d2,f0a84319,16085f4e,3f9937f1)
3186 Z8(4967da23,707e20ee,dc43f46d,cffcbbc4,af06eea2,ba1eaff4,c48a823d,2f94e4f7)
3187 Z8(62cadaad,87905774,c24c666e,ded9ae25,199ad295,e1b00573,31e361f2,859e63a3)
3188 Z8(959018be,69cc030d,ee653966,7ce36425,dbdcdff4,d0b64c4f,62c08bb9,1761c664)
3189 Z8(9ebd8c0b,ac39c38e,bae48e2a,4131bc58,93d94c8e,7521a60f,562c90e4,cd902068)
3190 Z8(14577762,d25c060f,91cb65ff,0ab9b877,c21debf7,d4b9ca64,dacb4a98,36705d2a)
3191 Z8(04db5e84,e66d8056,99ff9bb8,612ca330,11ede701,48a34967,490d26be,02555d6b)
3192 Z8(f033e201,ee7b4fff,d85bfe2e,cb118b03,19a38dc2,39dbfd91,bf96ec31,70457baa)
3193 Z8(d20d6b50,c922064a,631a8349,9b527157,8fc1c11f,4ba875a9,37908938,a5519ecc)
3194 Z8(032f043b,e5193221,5cdce7ef,c5e84d84,30791612,560a0112,cf98445b,a8023399)
3195 Z8(5fcc8b90,86b45f3c,b70702db,76c36225,027bb532,70424a5c,dab34c9c,ebf591d8)
3196 Z8(dcba30db,398c03c6,491f5f7b,c903e40f,ae981c12,7f88858c,2e50482d,984d08f6)
3197 Z8(bfd97c74,9913930a,ba2d1937,ce78fe44,06de30f6,225c9f09,0ce13157,21056b5e)
3198 Z8(0780aaf5,ab2adbe1,6e0cbacc,0c45a68a,7f752ece,e78efabb,335f1318,93598a5f)
3199 Z8(44845118,bb2c9bdb,e2c381db,6ebdf5bf,70c51c45,6695ec8b,66fd5428,a2e40181)
3200 Z8(fb349a21,bdcf353a,0845b51d,d42812f0,3ae1faf8,b2a0cabe,bee2723e,bf5d2bf0)
3201 Z8(0f09dd0e,c453c244,8d6c2f45,8f1bc235,dfb54671,d27e6707,a86a825c,245d64e2)
3202 Z8(9b5979c2,50f1d507,2f03b1a6,526badf7,81a08cc1,af95ab12,f0d50165,202a0c59)
3203 Z8(276a764f,232252f9,b2128b50,0d8dfc71,b97f920b,87283535,303bbf29,71a68de0)
3204 Z8(bdaa67d1,851454c1,0cb9948e,3a29f486,b87c9ca9,5c774fbe,6d5e65fd,c0e6d51c)
3205 Z8(82eefbc0,1346ff43,345f2b56,f820d44b,603fc15f,e4115009,fe6f90a0,964d6462)
3206 Z8(dd55cfec,c53df51b,6cd95824,1f707fff,dae750fe,7b691af6,730a6d64,c75cf0dc)
3207 Z8(455f0654,d9dd0245,90cae083,d8232e1a,8ecee101,73cab9a5,6f817f0f,55714b8e)
3208 Z8(c4731f5e,88332f8e,deb4a7ed,b21ddfe3,168ba3af,48568dc5,1fae0dd0,5e924609)
3209 Z8(9f8b4ef8,dedd77f9,fe4e0b48,b0e52504,4589727a,406e9c55,d46d964c,d6a6412e)
3210 Z8(029fb0b8,277ed871,6c4f76db,50904192,72215145,3cab3d70,5047d632,17b16be3)
3211 Z8(44d4bdbb,1b20cbac,4270b138,a6cc9803,7ca7ce75,b0b78ed5,563a695e,d44b9ee5)
3212 Z8(b771f0fa,7dd55d18,0003fcd7,4c243440,4116e216,5d055f7d,6f98726c,a9f0e582)
3213 Z8(d832021d,efc02465,9d85e121,0b995c90,d5fefeea,e19127cd,77b40c94,76f13acb)
3214 Z8(9a8c6ff6,8a6d4596,ced0ddef,0def8809,9ede288c,b4a5818c,3749e187,b9c03c02)
3215 Z8(7879c15b,6cdde013,5ee56208,5fc0ad11,1fed6329,f38703fd,98aeee88,f3386cab)
3216 Z8(2f86b562,6f7287ca,090c9933,f3df85f6,ee27d8e7,e44f7055,83921bfd,111fa4c1)
3217 Z8(a1283c2a,292b760e,d357064a,be7632d0,3be4f4ee,17cbfc49,ea4ebace,93a032d6)
3218 Z8(ede41b2d,56c05811,8f025936,f77aa1c9,5e50c26f,c7d9269f,0e62d47e,d1c2733f)
3219 Z8(c00ff2ed,1df127aa,4e48f6af,bcaf1138,f09d33d7,8e8e4926,76a8088c,006d76a9)
3220 Z8(0945cff6,b665ea1f,76194796,837f5d54,6a2ce379,1a6ba6f0,f1078af7,b4528089)
3221 Z8(29d7a089,5b8682d6,0dd776cd,bc017e6e,668c1211,04a5e750,f5e94b5f,aa555c5f)
3222 Z8(8a5202a8,8e7d1264,ab46a41d,5f06ce0e,8b14f7a0,03a81df4,a5c701e3,d385ed33)
3223 Z8(8b16a2e5,687ae1a0,bf233c95,6f23be51,8204a564,0fec210c,3c5c3dcd,e71be4e6)
3224 Z8(e85edc26,560e48e4,4fa28d73,d2718926,d5cd4c73,000aa48d,18dead09,9e21f621)
3225 Z8(c1f3b573,cfc43229,e58befef,76131e32,33b3032c,ee5aec13,b72012e5,70b92b4e)
3226 Z8(e000ca7b,5a2819a9,9f4f5fdb,042e3987,f829707a,df92d22c,33653234,9697ec75)
3227 Z8(680ef8cb,c501f18b,e8f02c96,0e0216ef,521f3908,f9db80cf,be63b27a,7e61f76e)
3228 Z8(1a43b91d,ff0ec8c4,9ab595fb,f0f17963,bf7e5000,a6249d6a,1c1cdccf,110a2bc7)
3229 Z8(55034fc0,7cdc6e13,576f2cf2,87430593,552d4939,2289c242,12c806b4,e2dcade3)
3230 Z8(2ed7eaaa,1cdaec4e,4b31813f,9ad590b9,382f2b5d,e6e284e5,d8f0f937,9a675671)
3231 Z8(c1911583,f145b052,bb1bfd61,1b4d6be3,38d9ef09,c91f9540,230c1dc3,a4b3a09a)
3232 Z8(2aacb9e4,0b56e35f,e6fff065,aac15edd,9f72c762,79dd2d63,4a00ebcc,ff5a9ba6)
3233 Z8(935f6add,c4c88194,5b4c62ad,8fdd25cb,3d5b7ccc,891cf5e1,659cd5e1,b5ed08cf)
3234 Z8(d06abe26,8128c411,a349e897,f9bda387,cfcf6f26,cc4ee9c9,ea94d464,1f01561e)
3235 Z8(4a0daaf3,00adf1ab,dc63d648,bfbbb9ef,7b43de85,f4d470fe,03dfb11f,d7d47294)
3236 Z8(160d81d6,2d237453,34e79648,97e30ba7,04f49fe9,8b0de8b1,b9d22c91,e50c9d1c)
3237 Z8(34fdb35b,5b34f837,1bb60051,67b04b88,16fe251b,0b26fd70,34efe2e4,f1ba9327)
3238 Z8(76535724,4ea04b1e,93c90efb,b99896f0,224d0376,bd7a493c,872b8445,bd8f6445)
3239 Z8(b38458a8,4e51f561,8887fb00,14474910,6c3dcf72,8d5cf1b4,b2ccc5a7,39915a38)
3240 Z8(67ec4e3b,56d23545,f8534525,bab8e493,e661ac9c,1f7fb979,eea01689,34e15d5f)
3241 Z8(065f9b44,7f18d767,9c16c362,4b18c328,709e077a,9e78a37b,90a3c285,52f53c6c)
3242 Z8(c8f8ec92,f36ddb5b,02ffcbb7,97747ffd,2055801a,fa0cde52,c9fb8a36,79bfc8ba)
3243 Z8(1a8692aa,5d994f56,c0dc5c0f,e60a3314,25e4842e,4019e737,dd7478e4,4c1e6c7f)
3244 Z8(e10ea6ed,aa9f2e1f,1ac31219,2f8b6c46,9c4d03fa,6180d09d,caef2ad8,67e66dfe)
3245 Z8(0e6ed9b9,92dc9603,e99911fe,06be5479,a024ecdc,a1b7b03e,72334516,1d8c775d)
3246 Z8(cd6bc9d6,516509dc,79a6a98b,d644b3ff,145b85e3,7e754a13,24037ec8,6e8fceec)
3247 Z8(3bf1b9e5,d44192c5,98f15ca4,620339f1,8fba0352,6e7623da,29194141,e124ba4d)
3248 Z8(59849e44,28cc7de3,10a5c496,59f1ca03,ca495b24,8461b5c8,f0915073,a6df2721)
3249 Z8(06610145,48bcef57,35621eb4,87830fc8,05da0d8b,73ba1458,76759cb4,ac0a8c9a)
3250 Z8(9c2c4eda,fec1c59e,b4427e12,b4c2e891,e545d76b,f173caec,c1c698b2,2215b5a7)
3251 Z8(96b5b649,0baf051b,bc59142f,c507be6d,b518ae12,5a295490,3270b92e,484e8932)
3252 Z8(4c47a480,bff80038,d652c3ea,7d2582e1,35ac3860,5d8680a0,98374510,87d95a82)
3253 Z8(bf3ffbbb,6de0bce3,6e1873e4,6b9275f6,7a3a6ceb,3850ab70,4c004c18,ffb2d99a)
3254 Z8(14a1cf78,01de6525,b3878380,05892047,bd842e6f,904abfd9,a1167160,d30607ab)
3255 Z8(996be2e4,517b0b93,582dc037,3ef93c4e,f1c8133f,4ef58187,073cf460,76194694)
3256 Z8(55d0ab03,f4af9b2c,6bbc3a97,61390083,8f10b0b5,cb9f968b,00d9ad26,50b41df0)
3257 Z8(74153e41,a7daf1c4,559ff1ab,aa2dee0a,266a9f32,8f474f0b,b7217238,b51920ef)
3258 Z8(38cea67a,97fa77e3,ab3e0214,d61ebc1f,154cc1f3,dec2aa66,4885cdcf,59b30967)
3259 Z8(c3b0a84f,9ca2d9be,08bf15d6,2c777f14,b19847ad,e2c90c06,c6cc44e5,22e1be80)
3260 Z8(e3b3264d,10d1c106,fe6393aa,175b0b9d,daf82315,722db653,09f0bdc3,4302bb24)
3261 Z8(b9f08fac,c270e77e,38b66870,17d902e5,7d0f9e7b,ef44894b,28844376,e03dc424)
3262 Z8(f6b4cf6f,9f96f8eb,78a5e6c3,dc99cf0f,77948144,f90d2346,0e7d2504,fef25603)
3263 Z8(0c6e4fac,28947b48,6fa68497,08063f6c,4d582b45,518c8d1f,87dd8bae,ce83ca6e)
3264 Z8(3ded8062,7690e0d3,110d3333,d424cccb,a0691c9f,8491b74b,dbbf961b,bf8ca597)
3265 Z8(b528c4e5,87831a89,25c506f4,e03b31c8,deb32601,c267d481,cdd0e613,a3577811)
3266 Z8(6e1aa6ce,2b20dcd8,95b4622c,58f8937a,2ad0e689,2a2ef558,315a24c9,797777b7)
3267 Z8(5b8f2a5a,1b7c0a29,66bb1810,abe98aae,81958558,5ecf8530,fcb391cc,a0ee86c1)
3268 Z8(4681c431,4c4be55e,53faaefb,20ecfc21,a97b03d8,46781eae,93d3a877,2ac45527)
3269 Z8(8b83e1fa,d5f74f40,4afba6b4,038a9ed4,bd187ae7,eeea49cb,dc6326e9,b9d8a0eb)
3270 Z8(211ae76a,ffb00a55,4f6f4588,8a861c50,b41a7a11,10367d40,a668f918,73fcdfef)
3271 Z8(c22ef1db,a961a13c,5a77fb4d,c3c2602c,78aec24f,85728f35,90ae43a6,544a3875)
3272 Z8(f0b2d6b7,9920cd10,62d4821e,95763947,33449cae,e5eecf9c,420606c3,1719a471)
3273 Z8(e55be920,818b2cc0,9e9a55d6,26b1cb43,396daf48,61379a62,5e401b64,d65d988d)
3274 Z8(6f40cee2,a6b5b07f,25c20877,c1145c7a,54380361,634bd886,c4e7ed7f,885517fa)
3275 Z8(85e630d5,e4c78afd,d8735255,1b66600f,0e9a4760,c22ae6ea,fa0e9fea,c79c9e84)
3276 Z8(7ce167fd,b636c927,d59a9917,56aa061f,b8724096,05892927,b9a769f6,bbf1344d)
3277 Z8(cd881354,22041a46,72542533,71a1d60c,8ac117b4,a39d9dd5,28d2ce91,15432387)
3278 Z8(48e2a3c5,9203d9a9,6e7f69ab,34db510a,2cd704d8,607733de,29154aa7,f384c842)
3279 Z8(ae9ec3d3,a865d115,8b83f017,a0f6be73,4c7598e6,95e39376,ee43d440,7c748bc3)
3280 Z8(d96795a4,9294db13,6364afc4,067705f7,b9efc03a,3d2cb687,5abc687e,ed8183f7)
3281 Z8(bd2140b4,e7f0e937,f23b4ce7,6432ee53,1f3827c3,161bd5a6,f4a78c87,68e4461b)
3282 Z8(1176185a,18a69dfb,32a89105,deaf117b,33746e9d,96d3196c,3816bb85,3d1b228e)
3283 Z8(3f59f82a,593f4ba8,4f86b14e,acd08499,7c364293,7c3f8956,6cbfa457,7ff3e620)
3284 Z8(28b686d1,a1c0e367,62b67af9,fed3295e,7e2e7391,7100403f,f553150a,bd9864e9)
3285 Z8(e3ac48b7,62e7da84,64e0c290,3dd8fa17,183dafbc,1413d3b8,4f5540c1,9fb7cfb2)
3286 Z8(00ab5d7b,da5d1341,6999e284,802c1083,0431f795,be287953,1c1f19e9,8e01b147)
3287 Z8(b1d262d1,a4e5da07,09e7f615,c21e90a9,8b30b320,595fc4c4,30ed74d9,6efb4050)
3288 Z8(1c9dd97f,970efd5e,d406ee38,b67112f3,35b7bc32,d215c40d,82d96baa,96ae1526)
3289 Z8(f2eed99a,f40e0024,672311b4,e9a0daa3,9b3c4d61,968ea93b,0174c330,fbb562cd)
3290 Z8(b1148b65,254d755c,27d5507b,27ed24a3,043545f9,17435b25,cc2773ec,ae1aa7de)
3291 Z8(76f4b4a4,419c67c9,d806f787,88691d37,90b1a165,07288378,64df2765,a19c7c82)
3292 Z8(ceff8802,dbf2b465,0b9f3d9c,14c7ec37,91410931,af5fabc5,c957e169,3af3e809)
3293 Z8(066241aa,fe847877,7d54dec3,34939e6c,6cd589ec,e8795af0,91f57914,41b01ac5)
3294 Z8(856b32c0,21f9b82a,179910ad,2470d945,bfde968c,0e465c1e,bdbd386b,32b3547b)
3295 Z8(e0ef5170,2047db49,1d9810ce,0b9c87ad,c2d5869a,906b4cfe,f4f71be7,25d7fbbc)
3296 Z8(0b540d0e,b0bb7715,cbf1ee35,8a63e752,30059855,4691d3f5,89973e96,c58dec41)
3297 Z8(da2e37b0,a6da947c,86b17659,9a13d0b8,760674ae,d1e3cdfd,97f604dd,5cd8257b)
3298 Z8(d396c0b9,a7abb4fc,3b4418e2,9784d5bb,6404fd30,58cbfddc,8c5522e0,58ac744c)
3299 Z8(0a38ae5d,06c1e882,3b2529b6,a6d2f12c,cbb990d8,e316ff97,78412080,27207a18)
3300 Z8(3ccc7dfe,d2c444b6,a9f6b0fe,be631180,7ef54272,dda820c6,a4222017,813abfad)
3301 Z8(1dbe2a60,2de557d4,2f170cd4,383e2330,ce6cb17e,aa74ddf1,08683125,dc2e90b2)
3302 Z8(b2093588,8db83717,7c2bb947,71ce5047,fc2f4108,c902ff2c,426fffb0,c0c72099)
3303 Z8(c2dba36e,e038791d,27c77d25,eb3b00f0,83d64d20,b205f6bc,bf4b1d62,3b51a9bd)
3304 Z8(1ef0d2dd,5e4d6c83,5f583cac,9bf5c702,e599349b,cb8cf949,fdf5cb9f,8aa51438)
3305 Z8(ff91b34f,1eeaaa09,7fe4216a,95871991,e7fd29a0,19ee6fe2,73cc7ae4,bc1567cf)
3306 Z8(7a2f8479,bab31bc4,56833ef2,ed8c18db,538a8025,5c2389ef,a2f878ea,58e44038)
3307 Z8(6d6b393b,b9530eb9,d094b384,c7129d69,7afd85cd,b7fb4e17,69ef68c8,2014fc9e)
3308 Z8(5c4c3747,3f4297c1,b5b55c63,074b5a3c,b4ab95fa,da06cb5a,2e4f7a15,605cb03f)
3309 Z8(37151d49,d26dffda,1869bee9,d7adc727,1133d57a,23e155b8,7b5b370a,8fafd081)
3310 Z8(d7f6161c,f336e231,d1da82aa,f2a435a9,7e8fe030,b2cddd01,f98fdb64,567c6874)
3311 Z8(03b76a46,a48b42ae,d469e90e,c6cddcf2,c94222b0,319fc670,a6bb804d,84bf96f4)
3312 Z8(335cb072,1f175952,75924165,8f743bd7,13e55433,e9fb97f8,a01b810c,fc4241f7)
3313 Z8(8c76603a,77249f43,d55e4b88,5de9d76d,9c9bb98a,0a46ebf2,57eddfdd,2c4bd824)
3314 Z8(f463f117,88d1a024,0554a960,8968fab0,fe607124,485583ac,f9f60e64,a296b2bd)
3315 Z8(372fd0ea,1326e92f,056d01b8,6cb8aced,ad2af42c,964eeb27,7cde9156,dfc786bc)
3316 Z8(96a06692,11786973,252f4312,5533046f,3578d48e,a7c13720,49df291c,31ea7acb)
3317 Z8(8a49e666,9ab1f191,4fda32d5,c5400be1,e09a22b6,00ca356a,957c8a15,bf92f6d8)
3318 Z8(b2cbf7d9,fbd173f6,d74a7486,94869d04,1e84877d,59ea3bd9,3a8b2ad7,ddb3804f)
3319 Z8(bd9c2b69,234fe71a,645ade00,5e45a8fd,26c9fac8,18c1794a,a99bbfc3,9376b166)
3320 Z8(eb63b6c2,5ffb2c1b,cc24aa73,d1d81194,dcd4b26e,c26d23cb,f03c8bb8,59d04018)
3321 Z8(4805c144,df545e0b,042cdc40,73a249a6,330b517b,918ee488,9cb9fea1,e3735701)
3322 Z8(8ebf87a7,f57adeb4,04d718f7,c5a638ad,e8b54a8d,d21d35fe,4162e92f,004cc7f3)
3323 Z8(28935de7,d2e8a79d,b79bdca9,36b63082,fe650e08,c3d395a8,55e7ab4f,95b5b57e)
3324 Z8(c94f4639,86dd290f,853feb7d,9e6540b9,b5010d28,f3ffd35e,d5fc9b4e,5b310927)
3325 Z8(c2251793,8a5216d7,369807d2,426b3191,630f3257,a55369ed,36a6cc03,3ae2b401)
3326 Z8(2b193a93,b43e591c,27ce08c7,0d425e24,6b0e2f9e,720df0b0,cdfd7884,d14d88b0)
3327 Z8(6c860d1b,41961ffc,b2c12bb5,c049432f,d499e987,e61ea278,82b71866,34446b41)
3328 Z8(aef85fa9,a027f8e2,775c8d1c,a8a390ac,e20e81b5,3facca70,5173a83b,e3148b51)
3329 Z8(079519f0,8a2f0d7b,c1c2dc18,70dc5f79,f81bfbaa,3b6e619b,73060d21,8b41faab)
3330 Z8(ccc989e0,663eebc2,bbf39a54,3bb289c9,8cbfb470,6066092e,415dc5ad,015402e3)
3331 Z8(881d1844,3edb1999,9ece38df,dc16eed7,1e024ee0,518151b4,0d3bfb7c,7e005f36)
3332 Z8(be2dab47,86efc81d,c6570f6c,d3578319,34eea96a,10931714,d6e39ed0,bbd7bbae)
3333 Z8(6052a89f,83e056b5,7dbe41bf,6dad5d38,d56c2d97,f56f57be,e33ce7bc,864b3e68)
3334 Z8(0719b540,d36b719f,0e2296f7,e9893ce8,de1d0662,64a7d918,dbd96297,b69a7c3c)
3335 Z8(29bf4b2a,a124ba97,9ca86656,739a9532,affa92d3,9db52517,5a791432,9b55f4e2)
3336 Z8(4ff6d051,e48ac777,88211b72,050af89a,3e40759c,5646e536,35227403,241990f2)
3337 Z8(8af08023,48456078,b0fa317a,179ec78f,6d695618,e494e334,ac93691e,9f2fcb45)
3338 Z8(b72ffe39,66c1cf0e,2edf7292,7ca71356,c9af32a1,b2cdfa9f,0d9f4299,0041ce7e)
3339 Z8(7b7c9e7d,ddc24efb,bb1b4623,65964d7a,bf093dd6,45ac6efe,92f33c20,d17ed003)
3340 Z8(635565b9,c8916308,7e22281e,ee5a274d,3666afb8,dd7ea11c,ce001b3a,6e20ba70)
3341 Z8(35778a9a,a79ef85b,ae6a829d,5a07dbe9,279286c3,55100386,c14fd637,f6926b4f)
3342 Z8(e0a8c0c5,dcb79263,41c8516d,d55fd5d5,7d58cc50,4721e5dd,3bff7fda,adc7279c)
3343 Z8(e0dc5dd9,dd11b946,62025438,0c646763,b793a99a,10d26442,0f761663,77482fd0)
3344 Z8(c4e18443,0f6279a7,77a55929,75d3de28,7ca0cf84,31eea43e,6b816bf5,2bb2a923)
3345 Z8(6f68fc45,523b14b1,65dc8782,b028daa2,52118787,a93964c9,48c45c39,fdf3a498)
3346 Z8(56b69e33,2674de3a,dd6cb4e9,a6166489,5c7e1523,bd306209,db0d9b89,6cdbd5c5)
3347 Z8(4e470eef,f631be45,f33519b3,64b622e7,3ec8e703,819072df,d59c7fe6,f55a959b)
3348 Z8(45c816a6,a07e8535,a7586999,56c37346,649a0bcf,fb09256d,83e4a95f,a2fe5d1a)
3349 Z8(3d7fa055,6bf63e2b,d6ba9546,146f0a56,575edc1b,5bfa306c,31368143,24a52bf4)
3350 Z8(f9215cf5,d3088453,ee792582,5bbf1d5b,80de406c,ca0d04a4,7da3edc7,07326636)
3351 Z8(db7030ac,f67d8ab0,0e99850e,0b581d00,bfd1023c,575d622e,ba179c08,9ee85149)
3352 Z8(4c6e1da2,e1896ad4,a76e2045,68c867a8,2bdee0b4,9a829a29,20c8aa55,0735c756)
3353 Z8(49c0d166,e5a18f39,b03321d8,8bc8c613,67e5ab85,c390f217,bf07a8d8,cf36aa5e)
3354 Z8(07f8c19f,6b39680b,61651e69,b1ed73cb,4fa8e837,a96f7875,3f469c75,efd3eac3)
3355 Z8(4c4cc0f0,b3e779de,5f4e7c13,959061e9,cc8593c4,a4c2696a,a30c657d,831679cc)
3356 Z8(a4d69dfe,7196c636,92812689,57917769,92c8112d,a21ddd8e,28a63a77,c47a6edc)
3357 Z8(1f90c7c5,0f88ebe1,e0ec86c1,abd312d2,1f0a3497,05a97686,f4f5938c,bf86c52d)
3358 Z8(ac882f09,dc5e1e2b,e3c2be1f,f642a458,a32a8614,2a0659e3,a5d201bf,df1e03f1)
3359 Z8(2d025790,56ba61a2,1b6a0e73,129f2100,b3771471,4d88ea03,5b02a5bd,0b71f0e0)
3360 Z8(6491312b,8a983a00,b76b1116,72da0cd7,9ec9fdd0,364eac08,df80068f,864bc793)
3361 Z8(3ae7d0ff,d7209b06,59f666dd,02aaf5ca,6cd21841,6e9d09a7,95317baa,89f3a6a9)
3362 Z8(a65efc6c,02678ad1,4f0b77b4,a5849458,0b08247f,764e4864,7a5990b0,4ed3ef88)
3363 Z8(b03f5b51,dd2bfcaa,5676a03c,125cbf15,41e84291,f5f85a37,756bfe82,978baf66)
3364 Z8(aae9048f,47abe149,1c5e06ac,85b6c0b5,f99cbb95,9a4e2bb8,9869bc88,c061475b)
3365 Z8(04602120,08e3a9cb,b340406a,f480395b,a12b481a,de0fe3f5,e417bfcd,40907dcf)
3366 Z8(4630c9b0,f89a116c,b09518e0,d5cb84f6,bc44c8b7,9abc761d,c43df93b,dc0736b4)
3367 Z8(e6b808da,16ffbd27,57c81144,ec59dffd,d0c0fbdd,51f9d24e,2d37748f,07e7d943)
3368 Z8(8653cbba,e1625f47,0745eb80,43075525,4ad5ed82,45147ac1,24425fa9,dc1da2a0)
3369 Z8(dd3a3ab0,c91df13c,234a99c8,cf216008,c63db788,d6eeb599,479c3c31,dc6cbe5b)
3370 Z8(73f3f7bc,406d5b6d,b32c5b97,991bb7b5,af04635a,c5c4d259,7a8f92a1,f0bf38e9)
3371 Z8(80d84b69,6273fad9,a621777c,05aea84c,7d2021b7,c18ffd86,367e657d,661c9a5f)
3372 Z8(2f8628c2,34455321,4fd128b9,8b3c1e72,e7afc246,19725c5b,3d8daf05,389a3653)
3373 Z8(6dc72801,469f47c4,b1194b4f,52b61fbc,2e186ae6,64d69279,af1a4915,12063b37)
3374 Z8(1315515b,f4e35fa7,9911c966,e0b4b0f9,51328da9,895a72b4,3cdbf085,bc0d5211)
3375 Z8(cde8fb76,8490e5ec,2d54e4bc,4e80a33e,7f77939c,e1fff33a,617ff84b,af3a3db6)
3376 Z8(141fa8fd,634b0391,92ac5663,f90170e1,e00019ae,dfba5fb1,54beed7a,94f416bc)
3377 Z8(9acbb1f8,0fab5c6e,e2f189e4,408bfd42,a9514a78,60edf001,739f2d6f,b7688b7e)
3378 Z8(25924489,19b9cd53,25187b9a,1b401ba9,f0beafa6,951d4331,59b1acda,0ecbc1b5)
3379 Z8(f5df288e,cdac0254,3783f2dc,76f90a07,452a8022,fc165c96,84879d2b,2526b782)
3380 Z8(193ec27e,92e19be8,beb2397a,d8999700,2702e919,de4e11d2,b7e99b37,06add8c9)
3381 Z8(9e1b8d29,e9824441,7874f244,f4b00a40,aabfdca4,acaf85ea,0d4cc54f,ebe6b8c8)
3382 Z8(fe85f485,06bb8a99,234fc00c,dfe549ea,9d20d237,ba5fa9eb,669c4277,99de8b91)
3383 Z8(058f6841,397322c0,64c81277,6605a3eb,32a11f8f,db51a05a,adcccc02,eceba96d)
3384 Z8(161d6821,7656a0ad,f6b75aa2,31ac2233,c6844e50,c75fda8e,ac84c0b0,63733e16)
3385 Z8(ef45ec9e,5cb61b19,a374b3eb,f640e5d2,9c30d95e,81716271,669764f0,5651fa55)
3386 Z8(24036f0d,6abafdb3,135b0e9f,0bd30128,665fc593,2ff57351,7299a793,e9f7b9c9)
3387 Z8(fc560ee4,6fae75d6,30981539,04147b4a,bd6b63a7,08d5489b,294b324d,c2e855ee)
3388 Z8(ee6ea129,ed8142a8,510e597c,9e32e6bd,f70c2e5d,c1bebe67,201d6abf,c5566460)
3389 Z8(36fc044a,cd7f7719,bce64d18,aa2e23b0,749adef9,aaecb789,ab5e7f2f,f843bfaa)
3390 Z8(60a0f32c,6bdf355d,1f4d65ac,6452913d,dcb03035,64be1d89,f3f81f60,54e1aff3)
3391 Z8(1aedadca,ef73cb65,4f8189a4,16a50bc4,7cd24ad1,1818e5aa,9de66898,1b326765)
3392 Z8(844e3232,cfe01ebb,8857ed9e,5b6eaa41,ead2caec,af14cbee,ed4c92c6,28d0f7c7)
3393 Z8(e5f37fcc,0a962a22,64693ae4,303ecceb,180aee96,d9a80960,a9017ec7,f664cbb8)
3394 Z8(aac9523e,a980aebe,e97724de,2c8ab22f,edddf3b3,9ab644de,87f4ace1,b81ef47d)
3395 Z8(d7df19c7,3d295919,e750fcb3,089c9f39,02da03d7,9a0f3567,49c21518,7dae2c97)
3396 Z8(b8510eec,8513f128,aa892f1a,b648e6f5,6b571617,65bd30dd,2086a5ac,4d1e7b6e)
3397 Z8(d5c6db93,92a85ffc,1385ca97,017e074e,7eb6e047,6907ec0c,0a3e663e,98100846)
3398 Z8(0fb97e22,502c1ad4,9144fa5e,49974b0e,dc226ee7,c2e83fa6,f49ffd2f,d847e14c)
3399 Z8(3744e06a,e1a37d18,add417e5,10890336,685e6626,d972eef1,e1822bad,8117dabb)
3400 Z8(6f39b9f0,6927af3c,b730d786,acae12aa,5c8c1f55,15996216,925a4791,16a497aa)
3401 Z8(bf72a56c,e3bd2524,10b5ea77,57eefd90,ac4c0ee6,45bc50c2,2be61a30,bdeee682)
3402 Z8(faa15561,63963d9a,81ba98f4,a48f3c81,943f9527,c8381cec,351d4d20,cee1996f)
3403 Z8(09548d01,a15ebd73,570255fe,dc624df8,18b2d60c,8583c567,1935335e,e2778056)
3404 Z8(5493cb8d,73ba4c3e,8dc11bbc,a5d109e1,64fc5978,bae42292,dbf944bb,d5eb595b)
3405 Z8(b31e05e4,67be010c,df2a299b,d6092164,eadc678d,3e6cb07b,e7af81cb,f00f9feb)
3406 Z8(dd0c4874,e300c536,45f9ef18,be35271e,3d137bf1,711fd392,cc9795c8,36efd196)
3407 Z8(55f62826,48699bf2,7da4fe33,10b3bcb2,88393d58,c24bbd03,c4521fb3,55560ebe)
3408 Z8(7318c070,97b5344f,9d548d41,eaee5346,19b4a1c5,b2d28b83,f7f3d109,1b870034)
3409 Z8(58fee59f,08b4e034,aeeb8204,918f5f1f,a7362fe5,da8afc86,e9fe9b96,cc31375b)
3410 Z8(407c042b,af47ab2d,8c4914fc,f1f438e9,7dcb11cf,a75f2558,ea3d4d9b,365a1123)
3411 Z8(ec7b772a,82a096c5,8a304665,f7311357,c6152618,0ff764bc,35b3b662,8ff11b74)
3412 Z8(0b903466,dc733022,70ce2fa7,25304d64,8c3bb629,4989a980,85ac35bd,345fbc62)
3413 Z8(219e46e5,63f9b00d,9ec03089,c911afe8,6f57c4ff,9f766b5d,794bf554,835b7e22)
3414 Z8(9cd0fb0e,b2ba2766,7ae30b91,3e216a48,3766a453,11557ed7,ce935969,b305031c)
3415 Z8(c79aae79,ec3f7589,2a762541,c17bcf1c,5aa2fa46,a7e01c2f,ae5d4c46,c46258d5)
3416 Z8(90847ea1,a3340143,65fe1f10,03a28358,010293eb,426d39f7,be4d6bf2,777f8e72)
3417 Z8(83089938,58236984,5a48508b,7dff077e,e7b3e0f3,cb072b3d,df127681,cde8cf48)
3418 Z8(2921d02b,224b1b33,388f4127,a6ee06fb,c1d8d051,5fe3cb84,52e3909a,3f8d69d5)
3419 Z8(64bbdfb6,73588015,47c46b2e,92a4790f,efa23215,c836e2dd,743c6f1c,4edefd78)
3420 Z8(63e516e9,978b5d66,9cd714c4,7e69a349,7694a8cd,d2165d79,c08385f9,378006c7)
3421 Z8(9314d667,4d3bc55b,659866c7,a6564e06,e641b6bf,2d6452cc,60ad4bb2,a5d1fb02)
3422 Z8(21e63146,836f8500,8e4ec160,a129bfa3,15d12e38,e4bab3e4,2807da8f,b747c1d2)
3423 Z8(b10977ee,f445d4da,07d0a9ce,7a0e4054,c01fe63d,3f17e752,67222a71,b1f22ce1)
3424 Z8(3783ebb6,ea29f33a,6a5c3f7b,ae6eef50,23c8dfcf,6eb7d446,5b86cf4b,9665e367)
3425 Z8(851c26fc,97de8586,a6dbf047,3fd3ee19,2da5b29f,2b1c9021,4fa06252,72d4385f)
3426 Z8(c3833763,6ec3e2e1,82c6442e,6856e222,b155fd88,1ee65d10,f24d28b7,5b0a9a74)
3427 Z8(20752c27,ac1d351c,669063a1,f4e11304,cb2c91ae,4d868da4,ca2d9940,76bf5e52)
3428 Z8(f2015df6,508e33c5,b208080b,820eb267,6f4798b8,a6c225c0,fbe59c25,b40fe2cb)
3429 Z8(3f4feffd,8606dcb1,b2adce1b,9f5c29b4,66f8d3e1,ae4d2f82,128e2381,5f82d83b)
3430 Z8(b17f432a,4b6cd913,08e10f54,cdff0fc1,ecabf8ad,c152597a,9c0dcc92,91451f52)
3431 Z8(7c7d6332,0b41c1ce,48f79f31,0c7f7ba3,9ccffb78,74e20b0e,bfb75a5a,7a6e4c2b)
3432 Z8(019634f5,59d19110,08f75794,8b6f497e,9bff242f,97630c2c,cc5171d4,c2c60d16)
3433 Z8(2d38fb43,89146eec,6fc36bd1,a788e2ef,776f5141,193ebce2,a2f4c4d9,0c9b3ae4)
3434 Z8(358edd9f,adc8b9fd,8c6484ca,ffbac4cf,b52b8282,e2c0a97e,835717cc,d8235068)
3435 Z8(fc5b4495,a687d2d6,2c36e856,3826824f,f26a263e,aaff03da,b64fa038,a10d486d)
3436 Z8(7a723110,c4585a90,1803be2b,d55d70c2,dd603f4f,c82fae01,05da6977,3314af3b)
3437 Z8(55dd534c,41e9db8a,564f7902,6fc6831a,4b332f08,bf771542,01d00b92,e4cd0224)
3438 Z8(78b5bd12,ca731fd8,35fc335f,4f715f8f,dbed0580,4c07fbf0,acf4e5e8,3b563438)
3439 Z8(f5b5f85b,5e4d1dc0,5498ff9d,8d2eee1d,4ca484c7,f7feb2dd,61f1e2fa,71b39c0d)
3440 Z8(1614c069,b0e19649,2031ce0c,89cf97f3,5141c2bb,85f7e594,fd95bbb0,0cc4b06d)
3441 Z8(d3aba1a7,61a9d102,f339109f,e556b012,f69487cd,3d8c13c8,677550fc,eb06723f)
3442 Z8(d9382254,debcdb33,f6b4480c,cc357526,2c0dd60c,f627b884,2438841c,c74e4ae2)
3443 Z8(253c2658,f72b4f71,28f8ea5b,7079217c,b5ab5ad7,ea879675,9e5bee01,9583dd50)
3444 Z8(65ed0c1a,5177c5da,7bb4c1d2,def1d47b,1ada435d,502138b3,d8d5820e,6284c7d4)
3445 Z8(7f493abe,9941e4b9,d9bdc7d7,c901d779,554006b1,e8881213,66e8ed52,8bf6efcd)
3446 Z8(9d2a9f60,72d76f6e,88217196,48de863b,77c04b02,d86faef0,b778e24e,d3a189b0)
3447 Z8(78a4b51f,1b78d543,548b05f2,486881cc,4beed6ab,62f38f2b,a4aef7df,46e3c64d)
3448 Z8(ab4c890e,bfcd3df4,23178a9f,1565e648,de37e7ea,ceba2b9b,cf1873de,13445283)
3449 Z8(0381fb9d,21b762ac,33beeb26,5ffff250,cdb8e3fb,0a9e7be5,d4c8945d,b411e16f)
3450 Z8(60357fdc,b1c853d3,43542d98,4757348f,30ab3308,88d82e06,8d8bfc7a,225cba7c)
3451 Z8(de44138f,6808dd09,f6daa08a,fe5b67e6,93b92780,6c1f80f3,9a836ae3,a93fad5d)
3452 Z8(666bda02,de914233,99f416e5,ccf4608c,43fa2a66,e53af166,d870a4c4,a316d3f4)
3453 Z8(f4e7f206,f33d2f06,2d60d930,4b900eac,c7702fcc,e3d60b47,902481f2,789e2902)
3454 Z8(da2afc9b,e9bc15ea,a2089bd9,d9ac60a1,3533ea2a,6b49b95c,9c93ede7,70fea71f)
3455 Z8(2cfd6563,80bbc0c5,d91130af,207747a0,4f96cebd,f6a52267,a1d56a00,6a0b5fa5)
3456 Z8(59185d86,8e2c5d0d,e6c6cc08,941e27ee,8bdcd2a2,2400c277,95ab5592,6dd35b74)
3457 Z8(555f1577,aed3e7d7,aac5e8ea,72f511e4,9d1b49e0,84ecca6e,53b6a29e,cfa74a52)
3458 Z8(5b2bb4d0,324eed99,7fc163ee,93a31d75,bb29ce85,83322f4a,ab3d7cb4,22975699)
3459 Z8(e7fcca82,46fb2174,8c58ff1c,c3ddfc50,d04e94de,40adcde6,fc10b148,f7c994ce)
3460 Z8(b4845d37,a1803ad1,ebb25c69,44f3830b,d5fbecb5,b197aa0f,937fde3c,d9680ba2)
3461 Z8(c197a308,0ead709f,8b53b2d4,fbd86a58,7b32ea38,dad85ced,f30b1d43,7defd013)
3462 Z8(114fe877,769d9137,1fc4f287,179962ff,8669ab70,00b12b98,9d00be52,12136ac6)
3463 Z8(a823e91e,9184c39e,13ce2305,bb48291e,0d0f6320,92122d87,5fcc462f,7794b64d)
3464 Z8(0d92a896,99785a4b,ddb7ddb6,7a2f3b90,73c89f93,c897136d,869fa241,b0e183e4)
3465 Z8(d474f849,59f6d145,6ac0dcae,3d1c400a,49fd8278,fd4f06ae,5e4f8019,f1002590)
3466 Z8(ddbd9d20,8009a3fd,354659c6,65f005c7,0b38910e,11769e7f,68b0ef6d,4f064571)
3467 Z8(18eab72c,e72b4cb4,1f4f13de,8751179e,5082d9d7,791b514c,62d010a2,a052410a)
3468 Z8(5228bdf8,cd28b9f5,e944ec3b,b2b9fda1,702c2408,7a801380,fc7a6a1c,04a14159)
3469 Z8(41151f0f,b81dd140,c2358875,1f2ada72,767caceb,71da3180,39c7a57e,6bf4156e)
3470 Z8(d6d387fa,966053c3,85c315ee,ec54feda,c2feebb8,432b8bda,5af8a4cf,4f5d5376)
3471 Z8(1bdfc5ac,c469bf34,affd4119,052e12e5,733e129f,00e28c6a,24026e65,063b94ad)
3472 Z8(80568719,49e45d88,ebe8412d,a36141cf,15b24aee,e3d6c51e,744c8a9a,9199875f)
3473 Z8(6a04edb1,261729a8,ce514ea7,44a6cbc3,69ed7cc3,8817d2dc,893f7534,9ffa1400)
3474 Z8(d48640da,34857205,ba1592d6,b8c10878,221ab0f0,00cf8ec8,8a12a532,9f34e04e)
3475 Z8(a7a47efa,038e8bc7,bc90ba05,d8a5ecb5,63858ecc,b8e1c8cc,c73b93c2,827310d4)
3476 Z8(42a26ac9,96e1deb2,98f04e1e,b63ae3f4,8c4d0aca,38532ccd,c763e962,68769ec0)
3477 Z8(a102fd37,6bb4590f,2305d566,a513d723,804efb71,5e2bd475,8a0589d7,a186984f)
3478 Z8(67dca50b,19da2da6,c5640310,48a6da3f,0649ff60,90094d5e,e280c057,c870e68f)
3479 Z8(6d377e19,6051283b,f8e53a58,8731792c,1ad45139,f889655a,2ea96f5c,a98e7eb4)
3480 Z8(b138ea2f,385c0ed1,9abfbee7,7149d74b,66912ee2,d125c745,a997c052,a147debf)
3481 Z8(0bb9c619,1c77c05b,a5f15700,bbf663f4,04bc7328,3cae6a50,8a689f24,70e88eae)
3482 Z8(42994778,8dda9bb5,347b2516,a5a7f18b,13dab2ea,b2f3db55,2992e3d7,ce81f2a4)
3483 Z8(102db868,63cca6fa,ca9b13c0,ba43fa97,ea868373,f290bed3,8c027270,0cd96dc4)
3484 Z8(4b4fb85b,d5019902,06d67d81,99e239aa,576cc8f3,f251f71d,5386b130,4372c17f)
3485 Z8(74a29d01,24763c14,727dc4c1,9497d631,7a5852b6,654928a9,c05837f7,a87220b7)
3486 Z8(937e38ea,4e53279d,0b023d43,9d12361b,73f921e7,dce9e47f,6ca154ee,aaa17f59)
3487 Z8(a83be356,6abb7dc8,72123154,2fdf117a,792c28f8,0e17175f,70c037b2,660e1b75)
3488 Z8(aac7f45a,fea566a8,b39dfc9a,258696e0,7a086b1f,4fc00282,4e44eca1,d4782a41)
3489 Z8(b9322c56,6663dc6b,60e9b579,1fc2138c,68da1ed6,6a858888,f5c8bf15,d36ec5e8)
3490 Z8(28efa015,3b8a79f0,4f4ba995,da0a9950,535feb30,6c62f313,7a5fe012,777e8010)
3491 Z8(338c5a38,2e716ad0,61054419,1d3c343b,2e762b84,723e7ab4,830a98d3,93c38e63)
3492 Z8(0f858b11,16a24d08,ecb3390c,64eb4cb0,626a79aa,fc4548ff,9d6aa870,2bac2c0d)
3493 Z8(15453ebc,a701355f,d6c342ee,ca2a3bc6,be6ca7ad,0ebc3ae7,fef4dfdb,a67a7ecf)
3494 Z8(4da4394b,89d6a0e7,bdbe26f8,a4e3eb9d,0fa2a98c,eaf034e6,7b653b16,994ffa77)
3495 Z8(b69532b0,74f40cf4,24ba54bc,ea3bb719,a726a53a,7e711ac3,771dadc4,01e6e881)
3496 Z8(a832d771,5c12fbc1,7e4a4bac,79ad0016,b6f9068c,20baed48,e8aef327,8af87313)
3497 Z8(4c892785,0cf694ec,8f6e82fa,6c2e0aa6,146c1a56,da84e9c9,7b14283b,029ceef5)
3498 Z8(3fc79fc1,c177b3bf,a1361edb,e2e7eb32,125b042a,6dc86660,a2afb901,6c1d5f04)
3499 Z8(fbe80f81,2ea9800b,68c30665,be682f2c,8b2f764c,a5499b92,0fd77750,6aa0b8f5)
3500 Z8(7fb5a54c,91b964fc,e8d4ce8d,3683d895,7b429b59,2632cd59,bf880628,801bf1cd)
3501 Z8(7427b7f8,29ffa438,2c43caed,a928993b,6ad5748e,9a6ad5f9,2971a477,01049254)
3502 Z8(2984c95c,2f6031ae,d09f06cd,aa2a6e24,8b16bde4,f8537b03,6b2b4461,c88fb5f4)
3503 Z8(20e749be,c19ecb17,b1e9010e,649930dd,c6af2cda,9b18a787,602292f4,ba07524d)
3504 Z8(22d169b4,8a6e2e61,b67b36c1,462b85f2,f4f1a289,6de1f549,d3e587af,f47f3044)
3505 Z8(b39e19f1,66df1718,626b3e54,d8d49d0e,780d603d,ec59ee7f,cc466a47,826aec93)
3506 Z8(90f9a939,ec7c482c,d4f01abc,82bc1a66,ce342d45,a2523247,852e364b,e8d9cacf)
3507 Z8(adf2db6d,393e4170,60e0f036,16a45a0b,3e14bd7e,a25787a9,bda649c1,27c39743)
3508 Z8(968366fa,853f035d,34d4e94d,f60ff228,f9d05dd7,cbdf5f19,f7648bc3,dea8ad30)
3509 Z8(59466820,44282bee,3e839f1d,16d876df,796f400d,71fbec38,1c8ee629,62050b1e)
3510 Z8(f4ddfcac,d8a6edd6,a7bcad2a,f2b3abf4,ac3d7779,9d82356f,51581e1a,b08ac97e)
3511 Z8(67dddb23,641a3888,ff7a246f,ee1d8d55,85d5298b,98e86851,fccfc4e4,ac4a06bf)
3512 Z8(cebb6fa4,c342bd09,24a4fbbc,e57e6ef6,02b4e380,826f9d50,d3d7115d,df88214d)
3513 Z8(a08a81f9,48b49953,00863964,9ffb047b,1fc12fd8,1d81722b,1408adae,fde7dc93)
3514 Z8(080b605e,3329a4aa,b91c8042,d4dacb65,ac2a8410,374bd953,a221dc10,515f8b28)
3515 Z8(6dede440,3a51a899,8cd35976,a446eb01,f80267fe,8d76fa03,e5261cdb,ea5ed3d8)
3516 Z8(ed0d9006,53bd35ea,a1b25f55,eb7f07bf,27279ab8,141e8d48,f26e53ce,b269cecf)
3517 Z8(2d9e915f,40656769,9cce6ac0,5625f474,04e64543,5820f080,86b5d248,2e5edfb6)
3518 Z8(61f65a5f,ac9f5513,79f42a82,6975797d,9f6e957d,ded4c491,7bfbe355,f97e70ad)
3519 Z8(6f863f53,8800fc97,51f59c1f,bd28878b,89cc5d7d,dbab0a56,4b1984d2,09f80db1)
3520 Z8(1f883dc1,0b3d46e9,872e8984,4ad3a69f,373a68e7,d6b50da1,459d7ac2,095890c1)
3521 Z8(442f56a8,1adcfaef,1651fb1a,d45ad971,afaaff4b,12197fc7,1ba57aed,a3524e61)
3522 Z8(a4198bf0,7d3db354,44212e48,7159cdb2,a17fc867,31f022eb,5661293d,2a421338)
3523 Z8(3cdc6e62,e87e6536,a070a258,2297fad7,0e016e83,af2f6f63,ba7446f1,0bf7f2dd)
3524 Z8(b3877a34,97160bad,fa2941ce,f572f914,591f31df,d16b80a6,cda7976f,a07f0d07)
3525 Z8(bda873ea,cf3a8080,30ad3848,447e2bf7,fd49196c,d47a2501,70b5c814,9a4d1823)
3526 Z8(9e82fe20,361414fe,02066304,0fcce0af,8d6b4902,03094453,46b3182d,61589e9f)
3527 Z8(235abc9d,c74c1fa8,a6c3f3a1,d73716dc,e2a08c1c,9ff2144f,e08ae6cf,f3f58f7c)
3528 Z8(ae455170,27fdf08c,24558516,c50e5f2b,0717f3c2,1a2b38f6,5ad4fbc6,a3940673)
3529 Z8(20e8de09,1b61c760,3b4d1eee,78001b19,2a8be7ed,510f7742,7b8b5803,e7903810)
3530 Z8(9fba107e,edfa3fd8,b4be7d15,a3da86c1,dbfd475b,510d1080,63b7d0e5,feb60c00)
3531 Z8(f8296782,45c14f7c,c00b840c,e09309da,7de53638,25c2877c,c821276f,157bc44a)
3532 Z8(2a71998a,fc3b1847,0523fa57,99421581,0e5b18cf,6ea02556,c060b470,3d3d4a19)
3533 Z8(a419183b,925d4a44,4876aee9,f301dfbf,2c3131be,e79b40f6,2da99587,49d3649b)
3534 Z8(4f7fc5e9,52627c89,248c7cd3,993aec89,5ce85065,4a1d6e49,10ec31dd,223425fd)
3535 Z8(13c4e909,fe0bd666,cd79d96a,8a466cfc,9f2eceb5,b402cded,d8179f34,72568612)
3536 Z8(8d04ddd5,522bd50f,e7e30d20,b891c9dc,3b3f49f9,459439a2,2f162131,e0e1e1ee)
3537 Z8(ccf5dfb6,21be7d52,35ef4646,78feaedb,fed65311,88baf0b9,6d36bd02,32c38866)
3538 Z8(60015701,6099b702,de78aabf,37ef828f,a1fdd738,0ab71ba8,9b2a0d0e,144d9edf)
3539 Z8(9722b323,aabdf7fc,a409089c,5fc1e8e9,e75c29b6,81691afa,cef3ee5d,5aa3d1ac)
3540 Z8(a0ac04b0,70bb64b5,833ad974,d1ffff36,446df649,017d35d5,100f2292,074b4543)
3541 Z8(8a50537d,8fe292af,2f08ec23,50ca5e5d,430a4ece,548d0f97,b95d2fa7,a14842d1)
3542 Z8(0b92b930,29ca5049,0fe0156a,e1318900,825aa5b5,f8cfcba9,630aabf8,fcb5445c)
3543 Z8(9a0f5d31,1c166668,7304a96e,bb93c230,078c9f55,647bda23,3753e8ff,15eac029)
3544 Z8(56fc200b,cadee2ab,192f9045,01d9c811,f46c518c,ef046684,45bb2352,54e58c95)
3545 Z8(ecf53a43,dc827246,c1cc65cc,4e8e0570,32832176,4adcdad5,e3e3f9ea,53640b1e)
3546 Z8(bdbe5ebf,deee024c,61a4a506,ccce3cf3,7efdc1b2,87642e3c,60b1f57a,c4795e52)
3547 Z8(96270959,891c654c,769a88c3,a628bc72,a88bcda5,04b2a8d1,860965c4,80f42da2)
3548 Z8(e0b600fa,cdadb41d,779666c6,8cbe391d,9d9b8fa1,7a4d362b,c4b1161b,5fc1c961)
3549 Z8(a2be4ccf,eac2b0ec,7e6a5d0f,b8dd4fd6,ba13e23c,31a36bf7,1ba6eb6d,ffbddd7a)
3550 Z8(f937a44a,e3463f88,78e73179,0052e7bc,450af890,072ce84a,88311445,9089f9fc)
3551 Z8(30a4351d,c55167a1,fa3f8b05,4c3db965,41a834c6,9e3e5c31,ce8d2f34,6e386a9c)
3552 Z8(1edfe4e9,269143d2,7be878a3,8db83ef8,237b75cd,cfe22795,6a22392a,f69e73a5)
3553 Z8(697f008d,e28ee23b,872b9211,c27ba0fa,b55197f1,10eb8972,ad4232d8,32885c70)
3554 Z8(d17f3700,0a90c686,5c1b804e,fbb9e046,74d7e87e,290f5e65,ba0eda6e,7f0a3d59)
3555 Z8(7ae4105b,ca86b8ce,f063c526,47baea9a,56c14628,9004afd9,b5cceedc,acc468a0)
3556 Z8(e8859e70,ea85f38a,cbc0c2ab,09c952b6,c23e6e90,dc4f858c,d0725a90,f074d7f2)
3557 Z8(537de54e,203211a6,0b7b3a9f,4a3913b2,00a065ee,3159bd0d,efdd1af8,d9cee46e)
3558 Z8(d0924492,4587ad9e,380e9e6c,18b990ed,f8ffb310,fc189f47,35cbf567,ba71c4b4)
3559 Z8(2c36072d,fe431c71,5a84f66a,8a9fc2ad,f7245ffb,44397ed8,caea6bc4,332258b9)
3560 Z8(3475bcb5,2e9d7db2,91f2d154,98d33054,48eec31b,cc0f2498,60065a60,fdb7e599)
3561 Z8(252505f1,4b9419d2,267726fd,eaaba8b9,92e20407,230a017d,dd6e1094,6d4bb33b)
3562 Z8(6d25f3f8,5606638b,94625ffe,cdee81e6,3ed8a673,12c39322,95425aa1,15a06324)
3563 Z8(004bc64e,1caabb1e,7f862031,b0405a54,d823f33d,55f54469,22ac404c,73372e85)
3564 Z8(21ada446,76c8145a,f93bc046,04f6d1e8,bb9b3017,67bd1edd,9c1c7847,43a1fe4b)
3565 Z8(e129d1b3,2faf1bee,2690fdaf,97289b37,f9cb1502,e2d87860,a130278c,60bf06ce)
3566 Z8(946ce444,c2e9735e,c4cfe75f,a389b800,3550dc6f,4a7776d4,3fe59cb4,b245e477)
3567 Z8(e52b1e88,486135a9,0482f361,40af30ef,7eed607e,a268d3c8,7c4fb7c3,b42c6263)
3568 Z8(2890b4e3,6901b449,24bf0b0d,2dc907b5,8b467931,f2f3ee5e,8c168473,5e6e0401)
3569 Z8(45298fe4,63055caa,a800a985,bbe6a9cc,7e224591,693de78d,39f4435e,7d8ab12d)
3570 Z8(902f1948,589f4e80,50334198,467d34be,91273ee9,3255bd4d,9cd4114d,78592c7b)
3571 Z8(d80d90cd,eae86fce,ac80776b,ffa08395,d9177d6a,b2c656e6,93e895df,216aa2fc)
3572 Z8(0a71fbe1,d4894e72,ce4e95d4,cf210c4f,2dd10905,4ef42a95,17013ce3,71ae652d)
3573 Z8(9740d3e3,3984ca9c,8420cec2,d0846dcc,b9b9609c,f2ea3294,2eb63b2b,e835cd1a)
3574 Z8(5e2e6968,71eb5b2a,8359fe73,df5c400e,45c7600f,d26aa746,d95951c8,b60de064)
3575 Z8(9b5e950b,6816a569,b38a2548,2007c1b2,0744db44,cfd53cad,bcc8b67e,1dc872b8)
3576 Z8(329a75ea,f7eefdb1,8e423a2b,f7a839bb,f0cc5e25,262d0a06,eab9c1e3,91fb17ba)
3577 Z8(2624e455,01499524,7ebbf090,d2fde5ed,3772103e,eccee225,4c1aa2b5,bf35e5ae)
3578 Z8(9d79764e,eb63b668,00fef95f,b847830e,ab74e469,ca9d69c7,84d74fa0,5fd2f477)
3579 Z8(37b35679,292e2232,1f00301e,3f253087,65fb7d99,cd788a57,824124f2,7d394584)
3580 Z8(acbdd961,af0c6cd7,c3ec9390,00d9183c,5a5ab4a5,40910d03,4c92e776,55654be4)
3581 Z8(5b8ac629,1bd25f3a,f777cd08,6beaa63a,7ff31e60,7bc7190f,bac4b9ae,5b59c410)
3582 Z8(e933f4d8,6b10589a,aebbfcb2,2a26dd52,a80bfbee,8d2dfe75,a197e480,ac5f4325)
3583 Z8(2f77d094,614b8296,8720e1cf,52d9ba2a,0a28692e,a98f6c92,0a558011,f6970078)
3584 Z8(42f8985d,cb5c8e5f,fa25b4b9,76981dc5,09ec1968,99cd7685,c6f4e9fe,5f2b94cb)
3585 Z8(fbd45424,7785d99c,f451b5f0,a1a010da,af450832,c4be8de0,01808cf2,a726c840)
3586 Z8(dff355fb,d59ccb50,d04f1049,182f84bc,971aa007,2a45b755,09c7031e,08d2e8d4)
3587 Z8(302d6db2,33b2a5de,d3206c8c,66d50802,6438ae90,acd087ca,c1ae5a33,52d49063)
3588 Z8(6d58c886,5c4b1af8,37d42920,0bcffa4f,c9a38d35,e348f131,86817382,33035112)
3589 Z8(384c1f3d,dcdc8ccf,c27be72f,67ae9bc3,c125df63,e735a48d,ae78a68f,a29bbef4)
3590 Z8(b7e5c202,a738f7cc,047e1cce,1425e52c,9bbefe03,94fe561b,6858c9cb,2b441c21)
3591 Z8(5df5a5ef,abbf9405,59184987,d65f720a,ad9692c8,b51c30c1,4cb8df58,8c9a269d)
3592 Z8(c24ba012,7b7a81f4,851e68a5,dad107c7,fecb43b1,7545a94d,3b931cba,1e3ed9dd)
3593 Z8(e36059d2,81171dac,5ed41fee,87270128,2c5f774c,b1166acd,e59be72f,1f8e56ee)
3594 Z8(cadbeebb,473def00,8dd3c28b,86396afd,dfbd9572,514574eb,db35e58d,54ed0d7c)
3595 Z8(aa833546,8c20377f,0c198654,b90edb3e,752496d0,a2184e30,779f5218,68d2b4cc)
3596 Z8(970f3e0f,453f1e03,3912c6d7,00a9077e,1a89ab00,ac106d39,1b34860f,e615641a)
3597 Z8(9dcd1915,21a90ced,feaf2b07,55288761,4ba22bfe,a85898a6,f8b5ab7d,8a8cbfb3)
3598 Z8(73d7de7d,c9139ce1,a4a4568c,1fc94472,1e63c97f,7ff71897,4f108478,87744d44)
3599 Z8(96af44bb,24dbac03,3d32d32c,d2c1f8cb,1a52af24,0c12f106,22f691cf,0f75f59c)
3600 Z8(6f1fb081,796447b0,ca8df490,f50bbd12,14c1b011,29cf944c,69a12579,062a8b42)
3601 Z8(dc87d1bc,a98b61a3,9f106a31,ccabed31,cc169e62,2ef2bca2,a9d955e1,92aa615c)
3602 Z8(983071a0,254e41ea,3cfbd511,7a2376a3,c35cc304,97ca8e09,edc279df,ada9b5f8)
3603 Z8(212e09c2,4fe1fffa,37329e09,c922bb09,777e2b20,3b9d6f7b,5cdbcd5c,399ac4e2)
3604 Z8(28a11449,4b2abc04,dec77c9c,327a4c2f,c4433986,936cf8ff,4368facc,912205a0)
3605 Z8(c62b9aa0,6fe36cba,8d95a131,b91c77bf,3cb6e1be,44f40266,3ba8d1ac,f02dfd39)
3606 Z8(0f0120e4,d81a0c88,8553f90d,9d50211e,b823d383,b760e65d,e8e54c76,e0f8623e)
3607 Z8(c7292b07,b4fbd3e1,e263a4a1,d12c56e5,9ab6dd7d,f851849e,ec783cf1,f39028ea)
3608 Z8(0dc08f80,f55471e7,12345ed4,43d6b9a8,e19bb7b7,182fc7b2,ea57304a,ead2cd07)
3609 Z8(d0d28eb7,5418a47b,2d7018a8,28f84ca9,2b0d2cb2,7fbc56de,0ede895e,3673c026)
3610 Z8(d449e604,b14a1e0f,dd268913,148ce328,eecc2a06,0e0f108d,d19e3225,4f293537)
3611 Z8(c3854642,50a343c7,6c09a496,b0f87fb6,52ac41b2,8adbd078,9e62591d,d2dc182f)
3612 Z8(d1a8b83a,87584913,eb3e2e45,ed52b0f5,8423513c,cab4d7c5,ef8bb5ff,8416ea57)
3613 Z8(a31a83fe,533d09ea,f9151f2a,4411f9d6,185ef6fd,e379d081,3209d8f9,25d15d9d)
3614 Z8(361ebd29,d9c91e28,dba363c5,6ac42c5b,68bb1661,ede6d6af,9d3dc123,afd84c1c)
3615 Z8(d4073969,c6cde809,3f41b976,2362da44,7484fe9c,8d13743f,ec28d887,e595f56f)
3616 Z8(487699c9,fb51e77b,7024402d,552217db,9f87c739,2583dd22,6470a93a,03e76ba5)
3617 Z8(a5633400,a6bf3e2b,b2c41e96,4551d9fd,83a5dcdd,61b4b601,9ffda6b8,89a9151c)
3618 Z8(120f6c9a,f13d90a2,afa44ff7,4024c741,e82b0360,82cba50e,f191ea87,6bdbe5a6)
3619 Z8(827a8825,96612551,5b7e4f96,eebb1293,8516a779,b2480b9f,0ccc6e64,e003fb61)
3620 Z8(11c2cf70,4fb61526,0aad15b4,c94c9e22,142631d1,fc2920f1,3977d08c,cc29c284)
3621 Z8(f57fc2ef,17ae64f9,7d535ebe,c7d2b38d,4db51d2f,66d855f2,e5cafebf,ceda6897)
3622 Z8(596aa5e5,9c811035,d5b88dcd,093a81dd,7aef7c6a,8f59e1a9,1152c8ce,8c1a25db)
3623 Z8(89c0e6c8,099bf63e,e6f4ad85,dcbd9c2d,de75cfe0,973cd96c,47fc10f6,b0ccb277)
3624 Z8(b58cfede,a8898045,2dbbc8cb,ba4c622b,ef2b5cc6,d78f6230,fbbaaa3d,015469dc)
3625 Z8(077faa48,9b970acb,f6887929,5b6a9cd9,f997f12c,0ff06942,6c4835f7,502370b4)
3626 Z8(a4813b16,4921e2f1,63ce5c1c,f37d1f3e,8afee107,f394f1a7,cc80db27,fed10d8a)
3627 Z8(42eee6f3,5262a2c1,da7add1e,3b773f5c,91245759,0911374a,9248777c,42c9cf54)
3628 Z8(f34ef07e,7e40e99c,f665e7a4,49f4473a,b4dbcfa0,66228e0b,9e9172e4,d32a2cfe)
3629 Z8(0372f823,a55cb7d1,52163b9f,9784bc15,ad012aca,aee6469f,7dff4543,34b0f2aa)
3630 Z8(e6b62ce9,8ccb72b1,d27fd01f,80ccb899,796159b8,5b043ece,bc193b1e,329edb5a)
3631 Z8(f383e5f7,dff48934,9991c584,247f2246,07a4040b,bd7f8c04,ed22d4ff,d6486959)
3632 Z8(d3b7568d,167d24e9,302131a3,5b42ee46,610d6dbe,a4963165,81bb476e,783b547f)
3633 Z8(4ac8eeec,e3527284,de6ba45d,02cdda41,5096861f,270c8f42,33dbe816,5f60a4c1)
3634 Z8(a59eac91,c80b6210,e10d359a,a745eac2,dc2e5483,30976893,1114ad60,155f1f88)
3635 Z8(ebbf9626,bc1380d4,a7960c02,93fe4334,4a0b7ab1,bca3e797,ee5cd8f4,911e2495)
3636 Z8(645cceed,e98a7a43,93f8690c,ba68cfe7,dd7fec63,21c59b02,b870e1c9,b8c4e7ff)
3637 Z8(8f7f74e1,577ef3db,27b1fee4,e7bdc4b1,a441575a,0e88c8a4,2406b198,f068db07)
3638 Z8(089bcb78,72b98143,e3875039,83a27f97,7315386b,43714d47,98f17b4a,9c0b5877)
3639 Z8(3ed55abf,c2a48fbb,d7c12e90,70cc9e36,8a8a24d7,eb006d9b,69209c2a,ea78348e)
3640 Z8(d36c2ce5,32fba94b,91aec466,57019f2b,021aa0ae,4c80cddc,d8826194,9fb39eaf)
3641 Z8(deae7597,84f068a6,115eb61c,695ab745,5fc75809,2f2d0d03,89188f16,63e25e12)
3642 Z8(c6ef5eea,5c51b54e,aa9402f5,5f8fd9f4,62b9569f,6f37db93,4a933d16,4c1cabd4)
3643 Z8(f52a2313,ada7860e,05a4a3bc,ee40dad8,cc7f1b9d,1d0fc3f4,0fe4b316,f4b72a65)
3644 Z8(4805a40e,815e5ca1,fdecccd5,94ea7ca1,dd26b406,f8553b1e,2ca595ab,00ad6c5d)
3645 Z8(ef79bd4e,61962ee7,6310bab8,33e5eb52,5a411cc4,2867c3aa,6f2b9623,45607157)
3646 Z8(71d98fea,a8f88bcc,14b2e044,44dfaa9a,a3a50c65,a7dfc2f9,7d507294,e76030bd)
3647 Z8(65a7a5d9,2f672e09,9af670e2,8a7fd704,d11aad45,a1a33f47,ef4e1042,82b077fd)
3648 Z8(27e385e7,0d1e0f39,7159793e,6e0ff553,1c134a40,d9655f1d,115d9a4d,e2e8bafa)
3649 Z8(b4765a54,fb1928e7,55a2e4c8,9ab73f47,04f23425,347115b8,a1b3eb19,ee618e02)
3650 Z8(fca6a07f,b0d36ab2,69085f56,d75f9988,c1b2696e,c602f5dd,5b76c47c,513597f8)
3651 Z8(7d93875d,bc0a0c71,9c0c8328,3a0163f5,ca042a30,12a37dda,7dd90c25,237db5f7)
3652 Z8(d4db5c6d,9680a2f1,878af916,f1e667ab,6bbb9463,20ead69e,829dad3d,b6ebe349)
3653 Z8(8cd4a9b9,f66bf830,1e5f55df,7732b2ce,0def00dc,022e50a9,499c9396,c249f347)
3654 Z8(818e9e74,7280dc98,b3f1a316,02adbd23,a8f24d54,1ec9016f,60c04893,ce90f461)
3655 Z8(e02839e9,6f973e40,6915cefd,a2f59c8a,6fcb5a2a,de0cc00e,e0ef1efa,e8d5cca2)
3656 Z8(b3660d7a,e4e0886e,2e83b25d,4e1edfb2,fa4f8c07,b1f19022,74bd0f2d,1325ace4)
3657 Z8(4dc4a27f,9307f63b,00f912f6,6f6d706d,e6754124,bd0544b0,b3bed437,ee3a10df)
3658 Z8(4381adba,d77f699a,5ee38403,c7dc0ccc,0877983a,8e8f32a7,952a54ec,758d8cc1)
3659 Z8(d644dde7,0b928c7f,b6f632e2,23692d91,64f7c493,3154d592,b3760ace,91b53d27)
3660 Z8(a9ca3fb6,439b4fcb,5d6e2a8b,09a88b6d,842dcab7,4610b47f,2a1c8c74,25033928)
3661 Z8(eb246d71,4e583caf,2eab27ef,44e42d5f,7a682327,51b2474a,302d30e8,ba227812)
3662 Z8(59871702,e35c2c61,7850195f,c62f1c79,20a416bf,190b35fb,9c222bd0,12564858)
3663 Z8(de179755,b1f3a6de,6e9dd3d6,947dd974,e245cba3,d4cb06b4,455a7ce6,4e21b866)
3664 Z8(77596f5f,2cc3914b,6f6dad90,4e551d4e,4bc3f82a,d228bcfc,18af315a,31d86de5)
3665 Z8(edc8b061,3bcdac29,59a1f802,8ea4a61c,4693179f,00357787,cca11095,c14823d7)
3666 Z8(f41057f0,5e51bc2f,129aab8f,d6186ecc,f54fa91a,326213b1,4d713b3e,bdac8396)
3667 Z8(f4298b3d,91e17b05,a7b00ed2,f1f222ef,348164c8,8fb0c1d3,4adfa2b3,e559f20c)
3668 Z8(c002b683,9c1c67c1,288290ef,446d3119,999cf3f2,acdaa2f3,b6b78734,ceff2b44)
3669 Z8(d84e83eb,1086ebde,577ba0b1,6a1a57ae,bfe2af66,53dcc011,df6bd592,740fa243)
3670 Z8(f25ed5bd,78e0c43b,4a05f02e,fcc14a01,e53ac818,923c9416,6b960094,9afdf883)
3671 Z8(ddcf31c2,2b2bc78b,4f42591c,53de09f8,e4079dda,21e9f481,bd9824f8,3bbf8022)
3672 Z8(06eb10ae,2b550288,720c74ec,83155412,a368c101,badb327b,dbb12b2d,a8b4f746)
3673 Z8(4dcb1f3d,116edfce,58e03cd0,a5d97b31,b0b7e538,d2c503d6,a0fb21dd,e3f043b0)
3674 Z8(0c21b10a,a99fb1dc,410d2a0a,00de55d2,8c4c158d,bf95dc52,6cefca7e,c5bfc544)
3675 Z8(d7dc4746,c6280cd1,9815f155,6f0e955e,770363d8,3658d1c7,05800221,07646e9c)
3676 Z8(e25a7a30,14d6acf1,3384fe68,89dc571a,a4ec8a69,9efa5958,dc5a7afc,7492660a)
3677 Z8(ff027ff9,66d61a5d,7f2b759e,bfb972e4,87a6e499,280aa457,e706b930,b619d4ec)
3678 Z8(458375be,2b5ae464,57573aff,5569dad0,fbb56450,4354320b,ee262d89,c50e16ca)
3679 Z8(47c41c74,5ce82396,51d822ba,a1cc5392,4742d2c3,beb2aa08,08bc6714,60234a5e)
3680 Z8(b01525c2,13534f10,d189bc14,1dce156b,1333611a,1b1e5481,6d863398,f531ae63)
3681 Z8(282d64fa,1df0bd60,acf83117,0238eb08,5f8c9eda,f5a177b7,cb8e0472,e63d3aee)
3682 Z8(7aac2e97,5f68fbc4,88a3329d,ca667aad,95b4daca,98fa3442,ab7f451b,a5e940b3)
3683 Z8(02feb3b1,c6030a80,93861b12,b1828330,b872a1c1,5162708a,cfb96575,8aa5d126)
3684 Z8(838acc46,817edbdd,eb9ed434,03a45348,f34196c0,43f366ae,e2e7e5ce,9b7744db)
3685 Z8(b5634f95,f962e5da,01712cc5,c4dc847f,9122f2b2,20daf9e1,581fe125,2a392e17)
3686 Z8(ba918552,4c096b6d,80127883,f3bb951d,d7949d18,16d0a422,a21e02c9,4d3a6ea8)
3687 Z8(4e88a691,2c8c7e90,747e2301,905e00a9,e0af05f1,ece13dc1,9b3590dd,5ae87fe0)
3688 Z8(0c6dc234,7ae10092,db9426fb,e828b048,48ed2c69,10d42061,d947e226,df786115)
3689 Z8(91578803,23acbacd,e27358fd,6f27fcca,74eb2784,ac4f9ba9,f4c89c13,249f75b6)
3690 Z8(d8127e82,a90c225e,e0570aff,34d1a0d4,284b7de8,299458f3,8d4b1eca,62c9ea50)
3691 Z8(4c500623,e46415ed,f9cd7c0b,6089563f,11b99c80,390e458c,4c388e73,2e950f92)
3692 Z8(04173472,c73e2d58,6802e5c4,fb3049ff,18a114a2,77e75608,ace26965,f02e2b7d)
3693 Z8(d6159234,85a9476b,c6aa7a91,3ded029d,4591db06,30fd9780,54210710,64748add)
3694 Z8(1fc4bda8,1a1cda87,4b82afdf,c958eabf,dac1677b,74b61381,0f16409a,a90c8577)
3695 Z8(1073eab6,bd37ebfa,80d81997,9177e89c,625b2ecb,54a72659,7929b88e,f171744f)
3696 Z8(73aca178,ea82131a,20afecde,01f42622,f27f9600,6ed74010,e0dcab4b,4be44e6c)
3697 Z8(cdbe3f20,1b7135d5,1c31c059,9d767d18,0f6e67fa,55aea6a1,dad76e16,c6bd2855)
3698 Z8(c4197a43,6621b3ed,8863448f,e3cca24a,d49f8f0c,082ff617,3a10912a,dcb4f3cd)
3699 Z8(24806456,62cae4d1,78892a49,ee3dc019,de814369,041f69ab,2e80faf7,e0e842db)
3700 Z8(eba137dc,adb093ec,90637f71,172a016b,1f0b4a69,f2040651,17220e64,7b67cc71)
3701 Z8(c36405b2,2f3f5160,2a719f9a,218b5198,c76a52d0,c9d9503d,c9e780ce,64d26aff)
3702 Z8(598799e1,2af6c81e,b0765d26,31d363b1,2c569cf2,cce37369,0d4bc042,bc714aee)
3703 Z8(a944f5a5,d02032ed,ee9d2408,de3717b4,3e6b2c39,0ea7ae92,26911948,321bb972)
3704 Z8(9bc04c2b,3be1dfd9,c0c6c045,90867aea,aac7d5b3,0a2e31b5,927d6420,58ee5ac4)
3705 Z8(cdd3a1a3,6d25d409,afc4d313,6efb0d52,d28447f8,2bf06b80,9126fb1d,bf5211c0)
3706 Z8(763f7dcf,fb510a49,55187d8f,0d9ca41e,05a990f0,01f3e80f,921e0622,ff281864)
3707 Z8(d6886516,84cfe4e9,1519687a,82120bc8,6e4bb175,b9dc5207,52b71dad,11b34067)
3708 Z8(b85d01e2,48849857,1991ba48,e7fdc522,a7ba1508,423c8397,13df8e03,bca6ca97)
3709 Z8(638a0e5b,1f84187b,cc54246d,d3f1e316,49acffac,17f36543,b3824494,6ffe58e8)
3710 Z8(e054159b,0d82366b,81091d86,eee46e3b,decf45f9,eacbe2be,a171ea79,04c47015)
3711 Z8(ea8a6a21,c2ca6dab,8d9e3d2c,9b3aa5b6,170f2970,dd240403,1a02e414,5e37913c)
3712 Z8(3741a61f,539eaa35,a8f236bf,7483c07e,df48c549,eaeafa55,28c26268,066d6e05)
3713 Z8(21f637ee,f2e8646c,9e1988a8,c4c43552,760286e4,5a4e021d,291a0969,792d9edb)
3714 Z8(89e35fd0,7420a26f,3c87e052,6c7d6b4e,c91c2ccd,733570c0,fa8a11c2,cfbb5d3c)
3715 Z8(ee80ed49,4d4d6d55,559151a2,a09b3c0a,57861192,69f5b45b,25470e04,210c9ca8)
3716 Z8(0da83c13,22e519fb,8e6b6b85,908a815a,4a9bffd8,de9bca61,f5e77c44,4eaafde1)
3717 Z8(c10aaba3,63b3288a,c6d1b459,b7202ac2,f95a37c5,549a525d,3195a948,60781ec9)
3718 Z8(49a98401,4ec37817,b6282889,837b3c3f,aa6b8475,82face54,9266bdd8,12ed5756)
3719 Z8(91f5be6e,6692af4c,bdb3839c,6213844e,8dccf1af,10bde956,777969db,969aebeb)
3720 Z8(d4e65fc5,77012615,06141239,e9574068,6ef42d78,c048751c,4b06cf6c,e2b6e620)
3721 Z8(93d9996b,2584a3cd,e7ed1fe4,c921f028,f9927f2d,83dda375,c840b2cb,6eab9fa6)
3722 Z8(aa21c65c,243e24c0,7319958e,4129446e,e3c501d4,5598b8c2,16223348,dbe5f40f)
3723 Z8(4d21417e,6c6864c6,f2b6a52a,82e2d9a9,f5bd8489,35dda92d,cbc8b330,b02633db)
3724 Z8(7c4b0087,dd761818,b578f14d,48457f58,167a69fb,604cc802,faf4ad61,8eb492c8)
3725 Z8(b3980e69,c1d30cc0,9c5c57eb,a6c53f4a,93b15700,41083d2b,8362dd01,80812390)
3726 Z8(a802d4b3,ab59dd6f,19b34b2d,5f0816d2,21fac244,6a1d9147,59799cb5,d376e23e)
3727 Z8(7b7d6aa6,60a30290,996dabc4,b0973b3e,98462f7f,99c55ee2,46501792,3b157524)
3728 Z8(eb167257,ecaa9d21,124ed480,a6d279ce,9c8cc900,d3d6545f,33b680d2,d8a44ac3)
3729 Z8(40c80840,3270655d,20bd685d,13b27c6f,00240faf,a536e81a,c929f61f,b080e63e)
3730 Z8(57e29ba5,48fb66ed,adf10907,c4227486,f8d8dc6e,ad4e8b19,c632116c,1b9bb59d)
3731 Z8(b37fbfa5,d36d6aac,92621107,ec4673ca,b2874554,a70c08f3,f0b719d9,8e0ec924)
3732 Z8(b5431b88,f89c4da2,a58be887,e748b2f5,afbe8329,c048cb5f,9c74baf1,5193a884)
3733 Z8(9231fed8,aa703019,690ac817,ac8038c9,f55ca27c,9a864ab2,b9951a6c,3397b4bb)
3734 Z8(5e2b7652,1443e0a6,f5c9e2f8,664876a4,254ee773,7a50ae65,90ed25c4,871771f7)
3735 Z8(03581bf6,02cf4380,67df8c6a,61d69624,519348c5,9812638e,1c1c4933,852459d3)
3736 Z8(c1dc9c03,870bd45e,22151c0b,662c4319,a503b0e3,a548b27e,15fa63f9,c0de97ae)
3737 Z8(498cc5e5,c5a3ca08,2399fd86,78d984a8,f39a69f4,2540f65d,86bf76a5,abe312dc)
3738 Z8(bf6d2bf4,fd61e0c4,40d5d651,8844f642,7e665574,57c99b20,fa6724d2,61714ba7)
3739 Z8(cac0cb89,fbd409aa,c45383cb,98426a99,44e1fc34,fd9039f3,b77e43de,301ce849)
3740 Z8(eb4ac384,a2ceafef,a7f55c09,f0b4267c,3cdaf3d1,db4d86f4,8efb09ef,82425308)
3741 Z8(99f52a54,6c7800e9,bd93e541,d661716c,0c75a4e9,a2891880,c4068131,b3c1f3c0)
3742 Z8(68a6c170,b3e53de0,c390f4eb,f5e16314,902f70ef,752585f4,690fec29,478e3fc0)
3743 Z8(62f350b0,ac35764d,a41d5cc8,2f078216,afe90ebc,cd9872e1,05a0da38,3db395b1)
3744 Z8(5e67830c,72b2f769,394b5447,62576bcc,b43ed7b3,316ae1ee,029f7935,bfaadf64)
3745 Z8(42c18850,a4c5e037,bddc57f7,1268a3ce,4bfcebf3,5fe8f7c6,5ee44d60,7073799d)
3746 Z8(50efd314,68eaef9a,c8ac9a77,83ba748f,352ecdca,ebd7c8f4,b8dea895,f252e857)
3747 Z8(b34c021f,deb81f16,477c0566,15d42868,b4bebba7,75b4c708,f63498c8,900ee68d)
3748 Z8(b0eb3215,57bbc454,ec89130a,f642e276,f7a227a8,9071658b,65191273,45a56f51)
3749 Z8(7c385094,5da84294,54ec305a,83140684,1c181b3a,2d972f2e,606065d2,f4637f3c)
3750 Z8(7b98c53b,d2b7ab67,33d5828a,a6041d35,c3ce9db8,bed5fc88,b671fbbc,78e22b13)
3751 Z8(283d3cf0,91da0825,b426a39c,e25fff4b,f1f75b02,8b0af774,603c62c1,af5e4891)
3752 Z8(0a7426b6,c7efda07,90cba861,70bfe178,a92101d6,93246e8a,8067262c,32682a3b)
3753 Z8(0a93e5f8,7373a7ce,e358c61d,a50f8176,632666e8,754c3f3f,dba5bce6,dee14462)
3754 Z8(7fbc33a9,42ef3bf5,bd64c87d,71e60d29,844f83c4,d0811ee5,5e1dbe8a,ad8b61b0)
3755 Z8(f59bae48,361cd11a,edb05d23,f7a3b022,f48e34dc,c76709a9,ca7b52bd,271958cd)
3756 Z8(70c63729,2f37fb49,64e1bd8e,d869694a,91deb019,96d1c10c,a1707a54,d4ad4fbf)
3757 Z8(f6f2b750,5357d69b,82e7e2d8,3442e607,bbdf799c,bba6f132,c9b663ef,8ee7741b)
3758 Z8(0dae9669,bdbafe26,6d64f8cd,c0699738,d36e21c7,ab5a4229,e031650a,4328c097)
3759 Z8(40e12adb,33c9083b,15c637f2,fb1d55b4,78b29e7f,3620d3af,c5551851,6247672d)
3760 Z8(31ae45b2,0460a394,2d5bcf1b,df7fb530,29b5331e,8da9d5ea,49108ac7,c768fdc5)
3761 Z8(29e96951,79e2ba64,117cc8cf,6c425121,f0f92276,342ad01c,8d48165c,911dc595)
3762 Z8(8df98409,d6a52336,3d9993f3,6e5fdf0f,2afe2d24,db1a3a03,967e948d,cb5b7bb4)
3763 Z8(6712196d,d8e55925,5700106b,b48933d0,b3f30994,82be857e,448d4bae,2c221575)
3764 Z8(99732e16,778b7144,35781de7,ebb4fb4c,0dfda43b,d513705e,2b5cff17,5aad6143)
3765 Z8(2ada5451,5326b4df,880bd8b0,aecc7e57,0a33d493,23f7dfda,965cfae8,849d1b37)
3766 Z8(3729806a,984d34d3,e3d70392,f583b568,1ec0504f,c07bede5,ccefa5f1,af1c5a79)
3767 Z8(07ec437e,f80ac44d,31486a57,16bbd11e,991d6261,53d573eb,26034167,2e7552ca)
3768 Z8(84a3c513,4f225e79,a8b8762c,9e192c65,80f50a59,b5183f00,0fe25f80,647bbf81)
3769 Z8(bf4ec959,eab58902,e182769c,dc75485e,7f199aed,0ceae762,f85d24e9,fdd1eb1f)
3770 Z8(09da53ce,16ed0ef5,fcf05a3c,ffcd6dc9,61a43052,7cdefdc9,0fae5c01,ebc6a72c)
3771 Z8(77c6baa8,aa27aaaa,5e1cf611,d616fcbe,b0b75c31,7d137898,e796bd48,96709a86)
3772 Z8(6ac7c376,7580eb8f,62692305,dbefd5a5,2f2ccb9b,227e074c,c1e8799f,f1f89319)
3773 Z8(7c445fc2,0c0c9503,de22647c,b6a7c562,e4655378,83fd6f63,3ee05215,65eb351e)
3774 Z8(b6a0e14d,2c79f4d9,fd70c9c0,731c4035,73d93905,add31e7e,8b9d36cf,5c260fce)
3775 Z8(b21b946f,1d954786,b47f0fc6,872dc0ec,d21c1ec1,2dac4024,ca290704,9a0e4720)
3776 Z8(3b6ed4e1,f51609a0,826396b0,59768aa0,5d4bb825,b74d9cd0,a3df4518,1b8970a7)
3777 Z8(d706a536,91fac86b,bb96fe5b,27de0b49,e3620825,a704a2f7,c05ab78a,25c288d9)
3778 Z8(6b1b506f,f7f20f4f,730fab5d,7c7017fd,180944c0,146b6fbd,17d28e37,d89de4be)
3779 Z8(91a8303a,5d8d7a59,9a23fcb2,77560230,986c636a,e00ca4b3,485ebe46,ac1c379d)
3780 Z8(07655f55,3e942dd3,b61e83e3,ada2a402,a024e51c,bafadf77,74c9ba10,de4eb10d)
3781 Z8(5cd05ac7,037100f0,70b26008,bbe6a0df,6952dc9d,8c7bac2a,6248cfdf,c880af9d)
3782 Z8(26d83d46,767010a1,643c7761,4373da67,3bc17e18,1df94c39,845bd8ef,8d01737e)
3783 Z8(f69075b0,6900a2e7,3d081cae,6a4f35ef,3ff32b3c,ddb489d6,88dc1b54,38695a9f)
3784 Z8(caeaa56d,6d871f96,34e9533f,e0bf44e0,2be6404b,74b0a43e,920cbef5,13a0a17d)
3785 Z8(cfaa2eea,d3871d7b,11ef480d,71b15235,39e92155,a0ab650b,9e56a634,7889c39f)
3786 Z8(c9ec632f,845829f9,e7d84c51,a34c0289,4cf8fa8b,55d6abd8,2b5c6bdd,b5bf38dd)
3787 Z8(63bb692d,e50ee670,e7d2582a,c777166e,02c5a991,463cd25d,236bd53f,60e1c3eb)
3788 Z8(a15c0a28,7e946d03,5de791c4,9035d106,5ea14e63,ef2ca089,99be94b5,a3c4ab93)
3789 Z8(8f9dbedf,41c71a96,2d55fadd,be537710,45221e9a,0a2bc360,0e04ee43,405d3ea3)
3790 Z8(b877a52b,b0189e44,d45a6438,4eae6589,8b5d3bff,29fc0c93,01c118a5,83800acf)
3791 Z8(35606288,bca125a1,da5bb135,a64c41ec,11ded766,709f9c89,51ac274e,a46ee066)
3792 Z8(8474b974,d662143b,4a351392,4c2418f4,667d80a7,4eb52964,04f4db26,68f590eb)
3793 Z8(b4ceca28,c7c7848f,e9663497,ffd95ad8,706842a6,84806806,6d96a5f2,686c5d1f)
3794 Z8(4c0119e0,10c1ab5e,bee871ce,0522acaf,9766c7d3,83dcc657,fc825b2a,6b593a37)
3795 Z8(f850669b,a8547a21,cbf76243,1f762b7e,3cbe5e81,9002dfcf,e15ad706,47baf7bc)
3796 Z8(44f26786,be18c6c0,a522253a,ea770e13,70ba5da1,420621a0,d7bc5482,bc98ec4b)
3797 Z8(a8682f02,e4175e4b,84a3bd78,1efc97a9,5cc0b1e7,03c0eb8c,643a53c1,dde8cba7)
3798 Z8(ec90fe1f,ed13db49,f9150018,86bb4206,e34ec2bf,b87ab0b0,88e70c9a,17924c2d)
3799 Z8(8c1c0914,5c216363,2131bc56,4bb37772,c911900a,ed0b86e5,61b6e9ac,503427a6)
3800 Z8(c023977f,e36586b6,58e604c4,e519d00e,2c2e9173,b7ab3297,166daf88,3fd2016c)
3801 Z8(488e7f31,256e3589,53a709c9,ced0968e,513e88b0,a7736131,04c5abad,d17cc56c)
3802 Z8(fbde2ed8,d7741a8d,1d8d15b4,fab3bf12,4d70eced,0fe52688,07954675,54469cc1)
3803 Z8(9485d7b2,55011a98,23a73ff3,533f93f0,43479913,9fce50f0,47e1f021,9a0e857a)
3804 Z8(ae8df869,5ab2b9b9,9823fddc,9a2f572f,48ba35d0,057479b2,42320587,cba3f3b0)
3805 Z8(0facf23d,fa37503f,77482d56,ba32e641,6da46cc1,9c14ba6a,8f86a00e,3f84e5ab)
3806 Z8(ded064d5,f0ddd50b,7a241d2a,5085f2de,fb93bb52,c873327e,5dec77f6,f601c313)
3807 Z8(b2b60b1d,01c72eab,ec340c47,98646846,e1c35ce8,9e45c238,8d8603bb,f721ae82)
3808 Z8(fb0f027a,2d4caecc,5b425923,2c1c12fc,640ffcd1,8c200e56,dbd07c5f,352098b2)
3809 Z8(6b936d54,b906f112,df134594,e4c0f392,86809efe,5ac3b0a0,855cbaa5,853a5140)
3810 Z8(211898e1,0cc39049,945a1c35,4c7859d8,4e95b15a,469ef0ec,87fee11b,51190117)
3811 Z8(f87a0e1e,f9352ba3,980ce5da,dba5dcab,8e49144d,5e303f5d,913168a5,02c6a60b)
3812 Z8(f4ea90b4,e3bfe056,851e37f7,3ff3c912,a5713bff,780d5f2f,d6aac49c,9c7e937b)
3813 Z8(25ee3844,44668c37,a72e7bab,3172ef7c,635c5b2e,1ef3e92f,675b40c8,68474056)
3814 Z8(9f1bc7d9,b1d01204,3bc5dbee,495a0723,7b30e7da,835202b7,9f6e5aaf,09256f67)
3815 Z8(3d85d7f4,cdc58d9b,cea0a492,9c3383a0,f58d2dce,cda6e53f,859a09d4,947a7151)
3816 Z8(fa1701f5,0d99e0db,46ca02fe,3485022e,ea449c59,78b823a6,8ece1cc1,2c721fb7)
3817 Z8(20e0e43e,d836eb66,a7c5b664,4111c4a0,54fb9328,4d744a2e,4c501b58,09fae7d6)
3818 Z8(daadb7d6,99aec8fc,8a9aed94,03f5e700,1e6a27c8,61a62f67,51c484e4,3098c23b)
3819 Z8(15147b25,d5e60240,2392d788,95274a3f,1f4c926f,a1c098d4,b7f69210,1273d404)
3820 Z8(f6dffa60,f395889b,72e64560,b5f46e5d,e2adfcae,5224ffc0,d35c1461,61f8c43c)
3821 Z8(aec66f93,dba92d84,8aa34369,b0eeddf1,66079fb8,3535e47f,0dce4be7,1ef182bf)
3822 Z8(95628ba7,789c4deb,ab9b555a,923347a6,5d52d629,32b4158c,98ebf57f,1b71eefb)
3823 Z8(05360d08,6910ae6c,bf1f09d3,d150787c,db8a8010,d789236c,433d31a6,63f7a06b)
3824 Z8(b78b6e03,2526ea61,e17fd6ab,d014ee12,04f5efd3,ff8b824b,173785eb,d92d90a8)
3825 Z8(cc9006b2,e27b1e7e,9e04ffa7,d6d12bb7,c501f11a,0ca69669,cf2ec8e5,d38b3a2b)
3826 Z8(ea45b79e,7f3567b2,d690c192,036a0319,2f121388,eb303b60,3186aa37,7c3c07e0)
3827 Z8(59aac509,06ef44dc,780f9fff,705aec31,83deebdd,8215fe90,5f0fcfbc,fbbee3e6)
3828 Z8(7075e7bc,9f293d02,cc7b6616,6c7effe8,23b3a2d4,8b05b489,e0551900,45711c36)
3829 Z8(52657d31,2921529b,4061a98d,172ca8b1,a70e38c8,a4ee29c9,1c508f9c,099a637c)
3830 Z8(552eea92,23736bd7,70cdd748,483caa27,f83c5cfa,df1cbbd2,03dfc2f5,df416163)
3831 Z8(6aa3317d,1b1091e1,b0b74acd,2ff17614,b0107c7e,f1ff3509,c4e44248,8fff3e01)
3832 Z8(eb5b9c24,306863e4,c513ed76,80780e60,ba4b021c,99dcbb9e,85481133,756cdaa7)
3833 Z8(e199bfec,aa94686d,738df1b1,8982340f,3b9fe348,ae4e89c4,8ab5b380,51424ba5)
3834 Z8(27f5fb41,f8400a7e,7dae8d1f,ce15b1cf,ae63263d,37205eed,2a21c0a4,2062faf6)
3835 Z8(54c5d794,d56cdbf7,b816a33d,30a39df3,eabeba2e,014fd3ea,027adf75,3598e432)
3836 Z8(723a3402,05f40424,34aaee33,f1521d13,465f307b,8ad12e9d,00812d58,86b1d868)
3837 Z8(a8df91ff,aa69b71b,1d0f3b9c,040d9f84,4bc4e4bc,9fde3cd1,afca6b96,4fdf8d5b)
3838 Z8(9f675987,7be45842,6a221300,2474bce1,b65ac2cc,8c8d6af9,9451352b,41848923)
3839 Z8(63c453fb,86f0daa2,810a5fde,5718bbba,de15705a,3a4940d2,00b915c8,69d640fa)
3840 Z8(5f219d4f,0c9d09e9,e653eeff,c467857d,05dfc0ca,55d70d7a,bcba47d9,37424277)
3841 Z8(ca6f34fa,6660b20d,88eca315,63aa0f44,be7abcec,dec5aced,de2e5c71,69a4a518)
3842 Z8(c660cb58,5a987594,8174b843,2c1516bb,82effd12,f607e461,1ca4c82c,724cc197)
3843 Z8(3398fe3c,519832ea,9c9d3ada,d3f4187e,339581d2,5d0da467,fe4e7660,784e6f4c)
3844 Z8(3c3b86a9,d996675c,804a1e1c,4473f52c,500f9cdf,2173dff5,e521e64c,fde2d994)
3845 Z8(b4c1a3d4,2d6fa9f3,598fc138,2ecee9b4,ba9c02e0,7ef144b5,9724c306,b0849f10)
3846 Z8(897fee1c,9d6107c1,4b31ccc6,ddde0df9,5a9d16f4,e2171f48,73853e35,f660373e)
3847 Z8(1d44396d,e70d716a,7c19dadd,12f7c6f0,6191a4b4,95bc60f0,f943782b,a8845013)
3848 Z8(b8e8d5bc,9c3325e3,4491f9ba,4801ea0f,28438d7f,d014610d,262692b6,c7e665f0)
3849 Z8(ee35a67b,10b1f430,848dd30a,d98206d7,8897599e,b06d0fa1,ef517827,33f2a7ac)
3850 Z8(6ba729e7,149fa756,7b9702ed,87aadadf,0e77345e,935215a0,9f05988e,2043bdc6)
3851 Z8(c806e8bb,6f437fa3,6deef38c,74204d73,d9082530,13ede77f,f55c8491,c381b245)
3852 Z8(833db8b2,e6d96795,5b0b3de9,4f01f512,27c8a13d,14d1ecd0,3a62aca3,5d187f68)
3853 Z8(713f7803,516b84c8,f8a71cb4,cdba8200,fafd0296,63f4b07b,eef717c5,aebedf35)
3854 Z8(73ff1fd2,d1aa2ed9,d80632a6,548dfa2e,585392f0,15526d7a,8a7bf48c,bff779df)
3855 Z8(93c4f36d,ca4613ec,1bd715a9,2b049478,95cd574b,2d2b4d3c,3ff5bf1d,9fbca906)
3856 Z8(fc3eb04c,35b3ad69,7ac041e4,f278382a,a007b67e,2e75b1b7,a97a7c21,926a7756)
3857 Z8(a31c5f13,9ab67b19,49b56141,ff9e8eea,a6e07319,eb593a7c,ec98dc4f,048aa839)
3858 Z8(c327dd96,76aecc17,5b9995b8,553a14ba,dd0bdc5a,2cb842a1,457514da,861c10c7)
3859 Z8(8f27f228,94b928cf,2db0c3ce,a9e3a3db,405095b0,bfc97b11,93804076,ee527e80)
3860 Z8(f46f3bf3,a6c1e533,780dd1cd,c80ebfb5,1e931831,d8950f9b,0ac54143,086c6eac)
3861 Z8(796f455c,0a747811,9224ee9f,da0c1f19,e44b74e7,b2e402ed,1940f44f,facb5e92)
3862 Z8(c23ad237,eccd8820,62f574a7,71d4acf6,d4da1c79,57e3255d,cee58e03,2dae03e7)
3863 Z8(d7d96e6a,aa9adf9d,76a0705f,52588469,34f73d10,8f7a0b32,26ee3d0f,6f69054a)
3864 Z8(ff96dd80,73765017,2f5db950,15b94207,51992dac,150f4a80,890e364c,2602c1c7)
3865 Z8(3ca8aa5e,d34c1874,c88bf95c,695fa64d,7aa65d95,95f0c6ab,5b9814b9,09a57db1)
3866 Z8(73cf0b40,c6276eef,70e1cd2a,8dd4e1eb,11d7b9a7,d751647a,194e9e9b,a55fea33)
3867 Z8(44d47153,1986a783,4307b677,18a40419,f97fce3b,502bcb8c,13a60c28,a677fda6)
3868 Z8(85fb9169,0bb6b95e,60a84616,362bdc6d,76f9feba,5bcc1bca,c3f4bdcd,7fdd0965)
3869 Z8(11cc9e18,13736553,94d6894a,320736c3,ede2cd3a,c228cead,192b162d,08cd877c)
3870 Z8(90a27140,94c5dbfc,b1c26bda,51203d97,dc4febf2,d04aba14,e0fba55a,e50d16d2)
3871 Z8(d8023014,bf41b530,a9be9dd6,419011ec,0c83798a,102396bb,d88ffb36,67726d06)
3872 Z8(18641189,d2bc0474,21f43e11,df55308a,a36d8014,8297b890,19c8f022,727e6d92)
3873 Z8(e4996f55,234936f1,6ff67e91,d39e5f19,972c19a2,0b42a858,4ec3bae0,a17cf588)
3874 Z8(8d8b78b0,c2b5bd43,b856693f,ed06c860,34780844,a30b90de,62a42989,704132aa)
3875 Z8(b3ce16ed,27e73a5a,8585a35b,87e3708f,ad121fec,55b20037,b604a263,259f4047)
3876 Z8(06ac38f9,b820034a,632061b1,b88be18e,7f2cee33,57229cdb,b5019331,4bd7538a)
3877 Z8(bc27a55d,8e8514bb,dc77724a,56715033,4dd5397f,d409fe8e,d8bdef96,ac85cb1a)
3878 Z8(cb8fc303,bf77a843,c3b4c4b7,1ae2d720,2faaabfe,3b7067f6,7ef99afe,4f3e8030)
3879 Z8(46ccf7e3,aeec0509,cf8baf83,7d2597f2,70d9f2e1,db1353e2,5e6733fd,2fe78312)
3880 Z8(93ce65e9,793a8d90,f1298529,f6242b2c,0ba837c8,ebaa3e12,6aa6c644,7e1443f1)
3881 Z8(dd517ec9,3e024e29,2bd18962,cad4559f,1e8d3817,09796bd8,23d51871,48cb7d68)
3882 Z8(a622d97f,67fe417a,94a50672,950359da,1cb626ad,9e4c8de1,7eff37e9,9c681069)
3883 Z8(db1984c4,ad2514bf,7363472e,8bd8c6c0,908b6363,e57dd0c2,08b595da,7d8fc0d0)
3884 Z8(a503c2a7,1c142e77,b9b94292,f7775e01,b40b96b3,89fded05,716ae7d5,a742ec57)
3885 Z8(523a5778,7a919807,826b0d41,66988720,9d899303,d4fb9ff8,01eb5b13,b28bdd05)
3886 Z8(92e97d24,78876130,ea8a0e85,34b23e63,c95831c7,c96bbe3e,088045f9,91f0d6e0)
3887 Z8(03a60daa,8cd87055,88a17c85,86e039e5,45244be6,1449c148,6468ca1f,2e1b644f)
3888 Z8(5d149c41,ec818db2,baf80acf,31fdf71c,588cd0b2,adbb91b9,af7e142e,731a03f3)
3889 Z8(fcf9752f,9fe6bfad,ca1c27ce,29952e4a,02c4a8b0,3c04426c,b8a374ba,ff5fa05e)
3890 Z8(0149fefb,85d7f013,783d66c4,eb0ea813,b2ccd02c,06f86b2c,bf50c08b,c369bd15)
3891 Z8(9e716dc2,70efa3bc,9044df44,ec3b31d9,93cb1f31,d4415349,eb3cf709,78cc8312)
3892 Z8(c7aecd42,95099fd9,12061e8b,92cd2be2,262f7005,60dc688d,2ce2137c,f59855b8)
3893 Z8(298f3efe,deca130d,7a98aa3c,db472f13,82b9303a,538c7f25,9658fdfe,2c2f5220)
3894 Z8(6e4de714,f49f59df,66c2e39e,08657916,2cc5a683,9bbcc584,5a75578d,34d67990)
3895 Z8(11ba4345,bde6477b,7a9029d1,94bf27bb,a3eb85da,dce22e5b,0cb4281d,7a6d9c2d)
3896 Z8(533568f3,39dbbb76,540ba85f,c1bf724c,7724b309,d8d52798,fb6fb72b,a3e2add7)
3897 Z8(7f096aec,80f85e7a,f44ebbe5,1dc19fd8,01a09689,1baa69ad,022a62db,2efe661a)
3898 Z8(c0e41ff2,9b4c8d57,35421eb4,6797c3af,90ee1d41,a1a63c6e,92b2c7f5,91d9d5cb)
3899 Z8(9ca89190,20745a2d,9c611a36,6a172900,baf817db,45107e78,d1799204,62e40b12)
3900 Z8(d520489e,a5e5d628,54fd3c70,691a0982,c135adc5,3fa0b151,8bd048f1,51c11559)
3901 Z8(62928ae8,d4752b16,d51264d0,31f642f1,76a7e23c,9d60ff4f,40109ee0,c8371791)
3902 Z8(1c7579b1,1542a2b4,84c80d22,4ec1fd4c,fc7cae0a,edfdfae6,9d73be7f,a93167b0)
3903 Z8(fc171937,d4260f03,f2636056,e73a5c26,6cb321a0,c9354bb4,57d0ec6c,006ed3d6)
3904 Z8(df2482ac,9b0ae0c8,571881c7,216dcfbe,4588cf3f,23efcc0c,94d4705e,dfcbfd3c)
3905 Z8(ea403e95,fc3f998a,e9d1067f,ad1ff45d,bf4d4e27,4659ce60,d43df4c1,f1b21b80)
3906 Z8(9b08bee4,eace6107,a6d1fffc,01a9e8b7,5a201bef,e1497a8a,f34b587f,3fe58084)
3907 Z8(af4ba266,6a546f4a,8d8098cb,5934b9b9,4e558e9d,3c1dceb5,14c3582b,bb7f03b6)
3908 Z8(7fd74ede,e6cfdf40,3ca0f816,aa543092,a912ed97,4769548d,78f9a3db,5e155118)
3909 Z8(b8cbceed,90e0e0da,0e37dc0c,d3855d87,3606942c,3a99d6e8,80b24c76,dda7ce6d)
3910 Z8(cb5d23df,c0ac44a1,f17f6646,ffeecdc4,561f8afe,9e9dc096,b52bec55,23a614b3)
3911 Z8(43b627c9,2c3de016,e8e6249f,48c9c30d,cc9fa87b,069fbe48,ba5534d0,d1dc32d7)
3912 Z8(926a20b8,cf284ba9,2c3f5be7,158a89ee,2136024b,6b840208,6267d853,586a0991)
3913 Z8(be5f4be6,fece6891,fed50429,c243206f,c5e473d8,ef77bef4,7d02eb51,005d592b)
3914 Z8(13832a2f,357b0d8f,fb283fd0,ac94278e,8f8e796d,43102f6b,457743d6,bc9c3cb4)
3915 Z8(365ed950,bcfa1576,98252780,5aaaa432,9b183388,1e465085,7333d4ef,8ea98e05)
3916 Z8(f21607cf,ab7f6943,11604ec8,9ae507e6,9ada9bd2,27140b1f,d08b9a44,9ce3d80f)
3917 Z8(27af3749,86dd4111,eeca85e6,99b2d53d,816d36a2,3d365002,2ca4f818,336d13dd)
3918 Z8(38be9f8f,bfdb9dc4,2b48cd71,e32012b7,c10c9763,f7778675,cecd49e5,cf6ef65b)
3919 Z8(d57e33d8,bc556fa4,d9990aad,27a72f87,71c1aa63,6f6668e7,001efd2e,2571f432)
3920 Z8(5428853e,c808ab0e,62c69e29,f7a1b86e,e664a9d2,ae6a25c9,65b400c2,9ebc2a23)
3921 Z8(907c669e,90d6926f,3618e558,539b48f0,c4a66f4d,c8192b8f,4f9d2149,d1836795)
3922 Z8(513dbac5,4b12d24a,da51d86f,a895ae37,08716d09,e5f35b2b,5aec8495,771bcc57)
3923 Z8(4c504178,efb1cc90,7ca5261f,f8bdfeda,c21ff2a6,b0189781,74fccc4c,acd3961e)
3924 Z8(d84f9ab4,c6f64885,cb2be5a2,d1bae8bc,8eded06f,e5c35472,0d6c1f70,0b53fc06)
3925 Z8(cf04ce76,e16029c2,5132b261,0cfe1c60,1bb89cec,7f680922,fa9fa4c8,110caa4c)
3926 Z8(7277da2b,74e64da4,6b73f8b2,5446317c,198fda21,811d926d,0a60fe36,9efeb500)
3927 Z8(c9257616,70ac1565,12e5d97a,e88a9a51,5e44b6a1,c1309165,44e3112f,d3838f8f)
3928 Z8(768f4874,62048f3b,a1f14878,bcbc7b75,bf0491d4,e8e94157,f4e5d560,f88e5c66)
3929 Z8(e36a663b,1251dd2b,0590b542,eee6b680,4f137f88,76cd03d0,d6410f8f,02908a34)
3930 Z8(155f50dc,790970fe,86cf2a5f,27b0fd77,bc6d8a6a,b54b1f83,6033cba4,ae5dde62)
3931 Z8(bdbd3079,4011e454,19fb875c,7eb45064,70ada4e7,0a63188b,c22d6c18,b1b937a0)
3932 Z8(2168f5ef,bf5cbb53,0b6b7dd1,26224bc9,54cf54c1,d6b20869,a0d92360,0f0987e1)
3933 Z8(8fcb3f9c,b1a2a908,4ad365eb,08d8118c,6e2e8f74,a20e432f,a0d4dcd2,27f36409)
3934 Z8(04903e84,ceb08e2d,a4db1287,b3abc1ae,79999a16,3ec9401a,f7ee3cae,e1c22dbf)
3935 Z8(bb3b9577,f4eb4893,2d6533f4,24eb539f,ba127f76,95cde432,9e3f0139,b1d0a32d)
3936 Z8(f640081b,efd21dfd,d4d0ee32,a84e04a3,b4a658b2,ed5b38e8,7824b128,d66c2e3f)
3937 Z8(5c52c841,724e35fe,279a6b04,4ea7fc48,de11c3cc,159778dd,eb6b29a9,e8b04dde)
3938 Z8(b06707ed,79047ac8,a1ce7aa7,f644202a,6e1841a3,100baf1f,7680d894,cd1285bc)
3939 Z8(a3bf296b,0fb37dc4,caa8b1c6,a88dcf5d,7a813b07,e5f8f4e9,6742684d,2f870b9f)
3940 Z8(8e87c3d7,94bd5f0f,8e3255b1,ccf16d30,db096081,4ef2fb7a,e2f08c21,8a8e9088)
3941 Z8(d152f285,b84da949,d51549fe,7e2e7014,3e73661e,2da23c9c,f52f2356,259b2ad2)
3942 Z8(330b0dfb,e0592f3d,fb548cf7,f3d5eb32,f4b52d25,5b3c3e8c,94792ae3,d4220690)
3943 Z8(bab4d387,338b2dba,629440ee,74db8e0c,04aaac27,04a96cf6,593a1a3b,95b60d3a)
3944 Z8(7a55178f,02b77b81,ddb81a3b,1c22c81d,3a6546fe,d6c205b2,050c83f7,59536185)
3945 Z8(4d4cb539,4caeaba4,1e468df1,38d71c7e,08f51395,8fbab561,aee61d64,9b195e95)
3946 Z8(d3a63e5d,ad53990a,49890d60,cb0b9d88,3f4d0ff3,eaa125b1,7d150c4e,aa9e439e)
3947 Z8(af165b25,e4814878,61a460e8,0e485a0f,170533f0,dcd5bd7a,9562885c,49159d0c)
3948 Z8(fb212d41,740709cf,584ed683,31222ca1,dc2a288b,011bd559,84fb4170,25eb87eb)
3949 Z8(e8ffcfc3,39dc1310,9e94a387,a3856ddf,4aaf8a6d,51632366,d4d74703,8ec3c314)
3950 Z8(98a69854,d0d34ca3,982b1ea1,1304455a,47e84d57,ba521dc0,38ad7d8d,9034d22f)
3951 Z8(f02e8511,bab7152c,70f4545d,e1eb3c85,78f26bb7,eaf29e81,35cf16a1,6c0d531c)
3952 Z8(a77aa57e,f8995f08,d759a499,c3672dd4,b1f83132,d1684b86,4f38c9c6,1c424469)
3953 Z8(bc04f269,0e32d696,295e7a7c,c8affb03,0d62db9d,ea5eaf02,359a488c,3419a4b1)
3954 Z8(9531d972,543e01de,1e71f615,56a47dc7,067cb0fe,64d457de,fb5ef4af,b03ce759)
3955 Z8(8222f5f5,fd923857,895f5f01,9b6b7aff,b362aa63,86c96dc2,93a52872,0d75abd4)
3956 Z8(d07e019b,660122b5,055168d7,cdfd4b9b,1fbd2dff,3137d761,072e8de3,4853d4d5)
3957 Z8(1fe68b11,364ea28e,0c7fb0c6,b96e902f,987c6628,86a917b3,a8ddfe23,af511657)
3958 Z8(4ea7897a,1b80c0b0,4677e3bb,b94e9d25,c62fc23a,06498f66,1bef0d0a,c1be5d15)
3959 Z8(d72f5883,4a2a2e7c,99221220,b8e76036,46dc6902,5adcfee9,5e536473,52e94498)
3960 Z8(807e106d,8d2403ff,bdb55ced,0cc07ab4,18af8977,e9c5cb13,1a56d9de,b76524c7)
3961 Z8(b553fdbb,d1ee4e9a,e79213ae,5859d08a,2790d5f3,dbdabc33,03928fc7,4fbcd518)
3962 Z8(ef3d01b6,66538aa1,b3bb2e04,9634b911,bb955e3c,b62c71a1,a58bceb2,397471cb)
3963 Z8(ac71c539,36a08669,9d697d69,fb9e1ae1,42d69189,79ed4eb6,5ec73e8b,4c782669)
3964 Z8(03aceada,a024030b,fd2003f5,632338e1,89fd1b08,185ab78d,a8ad5e91,657f86dd)
3965 Z8(666233af,38f99c40,2d9c5d3b,c3b81143,50045dc2,69c5abac,0e20ec2f,8ed238da)
3966 Z8(97796285,d5290656,81ca0216,f120f29a,7bb2f270,eed60c16,dc069c97,5dfadfca)
3967 Z8(909e6390,046d3703,7c3f88d2,6434355e,e98c65ce,e2a0d491,9ac562b0,0394c4f8)
3968 Z8(ec32578a,48c6e4fc,847e4f80,e20e37fc,fe3ca691,79220e82,718deaf7,13cc2ff8)
3969 Z8(49fbb9f2,29d89909,df976803,c854f753,7cc34a51,fd038866,88d31e10,56147a09)
3970 Z8(f3e09a8c,0f9db2ff,fad5fa20,86671e64,a05fb758,4b1f38d4,f52e1e1f,d8287a3e)
3971 Z8(1bc10381,ac96aa6f,25d2dc73,fb76ea63,5994f5ce,0c015d9f,04deb5d9,5e4e34a3)
3972 Z8(45f091ed,f50c052d,0b13b3f8,86a4cb90,5f942308,809973a1,31542797,bdcc7ac3)
3973 Z8(1ec3578a,dfce2d23,b83c79d7,abe3e237,02dd50b0,0b0ed590,8be6fc95,7872a3f3)
3974 Z8(f4d83a71,8af51b9f,f3868932,22546063,058e76fe,13af47fd,b87b6a56,cfad172d)
3975 Z8(30e2b56c,bc72d096,6f430db5,1e2d0e38,e668367f,6f72a0d0,0e587179,6f5ca671)
3976 Z8(d8bbc128,89164e16,1d7e0e2e,b4841308,a27e7f48,d1efe677,b013e62b,2c1b8ca4)
3977 Z8(f70bbbfd,f2276861,72af6661,d38b9e2c,0409cbdb,2370aa4b,4e9007f5,ab6b2ea8)
3978 Z8(e11d8a93,da967e3b,a4d3f836,f826fa52,1d6d7934,ed7daf71,3ec819fc,734e4a25)
3979 Z8(08f1bf0d,209cf241,110bdf66,751d819f,48719dfa,2e2750ed,8b1f3171,c6f5f000)
3980 Z8(3fa6f90c,0b372c1e,ca87bcad,a61eb994,dcb4c5be,799e378e,467cf8fb,f6c6de2a)
3981 Z8(48a58db6,211ba2b3,a963e3bf,fcb01eba,6d18fe59,7a7a6c08,f6bc6826,975fcc3c)
3982 Z8(b2930b1b,81b9a7ce,df976f3f,8ec810d2,3c1bfd5f,16d89bf1,72ae3422,499e4589)
3983 Z8(b42bd87a,58877cad,0e435f15,8b72f7c7,1e4bc7d0,59cfb147,77c80805,2e79d2f5)
3984 Z8(3b69e7a0,06a18dac,c9fa3f3e,4f5c36b5,2354dd96,f63efb34,cea371ed,aafa8c69)
3985 Z8(9bada3d3,e57d79ea,5a2728a5,0d0d35f9,c3b13e37,ea2ced55,8eae983c,6b00bb99)
3986 Z8(077d0fe6,c531286d,9d347760,16130d85,1f894ac7,704b4be8,0f70f9fa,fc1b7ace)
3987 Z8(85b13e2c,bd01a3c7,e5a2085f,e26dc94e,9b9035b5,1ff54f6a,85b175a3,546be6e3)
3988 Z8(7ed530fc,c21d79f0,7d0ebaa9,06e6814b,22fd6844,a5b5fad1,bc720823,e7863db8)
3989 Z8(166133da,fd66cca7,9538f204,afd64030,2e6f792e,6952038f,21ed5c09,eceb70df)
3990 Z8(6bbdbc46,fdc281d3,aec21b7d,a89dd990,6850d792,f0855f4f,bf225700,b9908133)
3991 Z8(8cab078e,25c82cb2,a3e54242,a3442020,5d3e4ccc,512aaa1b,ff96c3d1,a07f5511)
3992 Z8(a60c8f60,a66fcb0c,e7ed6c28,aec63c26,5a56e5e9,1af64e07,ac7d985a,8e99f652)
3993 Z8(f874e612,45c5bc78,213eeae8,52747fa2,2f880c55,93b20170,2cc422c3,91a4f360)
3994 Z8(423db407,19744c84,99cc04da,74dfed5c,e1eb208e,87f92e14,cf7a72a4,62c7e3a5)
3995 Z8(9da39372,926823ec,a3b6c298,dc26d367,cd8c8506,f394d632,ee008f7d,7ee297b1)
3996 Z8(bacea55d,e3008dd9,d2d15002,7365b007,f36cdf62,0623f633,a518b02e,80edf13d)
3997 Z8(c0d04054,c1299ba4,33cf8529,a30be956,37b978e3,bc3ca2fe,d22a3b42,2e9f88a6)
3998 Z8(2b86f135,e029bf24,66af3daf,a2a275fa,c7cf70a8,3514eaec,cd05c7f8,3f9c0672)
3999 Z8(f3734fd4,6979f902,371c6f3e,debe841c,ceee420f,31a5a4da,e8fe97a5,271be053)
4000 Z8(3381b85a,b8b43e2c,731e651a,c0ae127f,8f2b2373,0de2e4e0,d9b248bc,b8f0be30)
4001 Z8(7e624c67,02f54979,661500a6,f90bda96,25f8efea,a8de9dc9,783081b0,fcf54956)
4002 Z8(becc3c21,a8550fb3,63a221ea,deab5378,68c1b8b6,d0749582,ebf9e078,adae0c09)
4003 Z8(9c23baf4,382f6dfe,02e75a78,eecf7513,215ec2b5,4c1f421a,b0baf7cb,55fb49a7)
4004 Z8(289dbd18,d903e17b,d179c21e,291b1ce5,863dc547,777a5e20,8a8784ac,56bc89fa)
4005 Z8(6c209557,57193472,786c94b4,4a6e936a,f24664a7,caa90793,670e04a8,47d307b8)
4006 Z8(6b645c34,87f909d7,d4e64bc0,a4e94c59,a34e1f0f,ce5004aa,a38df28b,64143f93)
4007 Z8(6ef030a1,0ff452af,68914137,6876522c,2c4617fb,20e875f5,aef4ab8a,11a67cb2)
4008 Z8(aa9278ac,c50fe4d4,20443758,70168c57,80e9ce25,b9fd1208,289471ce,72911cc8)
4009 Z8(113cd60c,11108fe2,4a69d7c8,74c1205d,298cf268,d679b73f,b6947d5d,83f4697f)
4010 Z8(039ac61d,f6460510,b1b37584,5920d59f,43a2b6ea,ed497657,85364849,66d1aa22)
4011 Z8(14d5906f,6a932879,40be5df2,1851668d,bd024ffc,e6e34fec,6e8e6838,b3b742c5)
4012 Z8(2ec5d2c1,68eaa2cb,ddc4ef81,9d7925f1,16135b83,91e43c29,bf4fa142,a793eec2)
4013 Z8(29ea5468,d566677f,5828b077,ceca0ddc,51202b2a,4f63dfb5,556908f8,ed5130d0)
4014 Z8(760207e0,0342d023,a72b0984,5cbe92ad,e1f18a67,5cc2f7e9,b5e73dba,3451da46)
4015 Z8(31e063e4,150ab7b8,c2a09fc7,45d7c5b3,32287c60,a8934e23,64a4500e,030170f9)
4016 Z8(4b2f4a33,59908789,a6eb7cb7,cd454826,21e4c2e2,80d6d3ef,f153ccbb,7e442b55)
4017 Z8(af0fc01c,692316c6,4b753585,6110deb3,3d378a75,0701a571,e91c3ed4,808a0844)
4018 Z8(e964a153,d95c8131,4307887e,c929cabb,577d35af,f4db0f92,dceae0c3,4c6f74d0)
4019 Z8(1e8cd325,b0cfc177,6dcdce23,9c5286fd,cf5a05b4,1ab2b51c,a56bdcc4,ab2055a3)
4020 Z8(55b9aa62,a96d6df3,35c4dfe0,45035b9b,48943110,708cff46,7bac2f0d,3c13819b)
4021 Z8(a940bb46,35049bba,292512ea,14581c62,6d12bc69,2a5cd22f,f0d310c2,6a4073a5)
4022 Z8(cd2491a4,a2da8d82,6abda74b,bd1cd1f2,60e4b295,5d84c522,755056ee,a084a550)
4023 Z8(2c707edd,270b14d8,5e6fb9cb,676dda04,31f1b05a,9e9ebbc2,80e54399,7496e39b)
4024 Z8(9e13641f,6f9f6bcb,80809c50,d5558efa,d58b744f,7157d251,b8ee3a68,26810837)
4025 Z8(4e4781e0,107697a0,ddeacb86,9cdc1510,9b3c9755,af4a62d4,8671bdbf,f64e7ea1)
4026 Z8(ffe61b91,6368df7e,04236558,b2bc23ff,134bd728,82d9ac95,ff4b15d2,7ccb928f)
4027 Z8(d7af2ee0,188c47b0,1a6b10bd,326a25c4,e7e2cefd,1d2218b5,af96e547,868e9dd3)
4028 Z8(a7981d8b,0cad2d3d,e8969a85,c068c465,e95b24db,860c7667,dd115774,651e6554)
4029 Z8(7f3e76ba,1d46bfc4,de159d4a,5c1570aa,438eea33,a044dbfe,9992f161,02c55f1f)
4030 Z8(bb1cc07b,4a40bd4c,f36d7cd7,8dccd03d,7e4c46c9,b5a0ac04,1811f075,42192fe4)
4031 Z8(fccff15f,6e763ad5,6d323d48,8f7cdd91,aa884eec,4e4884ac,67f22b1c,581ec996)
4032 Z8(72950950,8e2bb317,09b3a293,4bf6bb6a,4b7b265e,88c76347,22d692d8,3c457a27)
4033 Z8(eb8b4272,ce1ed91a,9e06796e,e7cc91d6,9fd5aece,bbd4b292,2258d583,0ca93f4c)
4034 Z8(0e914edb,27ed815f,4d0d1587,fbc1ef54,b76a9713,7860d5e5,a24d5032,4c475830)
4035 Z8(f23c4eb9,a0ecd15b,86d95733,c41dd5b9,cac4fdaa,71f7c144,d89905dc,6b97430c)
4036 Z8(0334d312,71af76a9,8a64c167,cc4de934,71ffcba1,0d913b20,e7ab8a1e,e8e442ac)
4037 Z8(6f6c02b7,8b88cc78,b88ea7bd,f2a4d943,37a17788,9eedcdcc,d36f0b20,996fc4b6)
4038 Z8(803c742e,2de864b5,b909f0e5,a8322cf0,6696ee5f,96534107,af826e24,13f35fde)
4039 Z8(7f412556,66b977a6,55aaa035,448853b5,3e5e4be7,14bec8dd,4f251ed0,c29dbe5f)
4040 Z8(bb01929c,2a7ee272,82c3df59,8ad27f30,b58467c2,68c2ece0,6bce5542,63e58328)
4041 Z8(b762225e,be9d39d0,19fcea3a,97bb2627,f0440dcc,d3b4ccc4,6aa9f743,5c2976b2)
4042 Z8(32f33dfd,e5761145,2e7bd637,fea6e485,e3257ffa,5b1b302a,4eb292c2,9fd2187f)
4043 Z8(262de78d,0cc5a2e3,98aa62ac,de020f6d,a7fe02a6,bc1e0fd5,aff7407f,ed93c304)
4044 Z8(0acdd274,2ac46215,56f6a3d0,8ed91f5e,e4c49e83,89d14d60,9a17fde5,78aca16a)
4045 Z8(609f5f0a,819b393e,b169ef5f,d2ec168a,c64f63b7,e1ef1d8a,c65a3456,9032f6a4)
4046 Z8(fc4a9833,82f16037,b2dfa98c,47575f29,22712667,2985255f,f2090010,b00d04c9)
4047 Z8(9f5d7ada,ef9790b2,7e33c831,7dbfed3f,0eb4126b,28205816,a50a19a1,ece273b4)
4048 Z8(5dde89a6,a0e3b550,b95eedb9,1d4f7aed,2b9870c6,e8872878,7c74dcdf,b41b3c4c)
4049 Z8(aab19563,03e07187,6296eaca,c40debd4,07516c28,38487fb1,35a646f2,2ed28da6)
4050 Z8(1cefd4c2,4362dabd,9d985052,17ff3ca8,dfc27876,023b16f7,70197792,3bc3ee92)
4051 Z8(2ed0dff2,e8001193,926744fb,4b0d789b,d867f14b,e929b365,c69cca7a,141bcd47)
4052 Z8(d314f763,0138e4d2,aafd5c18,41090e5b,1f21e11f,a851ab21,f3d83369,f0fc1813)
4053 Z8(711f1536,403ea525,8522e91e,32a6fbd5,661a49fe,a57ddb82,173c2442,cb83581a)
4054 Z8(eb1dd975,c9cb3729,163582a6,ad6ec2cc,18b7112a,838acdfa,adf10dcb,729bff1c)
4055 Z8(65a5e013,55b3366a,b0774b7d,507d2f9d,dbdd3280,145cb134,af268b7c,3d52bb5b)
4056 Z8(d6e2d6a9,f3fd39a1,471c0889,2083184a,d813215e,8f5c75d4,5557f09a,cc0027b9)
4057 Z8(d634bf34,bd5033e8,7e74152c,330b46b6,959f92ef,10392058,9c8eaee5,d71b34fd)
4058 Z8(25180b41,13cc439b,02eac0d2,04389498,3b844db1,ee05aeed,525c49ad,9a83b4a5)
4059 Z8(4a7a82ed,35f9c367,7d699b98,527af673,c98c7d33,eded9085,8fbf6ea9,927a3134)
4060 Z8(53a93da3,1b3c98b3,0fe254e4,67f06b13,5f326a60,6a2e1528,b2481c23,95b1e6f9)
4061 Z8(94c5ef9c,0c1a0bc2,1659dfc6,1dbd626f,42725be2,00a12040,70b7c3e2,400dadb3)
4062 Z8(ec0dd4f0,9290ce11,14abb1ea,96c47756,6da0bdc3,a6ab686b,a464aa7f,5d9a05f4)
4063 Z8(92c6d772,d489312d,27f4dd4f,d79fd147,42f0a8cb,95ebde9d,23dffb38,c34249e5)
4064 Z8(c1cde5cc,c6b34229,5c3eeace,ce6aa37d,61528277,b5b90971,beab31f3,43e2c3ff)
4065 Z8(dd476ca4,d93eac00,631d7fa1,d3b34a98,0757e574,e85c48de,bb506ba2,19f77b56)
4066 Z8(91562fa0,78e80505,25f10da9,14847581,5319d8ea,a96683f8,ad293df6,a650d30d)
4067 Z8(a1b2ee52,0ed0522b,47412d3b,66e8c85a,f9fce84a,c287fd8c,0abf6c20,b694e95f)
4068 Z8(f771857a,31d88024,4b11a1ad,ab008279,f2573600,f75bebb5,90938fe0,a489c639)
4069 Z8(0172ee51,abaee167,5f18d121,fa9766f8,957eddbc,6a90eab6,f9c6bed9,8d2217aa)
4070 Z8(3c400bc3,254cc35c,c7180cfa,e5173926,0456d1a5,2abc5a44,21d67b05,89d112c1)
4071 Z8(437f0a56,e69f9956,349f598a,3c6ff291,80e0485f,cde8a361,148870b3,d62e1dff)
4072 Z8(d8d59e13,02ef6125,9accc88e,3b191d81,0f801318,df7c058f,a5ed1330,f03bea81)
4073 Z8(60af3351,646eea92,69a9c557,ca366d1e,b3156d2e,0d0bdf43,5f1129e8,992e8bf0)
4074 Z8(d3811316,af00a9f2,ce5aff81,d5f94450,665a5176,d36feba4,e53398f3,5cfe2653)
4075 Z8(0355a18e,29fdf716,980febbb,b47d2f6c,881731d1,6fb0091e,4cddc19b,6772e1c1)
4076 Z8(f1706f20,8acc9737,7e4462d4,67680548,e9e03333,b19c5671,fc74c12f,59c022cf)
4077 Z8(33551a87,3342e32c,8a2b6d5f,f6209124,f1294405,d80ae39d,e6a67730,c6bd28f6)
4078 Z8(0e4c824c,68eb3a50,10ca2a2b,e74751da,486f4e5f,175870ad,794ac59a,903f61b9)
4079 Z8(9f8f7d4d,46325785,97f70854,1c562c01,d8b88960,31e3228a,d1c102fc,15b75bde)
4080 Z8(e15aa6b9,36754cb4,89b6c436,e9e16830,17ea4675,c329d5e4,f85c63b3,1254fcbc)
4081 Z8(70890c26,58b263ad,d6f566cb,f89f149c,be17b75d,3e8dc137,4cc6dce3,076f2563)
4082 Z8(74b3213a,e7bb5d73,38b2a891,e4038c5b,c51a5719,bfa569b2,7bdc3b85,fbf03e79)
4083 Z8(f54cf3c0,69050334,021d6995,93a2857b,1eff36fc,1fcdfcf7,7722f66a,93b57b5b)
4084 Z8(f2b67a5e,ca40c491,326da01c,dbdd67fb,e81e5c0d,09017aea,eb0d5cc7,264dc8e6)
4085 Z8(c5bad264,ab103b03,e09a562c,8c2e72e2,0b527989,232bda45,3a500289,6d02cf93)
4086 Z8(a22e4b09,69c3ea4f,44921ec6,d927cda3,ce0168a0,abd97a02,9ae0cba7,0a2d6d9f)
4087 Z8(7878e417,154608ef,a882f91f,e4afd563,c9bf5ee3,24600f29,abdfd66e,8e102c14)
4088 Z8(6bbf58d5,a8289f8a,8cfc30a1,83192cd7,1f94dbf5,5ea7706a,713d263d,6c07eb72)
4089 Z8(022ca6ab,3c0f125c,7254a724,eb374792,884cbbf3,64a0ce0b,8772be90,c1dad18f)
4090 Z8(6a0bf04f,cff82cc3,609a6eff,95733b5d,7cd1cac2,a7b7f91f,da513ff8,4f034af1)
4091 Z8(6cd5fbcb,a84e534d,e37b2b4a,19ed4317,3cec4c73,95defa7f,060d1dd5,71306254)
4092 Z8(12f84189,4e7d273a,14f97c2d,de5f0476,70cf8c65,beecaf9e,cdb32cfa,637f417a)
4093 Z8(782073a4,842dfc6b,e4940071,97b801d7,4cd0cd24,2e568a96,1a0009ed,34b4e2e3)
4094 Z8(5a0c42f8,e502493d,5a02be5c,f070b44d,0378a8cb,f3d8e568,e0f705ba,256bfaf0)
4095 Z8(03a0b691,85a349ed,43e46bf6,19943080,7eaf0b9c,52b3b24a,71a3c30e,9e301f39)
4096 Z8(e8308dbc,e06a8446,13318572,a8879bfd,e74b5e84,a603c464,1f34f494,9c37a164)
4097 Z8(4fb60cfa,a50d00ec,4fd82967,054e4f83,15073d26,20ca7e8d,983b85cc,03d0fe5d)
4098 Z8(b56e7efc,5eed5612,b4d93d97,fcec56f2,91a0cf29,070e7bd3,00dff9b5,70bb57fe)
4099 Z8(55d7eff8,9f49a77a,794f830d,25c3b848,b8da4990,ada20745,2654b37f,265144af)
4100 Z8(34e42a6b,520be3a3,699823ac,61bf51f6,0c002042,f51f1c7b,80fc8e46,c0606f2a)
4101 Z8(8c251b8a,e8e7bd6e,cbc717d8,9cd1d40b,7d34a02a,c50d8279,3dcd3a75,0fec9746)
4102 Z8(c670f4b4,5a111373,e2e4d1f0,2cc3b92d,d155f6ea,fea07acf,40f74410,191dc716)
4103 Z8(b86b7fcf,6b94ae7e,ada12be6,4087d371,60dd4981,e06131cf,24faadfb,28ff6564)
4104 Z8(90bbeb7e,8c4ff063,93b35d17,b4b8b333,73923df1,7ce5db1a,cbff2326,25e28ea2)
4105 Z8(af339d7d,64c694d6,cdfd2033,50437d3a,bb06a66e,cb5baf63,746de41a,e9d50d9d)
4106 Z8(56bccec6,d65b3724,c9b0725c,bef678d9,3f2fea8b,f65ced49,cfadc3d3,24185c3e)
4107 Z8(7e4c7227,4311ca18,ab8bbb64,15e796af,bce74917,0c3d5c40,1b522997,f0f8da6c)
4108 Z8(2505ef80,2c59be2e,c106757d,62697df2,d9ad2a88,7f8d3f0a,8f50e293,01dedd69)
4109 Z8(58dcd5e6,9905583a,e23c601c,e402c855,84798d30,4e20cd03,7165fb10,b00e5f0d)
4110 Z8(fbcdb8ec,13beb580,69023714,00ab9530,eb029851,06477d02,3886e326,bda7b00a)
4111 Z8(703d0212,fd2f294b,6eb4c033,034fe823,32cba47f,65db33b5,970fbc2c,a85c021f)
4112 Z8(44a60a19,7c65f7d1,fae32eb1,83c850c1,e148eedb,78bf0282,39d4ba97,65a4f209)
4113 Z8(c49874ae,cf40dee1,d74b7750,883b63bc,9f8c24f0,578b9ad2,7d2d7f3c,a1c6c473)
4114 Z8(00051d6e,a06290b8,7a13c24d,66635be0,fd38a243,93f68283,71ed0018,80dbd25c)
4115 Z8(5954c902,c7d23725,1c237aed,e47b48a8,717ef46d,d6b06ff4,edfcab3d,e2f1957d)
4116 Z8(ea805669,eaf865a6,449eb433,17689051,b55ef213,104a5e1b,2a63981a,76ce0781)
4117 Z8(e460f597,ddb0e877,4f546447,4fadb74d,152f9b7d,e275eb72,99a0aad9,e765a0f4)
4118 Z8(a4bc6402,d2f0a67a,92900736,2cbce2dc,b5c0c205,08c8759f,151e842a,995f6f12)
4119 Z8(6f45e357,2d8284c2,79432610,dd893a6b,e318b8b0,5c265da0,be268476,e2aa85b2)
4120 Z8(88aa9967,4b3b9e6e,e95d1999,fcd1488b,25d48214,10680303,40b82502,300dd44f)
4121 Z8(6a3f038b,370d1619,bc7b21d3,ceba467f,70cbdbc4,c40e2ac9,3d12c6ab,b58bdcce)
4122 Z8(cec80eac,b6091f45,08aa8e56,8a5af446,94074f87,67071411,91ccc252,7856983f)
4123 Z8(91ee232f,0a08da1c,21380264,8d3c13b7,04f80d79,fc2d7770,6abc3830,a5c618ce)
4124 Z8(4e17f04d,9a90f9e5,d5a09d9e,2845dd5b,793db83e,3d48de11,c5f1445a,175515d4)
4125 Z8(e952acb9,abaa46a1,a8025dd4,1cd5f2b4,990a8fbc,9c248753,d4f99a0c,fdfc7261)
4126 Z8(752adc12,59f6fd8d,d9dad171,83f5f3df,dc154029,313dfeb7,01ad827a,78da7c95)
4127 Z8(599e5684,a5e48d8a,b00c2406,d769430e,43617e07,80967fd4,cd8ec19c,ce98e393)
4128 Z8(90eb334b,a491de35,0a04d4d2,383c64b6,97ebbcb5,e546436a,b92b6775,bbcc4210)
4129 Z8(4969f82e,d7c18b24,23634d43,816bf594,8195ce1d,df034c8f,64985f1c,ae7a7f19)
4130 Z8(80cd6f72,20810d01,7a5a32fe,10367aed,0a967562,f5ba33f0,31c6bcb2,cbb595d2)
4131 Z8(aef00b97,a1b48779,47604497,a322f4eb,3c2b2aa6,9fad3f7e,87b0fcb4,b1f552a3)
4132 Z8(9f82d67a,35a89a62,aa3f885e,afbf8b75,06a3a40f,ac0a1885,f4c62bbe,50b20303)
4133 Z8(9ed76ca6,e7785707,4df88a7e,8c1fd4fd,98a047a2,fa58d7af,061787c0,07767c23)
4134 Z8(4782585a,9c94e1ef,d3711a7b,98419ba1,cddcacce,bc5ecbd1,91310c15,d286551f)
4135 Z8(0b85b306,f808b683,c25008b1,968edaac,1b3229de,2ee8647e,c5d99fa9,4c19f5df)
4136 Z8(109dda22,8d24d7bf,0f046e0f,15f858cc,789d16d0,4ea3364c,e7ae120d,9f9694e2)
4137 Z8(9f171436,7eccfedc,77e3ee42,bbabfde2,d5efb316,66d7badf,0009e97a,c010c3eb)
4138 Z8(ff817fef,cfb7649c,e8229b9b,0a5cfa17,cf5de0f5,6d9374b5,bae0d062,b87a136d)
4139 Z8(e7c79266,7faf28d4,4df040c9,1c19a8be,1d8ded62,bdbe3cfa,4c43fcd9,fb801209)
4140 Z8(467a303a,6b6e6c02,fce26b37,4e06fb54,f5f20871,a8d91b99,c9e0b52e,bfd615ad)
4141 Z8(df16dcfb,af69376e,f169b463,c2272022,77aba281,c5d545c7,3c358b45,66f1917b)
4142 Z8(4a094803,2dba58f3,d4c92cfa,5c5e4156,c07b938f,963c382d,ce8a58e3,792bbbc1)
4143 Z8(78e9a729,d11e4e54,e0009a97,2c6744af,089be8db,091a4ddf,9287ff07,2de8fcf5)
4144 Z8(268a0bb1,82950d4e,632a9163,e466990e,59543ad1,61001e4d,79c0b660,84a3bf85)
4145 Z8(514b63d3,9a722c43,ae66a2b0,17a1bf74,5716f721,ef330368,6fe6831c,c76d6bc8)
4146 Z8(5e5232a6,9cfe00c1,d6f4f218,f659978c,fc8b0fd1,5d77b5e3,8de6be98,4201fb7c)
4147 Z8(c99055a0,a1004438,155b4e14,07167eb6,7951d86d,f22cc5bd,cb918e71,941e12aa)
4148 Z8(b6c31e5c,1bcbea79,7ee32c7d,bc19ae7c,3cc01232,9d84b3d6,9053d9ca,8db01b02)
4149 Z8(a40ee126,83b9a410,0964b460,a9c43a58,3e6abc1c,59fca0c0,f4aec997,2af3d893)
4150 Z8(82da3042,90ee85d6,b505e09e,30913d9f,15b8388a,9c5c7fd8,d0801614,ba8bfa2e)
4151 Z8(2f701ea6,12c5993d,06f7cd52,ac275fac,07e79d7b,f22dad17,74a3f540,76079166)
4152 Z8(6412cbfc,d10687c0,1a680d7d,7865dc53,2205a7e0,ec621f49,7a5c7111,d158404a)
4153 Z8(a2868f81,f7abd59d,1b1b075c,f2507ae6,f1096b47,4db01b6c,296c8177,e7b37fd6)
4154 Z8(7aa35c2c,be26f41e,6fae7cfb,5eb4a5bc,82801849,15198367,0930f270,e24fc040)
4155 Z8(975e9486,6e79df0b,4f7bc079,fdf487a0,b4e9f0ad,a67baea7,566d3a38,3a470c5d)
4156 Z8(46aac656,64dd6277,9bb8785f,15b7a6d1,e959f484,f70ade7a,1b7eac5c,d4080399)
4157 Z8(a552eebc,d098a593,22ba9f3b,88efc428,29e1127f,c3e17f91,6fc063fa,e5ce7b30)
4158 Z8(5a4bf444,88b5a02a,04651c80,3e2d1062,7f4ea501,93af99c5,f3d1bb13,8274f710)
4159 Z8(37353400,b442c3ad,b0b137cc,6b0279c5,34b23225,d3a1bd82,1276449f,1c173a8a)
4160 Z8(1998df6b,1ebb3dd2,cf53f2d9,9cf37661,3c55cf69,43477b11,dc047597,983ff05f)
4161 Z8(6674b4af,250e2717,442b6861,8ceb428b,c7f486c5,8de9704b,5e0a368c,f38eade7)
4162 Z8(dba6d38c,5794fe0d,13c3c48f,ba2a1bd6,c529d6dc,fd1b96f3,719bf81b,bc8f888a)
4163 Z8(c95f4727,9a7dfcb0,b76ccb37,9888f0f9,103a8165,d23a05f3,48c39bf1,b713b205)
4164 Z8(9420ef6a,9234ea85,fb9efcb8,7d498d66,97387cbe,eb11630c,a908169c,ae97a482)
4165 Z8(085f0d45,237d7a6d,bf63c439,72abb1ad,461e22d0,2766f3ff,4146a068,f7b17cfd)
4166 Z8(c5c1bee3,1be0932f,3fa309c7,bbf1e733,ff83c39e,5e8ee43e,902157cc,dc3cfeda)
4167 Z8(4e992dc8,e8ad9902,e65af6fb,b3f5191e,73d16130,ee55b105,09a39b27,c6fa01e3)
4168 Z8(da80f4ef,a638cade,9ed9c610,b6976359,f34c7a84,f8f28119,1931cf1a,83e104d1)
4169 Z8(9caf1bbd,d3856309,e70dbeb4,299d8886,d2dd641f,d465a5a4,6b568b49,8042107e)
4170 Z8(1f5f0156,2b4519a4,84ba0f04,0d40bf30,460f0242,0a116c3c,b9f83468,fda73cdf)
4171 Z8(86c2c15b,7821b36b,c4347132,4f449682,f8b702eb,9ccc6d1e,7711e670,e6d199de)
4172 Z8(a96e00d9,ca57511b,0d9956a5,90a991cb,6dd308f2,81a81df1,61cb707e,1c6406ca)
4173 Z8(04abb049,831a1f5a,50ac1a43,0cd7bd89,6d076f36,2b34c387,ef6a5ebd,add7b980)
4174 Z8(283dc9b7,58118ea5,0957884f,cb6e5527,6aa8054a,a9ea62d9,e56797d1,923b6750)
4175 Z8(05e5d0cc,4ac9af77,13c5f541,afb40fe5,444560e6,97257c06,b4bb7615,c3a1cfa2)
4176 Z8(ecf6537d,b64199c6,14cac452,21be12d9,2fa57336,a6f0cc3a,eae76dce,b1f36c4d)
4177 Z8(830d6926,b3a2b31e,219263c8,036405b6,0a591542,a26f428c,ca195ed4,7493f3cc)
4178 Z8(aea7580b,d808e62c,97a8768d,e3090288,a68189ea,d4da66f3,db3b78eb,5408ccb1)
4179 Z8(7cac9071,e77c4a09,3f93ba3f,4158580c,f6c2ee39,c139eae5,1a042a4d,fef13297)
4180 Z8(65140b3c,ccf8a858,03d7306e,289926cf,02509e47,bd48e29f,09a12dfa,1064e38c)
4181 Z8(6003e683,fd2a57d7,826daec5,9e3e63c1,85ee8a83,fc20a3be,1dbb58ff,90a8e5c5)
4182 Z8(34fa4278,b8a0ef49,4ac1cd00,dd0412e1,262dcd7b,cf7f7ba6,109291ad,8bea4f6e)
4183 Z8(1491d8af,8d2fc0f4,01e4f7cf,ab2be0ff,d44a3e6a,9b489d4c,00000000,00000000)
4184 };
4185
4186 int
4187 _arb_hypgeom_gamma_coeff_shallow(arf_t c, mag_t err, slong i, slong prec)
4188 {
4189 slong term_limbs;
4190 slong exp, pos;
4191 mp_size_t xn;
4192 mp_ptr xp;
4193 int negative;
4194
4195 term_limbs = (prec + FLINT_BITS - 1) / FLINT_BITS;
4196 #if FLINT_BITS == 32
4197 term_limbs += (term_limbs & 1);
4198 #endif
4199
4200 exp = arb_hypgeom_gamma_coeffs[i].exp;
4201 pos = arb_hypgeom_gamma_coeffs[i].tab_pos;
4202 xn = arb_hypgeom_gamma_coeffs[i].nlimbs;
4203 negative = arb_hypgeom_gamma_coeffs[i].negative;
4204
4205 #if FLINT_BITS == 32
4206 pos *= 2;
4207 xn *= 2;
4208 #endif
4209
4210 if (term_limbs > xn)
4211 return 0;
4212
4213 xp = (mp_ptr) arb_hypgeom_gamma_tab_limbs + pos;
4214
4215 ARF_EXP(c) = exp;
4216 ARF_XSIZE(c) = ARF_MAKE_XSIZE(term_limbs, negative);
4217
4218 if (term_limbs == 1)
4219 {
4220 ARF_NOPTR_D(c)[0] = xp[xn - 1];
4221 }
4222 else if (term_limbs == 2)
4223 {
4224 ARF_NOPTR_D(c)[0] = xp[xn - 2];
4225 ARF_NOPTR_D(c)[1] = xp[xn - 1];
4226 }
4227 else
4228 {
4229 ARF_PTR_D(c) = xp + xn - term_limbs;
4230 }
4231
4232 if (err != NULL)
4233 {
4234 MAG_EXP(err) = exp - term_limbs * FLINT_BITS + 1;
4235 MAG_MAN(err) = MAG_ONE_HALF;
4236 }
4237
4238 return 1;
4239 }
4240
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 #define DEBUG 0
14
15
16 const double arb_hypgeom_rgamma_d_tab[128] = {
17 1.0,
18 0.57721566490153286061,
19 -0.65587807152025388108,
20 -0.042002635034095235529,
21 0.1665386113822914895,
22 -0.042197734555544336748,
23 -0.0096219715278769735621,
24 0.0072189432466630995424,
25 -0.0011651675918590651121,
26 -0.00021524167411495097282,
27 0.00012805028238811618615,
28 -0.000020134854780788238656,
29 -1.2504934821426706573e-6,
30 1.1330272319816958824e-6,
31 -2.0563384169776071035e-7,
32 6.1160951044814158179e-9,
33 5.0020076444692229301e-9,
34 -1.1812745704870201446e-9,
35 1.0434267116911005105e-10,
36 7.782263439905071254e-12,
37 -3.6968056186422057082e-12,
38 5.100370287454475979e-13,
39 -2.0583260535665067832e-14,
40 -5.3481225394230179824e-15,
41 1.2267786282382607902e-15,
42 -1.1812593016974587695e-16,
43 1.1866922547516003326e-18,
44 1.4123806553180317816e-18,
45 -2.2987456844353702066e-19,
46 1.7144063219273374334e-20,
47 1.3373517304936931149e-22,
48 -2.0542335517666727893e-22,
49 2.7360300486079998448e-23,
50 -1.7323564459105166391e-24,
51 -2.3606190244992872873e-26,
52 1.8649829417172944307e-26,
53 -2.2180956242071972044e-27,
54 1.2977819749479936688e-28,
55 1.1806974749665284062e-30,
56 -1.1245843492770880903e-30,
57 1.277085175140866204e-31,
58 -7.3914511696151408235e-33,
59 1.134750257554215761e-35,
60 4.6391346410587220299e-35,
61 -5.3473368184391988751e-36,
62 3.2079959236133526229e-37,
63 -4.4458297365507568821e-39,
64 -1.3111745188819887129e-39,
65 1.6470333525438138868e-40,
66 -1.0562331785035812186e-41,
67 2.6784429826430494784e-43,
68 2.4247154948517826897e-44,
69 -3.736587834535612554e-45,
70 2.6283329809401954491e-46,
71 -9.2981759953768862996e-48,
72 -2.3279424186994705986e-49,
73 6.1696208352443874204e-50,
74 -4.9282955867709899305e-51,
75 2.1835131834145106973e-52,
76 -1.2187221891475165553e-54,
77 -7.1171088416628746319e-55,
78 6.9205040543286892535e-56,
79 -3.6764384683566763277e-57,
80 8.563098056275654328e-59,
81 4.9630454283668443848e-60,
82 -7.1542945770816152182e-61,
83 4.5517276890885041177e-62,
84 -1.6183993053202944344e-63,
85 -3.8180434243999502464e-66,
86 5.1850524119058482295e-66,
87 -4.1671368092239208861e-67,
88 1.9162906929373887193e-68,
89 -3.8089281324683658733e-70,
90 -2.2063861055924121016e-71,
91 2.7722310960098954165e-72,
92 -1.5987660478100181057e-73,
93 5.3197307804174034028e-75,
94 -8.0517461416842390432e-78,
95 -1.2484629810263795113e-77,
96 9.6431887683992238428e-79,
97 -4.2827980483017479213e-80,
98 9.5087142369030441861e-82,
99 2.7131392138694383464e-83,
100 -4.0968779415069156659e-84,
101 2.3742980019740160598e-85,
102 -8.2770890210072789764e-87,
103 9.072497609426645865e-89,
104 1.0645558195026985633e-89,
105 -9.285335619603754493e-91,
106 4.3333135927203670323e-92,
107 -1.1745606334673315984e-93,
108 -2.6908010752365215433e-96,
109 2.3898952892036810357e-96,
110 -1.5569361182789167325e-97,
111 6.0488748201074133757e-99,
112 -1.2273370571029378615e-100,
113 -2.540738850916238751e-102,
114 3.7708800953170816508e-103,
115 -2.0089261677502892352e-104,
116 6.6158100911447349361e-106,
117 -9.2404702022121568081e-108,
118 -4.82072018655246532e-109,
119 4.4938898756858357188e-110,
120 -2.0497789059725778416e-111,
121 5.7862770569866937508e-113,
122 -4.5696744624334387424e-115,
123 -5.8267365553303743945e-116,
124 4.2025380699297338056e-117,
125 -1.6889318527713702846e-118,
126 4.1226213324018604871e-120,
127 -8.2451196593745569675e-123,
128 -5.2036993784470216679e-123,
129 3.1616685922306712047e-124,
130 -1.1432359131094236326e-125,
131 2.4359648735131490197e-127,
132 8.8701584767164321698e-130,
133 -3.6328610892429035156e-130,
134 1.9485148907440212068e-131,
135 -6.450096583602651512e-133,
136 1.215186561728963791e-134,
137 1.0637863819629713691e-136,
138 -2.0430980587447135517e-137,
139 9.9760876002985183681e-139,
140 -3.0707428945789381066e-140,
141 5.2091832948433107534e-142,
142 6.7131589510935005823e-144,
143 -9.434301219575868381e-145,
144 4.2908149482548296582e-146,
145 };
146
147 #define GAMMA_MIN_X 1.4616321449683623413
148 #define GAMMA_MIN_Y 0.88560319441088870028
149
150 /* Crude upper bound for psi(x) for x > 0, adequate for perturbation bounds
151 for gamma. */
152 double
153 d_abs_digamma_ubound(double x)
154 {
155 if (x <= 1.0)
156 {
157 return (1.0 + 1e-14) / x + 0.57721566490153286061 - x + 1e-14;
158 }
159 else if (x <= GAMMA_MIN_X)
160 {
161 return -1.250380137503405359*x + 1.8275958024049382196 + 1e-14;
162 }
163 else if (x <= 8.0)
164 {
165 return (x - GAMMA_MIN_X) * (1.7581621716802087234 +
166 x * (-0.74622516195984912595 + x * (0.17009872711678924164 +
167 x * (-0.018637559864260712285 + x * 0.00077747045691426195132)))) + 1e-12;
168 }
169 else if (x <= 128.0)
170 {
171 return 0.75334126757115431475 + x * (0.21045131598436795981 +
172 x * (-0.0075387469533717503617 + x * (0.00017308475161765275722 +
173 x * (-2.4025446500822043239e-6 + x * (1.9547402969088507111e-8 +
174 x * (-8.5654894222045481692e-11 + x * 1.5584520745423393038e-13)))))) + 1e-12;
175 }
176 else
177 {
178 return (mag_d_log_upper_bound(x) + 1.0 / x) * (1.0 + 1e-14);
179 }
180 }
181
182 /* Upper or lower bound (depending on direction) for gamma(x),
183 assuming x > 0, no overflow. */
184 double
185 _arb_hypgeom_d_gamma(double x, int direction)
186 {
187 double s, t, p;
188 int i, r;
189
190 if (direction == 1)
191 p = 1 + 1e-14;
192 else
193 p = 1 - 1e-14;
194
195 if (x < 0.5)
196 {
197 s = d_polyval(arb_hypgeom_rgamma_d_tab, 19, x);
198 s = 1.0 / (s * x);
199 }
200 else if (x <= 1.5)
201 {
202 s = 1.0 / d_polyval(arb_hypgeom_rgamma_d_tab, 19, x - 1.0);
203 }
204 else
205 {
206 r = (int) (x + 0.5);
207
208 s = d_polyval(arb_hypgeom_rgamma_d_tab, 19, x - r);
209
210 t = 1.0;
211 for (i = 0; i < r - 1; i++)
212 t *= (x - i - 1) * p;
213
214 s = t / s;
215 }
216
217 return s * p;
218 }
219
220 /* Set res = [a, b]; not checking overflow or underflow. */
221 void arb_set_interval_d_fast(arb_t res, double a, double b, slong prec)
222 {
223 double mid, rad;
224
225 if (a > b)
226 {
227 flint_printf("arb_set_interval_d_fast: expected a < b\n");
228 flint_abort();
229 }
230
231 mid = a + 0.5 * (b - a);
232 rad = (0.5 * (b - a) + (mid * 1e-15)) * (1 + 1e-15);
233 arf_set_d(arb_midref(res), mid);
234 mag_set_d(arb_radref(res), rad);
235 arb_set_round(res, res, prec);
236 }
237
238 int _arf_increment_fast(arf_t x, slong prec);
239
240
241
242 /* Try to compute gamma(x) using Taylor series. Returns 1 on success, 0 on
243 failure (x too large or precision too large). */
244 int
245 arb_hypgeom_gamma_taylor(arb_t res, const arb_t x, int reciprocal, slong prec)
246 {
247 double dx, dxerr, log2u, ds, du;
248 slong i, n, wp, r, tail_bound, rad_exp, mid_exp;
249 arf_t s, u, v;
250 short term_prec[ARB_HYPGEOM_GAMMA_TAB_NUM];
251 int success;
252
253 #if DEBUG
254 printf("INPUT: "); arb_printd(x, 200); printf("\n");
255 printf("INPUT prec: %ld\n", prec);
256 #endif
257
258 /* We don't want to deal with infinities or huge/tiny exponents here. */
259 if (!ARB_IS_LAGOM(x))
260 return 0;
261
262 /* 2^e bounds for the midpoint and radius. */
263 mid_exp = arf_is_zero(arb_midref(x)) ? WORD_MIN : ARF_EXP(arb_midref(x));
264 rad_exp = mag_is_zero(arb_radref(x)) ? WORD_MIN : MAG_EXP(arb_radref(x));
265
266 /* Containing zero. */
267 if (rad_exp >= mid_exp && arb_contains_zero(x))
268 {
269 if (reciprocal)
270 {
271 arb_t t;
272 arb_init(t);
273 arb_add_ui(t, x, 1, prec + 10);
274
275 if (!arb_contains_zero(t))
276 {
277 success = arb_hypgeom_gamma_taylor(t, t, reciprocal, prec + 10);
278 if (success)
279 arb_mul(res, x, t, prec);
280 }
281 else
282 {
283 /* todo: accurate wide interval */
284 success = 0;
285 }
286
287 arb_clear(t);
288 return success;
289 }
290 else
291 {
292 arb_indeterminate(res);
293 return 1;
294 }
295 }
296
297 /* Quick exclusion of too large numbers. */
298 if (mid_exp > 8 || rad_exp > 8)
299 return 0;
300
301 /* Adjust precision if the input is not precise. */
302 if (rad_exp != WORD_MIN)
303 prec = FLINT_MIN(prec, -rad_exp + MAG_BITS);
304 prec = FLINT_MAX(prec, 2);
305
306 /* Midpoint and radius as doubles. */
307 dx = arf_get_d(arb_midref(x), ARF_RND_NEAR);
308 dxerr = mag_get_d(arb_radref(x));
309
310 /* Too large to be efficient (high precision), or gamma(x) may overflow
311 doubles (wide case). */
312 if (dx + dxerr > 160.0 || dx - dxerr < -160.0)
313 return 0;
314
315 /* Very close to 0, reduce to gamma(x) = gamma(x + 1) / x. */
316 if (mid_exp < -32 || (dx - dxerr >= -0.5 && dx - dxerr < ldexp(1.0, -6)))
317 {
318 arb_t t;
319 arb_init(t);
320 arb_add_ui(t, x, 1, prec + 10);
321
322 #if DEBUG
323 printf("DIVIDING NEAR 0\n");
324 #endif
325
326 success = arb_hypgeom_gamma_taylor(t, t, reciprocal, prec + 10);
327 if (success)
328 {
329 if (reciprocal)
330 arb_mul(res, x, t, prec);
331 else
332 arb_div(res, t, x, prec);
333 }
334
335 arb_clear(t);
336 return success;
337 }
338
339 /* Nearest (roughly) integer to x, to use as shift for argument reduction
340 to move to the interval [-0.5,0.5]. It's OK that dx is approximate so
341 that the reduced argument will actually lie in [-0.5-eps,0.5+eps]. */
342 if (dx >= 0.0)
343 r = (slong) (dx + 0.5);
344 else
345 r = -(slong) (-dx + 0.5);
346
347 /* Tuning cutoff. */
348 if (prec >= 40)
349 {
350 if (r < -(40 + (prec - 40) / 4))
351 return 0;
352
353 if (r > 70 + (prec - 40) / 8)
354 return 0;
355 }
356
357 /* For negative numbers, reduce to the positive case. */
358 /* gamma(x) = (-1)^r * gamma(1+x-r) / (rf(1+r-x,-r)*(x-r)) */
359 /* 1/gamma(x) = (-1)^r * rgamma(1+x-r) * rf(1+r-x,-r) * (x-r) */
360 if (dx < 0.0)
361 {
362 arb_t t, u, v;
363
364 arb_init(t);
365 arb_init(u);
366 arb_init(v);
367
368 arb_sub_si(t, x, r, prec + 10);
369
370 /* Pole. */
371 if (!reciprocal && arb_contains_zero(t))
372 {
373 arb_indeterminate(res);
374 success = 1;
375 }
376 else
377 {
378 arb_add_si(u, x, 1 - r, prec + 10);
379
380 success = 1;
381 if (reciprocal && !arb_is_positive(u))
382 {
383 /* todo: accurate wide interval */
384 success = 0;
385 }
386
387 success = arb_hypgeom_gamma_taylor(u, u, reciprocal, prec + 10);
388
389 if (success)
390 {
391 /* Wide bounds for rising factorial. */
392 if (prec < 44)
393 {
394 double a, b, c, d;
395
396 c = (-dx + r + 1 - dxerr) * (1 - 1e-14);
397 d = (-dx + r + 1 + dxerr) * (1 + 1e-14);
398 a = b = 1.0;
399
400 for (i = 0; i < -r; i++)
401 {
402 a = a * ((c + i) * (1 - 1e-15));
403 b = b * ((d + i) * (1 + 1e-15));
404 }
405
406 arb_set_interval_d_fast(v, a, b, 53);
407
408 if (reciprocal)
409 {
410 arb_mul(res, u, v, prec + 10);
411 arb_mul(res, res, t, prec);
412 }
413 else
414 {
415 arb_div(res, u, v, prec + 10);
416 arb_div(res, res, t, prec);
417 }
418 }
419 else
420 {
421 arb_neg(v, x);
422 arb_add_si(v, v, 1 + r, prec + 10);
423 arb_hypgeom_rising_ui_rec(v, v, -r, prec + 10);
424 arb_mul(v, v, t, prec + 10);
425
426 if (reciprocal)
427 arb_mul(res, u, v, prec);
428 else
429 arb_div(res, u, v, prec);
430 }
431
432 if (r % 2)
433 arb_neg(res, res);
434 }
435 }
436
437 arb_clear(t);
438 arb_clear(u);
439 arb_clear(v);
440 return success;
441 }
442
443 /* Wide enclosure. */
444 if (prec < 40 || rad_exp > -16)
445 {
446 double a, b, c;
447
448 #if DEBUG
449 printf("WIDE CASE\n");
450 #endif
451
452 dxerr += ldexp(1.0, mid_exp - 51);
453 dxerr *= (1 + 1e-15);
454
455 a = (dx - dxerr) * (1 - 1e-15);
456 b = (dx + dxerr) * (1 + 1e-15);
457
458 if (a >= GAMMA_MIN_X)
459 {
460 a = _arb_hypgeom_d_gamma(a, -1);
461 b = _arb_hypgeom_d_gamma(b, 1);
462 }
463 else if (b <= GAMMA_MIN_X)
464 {
465 c = _arb_hypgeom_d_gamma(a, 1);
466 a = _arb_hypgeom_d_gamma(b, -1);
467 b = c;
468 }
469 else
470 {
471 a = _arb_hypgeom_d_gamma(a, 1);
472 b = _arb_hypgeom_d_gamma(b, 1);
473 b = FLINT_MAX(a, b);
474 a = GAMMA_MIN_Y * (1 - 1e-15);
475 }
476
477 if (reciprocal)
478 {
479 c = (1.0 / b) * (1 - 1e-15);
480 b = (1.0 / a) * (1 + 1e-15);
481 a = c;
482 }
483
484 arb_set_interval_d_fast(res, a, b, prec);
485 return 1;
486 }
487
488 /* Propagated error. */
489 if (rad_exp == WORD_MIN)
490 {
491 dxerr = 0.0;
492 rad_exp = WORD_MIN;
493 }
494 else
495 {
496 /* First-order relative error estimate plus safety factor to guarantee
497 an upper bound. */
498 dxerr = MAG_MAN(arb_radref(x)) * ldexp(1.0, -MAG_BITS);
499 dxerr = dxerr * d_abs_digamma_ubound(dx) * 1.001;
500 }
501
502 #if DEBUG
503 flint_printf("propagated error = %g x 2^%wd\n", dxerr, rad_exp);
504 #endif
505
506 wp = prec + 6 + FLINT_BIT_COUNT(FLINT_ABS(r));
507
508 if (wp > ARB_HYPGEOM_GAMMA_TAB_PREC)
509 return 0;
510
511 success = 0;
512
513 arf_init(s);
514 arf_init(u);
515 arf_init(v);
516
517 /* u = x - r */
518 arf_sub_si(u, arb_midref(x), r, wp, ARF_RND_DOWN);
519
520 /* du = dx - r; */
521 du = arf_get_d(u, ARF_RND_NEAR);
522
523 /* bound log2(u) */
524 if (-0.0001 < du && du < 0.0001)
525 log2u = arf_is_zero(u) ? -wp : ARF_EXP(u);
526 else
527 log2u = mag_d_log_upper_bound(du < 0 ? -du : du) * 1.4426950408889634074 * (1 + 1e-14);
528
529 term_prec[0] = wp;
530 n = 0;
531
532 for (i = 1; i < ARB_HYPGEOM_GAMMA_TAB_NUM; i++)
533 {
534 tail_bound = arb_hypgeom_gamma_coeffs[i].exp + i * log2u + 5;
535
536 if (tail_bound <= -wp)
537 {
538 n = i;
539 break;
540 }
541
542 term_prec[i] = FLINT_MIN(FLINT_MAX(wp + tail_bound, 2), wp);
543 }
544
545 if (n == 0)
546 {
547 flint_printf("warning: gamma_taylor: unexpected failure\n");
548 success = 0;
549 goto cleanup;
550 }
551
552 #if DEBUG
553 printf("COMPUTATION: wp = %ld, du = %g, log2u = %g, n = %ld\n", wp, du, log2u, n);
554 #endif
555
556 if (wp <= 512 && n <= 128)
557 {
558 ds = 0.0;
559 for (i = n - 1; i >= 1 && term_prec[i] <= 53; i--)
560 {
561 #if DEBUG
562 flint_printf("add term %wd with precision %wd (doubles)\n", i, term_prec[i]);
563 #endif
564
565 ds = du * ds + arb_hypgeom_rgamma_d_tab[i];
566 }
567
568 arf_set_d(s, ds);
569 }
570 else
571 {
572 i = n - 1;
573 }
574
575 for ( ; i >= 1; i--)
576 {
577 arf_t c;
578
579 #if DEBUG
580 flint_printf("add term %wd with precision %wd\n", i, term_prec[i]);
581 #endif
582
583 if (!_arb_hypgeom_gamma_coeff_shallow(c, NULL, i, term_prec[i]))
584 flint_abort();
585
586 if (term_prec[i] < wp - 128)
587 {
588 arf_set_round(v, u, term_prec[i], ARF_RND_DOWN);
589 arf_mul(s, s, v, term_prec[i], ARF_RND_DOWN);
590 arf_add(s, s, c, term_prec[i], ARF_RND_DOWN);
591 }
592 else
593 {
594 arf_mul(s, s, u, term_prec[i], ARF_RND_DOWN);
595 arf_add(s, s, c, term_prec[i], ARF_RND_DOWN);
596 }
597 }
598
599 if (i == 0)
600 {
601 #if DEBUG
602 flint_printf("add term %wd with precision %wd\n", i, term_prec[i]);
603 #endif
604
605 arf_mul(s, s, u, wp, ARF_RND_DOWN);
606 arf_add_ui(s, s, 1, wp, ARF_RND_DOWN);
607 }
608
609 if (r == 0 || r == 1)
610 {
611 if (r == 0)
612 arf_mul(s, s, u, wp, ARF_RND_DOWN);
613
614 if (reciprocal)
615 {
616 arf_set_round(arb_midref(res), s, prec, ARF_RND_DOWN);
617 }
618 else
619 {
620 arf_one(u);
621 arf_div(arb_midref(res), u, s, prec, ARF_RND_DOWN);
622 }
623 arf_mag_set_ulp(arb_radref(res), arb_midref(res), prec - 1);
624 }
625 else if (wp <= 320 || r <= 3)
626 {
627 _arf_increment_fast(u, wp);
628 arf_set(v, u);
629
630 for (i = 2; i < r; i++)
631 {
632 _arf_increment_fast(u, wp);
633 arf_mul(v, v, u, wp, ARF_RND_DOWN);
634 }
635
636 if (reciprocal)
637 arf_div(arb_midref(res), s, v, prec, ARF_RND_DOWN);
638 else
639 arf_div(arb_midref(res), v, s, prec, ARF_RND_DOWN);
640 arf_mag_set_ulp(arb_radref(res), arb_midref(res), prec - 1);
641 }
642 else
643 {
644 arb_t t;
645 arb_init(t);
646 _arf_increment_fast(u, wp);
647 arb_set_arf(t, u);
648 arb_hypgeom_rising_ui_rec(t, t, r - 1, wp);
649
650 if (reciprocal)
651 {
652 arb_set_arf(res, s);
653 arb_div(res, res, t, prec);
654 }
655 else
656 arb_div_arf(res, t, s, prec);
657
658 arf_mag_add_ulp(arb_radref(res), arb_radref(res), arb_midref(res), prec - 1);
659 arb_clear(t);
660 }
661
662 /* Add propagated error. */
663 if (dxerr != 0)
664 {
665 mag_t err;
666 double dy;
667 dy = arf_get_d(arb_midref(res), ARF_RND_UP);
668 dxerr = dxerr * dy * (1 + 1e-15);
669 MAG_SET_D_2EXP(MAG_MAN(err), MAG_EXP(err), dxerr, rad_exp);
670 mag_add(arb_radref(res), arb_radref(res), err);
671 }
672
673 success = 1;
674
675 #if DEBUG
676 printf("OUTPUT: "); arb_printd(res, 200); printf("\n");
677 #endif
678
679 cleanup:
680 arf_clear(s);
681 arf_clear(u);
682 arf_clear(v);
683
684 return success;
685 }
686
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 void arb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n, const arb_t x, int use_reflect, int digamma, slong prec);
14 int arb_hypgeom_gamma_exact(arb_t res, const arb_t x, int reciprocal, slong prec);
15 void arb_hypgeom_gamma_stirling_inner(arb_t s, const arb_t z, slong N, slong prec);
16
17 void
18 arb_hypgeom_lgamma_stirling(arb_t y, const arb_t x, slong prec)
19 {
20 int reflect;
21 slong r, n, wp;
22 arb_t t, u;
23 double acc;
24
25 /* todo: for large x (if exact or accurate enough), increase precision */
26 acc = arb_rel_accuracy_bits(x);
27 acc = FLINT_MAX(acc, 0);
28 wp = FLINT_MIN(prec, acc + 20);
29 wp = FLINT_MAX(wp, 2);
30 wp = wp + FLINT_BIT_COUNT(wp);
31
32 arb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, x, 0, 0, wp);
33
34 arb_init(t);
35 arb_init(u);
36
37 /* log(gamma(x)) = log(gamma(x+r)) - log(rf(x,r)) */
38 arb_init(t);
39 arb_init(u);
40
41 arb_add_ui(t, x, r, wp);
42 arb_hypgeom_gamma_stirling_inner(u, t, n, wp);
43 arb_hypgeom_rising_ui_rec(t, x, r, wp);
44 arb_log(t, t, wp);
45 arb_sub(y, u, t, prec);
46
47 arb_clear(t);
48 arb_clear(u);
49 }
50
51 void
52 arb_hypgeom_lgamma(arb_t res, const arb_t x, slong prec)
53 {
54 if (!arb_is_positive(x) || !arb_is_finite(x))
55 {
56 arb_indeterminate(res);
57 return;
58 }
59
60 if (arb_hypgeom_gamma_exact(res, x, 0, prec))
61 {
62 arb_log(res, res, prec);
63 return;
64 }
65
66 if (arb_hypgeom_gamma_taylor(res, x, 0, prec))
67 {
68 arb_log(res, res, prec);
69 return;
70 }
71
72 arb_hypgeom_lgamma_stirling(res, x, prec);
73 }
74
1313 void
1414 arb_hypgeom_rising_ui_jet(arb_ptr res, const arb_t x, ulong n, slong len, slong prec)
1515 {
16 if (n <= 7)
16 if (len == 1)
17 {
18 arb_hypgeom_rising_ui_rec(res, x, n, prec);
19 }
20 else if (n <= 7)
1721 {
1822 arb_hypgeom_rising_ui_jet_powsum(res, x, n, len, prec);
1923 }
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("gamma_fmpq....");
19 fflush(stdout);
20 flint_randinit(state);
21
22 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
23 {
24 arb_t r, s;
25 fmpq_t q;
26 slong accuracy, prec, pp, qq;
27
28 prec = 2 + n_randint(state, 1 << n_randint(state, 12));
29 prec += 20;
30
31 arb_init(r);
32 arb_init(s);
33 fmpq_init(q);
34
35 pp = -100 + n_randint(state, 10000);
36 qq = 1 + n_randint(state, 20);
37 fmpq_set_si(q, pp, qq);
38
39 arb_hypgeom_gamma_fmpq(r, q, prec);
40
41 arb_set_fmpq(s, q, prec);
42 arb_hypgeom_gamma(s, s, prec);
43
44 if (!arb_overlaps(r, s))
45 {
46 flint_printf("FAIL: containment\n\n");
47 flint_printf("prec = %wd\n", prec);
48 flint_printf("q = "); fmpq_print(q); flint_printf("\n\n");
49 flint_printf("r = "); arb_printd(r, prec / 3.33); flint_printf("\n\n");
50 flint_printf("s = "); arb_printd(s, prec / 3.33); flint_printf("\n\n");
51 flint_abort();
52 }
53
54 if (!(fmpz_is_one(fmpq_denref(q)) && fmpz_sgn(fmpq_numref(q)) <= 0)
55 && FLINT_ABS(pp / qq) < 10)
56 {
57 accuracy = arb_rel_accuracy_bits(r);
58
59 if (accuracy < prec - 6)
60 {
61 flint_printf("FAIL: poor accuracy\n\n");
62 flint_printf("prec = %wd\n", prec);
63 flint_printf("q = "); fmpq_print(q); flint_printf("\n\n");
64 flint_printf("r = "); arb_printd(r, prec / 3.33); flint_printf("\n\n");
65 flint_abort();
66 }
67 }
68
69 arb_clear(r);
70 arb_clear(s);
71 fmpq_clear(q);
72 }
73
74 for (iter = 0; iter < 50 * arb_test_multiplier(); iter++)
75 {
76 arb_t r, s;
77 fmpq_t q;
78 slong accuracy, prec;
79
80 prec = 2 + n_randint(state, 25000);
81
82 arb_init(r);
83 arb_init(s);
84 fmpq_init(q);
85
86 fmpz_randtest(fmpq_numref(q), state, 3 + n_randlimb(state) % 30);
87 fmpz_randtest_not_zero(fmpq_denref(q), state, 3 + n_randlimb(state) % 30);
88 fmpq_canonicalise(q);
89
90 arb_hypgeom_gamma_fmpq(r, q, prec);
91
92 arb_set_fmpq(s, q, prec);
93 arb_hypgeom_gamma(s, s, prec);
94
95 if (!arb_overlaps(r, s))
96 {
97 flint_printf("FAIL: containment\n\n");
98 flint_printf("prec = %wd\n", prec);
99 flint_printf("q = "); fmpq_print(q); flint_printf("\n\n");
100 flint_printf("r = "); arb_printd(r, prec / 3.33); flint_printf("\n\n");
101 flint_printf("s = "); arb_printd(s, prec / 3.33); flint_printf("\n\n");
102 flint_abort();
103 }
104
105 if (!(fmpz_is_one(fmpq_denref(q)) && fmpz_sgn(fmpq_numref(q)) <= 0) &&
106 fabs(fmpq_get_d(q)) < 10.0)
107 {
108 accuracy = arb_rel_accuracy_bits(r);
109
110 if (accuracy < prec - 6)
111 {
112 flint_printf("FAIL: poor accuracy\n\n");
113 flint_printf("prec = %wd\n", prec);
114 flint_printf("q = "); fmpq_print(q); flint_printf("\n\n");
115 flint_printf("r = "); arb_printn(r, prec / 3.33, 0); flint_printf("\n\n");
116 flint_printf("s = "); arb_printn(s, prec / 3.33, 0); flint_printf("\n\n");
117 flint_abort();
118 }
119 }
120
121 arb_clear(r);
122 arb_clear(s);
123 fmpq_clear(q);
124 }
125
126 flint_randclear(state);
127 flint_cleanup();
128 flint_printf("PASS\n");
129 return EXIT_SUCCESS;
130 }
131
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("gamma_stirling_sum....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
24 {
25 arb_t z, s1, s2;
26 slong prec, N, K;
27
28 prec = 2 + n_randint(state, 800);
29 N = n_randint(state, 200);
30 K = n_randint(state, 20);
31
32 arb_init(z);
33 arb_init(s1);
34 arb_init(s2);
35
36 arb_randtest(z, state, prec, 10 + n_randint(state, 200));
37
38 arb_hypgeom_gamma_stirling_sum_horner(s1, z, N, prec);
39 arb_hypgeom_gamma_stirling_sum_improved(s2, z, N, K, prec);
40
41 if (!arb_overlaps(s1, s2))
42 {
43 flint_printf("FAIL\n\n");
44 flint_printf("N = %wd, K = %wd, prec = %wd\n\n", N, K, prec);
45 flint_printf("z = "); arb_printn(z, 1000, 0); flint_printf("\n\n");
46 flint_printf("s1 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
47 flint_printf("s2 = "); arb_printn(s2, 1000, 0); flint_printf("\n\n");
48 flint_abort();
49 }
50
51 arb_clear(z);
52 arb_clear(s1);
53 arb_clear(s2);
54 }
55
56 flint_randclear(state);
57 flint_cleanup();
58 flint_printf("PASS\n");
59 return EXIT_SUCCESS;
60 }
61
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("gamma_taylor....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 for (iter = 0; iter < 100000 * arb_test_multiplier(); iter++)
24 {
25 arb_t x, s1, s2, a, b;
26 slong prec, ebits, prec2;
27 int success, success2, alias, reciprocal;
28
29 if (n_randint(state, 10) == 0)
30 prec = 2 + n_randint(state, 4000);
31 else
32 prec = 2 + n_randint(state, 300);
33
34 if (n_randint(state, 10) == 0)
35 ebits = 100;
36 else
37 ebits = 10;
38
39 prec2 = prec + 1 + n_randint(state, 30);
40
41 arb_init(x);
42 arb_init(s1);
43 arb_init(s2);
44 arb_init(a);
45 arb_init(b);
46
47 arb_randtest(x, state, prec, ebits);
48 arb_randtest(s1, state, prec, 10);
49 arb_randtest(s2, state, prec, 10);
50 alias = n_randint(state, 2);
51 reciprocal = n_randint(state, 2);
52
53 if (alias)
54 {
55 success = arb_hypgeom_gamma_taylor(s1, x, reciprocal, prec);
56 }
57 else
58 {
59 arb_set(s1, x);
60 success = arb_hypgeom_gamma_taylor(s1, s1, reciprocal, prec);
61 }
62
63 if (success)
64 {
65 /* printf("%ld\n", iter); */
66
67 /* Compare with Stirling series algorithm. */
68 arb_hypgeom_gamma_stirling(s2, x, reciprocal, prec);
69
70 if (!arb_overlaps(s1, s2))
71 {
72 flint_printf("FAIL\n\n");
73 flint_printf("prec = %wd\n\n", prec);
74 flint_printf("x = "); arb_printn(x, 1000, 0); flint_printf("\n\n");
75 flint_printf("s1 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
76 flint_printf("s2 = "); arb_printn(s2, 1000, 0); flint_printf("\n\n");
77 arb_sub(s1, s1, s2, prec2);
78 flint_printf("s1 - s2 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
79 flint_abort();
80 }
81
82 /* Compare with different level of precision. */
83 success2 = arb_hypgeom_gamma_taylor(s2, x, reciprocal, prec2);
84
85 if (success2 && !arb_overlaps(s1, s2))
86 {
87 flint_printf("FAIL (2)\n\n");
88 flint_printf("prec = %wd\n\n", prec);
89 flint_printf("x = "); arb_printn(x, 1000, 0); flint_printf("\n\n");
90 flint_printf("s1 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
91 flint_printf("s2 = "); arb_printn(s2, 1000, 0); flint_printf("\n\n");
92 arb_sub(s1, s1, s2, prec2);
93 flint_printf("s1 - s2 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
94 flint_abort();
95 }
96
97 arf_set_mag(arb_midref(a), arb_radref(x));
98 arf_set_mag(arb_midref(b), arb_radref(x));
99
100 arb_sub_arf(a, a, arb_midref(x), prec + 30);
101 arb_neg(a, a);
102
103 arb_add_arf(b, b, arb_midref(x), prec + 30);
104
105 success2 = arb_hypgeom_gamma_taylor(s2, a, reciprocal, prec2);
106
107 if (success2 && !arb_overlaps(s1, s2))
108 {
109 flint_printf("FAIL (3)\n\n");
110 flint_printf("prec = %wd\n\n", prec);
111 flint_printf("x = "); arb_printn(x, 1000, 0); flint_printf("\n\n");
112 flint_printf("s1 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
113 flint_printf("s2 = "); arb_printn(s2, 1000, 0); flint_printf("\n\n");
114 arb_sub(s1, s1, s2, prec2);
115 flint_printf("s1 - s2 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
116 flint_abort();
117 }
118
119 success2 = arb_hypgeom_gamma_taylor(s2, b, reciprocal, prec2);
120
121 if (success2 && !arb_overlaps(s1, s2))
122 {
123 flint_printf("FAIL (4)\n\n");
124 flint_printf("prec = %wd\n\n", prec);
125 flint_printf("x = "); arb_printn(x, 1000, 0); flint_printf("\n\n");
126 flint_printf("s1 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
127 flint_printf("s2 = "); arb_printn(s2, 1000, 0); flint_printf("\n\n");
128 arb_sub(s1, s1, s2, prec2);
129 flint_printf("s1 - s2 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
130 flint_abort();
131 }
132
133 arb_add(a, a, b, prec + 30);
134 arb_mul_2exp_si(a, a, -1);
135
136 success2 = arb_hypgeom_gamma_taylor(s2, b, reciprocal, prec2);
137
138 if (success2 && !arb_overlaps(s1, s2))
139 {
140 flint_printf("FAIL (5)\n\n");
141 flint_printf("prec = %wd\n\n", prec);
142 flint_printf("x = "); arb_printn(x, 1000, 0); flint_printf("\n\n");
143 flint_printf("s1 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
144 flint_printf("s2 = "); arb_printn(s2, 1000, 0); flint_printf("\n\n");
145 arb_sub(s1, s1, s2, prec2);
146 flint_printf("s1 - s2 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
147 flint_abort();
148 }
149 }
150
151 arb_clear(x);
152 arb_clear(s1);
153 arb_clear(s2);
154 arb_clear(a);
155 arb_clear(b);
156 }
157
158 flint_randclear(state);
159 flint_cleanup();
160 flint_printf("PASS\n");
161 return EXIT_SUCCESS;
162 }
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 ARB_DLL extern arb_hypgeom_gamma_coeff_t arb_hypgeom_gamma_coeffs[ARB_HYPGEOM_GAMMA_TAB_NUM];
14
15 int main()
16 {
17 flint_rand_t state;
18
19 flint_printf("gamma_taylor_tab....");
20 fflush(stdout);
21
22 flint_randinit(state);
23
24 {
25 slong n, prec, maxprec;
26 arb_t c;
27 arf_t d;
28 arb_ptr v, f;
29
30 v = _arb_vec_init(ARB_HYPGEOM_GAMMA_TAB_NUM);
31 f = _arb_vec_init(2);
32
33 arb_one(f);
34 arb_one(f + 1);
35 arf_init(d);
36
37 _arb_poly_rgamma_series(v, f, 2, ARB_HYPGEOM_GAMMA_TAB_NUM,
38 ARB_HYPGEOM_GAMMA_TAB_PREC + 2 * ARB_HYPGEOM_GAMMA_TAB_NUM);
39
40 for (n = 1; n < ARB_HYPGEOM_GAMMA_TAB_NUM; n++)
41 {
42 maxprec = arb_hypgeom_gamma_coeffs[n].nlimbs;
43 maxprec *= 64;
44
45 for (prec = 2; prec <= ARB_HYPGEOM_GAMMA_TAB_PREC; prec += (prec < maxprec - 64 ? n_randint(state, 64) : 1))
46 {
47 if (_arb_hypgeom_gamma_coeff_shallow(arb_midref(c), arb_radref(c), n, prec))
48 {
49 if (!arb_contains(c, v + n))
50 {
51 flint_printf("FAIL\n\n");
52 flint_printf("prec = %wd, n = %wd\n\n", prec, n);
53 flint_printf("c = "); arb_printn(c, 1000, 0); flint_printf("\n\n");
54 flint_printf("v = "); arb_printn(v + n, 1000, 0); flint_printf("\n\n");
55 flint_abort();
56 }
57 }
58 }
59
60 _arb_hypgeom_gamma_coeff_shallow(arb_midref(c), arb_radref(c), n, maxprec);
61 arf_set_round(d, arb_midref(v + n), maxprec, ARF_RND_DOWN);
62
63 if (!arf_equal(arb_midref(c), d))
64 {
65 flint_printf("FAIL\n\n");
66 flint_printf("prec = %wd, n = %wd\n\n", prec, n);
67 flint_printf("c = "); arb_printn(c, 1000, 0); flint_printf("\n\n");
68 flint_printf("d = "); arf_printd(d, 1000); flint_printf("\n\n");
69 flint_abort();
70 }
71 }
72
73 _arb_vec_clear(v, ARB_HYPGEOM_GAMMA_TAB_NUM);
74 _arb_vec_clear(f, 2);
75 arf_clear(d);
76 }
77
78 flint_randclear(state);
79 flint_cleanup();
80 flint_printf("PASS\n");
81 return EXIT_SUCCESS;
82 }
83
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_hypgeom.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17
18 flint_printf("lgamma....");
19 fflush(stdout);
20
21 flint_randinit(state);
22
23 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
24 {
25 arb_t z, s1, s2, a, b;
26 slong prec, ebits, prec2;
27
28 prec = 2 + n_randint(state, 200);
29
30 if (n_randint(state, 10) == 0)
31 prec = 2 + n_randint(state, 1000);
32
33 if (n_randint(state, 10) == 0)
34 ebits = 100;
35 else
36 ebits = 10;
37 ebits = 2;
38
39 prec2 = 2 + n_randint(state, 200);
40
41 arb_init(z);
42 arb_init(s1);
43 arb_init(s2);
44 arb_init(a);
45 arb_init(b);
46
47 arb_randtest(z, state, prec, ebits);
48 arb_randtest(s1, state, prec, 10);
49 arb_randtest(s2, state, prec, 10);
50
51 if (n_randint(state, 2))
52 {
53 arb_hypgeom_lgamma(s1, z, prec);
54 }
55 else
56 {
57 arb_set(s1, z);
58 arb_hypgeom_lgamma(s1, s1, prec);
59 }
60
61 arb_add_ui(s2, z, 1, prec2);
62 arb_hypgeom_lgamma(s2, s2, prec2);
63 arb_log(a, z, prec2);
64 arb_sub(s2, s2, a, prec2);
65
66 if (!arb_overlaps(s1, s2))
67 {
68 flint_printf("FAIL\n\n");
69 flint_printf("prec = %wd\n\n", prec);
70 flint_printf("z = "); arb_printn(z, 1000, 0); flint_printf("\n\n");
71 flint_printf("s1 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
72 flint_printf("s2 = "); arb_printn(s2, 1000, 0); flint_printf("\n\n");
73 arb_sub(s1, s1, s2, prec2);
74 flint_printf("s1 - s2 = "); arb_printd(s1, 1000); flint_printf("\n\n");
75 flint_abort();
76 }
77
78 arb_set(a, z);
79 mag_zero(arb_radref(a));
80
81 if (n_randint(state, 2))
82 {
83 arf_set_mag(arb_midref(b), arb_radref(z));
84
85 if (n_randint(state, 2))
86 arb_neg(b, b);
87
88 arb_add(a, a, b, prec);
89 }
90
91 arb_hypgeom_lgamma(s2, a, prec);
92
93 if (!arb_overlaps(s1, s2))
94 {
95 flint_printf("FAIL (2)\n\n");
96 flint_printf("prec = %wd\n\n", prec);
97 flint_printf("z = "); arb_printn(z, 1000, 0); flint_printf("\n\n");
98 flint_printf("a = "); arb_printn(a, 1000, 0); flint_printf("\n\n");
99 flint_printf("s1 = "); arb_printn(s1, 1000, 0); flint_printf("\n\n");
100 flint_printf("s2 = "); arb_printn(s2, 1000, 0); flint_printf("\n\n");
101 arb_sub(s1, s1, s2, prec2);
102 flint_printf("s1 - s2 = "); arb_printd(s1, 1000); flint_printf("\n\n");
103 flint_abort();
104 }
105
106 arb_clear(z);
107 arb_clear(s1);
108 arb_clear(s2);
109 arb_clear(a);
110 arb_clear(b);
111 }
112
113 flint_randclear(state);
114 flint_cleanup();
115 flint_printf("PASS\n");
116 return EXIT_SUCCESS;
117 }
3333 void arb_hypgeom_rising_ui_jet_rs(arb_ptr res, const arb_t x, ulong n, ulong m, slong len, slong prec);
3434 void arb_hypgeom_rising_ui_jet_bs(arb_ptr res, const arb_t x, ulong n, slong len, slong prec);
3535 void arb_hypgeom_rising_ui_jet(arb_ptr res, const arb_t x, ulong n, slong len, slong prec);
36
37 void _arb_hypgeom_gamma_stirling_term_bounds(slong * bound, const mag_t zinv, slong N);
38 void arb_hypgeom_gamma_stirling_sum_horner(arb_t s, const arb_t z, slong N, slong prec);
39 void arb_hypgeom_gamma_stirling_sum_improved(arb_t s, const arb_t z, slong N, slong K, slong prec);
40
41 #define ARB_HYPGEOM_GAMMA_TAB_NUM 536
42 #define ARB_HYPGEOM_GAMMA_TAB_PREC 3456
43
44 typedef struct
45 {
46 short exp;
47 short tab_pos;
48 char nlimbs;
49 char negative;
50 } arb_hypgeom_gamma_coeff_t;
51
52 ARB_DLL extern arb_hypgeom_gamma_coeff_t arb_hypgeom_gamma_coeffs[ARB_HYPGEOM_GAMMA_TAB_NUM];
53 int _arb_hypgeom_gamma_coeff_shallow(arf_t c, mag_t err, slong i, slong prec);
54
55 void arb_hypgeom_gamma_stirling(arb_t res, const arb_t x, int reciprocal, slong prec);
56 int arb_hypgeom_gamma_taylor(arb_t res, const arb_t x, int reciprocal, slong prec);
57
58 void arb_hypgeom_gamma(arb_t y, const arb_t x, slong prec);
59 void arb_hypgeom_rgamma(arb_t y, const arb_t x, slong prec);
60
61 void arb_hypgeom_lgamma(arb_t y, const arb_t x, slong prec);
62
63 void arb_hypgeom_gamma_fmpq(arb_t y, const fmpq_t x, slong prec);
64 void arb_hypgeom_gamma_fmpz(arb_t y, const fmpz_t x, slong prec);
3665
3766 void arb_hypgeom_pfq(arb_t res, arb_srcptr a, slong p, arb_srcptr b, slong q,
3867 const arb_t z, int regularized, slong prec);
1010
1111 #include "arb_poly.h"
1212
13 void arb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
13 void arb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1414 const arb_t x, int use_reflect, int digamma, slong prec);
1515
1616 void _arb_poly_gamma_stirling_eval2(arb_ptr res, const arb_t z, slong n, slong num, int diff, slong prec);
7979 else
8080 {
8181 /* use Stirling series */
82 arb_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 1, wp);
82 arb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 1, wp);
8383
8484 /* psi(x) = psi((1-x)+r) - h(1-x,r) - pi*cot(pi*x) */
8585 if (reflect)
1212
1313 void arb_gamma_stirling_bound(mag_ptr err, const arb_t x, slong k0, slong knum, slong n);
1414
15 void arb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
15 void arb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1616 const arb_t x, int use_reflect, int digamma, slong prec);
1717
1818 void arb_gamma_stirling_coeff(arb_t b, ulong k, int digamma, slong prec);
276276 else
277277 {
278278 /* otherwise use Stirling series */
279 arb_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
279 arb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
280280
281281 /* gamma(h) = (rf(1-h, r) * pi) / (gamma(1-h+r) sin(pi h)), h = h0 + t*/
282282 if (reflect)
0 /*
1 Copyright (C) 2021 Matthias Gessinger
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_poly.h"
12
13 void
14 _arb_poly_graeffe_transform(arb_ptr b, arb_srcptr a, slong len, slong prec)
15 {
16 slong lo, le, ls, deg, i;
17 arb_ptr pe, po;
18
19 if (len <= 1)
20 {
21 if (len)
22 arb_sqr(b, a, prec);
23 return;
24 }
25
26 deg = len - 1;
27 lo = len / 2;
28 ls = 2 * lo - 1;
29 le = deg / 2 + 1;
30 po = _arb_vec_init(lo);
31 pe = _arb_vec_init(FLINT_MAX(le, ls));
32
33 for (i = deg; i >= 0; i--)
34 {
35 if (i % 2 == 0)
36 arb_set(pe + i / 2, a + i);
37 else
38 arb_set(po + i / 2, a + i);
39 }
40
41 _arb_poly_mul(b, pe, le, pe, le, prec);
42 _arb_poly_mul(pe, po, lo, po, lo, prec);
43 _arb_poly_sub(b + 1, b + 1, ls, pe, ls, prec);
44
45 if (len % 2 == 0)
46 {
47 _arb_vec_neg(b, b, deg);
48 arb_set(b + deg, pe + (deg - 1));
49 }
50
51 _arb_vec_clear(pe, FLINT_MAX(le, ls));
52 _arb_vec_clear(po, lo);
53 }
54
55 void
56 arb_poly_graeffe_transform(arb_poly_t b, const arb_poly_t a, slong prec)
57 {
58 arb_poly_fit_length(b, a->length);
59 _arb_poly_graeffe_transform(b->coeffs, a->coeffs, a->length, prec);
60 _arb_poly_set_length(b, a->length);
61 }
99 */
1010
1111 #include "arb_poly.h"
12 #include "arb_hypgeom.h"
1213
1314 slong arf_get_si(const arf_t x, arf_rnd_t rnd);
1415
1516 void _arb_poly_lgamma_series_at_one(arb_ptr u, slong len, slong prec);
1617
17 void arb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
18 void arb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1819 const arb_t x, int use_reflect, int digamma, slong prec);
1920
2021 void _arb_poly_gamma_stirling_eval(arb_ptr res, const arb_t z, slong n, slong num, slong prec);
2223 static __inline__ void
2324 _log_rising_ui_series(arb_ptr t, const arb_t x, slong r, slong len, slong prec)
2425 {
25 arb_struct f[2];
2626 slong rflen;
2727
28 arb_init(f);
29 arb_init(f + 1);
30 arb_set(f, x);
31 arb_one(f + 1);
32
3328 rflen = FLINT_MIN(len, r + 1);
34 _arb_poly_rising_ui_series(t, f, FLINT_MIN(2, len), r, rflen, prec);
29 arb_hypgeom_rising_ui_jet(t, x, r, rflen, prec);
3530 _arb_poly_log_series(t, t, rflen, len, prec);
36
37 arb_clear(f);
38 arb_clear(f + 1);
3931 }
4032
4133 void
9082 else
9183 {
9284 /* otherwise use Stirling series */
93 arb_gamma_stirling_choose_param(&reflect, &r, &n, h, 0, 0, wp);
85 arb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, h, 0, 0, wp);
9486 arb_add_ui(zr, h, r, wp);
9587 _arb_poly_gamma_stirling_eval(u, zr, n, len, wp);
9688
1414
1515 void _arb_poly_lgamma_series_at_one(arb_ptr u, slong len, slong prec);
1616
17 void arb_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
17 void arb_hypgeom_gamma_stirling_choose_param(int * reflect, slong * r, slong * n,
1818 const arb_t x, int use_reflect, int digamma, slong prec);
1919
2020 void _arb_poly_gamma_stirling_eval(arb_ptr res, const arb_t z, slong n, slong num, slong prec);
100100 else
101101 {
102102 /* otherwise use Stirling series */
103 arb_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
103 arb_hypgeom_gamma_stirling_choose_param(&reflect, &r, &n, h, 1, 0, wp);
104104
105105 /* rgamma(h) = (gamma(1-h+r) sin(pi h)) / (rf(1-h, r) * pi), h = h0 + t*/
106106 if (reflect)
0 /*
1 Copyright (C) 2013 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arb_poly.h"
12
13 int main()
14 {
15 slong iter;
16 flint_rand_t state;
17 arb_poly_t a, b, c;
18 arb_ptr roots;
19 arb_t leading;
20
21 flint_printf("graeffe_transform....");
22 fflush(stdout);
23
24 flint_randinit(state);
25
26 arb_poly_init(a);
27 arb_poly_init(b);
28 arb_poly_init(c);
29
30 arb_init(leading);
31
32 for (iter = 0; iter < 200 * arb_test_multiplier(); iter++)
33 {
34 slong n, prec, i;
35
36 n = n_randint(state, 20);
37 prec = 2 + n_randint(state, 256);
38
39 roots = _arb_vec_init(n);
40
41 arb_randtest(leading, state, prec, n_randint(state, 16));
42
43 for (i = 0; i < n; i++)
44 arb_randtest(roots + i, state, prec, n_randint(state, 16));
45 arb_poly_product_roots(a, roots, n, prec);
46 arb_poly_scalar_mul(a, a, leading, prec);
47
48 for (i = 0; i < n; i++)
49 arb_sqr(roots + i, roots + i, prec);
50 arb_sqr(leading, leading, prec);
51 arb_poly_product_roots(c, roots, n, prec);
52 arb_poly_scalar_mul(c, c, leading, prec);
53
54 arb_poly_graeffe_transform(b, a, prec);
55 if (!arb_poly_overlaps(b, c))
56 {
57 flint_printf("FAIL (overlap)\n\n");
58 flint_printf("n = %wd, prec = %wd\n\n", n, prec);
59
60 flint_printf("a: "); arb_poly_printd(a, 15); flint_printf("\n\n");
61 flint_printf("b: "); arb_poly_printd(b, 15); flint_printf("\n\n");
62 flint_printf("c: "); arb_poly_printd(c, 15); flint_printf("\n\n");
63
64 flint_abort();
65 }
66
67 arb_poly_graeffe_transform(a, a, prec);
68 if (!arb_poly_equal(a, b))
69 {
70 flint_printf("FAIL (aliasing)\n\n");
71 flint_printf("n = %wd, prec = %wd\n\n", n, prec);
72
73 flint_printf("a: "); arb_poly_printd(a, 15); flint_printf("\n\n");
74 flint_printf("b: "); arb_poly_printd(b, 15); flint_printf("\n\n");
75 flint_printf("c: "); arb_poly_printd(c, 15); flint_printf("\n\n");
76
77 flint_abort();
78 }
79
80 _arb_vec_clear(roots, n);
81 }
82
83 arb_poly_clear(a);
84 arb_poly_clear(b);
85 arb_poly_clear(c);
86
87 arb_clear(leading);
88
89 flint_randclear(state);
90 flint_cleanup();
91 flint_printf("PASS\n");
92 return EXIT_SUCCESS;
93 }
94
511511
512512 void arb_poly_binomial_transform(arb_poly_t b, const arb_poly_t a, slong len, slong prec);
513513
514 void _arb_poly_graeffe_transform(arb_ptr b, arb_srcptr a, slong len, slong prec);
515
516 void arb_poly_graeffe_transform(arb_poly_t b, const arb_poly_t a, slong prec);
517
514518 /* Special functions */
515519
516520 void _arb_poly_pow_ui_trunc_binexp(arb_ptr res,
0 /*
1 Copyright (C) 2021 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arf.h"
12
13 int
14 arf_fma(arf_ptr res, arf_srcptr x, arf_srcptr y, arf_srcptr z, slong prec, arf_rnd_t rnd)
15 {
16 mp_size_t xn, yn, zn, tn, alloc;
17 mp_srcptr xptr, yptr, zptr;
18 mp_ptr tptr, tptr2;
19 fmpz_t texp;
20 slong shift;
21 int tsgnbit, inexact;
22 ARF_MUL_TMP_DECL
23
24 if (arf_is_special(x) || arf_is_special(y) || arf_is_special(z))
25 {
26 if (arf_is_zero(z))
27 {
28 return arf_mul(res, x, y, prec, rnd);
29 }
30 else if (arf_is_finite(x) && arf_is_finite(y))
31 {
32 return arf_set_round(res, z, prec, rnd);
33 }
34 else
35 {
36 /* todo: speed up */
37 arf_t t;
38 arf_init(t);
39 arf_mul(t, x, y, ARF_PREC_EXACT, ARF_RND_DOWN);
40 inexact = arf_add(res, z, t, prec, rnd);
41 arf_clear(t);
42 return inexact;
43 }
44 }
45
46 tsgnbit = ARF_SGNBIT(x) ^ ARF_SGNBIT(y);
47 ARF_GET_MPN_READONLY(xptr, xn, x);
48 ARF_GET_MPN_READONLY(yptr, yn, y);
49 ARF_GET_MPN_READONLY(zptr, zn, z);
50
51 fmpz_init(texp);
52
53 _fmpz_add2_fast(texp, ARF_EXPREF(x), ARF_EXPREF(y), 0);
54 shift = _fmpz_sub_small(ARF_EXPREF(z), texp);
55
56 alloc = tn = xn + yn;
57 ARF_MUL_TMP_ALLOC(tptr2, alloc)
58 tptr = tptr2;
59
60 ARF_MPN_MUL(tptr, xptr, xn, yptr, yn);
61
62 tn -= (tptr[0] == 0);
63 tptr += (tptr[0] == 0);
64
65 if (shift >= 0)
66 inexact = _arf_add_mpn(res, zptr, zn, ARF_SGNBIT(z), ARF_EXPREF(z),
67 tptr, tn, tsgnbit, shift, prec, rnd);
68 else
69 inexact = _arf_add_mpn(res, tptr, tn, tsgnbit, texp,
70 zptr, zn, ARF_SGNBIT(z), -shift, prec, rnd);
71
72 ARF_MUL_TMP_FREE(tptr2, alloc)
73 fmpz_clear(texp);
74
75 return inexact;
76 }
77
7878
7979 int arf_load_file(arf_t x, FILE* stream)
8080 {
81 mpz_t mantissa, exponent;
82 fmpz_t mantissa_, exponent_;
81 fmpz_t mantissa, exponent;
82 __mpz_struct *mpz_mantissa, *mpz_exponent;
83 int err;
8384
84 mpz_init(mantissa);
85 mpz_init(exponent);
85 fmpz_init(mantissa);
86 fmpz_init(exponent);
8687
87 if (mpz_inp_str(mantissa, stream, 16) == 0) return 1;
88 if (mpz_inp_str(exponent, stream, 16) == 0) return 1;
88 mpz_mantissa = _fmpz_promote(mantissa);
89 mpz_exponent = _fmpz_promote(exponent);
8990
90 fmpz_init_set_readonly(mantissa_, mantissa);
91 fmpz_init_set_readonly(exponent_, exponent);
91 err = 0;
9292
93 arf_set_fmpz_2exp_dump(x, mantissa_, exponent_);
93 if (mpz_inp_str(mpz_mantissa, stream, 16) == 0)
94 err = 1;
9495
95 mpz_clear(mantissa);
96 mpz_clear(exponent);
96 if (!err && mpz_inp_str(mpz_exponent, stream, 16) == 0)
97 err = 1;
9798
98 return 0;
99 _fmpz_demote_val(mantissa);
100 _fmpz_demote_val(exponent);
101
102 if (!err)
103 arf_set_fmpz_2exp_dump(x, mantissa, exponent);
104
105 fmpz_clear(mantissa);
106 fmpz_clear(exponent);
107
108 return err;
99109 }
100110
0 /*
1 Copyright (C) 2012 Fredrik Johansson
2
3 This file is part of Arb.
4
5 Arb is free software: you can redistribute it and/or modify it under
6 the terms of the GNU Lesser General Public License (LGPL) as published
7 by the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version. See <http://www.gnu.org/licenses/>.
9 */
10
11 #include "arf.h"
12
13 int
14 arf_fma_naive(arf_t res, const arf_t x, const arf_t y, const arf_t z, slong prec, arf_rnd_t rnd)
15 {
16 arf_t t;
17 int inexact;
18
19 arf_init(t);
20 arf_mul(t, x, y, ARF_PREC_EXACT, ARF_RND_DOWN);
21
22 inexact = arf_add(res, z, t, prec, rnd);
23
24 arf_clear(t);
25
26 return inexact;
27 }
28
29 int main()
30 {
31 slong iter;
32 flint_rand_t state;
33
34 flint_printf("fma....");
35 fflush(stdout);
36
37 flint_randinit(state);
38
39 for (iter = 0; iter < 10000 * arb_test_multiplier(); iter++)
40 {
41 arf_t x, y, z, res1, res2;
42 slong prec, r1, r2;
43 arf_rnd_t rnd;
44 int aliasing;
45
46 arf_init(x);
47 arf_init(y);
48 arf_init(z);
49 arf_init(res1);
50 arf_init(res2);
51
52 prec = 2 + n_randint(state, 200);
53
54 arf_randtest_special(x, state, 200, 100);
55 arf_randtest_special(y, state, 200, 100);
56 arf_randtest_special(z, state, 200, 100);
57 arf_randtest_special(res1, state, 200, 100);
58 arf_randtest_special(res2, state, 200, 100);
59
60 if (n_randint(state, 10) == 0 &&
61 fmpz_bits(ARF_EXPREF(x)) < 10 &&
62 fmpz_bits(ARF_EXPREF(y)) < 10 &&
63 fmpz_bits(ARF_EXPREF(z)) < 10)
64 {
65 prec = ARF_PREC_EXACT;
66 }
67
68 switch (n_randint(state, 5))
69 {
70 case 0: rnd = ARF_RND_DOWN; break;
71 case 1: rnd = ARF_RND_UP; break;
72 case 2: rnd = ARF_RND_FLOOR; break;
73 case 3: rnd = ARF_RND_CEIL; break;
74 default: rnd = ARF_RND_NEAR; break;
75 }
76
77 aliasing = n_randint(state, 7);
78
79 switch (aliasing)
80 {
81 case 0:
82 r1 = arf_fma(res1, x, y, z, prec, rnd);
83 r2 = arf_fma_naive(res2, x, y, z, prec, rnd);
84 break;
85 case 1:
86 arf_set(res1, z);
87 r1 = arf_fma(res1, x, y, res1, prec, rnd);
88 r2 = arf_fma_naive(res2, x, y, z, prec, rnd);
89 break;
90 case 2:
91 arf_set(res1, x);
92 r1 = arf_fma(res1, res1, y, z, prec, rnd);
93 r2 = arf_fma_naive(res2, x, y, z, prec, rnd);
94 break;
95 case 3:
96 arf_set(res1, y);
97 r1 = arf_fma(res1, x, res1, z, prec, rnd);
98 r2 = arf_fma_naive(res2, x, y, z, prec, rnd);
99 break;
100 case 4:
101 r1 = arf_fma(res1, x, x, z, prec, rnd);
102 r2 = arf_fma_naive(res2, x, x, z, prec, rnd);
103 break;
104 case 5:
105 arf_set(res1, x);
106 r1 = arf_fma(res1, res1, res1, z, prec, rnd);
107 r2 = arf_fma_naive(res2, x, x, z, prec, rnd);
108 break;
109 default:
110 arf_set(res1, x);
111 r1 = arf_fma(res1, res1, res1, res1, prec, rnd);
112 r2 = arf_fma_naive(res2, x, x, x, prec, rnd);
113 break;
114 }
115
116 if (!arf_equal(res1, res2) || r1 != r2)
117 {
118 flint_printf("FAIL!\n");
119 flint_printf("prec = %wd, rnd = %d, aliasing = %d\n\n", prec, rnd, aliasing);
120 flint_printf("x = "); arf_print(x); flint_printf("\n\n");
121 flint_printf("y = "); arf_print(y); flint_printf("\n\n");
122 flint_printf("z = "); arf_print(z); flint_printf("\n\n");
123 flint_printf("res1 = "); arf_print(res1); flint_printf("\n\n");
124 flint_printf("res2 = "); arf_print(res2); flint_printf("\n\n");
125 flint_printf("r1 = %wd, r2 = %wd\n", r1, r2);
126 flint_abort();
127 }
128
129 arf_clear(x);
130 arf_clear(y);
131 arf_clear(z);
132 arf_clear(res1);
133 arf_clear(res2);
134 }
135
136 flint_randclear(state);
137 flint_cleanup();
138 flint_printf("PASS\n");
139 return EXIT_SUCCESS;
140 }
10701070 return arf_submul_mpz(z, x, COEFF_TO_PTR(*y), prec, rnd);
10711071 }
10721072
1073 int arf_fma(arf_ptr res, arf_srcptr x, arf_srcptr y, arf_srcptr z, slong prec, arf_rnd_t rnd);
1074
10731075 int arf_sosq(arf_t z, const arf_t x, const arf_t y, slong prec, arf_rnd_t rnd);
10741076
10751077 int arf_div(arf_ptr z, arf_srcptr x, arf_srcptr y, slong prec, arf_rnd_t rnd);
4040 flint_register_cleanup_function(bernoulli_cleanup);
4141 }
4242
43 new_num = FLINT_MAX(bernoulli_cache_num + 128, n);
43 if (n <= 128)
44 new_num = FLINT_MAX(bernoulli_cache_num + 32, n);
45 else
46 new_num = FLINT_MAX(bernoulli_cache_num + 128, n);
4447
4548 bernoulli_cache = flint_realloc(bernoulli_cache, new_num * sizeof(fmpq));
4649 for (i = bernoulli_cache_num; i < new_num; i++)
4750 fmpq_init(bernoulli_cache + i);
4851
49 i = new_num - 1;
50 i -= (i % 2);
51 bernoulli_rev_init(iter, i);
52 for ( ; i >= bernoulli_cache_num; i -= 2)
52 if (new_num <= 128)
5353 {
54 bernoulli_rev_next(fmpq_numref(bernoulli_cache + i),
55 fmpq_denref(bernoulli_cache + i), iter);
54 arith_bernoulli_number_vec(bernoulli_cache, new_num);
5655 }
57 bernoulli_rev_clear(iter);
56 else
57 {
58 i = new_num - 1;
59 i -= (i % 2);
60 bernoulli_rev_init(iter, i);
61 for ( ; i >= bernoulli_cache_num; i -= 2)
62 {
63 bernoulli_rev_next(fmpq_numref(bernoulli_cache + i),
64 fmpq_denref(bernoulli_cache + i), iter);
65 }
66 bernoulli_rev_clear(iter);
5867
59 if (new_num > 1)
60 fmpq_set_si(bernoulli_cache + 1, -1, 2);
68 if (new_num > 1)
69 fmpq_set_si(bernoulli_cache + 1, -1, 2);
70 }
6171
6272 bernoulli_cache_num = new_num;
6373 }
99 # arb => soname
1010 # 2.7.0 => 0.0.0
1111 ARB_MAJOR=2
12 ARB_MINOR=11
12 ARB_MINOR=12
1313 ARB_PATCH=0
1414
1515 PREFIX="/usr/local"
138138
139139 Swaps *z* and *x* efficiently.
140140
141 .. function:: void acb_add_error_arf(acb_t x, const arf_t err)
142
141143 .. function:: void acb_add_error_mag(acb_t x, const mag_t err)
144
145 .. function:: void acb_add_error_arb(acb_t x, const arb_t err)
142146
143147 Adds *err* to the error bounds of both the real and imaginary
144148 parts of *x*, modifying *x* in-place.
661665
662666 .. function:: void acb_exp_invexp(acb_t s, acb_t t, const acb_t z, slong prec)
663667
664 Sets `v = \exp(z)` and `w = \exp(-z)`.
668 Sets `s = \exp(z)` and `t = \exp(-z)`.
665669
666670 .. function:: void acb_expm1(acb_t res, const acb_t z, slong prec)
667671
668 Computes `\exp(z)-1`, using an accurate method when `z \approx 0`.
672 Sets *res* to `\exp(z)-1`, using a more accurate method when `z \approx 0`.
669673
670674 .. function:: void acb_log(acb_t y, const acb_t z, slong prec)
671675
863867 Rising factorials
864868 -------------------------------------------------------------------------------
865869
866 .. function:: void acb_rising_ui_bs(acb_t z, const acb_t x, ulong n, slong prec)
867
868 .. function:: void acb_rising_ui_rs(acb_t z, const acb_t x, ulong n, ulong step, slong prec)
869
870 .. function:: void acb_rising_ui_rec(acb_t z, const acb_t x, ulong n, slong prec)
871
872 .. function:: void acb_rising_ui(acb_t z, const acb_t x, ulong n, slong prec)
873
874 .. function:: void acb_rising(acb_t z, const acb_t x, const acb_t n, slong prec)
870 .. function:: void acb_rising_ui(acb_t z, const acb_t x, const acb_t n, slong prec)
871 void acb_rising(acb_t z, const acb_t x, const acb_t n, slong prec)
875872
876873 Computes the rising factorial `z = x (x+1) (x+2) \cdots (x+n-1)`.
877
878 The *bs* version uses binary splitting. The *rs* version uses rectangular
879 splitting. The *rec* version uses either *bs* or *rs* depending
880 on the input. The default version uses the gamma function unless
881 *n* is a small integer.
882
883 The *rs* version takes an optional *step* parameter for tuning
884 purposes (to use the default step length, pass zero).
885
886 .. function :: void acb_rising2_ui_bs(acb_t u, acb_t v, const acb_t x, ulong n, slong prec)
887
888 .. function :: void acb_rising2_ui_rs(acb_t u, acb_t v, const acb_t x, ulong n, ulong step, slong prec)
874 These functions are aliases for :func:`acb_hypgeom_rising_ui`
875 and :func:`acb_hypgeom_rising`.
889876
890877 .. function :: void acb_rising2_ui(acb_t u, acb_t v, const acb_t x, ulong n, slong prec)
891878
892879 Letting `u(x) = x (x+1) (x+2) \cdots (x+n-1)`, simultaneously compute
893 `u(x)` and `v(x) = u'(x)`, respectively using binary splitting,
894 rectangular splitting (with optional nonzero step length *step*
895 to override the default choice), and an automatic algorithm choice.
880 `u(x)` and `v(x) = u'(x)`.
881 This function is a wrapper of :func:`acb_hypgeom_rising_ui_jet`.
896882
897883 .. function :: void acb_rising_ui_get_mag(mag_t bound, const acb_t x, ulong n)
898884
906892 .. function:: void acb_gamma(acb_t y, const acb_t x, slong prec)
907893
908894 Computes the gamma function `y = \Gamma(x)`.
895 This is an alias for :func:`acb_hypgeom_gamma`.
909896
910897 .. function:: void acb_rgamma(acb_t y, const acb_t x, slong prec)
911898
912899 Computes the reciprocal gamma function `y = 1/\Gamma(x)`,
913900 avoiding division by zero at the poles of the gamma function.
901 This is an alias for :func:`acb_hypgeom_rgamma`.
914902
915903 .. function:: void acb_lgamma(acb_t y, const acb_t x, slong prec)
916904
917905 Computes the logarithmic gamma function `y = \log \Gamma(x)`.
906 This is an alias for :func:`acb_hypgeom_lgamma`.
918907
919908 The branch cut of the logarithmic gamma function is placed on the
920909 negative half-axis, which means that
11801169
11811170 Sets *res* to a copy of *vec*, rounding each entry to *prec* bits.
11821171
1172 .. function:: void _acb_vec_swap(acb_ptr vec1, acb_ptr vec2, slong len)
1173
1174 Swaps the entries of *vec1* and *vec2*.
1175
11831176 .. function:: void _acb_vec_neg(acb_ptr res, acb_srcptr vec, slong len)
11841177
11851178 .. function:: void _acb_vec_add(acb_ptr res, acb_srcptr vec1, acb_srcptr vec2, slong len, slong prec)
1818 Rising factorials
1919 -------------------------------------------------------------------------------
2020
21 .. function:: void acb_hypgeom_rising_ui_rs(acb_t res, const acb_t x, ulong n, ulong m, slong prec)
22
23 Computes the rising factorial `(x)_n` using rectangular splitting.
24 The splitting parameter *m* can be set to zero to choose automatically.
21 .. function:: void acb_hypgeom_rising_ui_forward(acb_t res, const acb_t x, ulong n, slong prec)
22 void acb_hypgeom_rising_ui_bs(acb_t res, const acb_t x, ulong n, slong prec)
23 void acb_hypgeom_rising_ui_rs(acb_t res, const acb_t x, ulong n, ulong m, slong prec)
24 void acb_hypgeom_rising_ui_rec(acb_t res, const acb_t x, ulong n, slong prec)
25 void acb_hypgeom_rising_ui(acb_t res, const acb_t x, ulong n, slong prec)
26 void acb_hypgeom_rising(acb_t res, const acb_t x, const acb_t n, slong prec)
27
28 Computes the rising factorial `(x)_n`.
29
30 The *forward* version uses the forward recurrence.
31 The *bs* version uses binary splitting.
32 The *rs* version uses rectangular splitting. It takes an extra tuning
33 parameter *m* which can be set to zero to choose automatically.
34 The *rec* version chooses an algorithm automatically, avoiding
35 use of the gamma function (so that it can be used in the computation
36 of the gamma function).
37 The default versions (*rising_ui* and *rising_ui*) choose an algorithm
38 automatically and may additionally fall back on the gamma function.
39
40 .. function:: void acb_hypgeom_rising_ui_jet_powsum(acb_ptr res, const acb_t x, ulong n, slong len, slong prec)
41 void acb_hypgeom_rising_ui_jet_bs(acb_ptr res, const acb_t x, ulong n, slong len, slong prec)
42 void acb_hypgeom_rising_ui_jet_rs(acb_ptr res, const acb_t x, ulong n, ulong m, slong len, slong prec)
43 void acb_hypgeom_rising_ui_jet(acb_ptr res, const acb_t x, ulong n, slong len, slong prec)
44
45 Computes the jet of the rising factorial `(x)_n`, truncated to length *len*.
46 In other words, constructs the polynomial `(X + x)_n \in \mathbb{R}[X]`,
47 truncated if `\operatorname{len} < n + 1` (and zero-extended
48 if `\operatorname{len} > n + 1`).
49
50 The *powsum* version computes the sequence of powers of *x* and forms integral
51 linear combinations of these.
52 The *bs* version uses binary splitting.
53 The *rs* version uses rectangular splitting. It takes an extra tuning
54 parameter *m* which can be set to zero to choose automatically.
55 The default version chooses an algorithm automatically.
56
57 .. function:: void acb_hypgeom_log_rising_ui(acb_ptr res, const acb_t x, ulong n, slong prec)
58
59 Computes the log-rising factorial `\log \, (x)_n = \sum_{k=0}^{n-1} \log(x+k)`.
60
61 This first computes the ordinary rising factorial and then determines
62 the branch correction `2 \pi i m` with respect to the principal
63 logarithm. The correction is computed using Hare's algorithm in
64 floating-point arithmetic if this is safe; otherwise,
65 a direct computation of `\sum_{k=0}^{n-1} \arg(x+k)` is used as a fallback.
66
67 .. function:: void acb_hypgeom_log_rising_ui_jet(acb_ptr res, const acb_t x, ulong n, slong len, slong prec)
68
69 Computes the jet of the log-rising factorial `\log \, (x)_n`,
70 truncated to length *len*.
71
72 Gamma function
73 -------------------------------------------------------------------------------
74
75 .. function:: void acb_hypgeom_gamma_stirling_sum_horner(acb_t s, const acb_t z, slong N, slong prec)
76 void acb_hypgeom_gamma_stirling_sum_improved(acb_t s, const acb_t z, slong N, slong K, slong prec)
77
78 Sets *res* to the final sum in the Stirling series for the gamma function
79 truncated before the term with index *N*, i.e. computes
80 `\sum_{n=1}^{N-1} B_{2n} / (2n(2n-1) z^{2n-1})`.
81 The *horner* version uses Horner scheme with gradual precision adjustments.
82 The *improved* version uses rectangular splitting for the low-index
83 terms and reexpands the high-index terms as hypergeometric polynomials,
84 using a splitting parameter *K* (which can be set to 0 to use a default
85 value).
86
87 .. function:: void acb_hypgeom_gamma_stirling(acb_t res, const acb_t x, int reciprocal, slong prec)
88
89 Sets *res* to the gamma function of *x* computed using the Stirling
90 series together with argument reduction. If *reciprocal* is set,
91 the reciprocal gamma function is computed instead.
92
93 .. function:: int acb_hypgeom_gamma_taylor(acb_t res, const acb_t x, int reciprocal, slong prec)
94
95 Attempts to compute the gamma function of *x* using Taylor series
96 together with argument reduction. This is only supported if *x* and *prec*
97 are both small enough. If successful, returns 1; otherwise, does nothing
98 and returns 0. If *reciprocal* is set, the reciprocal gamma function is
99 computed instead.
100
101 .. function:: void acb_hypgeom_gamma(acb_t res, const acb_t x, slong prec)
102
103 Sets *res* to the gamma function of *x* computed using a default
104 algorithm choice.
105
106 .. function:: void acb_hypgeom_rgamma(acb_t res, const acb_t x, slong prec)
107
108 Sets *res* to the reciprocal gamma function of *x* computed using a default
109 algorithm choice.
110
111 .. function:: void acb_hypgeom_lgamma(acb_t res, const acb_t x, slong prec)
112
113 Sets *res* to the principal branch of the log-gamma function of *x*
114 computed using a default algorithm choice.
115
25116
26117 Convergent series
27118 -------------------------------------------------------------------------------
655655 The underscore methods do not support aliasing, and assume that
656656 the lengths are nonzero.
657657
658 .. function:: void _acb_poly_graeffe_transform(acb_ptr b, acb_srcptr a, slong len, slong prec)
659
660 .. function:: void acb_poly_graeffe_transform(acb_poly_t b, acb_poly_t a, slong prec)
661
662 Computes the Graeffe transform of input polynomial, which is of length *len*.
663 See :func:`arb_poly_graeffe_transform` for details.
664
665 The underscore method assumes that *a* and *b* are initialized,
666 *a* is of length *len*, and *b* is of length at least *len*.
667 Both methods allow aliasing.
658668
659669 Elementary functions
660670 -------------------------------------------------------------------------------
826826
827827 Sets `z = z - x \cdot y`, rounded to prec bits. The precision can be
828828 *ARF_PREC_EXACT* provided that the result fits in memory.
829
830 .. function:: void arb_fma(arb_t res, const arb_t x, const arb_t y, const arb_t z, slong prec)
831 void arb_fma_arf(arb_t res, const arb_t x, const arf_t y, const arb_t z, slong prec)
832 void arb_fma_ui(arb_t res, const arb_t x, ulong y, const arb_t z, slong prec)
833
834 Sets *res* to `x \cdot y + z`. This is equivalent to an *addmul* except
835 that *res* and *z* can be separate variables.
829836
830837 .. function:: void arb_inv(arb_t z, const arb_t x, slong prec)
831838
10641071
10651072 .. function:: void arb_expm1(arb_t z, const arb_t x, slong prec)
10661073
1067 Sets `z = \exp(x)-1`, computed accurately when `x \approx 0`.
1074 Sets `z = \exp(x)-1`, using a more accurate method when `x \approx 0`.
10681075
10691076 .. function:: void arb_exp_invexp(arb_t z, arb_t w, const arb_t x, slong prec)
10701077
13101317 Gamma function and factorials
13111318 -------------------------------------------------------------------------------
13121319
1313 .. function:: void arb_rising_ui_bs(arb_t z, const arb_t x, ulong n, slong prec)
1314
1315 .. function:: void arb_rising_ui_rs(arb_t z, const arb_t x, ulong n, ulong step, slong prec)
1316
1317 .. function:: void arb_rising_ui_rec(arb_t z, const arb_t x, ulong n, slong prec)
1318
13191320 .. function:: void arb_rising_ui(arb_t z, const arb_t x, ulong n, slong prec)
1320
1321 .. function:: void arb_rising(arb_t z, const arb_t x, const arb_t n, slong prec)
1321 void arb_rising(arb_t z, const arb_t x, const arb_t n, slong prec)
13221322
13231323 Computes the rising factorial `z = x (x+1) (x+2) \cdots (x+n-1)`.
1324
1325 The *bs* version uses binary splitting. The *rs* version uses rectangular
1326 splitting. The *rec* version uses either *bs* or *rs* depending
1327 on the input. The default version uses the gamma function unless
1328 *n* is a small integer.
1329
1330 The *rs* version takes an optional *step* parameter for tuning
1331 purposes (to use the default step length, pass zero).
1324 These functions are aliases for :func:`arb_hypgeom_rising_ui`
1325 and :func:`arb_hypgeom_rising`.
13321326
13331327 .. function:: void arb_rising_fmpq_ui(arb_t z, const fmpq_t x, ulong n, slong prec)
13341328
13371331 compared to *prec*, it is more efficient to convert *x* to an approximation
13381332 and use :func:`arb_rising_ui`.
13391333
1340 .. function :: void arb_rising2_ui_bs(arb_t u, arb_t v, const arb_t x, ulong n, slong prec)
1341
1342 .. function :: void arb_rising2_ui_rs(arb_t u, arb_t v, const arb_t x, ulong n, ulong step, slong prec)
1343
13441334 .. function :: void arb_rising2_ui(arb_t u, arb_t v, const arb_t x, ulong n, slong prec)
13451335
13461336 Letting `u(x) = x (x+1) (x+2) \cdots (x+n-1)`, simultaneously compute
1347 `u(x)` and `v(x) = u'(x)`, respectively using binary splitting,
1348 rectangular splitting (with optional nonzero step length *step*
1349 to override the default choice), and an automatic algorithm choice.
1337 `u(x)` and `v(x) = u'(x)`.
1338 This function is a wrapper of :func:`arb_hypgeom_rising_ui_jet`.
13501339
13511340 .. function:: void arb_fac_ui(arb_t z, ulong n, slong prec)
13521341
13641353 rising factorial as `{n \choose k} = (n-k+1)_k / k!`.
13651354
13661355 .. function:: void arb_gamma(arb_t z, const arb_t x, slong prec)
1367
1368 .. function:: void arb_gamma_fmpq(arb_t z, const fmpq_t x, slong prec)
1369
1370 .. function:: void arb_gamma_fmpz(arb_t z, const fmpz_t x, slong prec)
1356 void arb_gamma_fmpq(arb_t z, const fmpq_t x, slong prec)
1357 void arb_gamma_fmpz(arb_t z, const fmpz_t x, slong prec)
13711358
13721359 Computes the gamma function `z = \Gamma(x)`.
1360
1361 These functions are aliases for :func:`arb_hypgeom_gamma`,
1362 :func:`arb_hypgeom_gamma_fmpq`, :func:`arb_hypgeom_gamma_fmpz`.
13731363
13741364 .. function:: void arb_lgamma(arb_t z, const arb_t x, slong prec)
13751365
13761366 Computes the logarithmic gamma function `z = \log \Gamma(x)`.
13771367 The complex branch structure is assumed, so if `x \le 0`, the
13781368 result is an indeterminate interval.
1369 This function is an alias for :func:`arb_hypgeom_lgamma`.
13791370
13801371 .. function:: void arb_rgamma(arb_t z, const arb_t x, slong prec)
13811372
13821373 Computes the reciprocal gamma function `z = 1/\Gamma(x)`,
13831374 avoiding division by zero at the poles of the gamma function.
1375 This function is an alias for :func:`arb_hypgeom_rgamma`.
13841376
13851377 .. function:: void arb_digamma(arb_t y, const arb_t x, slong prec)
13861378
0 .. _arb_fpwrap:
1
2 **arb_fpwrap.h** -- floating-point wrappers of Arb mathematical functions
3 =========================================================================================
4
5 This module provides wrappers of Arb functions intended users who
6 want accurate floating-point mathematical functions
7 without necessarily caring about ball arithmetic.
8 The wrappers take floating-point input, give floating-point output,
9 and automatically increase the internal working precision
10 to ensure that the output is accurate
11 (in the rare case of failure, they output NaN along with an error code).
12
13 **Warning:** This module is experimental (as of Arb 2.21). It has not
14 been extensively tested, and interfaces may change in the future.
15
16 Supported types:
17
18 * ``double`` and ``complex_double`` (53-bit precision)
19
20 Limitations:
21
22 * The wrappers currently only handle finite input and points where function
23 value is finite. For example,
24 they do not know that `\log(0) = -\infty` or that `\exp(-\infty) = 0`.
25 Singular input or output result in ``FPWRAP_UNABLE`` and a NaN output value.
26 Evaluation of limit values may be implemented in the future for some functions.
27 * The wrappers currently treat ``-0.0`` as ``+0.0``. Users who need to
28 distinguish signs of zero, e.g. on branch cuts, currently need to do so
29 manually.
30 * When requesting *correct rounding*, the wrappers can fail to converge
31 in asymptotic or exact cases (where special algorithms are required).
32 * If the value is computed accurately internally but is too small to represent
33 as a floating-point number, the result will be ``-0.0`` or ``+0.0`` (on underflow)
34 or ``-Inf`` or ``+Inf`` (on overflow). Since the underflowed or overflowed
35 result is the best possible floating-point approximation of the true value,
36 this outcome is considered correct and the flag ``FPWRAP_SUCCESS`` is returned.
37 In the future, return status flags may be added to indicate that underflow
38 or overflow has occurred.
39 * Different rounding modes are not yet implemented.
40
41 Option and return flags
42 -------------------------------------------------------------------------------
43
44 Functions return an ``int`` flag indicating the status.
45
46 .. macro:: FPWRAP_SUCCESS
47
48 Indicates an accurate result. (Up to inevitable underflow or
49 overflow in the final conversion to a floating-point result; see above.)
50
51 This flag has the numerical value 0.
52
53 .. macro:: FPWRAP_UNABLE
54
55 Indicates failure (unable to achieve to target accuracy,
56 possibly because of a singularity). The output is set to NaN.
57
58 This flag has the numerical value 1.
59
60 Functions take a *flags* parameter specifying optional rounding and termination
61 behavior. This can be set to 0 to use defaults.
62
63 .. macro:: FPWRAP_ACCURATE_PARTS
64
65 For complex output, compute both real and imaginary parts to full relative accuracy.
66 By default (if this flag is not set), complex results are computed to
67 at least 53-bit accuracy as a whole, but if either the real or imaginary
68 part is much smaller than the other, that part can have a large relative error.
69 Setting this flag can result in slower evaluation or failure to converge
70 in some cases.
71
72 This flag has the numerical value 1.
73
74 .. macro:: FPWRAP_CORRECT_ROUNDING
75
76 Guarantees *correct rounding*.
77 By default (if this flag is not set), real results are accurate up to the
78 rounding of the last bit, but the last bit is not guaranteed to
79 be rounded optimally.
80 Setting this flag can result in slower
81 evaluation or failure to converge in some cases.
82 Correct rounding automatically applies to both real and imaginary parts
83 of complex numbers, so it is unnecessary to set both this flag and
84 *FPWRAP_ACCURATE_PARTS*.
85
86 This flag has the numerical value 2.
87
88 .. macro:: FPWRAP_WORK_LIMIT
89
90 Multiplied by an integer, specifies the maximum working precision to use
91 before giving up. With ``n * FPWRAP_WORK_LIMIT`` added to *flags*,
92 `n` levels of precision will be used.
93 The default `n = 0` is equivalent to `n = 8`, which for ``double``
94 means trying with a working precision of 64, 128, 256, 512, 1024, 2048,
95 4096, 8192 bits.
96 With ``flags = 2 * FPWRAP_WORK_LIMIT``, we only try 64 and 128
97 bits, and with ``flags = 16 * FPWRAP_WORK_LIMIT`` we
98 go up to 2097152 bits.
99
100 This flag has the numerical value 65536.
101
102 Types
103 -------------------------------------------------------------------------------
104
105 Outputs are passed by reference so that we can return status
106 flags and so that the interface is uniform for functions with
107 multiple outputs.
108
109 .. type:: complex_double
110
111 A struct of two ``double`` components (``real`` and ``imag``), used to
112 represent a machine-precision complex number. We use this custom type
113 instead of the complex types defined in ``<complex.h>`` since Arb
114 does not depend on C99. Users should easily be able to convert
115 to the C99 complex type since the layout in memory is identical.
116
117 Functions
118 -------------------------------------------------------------------------------
119
120 Elementary functions
121 ...............................................................................
122
123 .. function:: int arb_fpwrap_double_exp(double * res, double x, int flags)
124 int arb_fpwrap_cdouble_exp(complex_double * res, complex_double x, int flags)
125
126 .. function:: int arb_fpwrap_double_expm1(double * res, double x, int flags)
127 int arb_fpwrap_cdouble_expm1(complex_double * res, complex_double x, int flags)
128
129 .. function:: int arb_fpwrap_double_log(double * res, double x, int flags)
130 int arb_fpwrap_cdouble_log(complex_double * res, complex_double x, int flags)
131
132 .. function:: int arb_fpwrap_double_log1p(double * res, double x, int flags)
133 int arb_fpwrap_cdouble_log1p(complex_double * res, complex_double x, int flags)
134
135 .. function:: int arb_fpwrap_double_sqrt(double * res, double x, int flags)
136 int arb_fpwrap_cdouble_sqrt(complex_double * res, complex_double x, int flags)
137
138 .. function:: int arb_fpwrap_double_rsqrt(double * res, double x, int flags)
139 int arb_fpwrap_cdouble_rsqrt(complex_double * res, complex_double x, int flags)
140
141 .. function:: int arb_fpwrap_double_cbrt(double * res, double x, int flags)
142 int arb_fpwrap_cdouble_cbrt(complex_double * res, complex_double x, int flags)
143
144 .. function:: int arb_fpwrap_double_sin(double * res, double x, int flags)
145 int arb_fpwrap_cdouble_sin(complex_double * res, complex_double x, int flags)
146
147 .. function:: int arb_fpwrap_double_cos(double * res, double x, int flags)
148 int arb_fpwrap_cdouble_cos(complex_double * res, complex_double x, int flags)
149
150 .. function:: int arb_fpwrap_double_tan(double * res, double x, int flags)
151 int arb_fpwrap_cdouble_tan(complex_double * res, complex_double x, int flags)
152
153 .. function:: int arb_fpwrap_double_cot(double * res, double x, int flags)
154 int arb_fpwrap_cdouble_cot(complex_double * res, complex_double x, int flags)
155
156 .. function:: int arb_fpwrap_double_sec(double * res, double x, int flags)
157 int arb_fpwrap_cdouble_sec(complex_double * res, complex_double x, int flags)
158
159 .. function:: int arb_fpwrap_double_csc(double * res, double x, int flags)
160 int arb_fpwrap_cdouble_csc(complex_double * res, complex_double x, int flags)
161
162 .. function:: int arb_fpwrap_double_sinc(double * res, double x, int flags)
163 int arb_fpwrap_cdouble_sinc(complex_double * res, complex_double x, int flags)
164
165 .. function:: int arb_fpwrap_double_sin_pi(double * res, double x, int flags)
166 int arb_fpwrap_cdouble_sin_pi(complex_double * res, complex_double x, int flags)
167
168 .. function:: int arb_fpwrap_double_cos_pi(double * res, double x, int flags)
169 int arb_fpwrap_cdouble_cos_pi(complex_double * res, complex_double x, int flags)
170
171 .. function:: int arb_fpwrap_double_tan_pi(double * res, double x, int flags)
172 int arb_fpwrap_cdouble_tan_pi(complex_double * res, complex_double x, int flags)
173
174 .. function:: int arb_fpwrap_double_cot_pi(double * res, double x, int flags)
175 int arb_fpwrap_cdouble_cot_pi(complex_double * res, complex_double x, int flags)
176
177 .. function:: int arb_fpwrap_double_sinc_pi(double * res, double x, int flags)
178 int arb_fpwrap_cdouble_sinc_pi(complex_double * res, complex_double x, int flags)
179
180 .. function:: int arb_fpwrap_double_asin(double * res, double x, int flags)
181 int arb_fpwrap_cdouble_asin(complex_double * res, complex_double x, int flags)
182
183 .. function:: int arb_fpwrap_double_acos(double * res, double x, int flags)
184 int arb_fpwrap_cdouble_acos(complex_double * res, complex_double x, int flags)
185
186 .. function:: int arb_fpwrap_double_atan(double * res, double x, int flags)
187 int arb_fpwrap_cdouble_atan(complex_double * res, complex_double x, int flags)
188
189 .. function:: int arb_fpwrap_double_atan2(double * res, double x1, double x2, int flags)
190
191 .. function:: int arb_fpwrap_double_asinh(double * res, double x, int flags)
192 int arb_fpwrap_cdouble_asinh(complex_double * res, complex_double x, int flags)
193
194 .. function:: int arb_fpwrap_double_acosh(double * res, double x, int flags)
195 int arb_fpwrap_cdouble_acosh(complex_double * res, complex_double x, int flags)
196
197 .. function:: int arb_fpwrap_double_atanh(double * res, double x, int flags)
198 int arb_fpwrap_cdouble_atanh(complex_double * res, complex_double x, int flags)
199
200 .. function:: int arb_fpwrap_double_lambertw(double * res, double x, slong branch, int flags)
201 int arb_fpwrap_cdouble_lambertw(complex_double * res, complex_double x, slong branch, int flags)
202
203 Gamma, zeta and related functions
204 ...............................................................................
205
206 .. function:: int arb_fpwrap_double_rising(double * res, double x, double n, int flags)
207 int arb_fpwrap_cdouble_rising(complex_double * res, complex_double x, complex_double n, int flags)
208
209 Rising factorial.
210
211 .. function:: int arb_fpwrap_double_gamma(double * res, double x, int flags)
212 int arb_fpwrap_cdouble_gamma(complex_double * res, complex_double x, int flags)
213
214 Gamma function.
215
216 .. function:: int arb_fpwrap_double_rgamma(double * res, double x, int flags)
217 int arb_fpwrap_cdouble_rgamma(complex_double * res, complex_double x, int flags)
218
219 Reciprocal gamma function.
220
221 .. function:: int arb_fpwrap_double_lgamma(double * res, double x, int flags)
222 int arb_fpwrap_cdouble_lgamma(complex_double * res, complex_double x, int flags)
223
224 Log-gamma function.
225
226 .. function:: int arb_fpwrap_double_digamma(double * res, double x, int flags)
227 int arb_fpwrap_cdouble_digamma(complex_double * res, complex_double x, int flags)
228
229 Digamma function.
230
231 .. function:: int arb_fpwrap_double_zeta(double * res, double x, int flags)
232 int arb_fpwrap_cdouble_zeta(complex_double * res, complex_double x, int flags)
233
234 Riemann zeta function.
235
236 .. function:: int arb_fpwrap_double_hurwitz_zeta(double * res, double s, double z, int flags)
237 int arb_fpwrap_cdouble_hurwitz_zeta(complex_double * res, complex_double s, complex_double z, int flags)
238
239 Hurwitz zeta function.
240
241 .. function:: int arb_fpwrap_double_barnes_g(double * res, double x, int flags)
242 int arb_fpwrap_cdouble_barnes_g(complex_double * res, complex_double x, int flags)
243
244 Barnes G-function.
245
246 .. function:: int arb_fpwrap_double_log_barnes_g(double * res, double x, int flags)
247 int arb_fpwrap_cdouble_log_barnes_g(complex_double * res, complex_double x, int flags)
248
249 Logarithmic Barnes G-function.
250
251 .. function:: int arb_fpwrap_double_polygamma(double * res, double s, double z, int flags)
252 int arb_fpwrap_cdouble_polygamma(complex_double * res, complex_double s, complex_double z, int flags)
253
254 Polygamma function.
255
256 .. function:: int arb_fpwrap_double_polylog(double * res, double s, double z, int flags)
257 int arb_fpwrap_cdouble_polylog(complex_double * res, complex_double s, complex_double z, int flags)
258
259 Polylogarithm.
260
261 .. function:: int arb_fpwrap_cdouble_dirichlet_eta(complex_double * res, complex_double s, int flags)
262
263 .. function:: int arb_fpwrap_cdouble_riemann_xi(complex_double * res, complex_double s, int flags)
264
265 .. function:: int arb_fpwrap_cdouble_hardy_theta(complex_double * res, complex_double z, int flags)
266
267 .. function:: int arb_fpwrap_cdouble_hardy_z(complex_double * res, complex_double z, int flags)
268
269 .. function:: int arb_fpwrap_cdouble_zeta_zero(complex_double * res, ulong n, int flags)
270
271 Error functions and exponential integrals
272 ...............................................................................
273
274 .. function:: int arb_fpwrap_double_erf(double * res, double x, int flags)
275 int arb_fpwrap_cdouble_erf(complex_double * res, complex_double x, int flags)
276
277 .. function:: int arb_fpwrap_double_erfc(double * res, double x, int flags)
278 int arb_fpwrap_cdouble_erfc(complex_double * res, complex_double x, int flags)
279
280 .. function:: int arb_fpwrap_double_erfi(double * res, double x, int flags)
281 int arb_fpwrap_cdouble_erfi(complex_double * res, complex_double x, int flags)
282
283 .. function:: int arb_fpwrap_double_fresnel_s(double * res, double x, int normalized, int flags)
284 int arb_fpwrap_cdouble_fresnel_s(complex_double * res, complex_double x, int normalized, int flags)
285
286 .. function:: int arb_fpwrap_double_fresnel_c(double * res, double x, int normalized, int flags)
287 int arb_fpwrap_cdouble_fresnel_c(complex_double * res, complex_double x, int normalized, int flags)
288
289 .. function:: int arb_fpwrap_double_gamma_upper(double * res, double s, double z, int regularized, int flags)
290 int arb_fpwrap_cdouble_gamma_upper(complex_double * res, complex_double s, complex_double z, int regularized, int flags)
291
292 .. function:: int arb_fpwrap_double_gamma_lower(double * res, double s, double z, int regularized, int flags)
293 int arb_fpwrap_cdouble_gamma_lower(complex_double * res, complex_double s, complex_double z, int regularized, int flags)
294
295 .. function:: int arb_fpwrap_double_beta_lower(double * res, double a, double b, double z, int regularized, int flags)
296 int arb_fpwrap_cdouble_beta_lower(complex_double * res, complex_double a, complex_double b, complex_double z, int regularized, int flags)
297
298 .. function:: int arb_fpwrap_double_exp_integral_e(double * res, double s, double z, int flags)
299 int arb_fpwrap_cdouble_exp_integral_e(complex_double * res, complex_double s, complex_double z, int flags)
300
301 .. function:: int arb_fpwrap_double_exp_integral_ei(double * res, double x, int flags)
302 int arb_fpwrap_cdouble_exp_integral_ei(complex_double * res, complex_double x, int flags)
303
304 .. function:: int arb_fpwrap_double_sin_integral(double * res, double x, int flags)
305 int arb_fpwrap_cdouble_sin_integral(complex_double * res, complex_double x, int flags)
306
307 .. function:: int arb_fpwrap_double_cos_integral(double * res, double x, int flags)
308 int arb_fpwrap_cdouble_cos_integral(complex_double * res, complex_double x, int flags)
309
310 .. function:: int arb_fpwrap_double_sinh_integral(double * res, double x, int flags)
311 int arb_fpwrap_cdouble_sinh_integral(complex_double * res, complex_double x, int flags)
312
313 .. function:: int arb_fpwrap_double_cosh_integral(double * res, double x, int flags)
314 int arb_fpwrap_cdouble_cosh_integral(complex_double * res, complex_double x, int flags)
315
316 .. function:: int arb_fpwrap_double_log_integral(double * res, double x, int offset, int flags)
317 int arb_fpwrap_cdouble_log_integral(complex_double * res, complex_double x, int offset, int flags)
318
319 Bessel, Airy and Coulomb functions
320 ...............................................................................
321
322 .. function:: int arb_fpwrap_double_bessel_j(double * res, double nu, double x, int flags)
323 int arb_fpwrap_cdouble_bessel_j(complex_double * res, complex_double nu, complex_double x, int flags)
324
325 .. function:: int arb_fpwrap_double_bessel_y(double * res, double nu, double x, int flags)
326 int arb_fpwrap_cdouble_bessel_y(complex_double * res, complex_double nu, complex_double x, int flags)
327
328 .. function:: int arb_fpwrap_double_bessel_i(double * res, double nu, double x, int flags)
329 int arb_fpwrap_cdouble_bessel_i(complex_double * res, complex_double nu, complex_double x, int flags)
330
331 .. function:: int arb_fpwrap_double_bessel_k(double * res, double nu, double x, int flags)
332 int arb_fpwrap_cdouble_bessel_k(complex_double * res, complex_double nu, complex_double x, int flags)
333
334 .. function:: int arb_fpwrap_double_bessel_k_scaled(double * res, double nu, double x, int flags)
335 int arb_fpwrap_cdouble_bessel_k_scaled(complex_double * res, complex_double nu, complex_double x, int flags)
336
337 .. function:: int arb_fpwrap_double_airy_ai(double * res, double x, int flags)
338 int arb_fpwrap_cdouble_airy_ai(complex_double * res, complex_double x, int flags)
339
340 .. function:: int arb_fpwrap_double_airy_ai_prime(double * res, double x, int flags)
341 int arb_fpwrap_cdouble_airy_ai_prime(complex_double * res, complex_double x, int flags)
342
343 .. function:: int arb_fpwrap_double_airy_bi(double * res, double x, int flags)
344 int arb_fpwrap_cdouble_airy_bi(complex_double * res, complex_double x, int flags)
345
346 .. function:: int arb_fpwrap_double_airy_bi_prime(double * res, double x, int flags)
347 int arb_fpwrap_cdouble_airy_bi_prime(complex_double * res, complex_double x, int flags)
348
349 .. function:: int arb_fpwrap_double_airy_ai_zero(double * res, ulong n, int flags)
350
351 .. function:: int arb_fpwrap_double_airy_ai_prime_zero(double * res, ulong n, int flags)
352
353 .. function:: int arb_fpwrap_double_airy_bi_zero(double * res, ulong n, int flags)
354
355 .. function:: int arb_fpwrap_double_airy_bi_prime_zero(double * res, ulong n, int flags)
356
357 .. function:: int arb_fpwrap_double_coulomb_f(double * res, double l, double eta, double x, int flags)
358 int arb_fpwrap_cdouble_coulomb_f(complex_double * res, complex_double l, complex_double eta, complex_double x, int flags)
359
360 .. function:: int arb_fpwrap_double_coulomb_g(double * res, double l, double eta, double x, int flags)
361 int arb_fpwrap_cdouble_coulomb_g(complex_double * res, complex_double l, complex_double eta, complex_double x, int flags)
362
363 .. function:: int arb_fpwrap_cdouble_coulomb_hpos(complex_double * res, complex_double l, complex_double eta, complex_double x, int flags)
364 int arb_fpwrap_cdouble_coulomb_hneg(complex_double * res, complex_double l, complex_double eta, complex_double x, int flags)
365
366 Orthogonal polynomials
367 ...............................................................................
368
369 .. function:: int arb_fpwrap_double_chebyshev_t(double * res, double n, double x, int flags)
370 int arb_fpwrap_cdouble_chebyshev_t(complex_double * res, complex_double n, complex_double x, int flags)
371
372 .. function:: int arb_fpwrap_double_chebyshev_u(double * res, double n, double x, int flags)
373 int arb_fpwrap_cdouble_chebyshev_u(complex_double * res, complex_double n, complex_double x, int flags)
374
375 .. function:: int arb_fpwrap_double_jacobi_p(double * res, double n, double a, double b, double x, int flags)
376 int arb_fpwrap_cdouble_jacobi_p(complex_double * res, complex_double n, complex_double a, complex_double b, complex_double x, int flags)
377
378 .. function:: int arb_fpwrap_double_gegenbauer_c(double * res, double n, double m, double x, int flags)
379 int arb_fpwrap_cdouble_gegenbauer_c(complex_double * res, complex_double n, complex_double m, complex_double x, int flags)
380
381 .. function:: int arb_fpwrap_double_laguerre_l(double * res, double n, double m, double x, int flags)
382 int arb_fpwrap_cdouble_laguerre_l(complex_double * res, complex_double n, complex_double m, complex_double x, int flags)
383
384 .. function:: int arb_fpwrap_double_hermite_h(double * res, double n, double x, int flags)
385 int arb_fpwrap_cdouble_hermite_h(complex_double * res, complex_double n, complex_double x, int flags)
386
387 .. function:: int arb_fpwrap_double_legendre_p(double * res, double n, double m, double x, int type, int flags)
388 int arb_fpwrap_cdouble_legendre_p(complex_double * res, complex_double n, complex_double m, complex_double x, int type, int flags)
389
390 .. function:: int arb_fpwrap_double_legendre_q(double * res, double n, double m, double x, int type, int flags)
391 int arb_fpwrap_cdouble_legendre_q(complex_double * res, complex_double n, complex_double m, complex_double x, int type, int flags)
392
393 .. function:: int arb_fpwrap_double_legendre_root(double * res1, double * res2, ulong n, ulong k, int flags)
394
395 Sets *res1* to the index *k* root of the Legendre polynomial `P_n(x)`,
396 and simultaneously sets *res2* to the corresponding weight for
397 Gauss-Legendre quadrature.
398
399 .. function:: int arb_fpwrap_cdouble_spherical_y(complex_double * res, slong n, slong m, complex_double x1, complex_double x2, int flags)
400
401 Hypergeometric functions
402 ...............................................................................
403
404 .. function:: int arb_fpwrap_double_hypgeom_0f1(double * res, double a, double x, int regularized, int flags)
405 int arb_fpwrap_cdouble_hypgeom_0f1(complex_double * res, complex_double a, complex_double x, int regularized, int flags)
406
407 .. function:: int arb_fpwrap_double_hypgeom_1f1(double * res, double a, double b, double x, int regularized, int flags)
408 int arb_fpwrap_cdouble_hypgeom_1f1(complex_double * res, complex_double a, complex_double b, complex_double x, int regularized, int flags)
409
410 .. function:: int arb_fpwrap_double_hypgeom_u(double * res, double a, double b, double x, int flags)
411 int arb_fpwrap_cdouble_hypgeom_u(complex_double * res, complex_double a, complex_double b, complex_double x, int flags)
412
413 .. function:: int arb_fpwrap_double_hypgeom_2f1(double * res, double a, double b, double c, double x, int regularized, int flags)
414 int arb_fpwrap_cdouble_hypgeom_2f1(complex_double * res, complex_double a, complex_double b, complex_double c, complex_double x, int regularized, int flags)
415
416 .. function:: int arb_fpwrap_double_hypgeom_pfq(double * res, const double * a, slong p, const double * b, slong q, double z, int regularized, int flags)
417 int arb_fpwrap_cdouble_hypgeom_pfq(complex_double * res, const complex_double * a, slong p, const complex_double * b, slong q, complex_double z, int regularized, int flags)
418
419
420 Elliptic integrals, elliptic functions and modular forms
421 ...............................................................................
422
423 .. function:: int arb_fpwrap_double_agm(double * res, double x, double y, int flags)
424 int arb_fpwrap_cdouble_agm(complex_double * res, complex_double x, complex_double y, int flags)
425
426 Arithmetic-geometric mean.
427
428 .. function:: int arb_fpwrap_cdouble_elliptic_k(complex_double * res, complex_double m, int flags)
429
430 .. function:: int arb_fpwrap_cdouble_elliptic_e(complex_double * res, complex_double m, int flags)
431
432 .. function:: int arb_fpwrap_cdouble_elliptic_pi(complex_double * res, complex_double n, complex_double m, int flags)
433
434 .. function:: int arb_fpwrap_cdouble_elliptic_f(complex_double * res, complex_double phi, complex_double m, int pi, int flags)
435
436 .. function:: int arb_fpwrap_cdouble_elliptic_e_inc(complex_double * res, complex_double phi, complex_double m, int pi, int flags)
437
438 .. function:: int arb_fpwrap_cdouble_elliptic_pi_inc(complex_double * res, complex_double n, complex_double phi, complex_double m, int pi, int flags)
439
440 Complete and incomplete elliptic integrals.
441
442 .. function:: int arb_fpwrap_cdouble_elliptic_rf(complex_double * res, complex_double x, complex_double y, complex_double z, int option, int flags)
443
444 .. function:: int arb_fpwrap_cdouble_elliptic_rg(complex_double * res, complex_double x, complex_double y, complex_double z, int option, int flags)
445
446 .. function:: int arb_fpwrap_cdouble_elliptic_rj(complex_double * res, complex_double x, complex_double y, complex_double z, complex_double w, int option, int flags)
447
448 Carlson symmetric elliptic integrals.
449
450 .. function:: int arb_fpwrap_cdouble_elliptic_p(complex_double * res, complex_double z, complex_double tau, int flags)
451
452 .. function:: int arb_fpwrap_cdouble_elliptic_p_prime(complex_double * res, complex_double z, complex_double tau, int flags)
453
454 .. function:: int arb_fpwrap_cdouble_elliptic_inv_p(complex_double * res, complex_double z, complex_double tau, int flags)
455
456 .. function:: int arb_fpwrap_cdouble_elliptic_zeta(complex_double * res, complex_double z, complex_double tau, int flags)
457
458 .. function:: int arb_fpwrap_cdouble_elliptic_sigma(complex_double * res, complex_double z, complex_double tau, int flags)
459
460 Weierstrass elliptic functions.
461
462 .. function:: int arb_fpwrap_cdouble_jacobi_theta_1(complex_double * res, complex_double z, complex_double tau, int flags)
463
464 .. function:: int arb_fpwrap_cdouble_jacobi_theta_2(complex_double * res, complex_double z, complex_double tau, int flags)
465
466 .. function:: int arb_fpwrap_cdouble_jacobi_theta_3(complex_double * res, complex_double z, complex_double tau, int flags)
467
468 .. function:: int arb_fpwrap_cdouble_jacobi_theta_4(complex_double * res, complex_double z, complex_double tau, int flags)
469
470 Jacobi theta functions.
471
472 .. function:: int arb_fpwrap_cdouble_dedekind_eta(complex_double * res, complex_double tau, int flags)
473
474 .. function:: int arb_fpwrap_cdouble_modular_j(complex_double * res, complex_double tau, int flags)
475
476 .. function:: int arb_fpwrap_cdouble_modular_lambda(complex_double * res, complex_double tau, int flags)
477
478 .. function:: int arb_fpwrap_cdouble_modular_delta(complex_double * res, complex_double tau, int flags)
479
480 Calling from C
481 -------------------------------------------------------------------------------
482
483 The program ``examples/fpwrap.c`` provides a usage example::
484
485 #include "arb_fpwrap.h"
486
487 int main()
488 {
489 double x, y;
490 complex_double cx, cy;
491 int flags = 0; /* default options */
492
493 x = 2.0;
494 cx.real = 0.5;
495 cx.imag = 123.0;
496
497 arb_fpwrap_double_zeta(&y, x, flags);
498 arb_fpwrap_cdouble_zeta(&cy, cx, flags);
499
500 printf("zeta(%g) = %.16g\n", x, y);
501 printf("zeta(%g + %gi) = %.16g + %.16gi\n", cx.real, cx.imag, cy.real, cy.imag);
502
503 flint_cleanup();
504 return 0;
505 }
506
507 .. highlight:: text
508
509 This should print::
510
511 > build/examples/fpwrap
512 zeta(2) = 1.644934066848226
513 zeta(0.5 + 123i) = 0.006252861175594465 + 0.08206030514520983i
514
515 Note that this program does not check the return flag
516 to perform error handling.
517
518
519 Interfacing from Python
520 -------------------------------------------------------------------------------
521
522 .. highlight:: python
523
524 This illustrates how to call functions from Python using ``ctypes``::
525
526 import ctypes
527 import ctypes.util
528
529 libarb_path = ctypes.util.find_library('arb')
530 libarb = ctypes.CDLL(libarb_path)
531
532 class _complex_double(ctypes.Structure):
533 _fields_ = [('real', ctypes.c_double),
534 ('imag', ctypes.c_double)]
535
536 def wrap_double_fun(fun):
537 def f(x):
538 y = ctypes.c_double()
539 if fun(ctypes.byref(y), ctypes.c_double(x), 0):
540 raise ValueError(f"unable to evaluate function accurately at {x}")
541 return y.value
542 return f
543
544 def wrap_cdouble_fun(fun):
545 def f(x):
546 x = complex(x)
547 cx = _complex_double()
548 cy = _complex_double()
549 cx.real = x.real
550 cx.imag = x.imag
551 if fun(ctypes.byref(cy), cx, 0):
552 raise ValueError(f"unable to evaluate function accurately at {x}")
553 return complex(cy.real, cy.imag)
554 return f
555
556 zeta = wrap_double_fun(libarb.arb_fpwrap_double_zeta)
557 czeta = wrap_cdouble_fun(libarb.arb_fpwrap_cdouble_zeta)
558
559 print(zeta(2.0))
560 print(czeta(0.5+1e9j))
561 print(zeta(1.0)) # pole, where wrapper throws exception
562
563 .. highlight:: text
564
565 This should print::
566
567 1.6449340668482264
568 (-2.761748029838061-1.6775122409894598j)
569 Traceback (most recent call last):
570 ...
571 ValueError: unable to evaluate function accurately at 1.0
572
573 Interfacing from Julia
574 -------------------------------------------------------------------------------
575
576 .. highlight:: julia
577
578 This illustrates how to call functions from Julia using ``ccall``::
579
580 using Libdl
581
582 dlopen("/home/fredrik/src/arb/libarb.so")
583
584 function zeta(x::Float64)
585 cy = Ref{Float64}()
586 if Bool(ccall((:arb_fpwrap_double_zeta, :libarb), Cint, (Ptr{Float64}, Float64, Cint), cy, x, 0))
587 error("unable to evaluate accurately at ", x)
588 end
589 return cy[]
590 end
591
592 function zeta(x::Complex{Float64})
593 cy = Ref{Complex{Float64}}()
594 if Bool(ccall((:arb_fpwrap_cdouble_zeta, :libarb), Cint, (Ptr{Complex{Float64}}, Complex{Float64}, Cint), cy, x, 0))
595 error("unable to evaluate accurately at ", x)
596 end
597 return cy[]
598 end
599
600 println(zeta(2.0))
601 println(zeta(0.5 + 1e9im))
602 println(zeta(1.0)) # pole, where wrapper throws exception
603
604 .. highlight:: text
605
606 This should print::
607
608 1.6449340668482264
609 -2.761748029838061 - 1.6775122409894598im
610 ERROR: unable to evaluate accurately at 1.0
611 Stacktrace:
612 ...
613
614
615 .. highlight:: c
616
3434 void arb_hypgeom_rising_ui_bs(arb_t res, const arb_t x, ulong n, slong prec)
3535 void arb_hypgeom_rising_ui_rs(arb_t res, const arb_t x, ulong n, ulong m, slong prec)
3636 void arb_hypgeom_rising_ui_rec(arb_t res, const arb_t x, ulong n, slong prec)
37 void arb_hypgeom_rising_ui(arb_t y, const arb_t x, ulong n, slong prec)
38 void arb_hypgeom_rising(arb_t y, const arb_t x, const arb_t n, slong prec)
37 void arb_hypgeom_rising_ui(arb_t res, const arb_t x, ulong n, slong prec)
38 void arb_hypgeom_rising(arb_t res, const arb_t x, const arb_t n, slong prec)
3939
4040 Computes the rising factorial `(x)_n`.
4141
6666 parameter *m* which can be set to zero to choose automatically.
6767 The default version chooses an algorithm automatically.
6868
69 Gamma function
70 -------------------------------------------------------------------------------
71
72 .. function:: void _arb_hypgeom_gamma_stirling_term_bounds(slong * bound, const mag_t zinv, slong N)
73
74 For `1 \le n < N`, sets *bound* to an exponent bounding the *n*-th term
75 in the Stirling series for the gamma function, given a precomputed upper
76 bound for `|z|^{-1}`. This function is intended for internal use and
77 does not check for underflow or underflow in the exponents.
78
79 .. function:: void arb_hypgeom_gamma_stirling_sum_horner(arb_t res, const arb_t z, slong N, slong prec)
80 void arb_hypgeom_gamma_stirling_sum_improved(arb_t res, const arb_t z, slong N, slong K, slong prec)
81
82 Sets *res* to the final sum in the Stirling series for the gamma function
83 truncated before the term with index *N*, i.e. computes
84 `\sum_{n=1}^{N-1} B_{2n} / (2n(2n-1) z^{2n-1})`.
85 The *horner* version uses Horner scheme with gradual precision adjustments.
86 The *improved* version uses rectangular splitting for the low-index
87 terms and reexpands the high-index terms as hypergeometric polynomials,
88 using a splitting parameter *K* (which can be set to 0 to use a default
89 value).
90
91 .. function:: void arb_hypgeom_gamma_stirling(arb_t res, const arb_t x, int reciprocal, slong prec)
92
93 Sets *res* to the gamma function of *x* computed using the Stirling
94 series together with argument reduction. If *reciprocal* is set,
95 the reciprocal gamma function is computed instead.
96
97 .. function:: int arb_hypgeom_gamma_taylor(arb_t res, const arb_t x,int reciprocal, slong prec)
98
99 Attempts to compute the gamma function of *x* using Taylor series
100 together with argument reduction. This is only supported if *x* and *prec*
101 are both small enough. If successful, returns 1; otherwise, does nothing
102 and returns 0. If *reciprocal* is set, the reciprocal gamma function is
103 computed instead.
104
105 .. function:: void arb_hypgeom_gamma(arb_t res, const arb_t x, slong prec)
106 void arb_hypgeom_gamma_fmpq(arb_t res, const fmpq_t x, slong prec)
107 void arb_hypgeom_gamma_fmpz(arb_t res, const fmpz_t x, slong prec)
108
109 Sets *res* to the gamma function of *x* computed using a default
110 algorithm choice.
111
112 .. function:: void arb_hypgeom_rgamma(arb_t res, const arb_t x, slong prec)
113
114 Sets *res* to the reciprocal gamma function of *x* computed using a default
115 algorithm choice.
116
117 .. function:: void arb_hypgeom_lgamma(arb_t res, const arb_t x, slong prec)
118
119 Sets *res* to the log-gamma function of *x* computed using a default
120 algorithm choice.
121
69122
70123 Binomial coefficients
71124 -------------------------------------------------------------------------------
126179 Computes the error function `\operatorname{erf}(z)`.
127180
128181 .. function:: void _arb_hypgeom_erf_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec)
129
130 .. function:: void arb_hypgeom_erf_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
182 void arb_hypgeom_erf_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
131183
132184 Computes the error function of the power series *z*,
133185 truncated to length *len*.
139191 This function avoids catastrophic cancellation for large positive *z*.
140192
141193 .. function:: void _arb_hypgeom_erfc_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec)
142
143 .. function:: void arb_hypgeom_erfc_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
194 void arb_hypgeom_erfc_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
144195
145196 Computes the complementary error function of the power series *z*,
146197 truncated to length *len*.
151202 `\operatorname{erfi}(z) = -i\operatorname{erf}(iz)`.
152203
153204 .. function:: void _arb_hypgeom_erfi_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec)
154
155 .. function:: void arb_hypgeom_erfi_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
205 void arb_hypgeom_erfi_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
156206
157207 Computes the imaginary error function of the power series *z*,
158208 truncated to length *len*.
168218 `C(z)` is defined analogously.
169219
170220 .. function:: void _arb_hypgeom_fresnel_series(arb_ptr res1, arb_ptr res2, arb_srcptr z, slong zlen, int normalized, slong len, slong prec)
171
172 .. function:: void arb_hypgeom_fresnel_series(arb_poly_t res1, arb_poly_t res2, const arb_poly_t z, int normalized, slong len, slong prec)
221 void arb_hypgeom_fresnel_series(arb_poly_t res1, arb_poly_t res2, const arb_poly_t z, int normalized, slong len, slong prec)
173222
174223 Sets *res1* to the Fresnel sine integral and *res2* to the Fresnel
175224 cosine integral of the power series *z*, truncated to length *len*.
193242 interface for computing the exponential integral).
194243
195244 .. function:: void _arb_hypgeom_gamma_upper_series(arb_ptr res, const arb_t s, arb_srcptr z, slong zlen, int regularized, slong n, slong prec)
196
197 .. function:: void arb_hypgeom_gamma_upper_series(arb_poly_t res, const arb_t s, const arb_poly_t z, int regularized, slong n, slong prec)
245 void arb_hypgeom_gamma_upper_series(arb_poly_t res, const arb_t s, const arb_poly_t z, int regularized, slong n, slong prec)
198246
199247 Sets *res* to an upper incomplete gamma function where *s* is
200248 a constant and *z* is a power series, truncated to length *n*.
213261 gamma function `\gamma^{*}(s,z) = z^{-s} P(s,z)`.
214262
215263 .. function:: void _arb_hypgeom_gamma_lower_series(arb_ptr res, const arb_t s, arb_srcptr z, slong zlen, int regularized, slong n, slong prec)
216
217 .. function:: void arb_hypgeom_gamma_lower_series(arb_poly_t res, const arb_t s, const arb_poly_t z, int regularized, slong n, slong prec)
264 void arb_hypgeom_gamma_lower_series(arb_poly_t res, const arb_t s, const arb_poly_t z, int regularized, slong n, slong prec)
218265
219266 Sets *res* to an lower incomplete gamma function where *s* is
220267 a constant and *z* is a power series, truncated to length *n*.
229276 `I(a,b;z) = B(a,b;z) / B(a,b;1)`.
230277
231278 .. function:: void _arb_hypgeom_beta_lower_series(arb_ptr res, const arb_t a, const arb_t b, arb_srcptr z, slong zlen, int regularized, slong n, slong prec)
232
233 .. function:: void arb_hypgeom_beta_lower_series(arb_poly_t res, const arb_t a, const arb_t b, const arb_poly_t z, int regularized, slong n, slong prec)
279 void arb_hypgeom_beta_lower_series(arb_poly_t res, const arb_t a, const arb_t b, const arb_poly_t z, int regularized, slong n, slong prec)
234280
235281 Sets *res* to the lower incomplete beta function `B(a,b;z)` (optionally
236282 the regularized version `I(a,b;z)`) where *a* and *b* are constants
250296 Computes the exponential integral `\operatorname{Ei}(z)`.
251297
252298 .. function:: void _arb_hypgeom_ei_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec)
253
254 .. function:: void arb_hypgeom_ei_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
299 void arb_hypgeom_ei_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
255300
256301 Computes the exponential integral of the power series *z*,
257302 truncated to length *len*.
261306 Computes the sine integral `\operatorname{Si}(z)`.
262307
263308 .. function:: void _arb_hypgeom_si_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec)
264
265 .. function:: void arb_hypgeom_si_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
309 void arb_hypgeom_si_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
266310
267311 Computes the sine integral of the power series *z*,
268312 truncated to length *len*.
273317 The result is indeterminate if `z < 0` since the value of the function would be complex.
274318
275319 .. function:: void _arb_hypgeom_ci_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec)
276
277 .. function:: void arb_hypgeom_ci_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
320 void arb_hypgeom_ci_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
278321
279322 Computes the cosine integral of the power series *z*,
280323 truncated to length *len*.
284327 Computes the hyperbolic sine integral `\operatorname{Shi}(z) = -i \operatorname{Si}(iz)`.
285328
286329 .. function:: void _arb_hypgeom_shi_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec)
287
288 .. function:: void arb_hypgeom_shi_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
330 void arb_hypgeom_shi_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
289331
290332 Computes the hyperbolic sine integral of the power series *z*,
291333 truncated to length *len*.
296338 The result is indeterminate if `z < 0` since the value of the function would be complex.
297339
298340 .. function:: void _arb_hypgeom_chi_series(arb_ptr res, arb_srcptr z, slong zlen, slong len, slong prec)
299
300 .. function:: void arb_hypgeom_chi_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
341 void arb_hypgeom_chi_series(arb_poly_t res, const arb_poly_t z, slong len, slong prec)
301342
302343 Computes the hyperbolic cosine integral of the power series *z*,
303344 truncated to length *len*.
313354 The result is indeterminate if `z < 0` since the value of the function would be complex.
314355
315356 .. function:: void _arb_hypgeom_li_series(arb_ptr res, arb_srcptr z, slong zlen, int offset, slong len, slong prec)
316
317 .. function:: void arb_hypgeom_li_series(arb_poly_t res, const arb_poly_t z, int offset, slong len, slong prec)
357 void arb_hypgeom_li_series(arb_poly_t res, const arb_poly_t z, int offset, slong len, slong prec)
318358
319359 Computes the logarithmic integral (optionally the offset version)
320360 of the power series *z*, truncated to length *len*.
373413 the output with :func:`_arb_poly_derivative`.
374414
375415 .. function:: void _arb_hypgeom_airy_series(arb_ptr ai, arb_ptr ai_prime, arb_ptr bi, arb_ptr bi_prime, arb_srcptr z, slong zlen, slong len, slong prec)
376
377 .. function:: void arb_hypgeom_airy_series(arb_poly_t ai, arb_poly_t ai_prime, arb_poly_t bi, arb_poly_t bi_prime, const arb_poly_t z, slong len, slong prec)
416 void arb_hypgeom_airy_series(arb_poly_t ai, arb_poly_t ai_prime, arb_poly_t bi, arb_poly_t bi_prime, const arb_poly_t z, slong len, slong prec)
378417
379418 Computes the Airy functions evaluated at the power series *z*,
380419 truncated to length *len*. As with the other Airy methods, any of the
407446 Either of the outputs can be *NULL*.
408447
409448 .. function:: void _arb_hypgeom_coulomb_series(arb_ptr F, arb_ptr G, const arb_t l, const arb_t eta, arb_srcptr z, slong zlen, slong len, slong prec)
410
411 .. function:: void arb_hypgeom_coulomb_series(arb_poly_t F, arb_poly_t G, const arb_t l, const arb_t eta, const arb_poly_t z, slong len, slong prec)
449 void arb_hypgeom_coulomb_series(arb_poly_t F, arb_poly_t G, const arb_t l, const arb_t eta, const arb_poly_t z, slong len, slong prec)
412450
413451 Computes the Coulomb wave functions evaluated at the power series *z*,
414452 truncated to length *len*. Either of the outputs can be *NULL*.
417455 -------------------------------------------------------------------------------
418456
419457 .. function:: void arb_hypgeom_chebyshev_t(arb_t res, const arb_t nu, const arb_t z, slong prec)
420
421 .. function:: void arb_hypgeom_chebyshev_u(arb_t res, const arb_t nu, const arb_t z, slong prec)
422
423 .. function:: void arb_hypgeom_jacobi_p(arb_t res, const arb_t n, const arb_t a, const arb_t b, const arb_t z, slong prec)
424
425 .. function:: void arb_hypgeom_gegenbauer_c(arb_t res, const arb_t n, const arb_t m, const arb_t z, slong prec)
426
427 .. function:: void arb_hypgeom_laguerre_l(arb_t res, const arb_t n, const arb_t m, const arb_t z, slong prec)
428
429 .. function:: void arb_hypgeom_hermite_h(arb_t res, const arb_t nu, const arb_t z, slong prec)
458 void arb_hypgeom_chebyshev_u(arb_t res, const arb_t nu, const arb_t z, slong prec)
459 void arb_hypgeom_jacobi_p(arb_t res, const arb_t n, const arb_t a, const arb_t b, const arb_t z, slong prec)
460 void arb_hypgeom_gegenbauer_c(arb_t res, const arb_t n, const arb_t m, const arb_t z, slong prec)
461 void arb_hypgeom_laguerre_l(arb_t res, const arb_t n, const arb_t m, const arb_t z, slong prec)
462 void arb_hypgeom_hermite_h(arb_t res, const arb_t nu, const arb_t z, slong prec)
430463
431464 Computes Chebyshev, Jacobi, Gegenbauer, Laguerre or Hermite polynomials,
432465 or their extensions to non-integer orders.
433466
434467 .. function:: void arb_hypgeom_legendre_p(arb_t res, const arb_t n, const arb_t m, const arb_t z, int type, slong prec)
435
436 .. function:: void arb_hypgeom_legendre_q(arb_t res, const arb_t n, const arb_t m, const arb_t z, int type, slong prec)
468 void arb_hypgeom_legendre_q(arb_t res, const arb_t n, const arb_t m, const arb_t z, int type, slong prec)
437469
438470 Computes Legendre functions of the first and second kind.
439471 See :func:`acb_hypgeom_legendre_p` and :func:`acb_hypgeom_legendre_q`
448480 internally to bound the propagated error for Legendre polynomials.
449481
450482 .. function:: void arb_hypgeom_legendre_p_ui_zero(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong K, slong prec)
451
452 .. function:: void arb_hypgeom_legendre_p_ui_one(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong K, slong prec)
453
454 .. function:: void arb_hypgeom_legendre_p_ui_asymp(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong K, slong prec)
455
456 .. function:: void arb_hypgeom_legendre_p_rec(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong prec)
457
458 .. function:: void arb_hypgeom_legendre_p_ui(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong prec)
483 void arb_hypgeom_legendre_p_ui_one(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong K, slong prec)
484 void arb_hypgeom_legendre_p_ui_asymp(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong K, slong prec)
485 void arb_hypgeom_legendre_p_rec(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong prec)
486 void arb_hypgeom_legendre_p_ui(arb_t res, arb_t res_prime, ulong n, const arb_t x, slong prec)
459487
460488 Evaluates the ordinary Legendre polynomial `P_n(x)`. If *res_prime* is
461489 non-NULL, simultaneously evaluates the derivative `P'_n(x)`.
720720
721721 The underscore methods do not support aliasing, and assume that
722722 the lengths are nonzero.
723
724 .. function:: void _arb_poly_graeffe_transform(arb_ptr b, arb_srcptr a, slong len, slong prec)
725
726 .. function:: void arb_poly_graeffe_transform(arb_poly_t b, arb_poly_t a, slong prec)
727
728 Computes the Graeffe transform of input polynomial.
729
730 The Graeffe transform `G` of a polynomial `P` is defined through the
731 equation `G(x^2) = \pm P(x)P(-x)`.
732 The sign is given by `(-1)^d`, where `d = deg(P)`.
733 The Graeffe transform has the property that its roots are exactly the
734 squares of the roots of P.
735
736 The underscore method assumes that *a* and *b* are initialized,
737 *a* is of length *len*, and *b* is of length at least *len*.
738 Both methods allow aliasing.
723739
724740 Powers and elementary functions
725741 -------------------------------------------------------------------------------
620620
621621 Performs a fused multiply-subtract `z = z - x \cdot y`, updating *z* in-place.
622622
623 .. function:: int arf_fma(arf_t res, const arf_t x, const arf_t y, const arf_t z, slong prec, arf_rnd_t rnd)
624
625 Sets *res* to `x \cdot y + z`. This is equivalent to an *addmul* except
626 that *res* and *z* can be separate variables.
627
623628 .. function:: int arf_sosq(arf_t res, const arf_t x, const arf_t y, slong prec, arf_rnd_t rnd)
624629
625630 Sets *res* to `x^2 + y^2`, rounded to *prec* bits in the direction specified by *rnd*.
7373 * David Berghaus - aliased window matrix multiplication
7474 * Albin Ahlbäck - uniformly distributed random numbers
7575 * Daniel Schultz - derivative of Weierstrass elliptic function
76 * Matthias Gessinger - Graeffe transforms
7677
7778 Funding
7879 -------------------------------------------------------------------------------
706706 cpu/wall(s): 0.019 0.018
707707 I9 = [0.3785300 +/- 3.17e-8]
708708
709 fpwrap.c
710 -------------------------------------------------------------------------------
711
712 This program demonstrates calling the floating-point wrapper::
713
714 > build/examples/fpwrap
715 zeta(2) = 1.644934066848226
716 zeta(0.5 + 123i) = 0.006252861175594465 + 0.08206030514520983i
717
718
709719 .. highlight:: c
710720
1111 Old versions of the documentation
1212 -------------------------------------------------------------------------------
1313
14 * http://arblib.org/arb-2.21.0.pdf
1415 * http://arblib.org/arb-2.20.0.pdf
1516 * http://arblib.org/arb-2.19.0.pdf
1617 * http://arblib.org/arb-2.18.1.pdf
3334 * http://arblib.org/arb-2.4.0.pdf
3435 * http://arblib.org/arb-2.3.0.pdf
3536
37 2021-09-25 -- version 2.21.0
38 -------------------------------------------------------------------------------
39
40 * Experimental new arb_fpwrap module: accurate floating-point wrappers
41 of Arb mathematical functions (supersedes the external arbcmath.h).
42 * Fixed memory leak in arf_load_file (reported by Dave Platt).
43 * New and faster gamma function code.
44 * Most gamma function internals are now located in the arb_hypgeom and
45 acb_hypgeom modules. The user-facing functions (arb_gamma, etc.) are still
46 available under the old names for compatibility. The internal
47 algorithms for rising factorials (binary splitting, etc.) have been moved
48 without aliases.
49 * Added arb_fma, arb_fma_arf, arb_fma_ui (like addmul, but take a separate input and output).
50 * Slightly faster internal Bernoulli number generation for small n.
51 * Better enclosures for acb_barnes_g at negative reals.
52 * Added Graeffe transforms (arb_poly_graeffe_transform, acb_poly_graeffe_transform)
53 (contributed by Matthias Gessinger).
54 * Fixed conflict with musl libc (reported by Gonzalo Tornaría).
55 * Added acb_add_error_arb (contributed by Albin Ahlbäck).
56
3657 2021-07-25 -- version 2.20.0
3758 -------------------------------------------------------------------------------
3859
39 * Flint 2.18 support.
60 * Flint 2.8 support.
4061 * Change arb_get_str with ARB_STR_NO_RADIUS: [+/- 1.20e-15] now prints as 0e-14.
4162 * Uniformly distributed random number functions arf_urandom, arb_urandom
4263 (contributed by Albin Ahlbäck).
197197 arb_calc.rst
198198 acb_calc.rst
199199
200 Wrappers
201 ::::::::::::::::::::::::::::::::::::
202
203 Floating-point wrappers for Arb functions.
204
205 .. toctree::
206 :maxdepth: 2
207
208 arb_fpwrap.rst
209
210
200211 Extra utility modules
201212 ::::::::::::::::::::::::::::::::::::
202213
0 /* This file is public domain. Author: Fredrik Johansson. */
1
2 #include "arb_fpwrap.h"
3
4 int main()
5 {
6 double x, y;
7 complex_double cx, cy;
8 int flags = 0; /* default options */
9
10 x = 2.0;
11 cx.real = 0.5;
12 cx.imag = 123.0;
13
14 arb_fpwrap_double_zeta(&y, x, flags);
15 arb_fpwrap_cdouble_zeta(&cy, cx, flags);
16
17 printf("zeta(%g) = %.16g\n", x, y);
18 printf("zeta(%g + %gi) = %.16g + %.16gi\n", cx.real, cx.imag, cy.real, cy.imag);
19
20 flint_cleanup();
21 return 0;
22 }
23