1 /* geocentric moon polar coordinates re mean equinox and ecliptic of date
2
3 S. L. Moshier
4 December, 1996
5
6 **********************************************************************
7 Adapted by Michael Sternberg <sternberg@physik.tu-chemnitz.de>
8 for xephem with minor modifications from the originals at:
9 ftp://ftp.std.com/pub/astronomy/selenog.zip
10
11 Precision < 0.05" from -1369 to +2950.
12 Uses table lookup techniques to limit calls to trigonometric functions.
13
14 NB: Uses International Earth Rotation System (IERS) which is
15 taken as equivalent to FK5 for the purposes of xephem.
16
17 original files used:
18 chewtab.c mean.c mlr404.c
19 mlat404.c selenog.c
20
21 changes:
22 added prototypes, grouped and cleaned up vars and #defines,
23 removed _MSC_VER #ifdefs, uniqed names in moonlr and moonlat,
24 included plantbl.h in .c file, dropped out librations for now.
25
26 in struct plantbl, promoted "char *arg_tbl" to "short *".
27 reason: - more portable (BTW: this is the only place in xephem
28 where "signed char" would have been needed)
29 - using "short" costs a mere 7k memory but avoids core
30 dumps on a machine which we didn't anticipate.
31
32 **********************************************************************
33
34
35 Residuals against JPL ephemeris DE404 (arc seconds)
36
37 First date in file = 1221000.5
38 Number of samples = 1053099
39 Sampling interval = 1.515625 days
40
41 Peak excursions from these mostly different test points
42 were consolidated with the above. They added .01" to a few
43 of the peak readings.
44 First date in file = 1221000.50
45 Number of samples = 524290.0
46 Sampling interval = 3.0 days
47
48
49 Julian Years Longitude Latitude Distance
50 1 = 1.9 km
51 Peak RMS Ave Peak RMS Ave Peak RMS Ave
52 -1369.0 to -1000.0: 0.43 0.07 0.00 0.33 0.05 -0.00 0.18 0.03 0.00
53 -1000.0 to -500.0: 0.49 0.06 -0.00 0.33 0.04 -0.00 0.18 0.03 0.00
54 -500.0 to 0.0: 0.48 0.06 0.00 0.32 0.04 0.00 0.15 0.03 0.00
55 0.0 to 500.0: 0.45 0.05 0.00 0.30 0.04 -0.00 0.17 0.03 -0.00
56 500.0 to 1000.0: 0.48 0.05 -0.00 0.29 0.04 0.00 0.17 0.03 -0.00
57 1000.0 to 1500.0: 0.42 0.05 -0.00 0.28 0.04 -0.00 0.16 0.03 0.00
58 1500.0 to 2000.0: 0.35 0.05 -0.00 0.26 0.04 0.00 0.15 0.03 0.00
59 2000.0 to 2500.0: 0.39 0.06 0.00 0.25 0.04 -0.00 0.15 0.03 -0.00
60 2500.0 to 3000.0: 0.44 0.07 -0.00 0.30 0.05 -0.00 0.19 0.03 -0.00
61 3000.0 to 3000.8: 0.23 0.08 -0.04 0.11 0.04 -0.00 0.08 0.03 -0.00
62 */
63
64 #include <stdlib.h>
65 #include <stdio.h>
66 #include <math.h>
67
68 #include "astro.h"
69
70 #define CHAR short
71
72 #define NARGS 18
73
74 struct plantbl {
75 char max_harmonic[NARGS];
76 char max_power_of_t;
77 CHAR *arg_tbl;
78 long *lon_tbl;
79 long *lat_tbl;
80 long *rad_tbl;
81 double distance;
82 double timescale;
83 double trunclvl;
84 };
85
86 static double mods3600 (double x);
87 static void mean_elements (double JED);
88 static int sscc (int k, double arg, int n);
89 static int g2plan (double J, struct plantbl *plan, double *pobj, int flag);
90 static double g1plan (double J, struct plantbl *plan);
91 static int gecmoon (double J, struct plantbl *lrtab,
92 struct plantbl *lattab, double *pobj);
93
94 /* time points */
95 #define MOSHIER_J2000 (2451545.0)
96
97 #define MOSHIER_BEGIN (1221000.5 - MJD0) /* directly from above */
98 #define MOSHIER_END (2798525.5 - MJD0) /* 2950.0; from libration table */
99
100
101 static double Args[NARGS];
102 static double LP_equinox;
103 static double NF_arcsec;
104 static double Ea_arcsec;
105 static double pA_precession;
106
107
108 /* This storage ought to be allocated dynamically. */
109 double ss[NARGS][30];
110 double cc[NARGS][30];
111
112 /* Time, in units of 10,000 Julian years from JED 2451545.0. */
113 static double T;
114
115 /* Conversion factors between degrees and radians */
116 #define DTR 1.7453292519943295769e-2
117 #define RTD 5.7295779513082320877e1
118 #define RTS 2.0626480624709635516e5 /* arc seconds per radian */
119 #define STR 4.8481368110953599359e-6 /* radians per arc second */
120 #define AUKM 1.4959787e8
121
122
123 static long lrtabl[] = {
124 175667, 66453, 5249, -42,
125 20057, 403, -2360, 6148,
126 -7644, 24646, -1273, 9127,
127 -1395, 1958,
128 232, -289,
129 -97, 553, 69, 130,
130 -80, 6,
131 129, -868, 26, -89,
132 1042, 1172, 194, -112,
133 -47433, -241666, 224626, -103752,
134 63419, 127606,
135 2294, -691, -1827, -1254,
136 -1, -119,
137 1057, 324,
138 505, -195, 254, -641,
139 -36, 1008, -1082, -3,
140 -87, 122,
141 161, 11,
142 2, -106,
143 29, -123,
144 -32, 41,
145 -524, -35,
146 133, -595,
147 225, 837, -108, -191,
148 -2294, 841, -340, -394,
149 -351, -1039, 238, -108,
150 -66, 21,
151 1405, 869, 520, 2776,
152 -174, 71,
153 425, 652, -1260, -80,
154 249, 77,
155 -192, -17,
156 -97, 134,
157 -7, -54,
158 -802, -7436, -2824, 70869,
159 -35, 2481,
160 1865, 1749, -2166, 2415,
161 33, -183,
162 -835, 283,
163 27, -45,
164 56, 235,
165 2, 718,
166 -1206, 275, -87, -158,
167 -7, -2534, 0, 10774,
168 1, -324,
169 -208, 821,
170 281, 1340, -797, 440,
171 224, 72,
172 -65, -5,
173 -7, -44,
174 -48, 66,
175 -151, -40,
176 -41, -45,
177 76, -108,
178 -18, 1202, 0, -2501,
179 1438, -595, 900, 3040,
180 -3435, -5,
181 -100, -26,
182 0, -13714,
183 -183, 68,
184 453, -83,
185 -228, 325,
186 97, 13,
187 2, 105,
188 -61, 257,
189 0, 57,
190 88, -11,
191 -1, -8220,
192 0, 275,
193 -43, -10,
194 -199, 105,
195 1, -5849, 2, 24887,
196 -128, 48,
197 712, 970, -1407, 845,
198 -266, 378,
199 311, 1526, -1751, 27,
200 0, -185858,
201 133, 6383,
202 -108, 25,
203 -7, 1944,
204 5, 390,
205 -11, 31,
206 277, -384, 158, 72,
207 -81, -41, -13, -111,
208 -2332, -65804, -698, 505812,
209 34, 1676716, -72, -6664384,
210 154, -57, 52, 95,
211 -4, -5,
212 -7, 37,
213 -63, -32,
214 4, 3349, 1, -14370,
215 16, -83,
216 0, -401,
217 13, 3013,
218 48, -20,
219 0, 250,
220 51, -79,
221 -7, -146,
222 148, 9,
223 0, -64,
224 -17, -59,
225 -67, -492,
226 -2, 2116601,
227 -12, -1848,
228 8, -436,
229 -6, 324, 0, -1363,
230 -163, 9,
231 0, -74,
232 63, 8167, -29, 37587,
233 -22, -74501,
234 -71, 497,
235 -1, 551747,
236 -87, -22,
237 0, -51,
238 -1, -463,
239 0, -444,
240 3, 89,
241 15, -84,
242 -36, -6829, -5, -21663,
243 0, 86058,
244 0, -298,
245 -2, 751, -2, -1015,
246 0, 69,
247 1, -4989, 0, 21458,
248 0, -330,
249 0, -7,
250 0, -226,
251 0, -1407, 0, 2942,
252 0, 66,
253 0, 667,
254 0, -155,
255 0, 105,
256 0, -107,
257 0, -74,
258 0, -52,
259 0, 91,
260 0, 59,
261 0, 235,
262 -1, -1819, 0, 2470,
263 71, 13,
264 0, 1026,
265 14, -54,
266 0, -174,
267 -121, -19,
268 0, -200,
269 0, 3008,
270 -16, -8043, -10, -37136,
271 -3, 73724,
272 -157, -5,
273 0, -854,
274 8, 147,
275 -13, -893,
276 0, 11869,
277 -23, -172,
278 89, 14,
279 -1, 872, 0, -3744,
280 11, 1606,
281 0, -559,
282 -1, -2530,
283 0, 454,
284 0, -193,
285 -60, -10,
286 -82, -13,
287 -75, 6,
288 36, 81,
289 354, -162836, 148, -516569,
290 4, 2054441,
291 4, -94,
292 39, 38,
293 61, -30,
294 2, 121,
295 -11, 590,
296 62, 2108,
297 0, -12242,
298 -476, -42,
299 -84, 113,
300 -394, 236,
301 0, 276,
302 -49, 31,
303 0, 86,
304 1, -1313,
305 1, 69,
306 -60, 88,
307 -46, 18,
308 0, -63818,
309 14, -93,
310 113, 547, -618, 17,
311 -7, 12290, -1, -25679,
312 0, 92,
313 -115, 50,
314 -48, 233,
315 4, 1311, 1, -5567,
316 3, 1251,
317 29, 548,
318 -244, 257,
319 -2, 1825,
320 42, 637,
321 -46, 68,
322 -62, 8,
323 3, 110,
324 445, -100, -316, -202,
325 2925, -621, 763, 1495,
326 -169, -184, 20, -76,
327 -475, -138, 8, -141,
328 -197, 1351, -1284, 422,
329 -129, 1879, -102, 8382,
330 -9, 45864958,
331 -215, 1350, -1285, 422,
332 -481, -136, 8, -140,
333 40, -53,
334 2622, -543, 700, 1406,
335 402, -95, -318, -194,
336 122, 13,
337 -30, 147,
338 -121, -902,
339 61, -23,
340 -63, 7,
341 69, 479,
342 -224, 228,
343 -7, 500,
344 0, -429,
345 -42, 193,
346 -92, 37,
347 67, 5,
348 -350, -31,
349 0, 67,
350 -55, -5,
351 0, 47,
352 -36, 53,
353 5, 561,
354 0, -126,
355 0, 871,
356 -52, 4,
357 -201, 116922, -22, 371352,
358 -12, -1473285,
359 0, 87,
360 -164, 84,
361 -3, 422,
362 30, 1434,
363 -26, 38,
364 2, -1249943,
365 -404, -34,
366 -57, 79,
367 5, 509,
368 1, 131,
369 -344, 168,
370 112, 22540, 30, 71218,
371 18, -283983,
372 0, -851,
373 0, -1538,
374 0, 1360,
375 -12, 51,
376 -48, 68,
377 88, -20,
378 1, 63,
379 0, -568,
380 303, 25,
381 0, -122,
382 87, 586, -606, -14,
383 0, -100,
384 -85, 8,
385 -165, 54,
386 -45, 140,
387 0, -54,
388 4, -831, 1, 3495,
389 31, 116,
390 -46, -11,
391 -371, 190,
392 -507, 399,
393 -2, 57,
394 -60, 36,
395 -198, -1174, -613, 4988,
396 -87, -4,
397 141, 560, -276, 187,
398 1876, 1379, 778, 4386,
399 24, -15,
400 167, -774,
401 -71, -9,
402 -62, 90,
403 98, 580, -663, -7,
404 34, -112,
405 57, 15,
406 -355, -214,
407 -3240, -13605, 12229, -5723,
408 3496, 7063,
409 33, -51,
410 1908, 1160, -226, 715,
411 964, 1170, -1264, 623,
412 14071, 5280, 5614, 3026,
413 488, 1576, -2, 226395859,
414 824, 1106, -1287, 617,
415 1917, 1156, -214, 718,
416 90, -97,
417 12078, -2366, 3282, 6668,
418 -219, 9179, 593, 2015,
419 -282, -186,
420 57, 25,
421 31, -102,
422 -77, -4,
423 -268, -341, -7, -45,
424 -3, 74,
425 15, -615,
426 -88, -7,
427 234, -353,
428 1, -119,
429 -163, -1159, -601, 4969,
430 22, -58,
431 -17, -11434,
432 17, 54,
433 348, 348, -460, 434,
434 -371, 175,
435 -11, -204,
436 4, -6440,
437 -5, -53,
438 -4, -14388, -37, -45231,
439 -7, 179562,
440 -44, 136,
441 -160, 49,
442 -101, 81,
443 -1, -188,
444 0, 2,
445 -4, 12124, -11, -25217,
446 71, 543, -557, -14,
447 -75, 526,
448 0, 395274,
449 -233, -16,
450 93, -20,
451 -43, 61,
452 0, -1275,
453 0, -824,
454 1, -415, 0, 1762,
455 -261, 131,
456 -45, 64,
457 -297, -25,
458 0, -17533,
459 -6, -56,
460 21, 1100,
461 1, 327,
462 1, 66,
463 23, -217,
464 -83, -7,
465 83, 86847, 49, 275754,
466 -4, -1093857,
467 -46, 2,
468 0, -24,
469 0, -419,
470 0, -5833,
471 1, 506,
472 0, -827,
473 -1, -377,
474 -11, -78,
475 0, 131945,
476 -2, -334,
477 1, -75,
478 0, -72,
479 0, -213,
480 -6, 5564, -2, -11618,
481 0, 1790,
482 0, -131,
483 0, 6,
484 0, -76,
485 0, -130,
486 0, -1115, 0, 4783,
487 0, -195,
488 0, -627,
489 0, -55,
490 0, -83,
491 0, 163,
492 0, -54,
493 0, 82,
494 0, 149,
495 0, -754, 0, 1578,
496 0, 138,
497 0, 68,
498 2, -2506, 0, 3399,
499 0, -125,
500 86, 16,
501 0, -6350, 0, 27316,
502 18, -63,
503 0, -169,
504 -1, 46,
505 -136, -21,
506 0, -239,
507 -30, -8788, -15, -40549,
508 -4, 80514,
509 -46, -8,
510 -168, -6,
511 -1, 536, 0, -2314,
512 9, 148,
513 -13, -842,
514 -1, 307713,
515 -23, -175,
516 95, 15,
517 0, -297,
518 11, 1341,
519 0, -106,
520 0, 5,
521 -4, 68,
522 -114, 10,
523 32, 75,
524 159, -130487, 98, -413967,
525 2, 1647339,
526 -4, -85,
527 100, -46,
528 2, 95,
529 -11, 461,
530 51, 1647,
531 0, -32090,
532 -375, -33,
533 -65, 86,
534 -300, 180,
535 0, 836, 0, -3576,
536 0, -222,
537 0, -993,
538 -41, 60,
539 0, -4537,
540 -431, -34,
541 2, 927, 0, -1931,
542 -79, 33,
543 -31, 144,
544 -1, 284, 0, -1207,
545 0, 88,
546 -11, 315,
547 -178, 177,
548 -1, 144,
549 -58, 986,
550 11, 86,
551 -228, -110,
552 2636, -494, 718, 1474,
553 28, -35,
554 -24, 782, -797, 277,
555 2142, -1231, 856, 1853,
556 74, 10797, 0, 23699298,
557 -21, 786, -796, 277,
558 27, -34,
559 2615, -494, 712, 1461,
560 -226, -109,
561 -11, 663,
562 0, -123,
563 -169, 157,
564 -54, 266,
565 0, -76,
566 1, -634, 0, 2738,
567 -25, 106,
568 -63, 24,
569 0, -372,
570 -221, -24,
571 0, -5356,
572 0, -219,
573 0, 91,
574 -28, 7684, -6, 24391,
575 -1, -96795,
576 -77, 43,
577 2, 95,
578 -47, -3,
579 0, -84530,
580 2, 310,
581 1, 88,
582 111, 19331, 32, 61306,
583 4, -243595,
584 0, 770,
585 0, -103,
586 0, 160,
587 0, 356,
588 0, 236,
589 -41, 354,
590 39, 303,
591 12, -56,
592 873, -143, 238, 482,
593 -28, 35,
594 -93, 31,
595 -3, 7690211,
596 -91, 33,
597 -34, 43,
598 824, -130, 226, 450,
599 -39, 341,
600 -1, -687,
601 0, -303,
602 11, -2935, 1, 12618,
603 121, 924, 9, -1836,
604 -268, -1144, -678, 3685,
605 -69, -261,
606 0, -4115951,
607 -69, -261,
608 5, -151,
609 0, -88,
610 0, 91,
611 0, 187,
612 0, -1281,
613 1, 77,
614 1, 6059, 3, 19238,
615 0, -76305,
616 0, -90,
617 0, -238,
618 0, -962, 0, 4133,
619 0, 96,
620 0, 9483,
621 0, 85,
622 0, -688,
623 0, -5607,
624 0, 55,
625 0, -752,
626 0, 71,
627 0, 303,
628 0, -288,
629 0, 57,
630 0, 45,
631 0, 189,
632 0, 401,
633 0, -1474, 0, 3087,
634 0, -71,
635 0, 2925,
636 0, -75,
637 0, 359,
638 0, 55,
639 1, -10155, 0, 43735,
640 0, -572,
641 0, -49,
642 0, -660,
643 0, -3591, 0, 7516,
644 0, 668,
645 -1, -53,
646 -2, 384259,
647 0, -163,
648 0, -93,
649 1, 112,
650 -95, -11528, -22, -36505,
651 -1, 145308,
652 5, 145,
653 0, 4047,
654 1, 1483, 0, -6352,
655 0, 991, 0, -4262,
656 0, -93,
657 0, -334,
658 0, -160,
659 0, -153,
660 -10, 127,
661 51, 185,
662 -77, 18,
663 56, 1217, 6, 1919574,
664 -74, 17,
665 50, 180,
666 -5, 93,
667 0, -104,
668 0, -58,
669 -3, -353, -1, 1499,
670 0, -229,
671 -15, 86,
672 0, -93657,
673 0, 1561, 0, -6693,
674 0, -5839,
675 1, 6791, 0, -29143,
676 1, -701, 0, 3015,
677 0, 2543,
678 0, 693,
679 -1, 361233,
680 0, -50,
681 0, 946,
682 -1, -140,
683 -70, 407,
684 0, -450995,
685 0, -368,
686 0, 54,
687 0, -802,
688 0, -96,
689 0, 1274, 0, -5459,
690 0, -614, 0, 2633,
691 0, 685,
692 0, -915,
693 0, -85,
694 0, 88,
695 0, 106,
696 0, 928,
697 0, -726, 0, 1523,
698 0, 5715,
699 0, -4338, 0, 18706,
700 0, -135,
701 0, -132,
702 0, -158,
703 0, -98,
704 0, 680,
705 -1, 138968,
706 0, -192,
707 0, -1698,
708 0, -2734, 0, 11769,
709 0, 4,
710 0, 673, 0, -2891,
711 0, 889, 0, -3821,
712 0, 121,
713 -1, 143783,
714 0, 231,
715 -9, 51,
716 0, -57413,
717 0, -483,
718 0, -407,
719 0, 676, 0, -2902,
720 0, 531,
721 0, 445,
722 0, 672,
723 0, 19336,
724 0, 70,
725 0, -39976,
726 0, -68,
727 0, 4203,
728 0, -406,
729 0, 446,
730 0, -108,
731 0, 79,
732 0, 84,
733 0, 734,
734 0, 255,
735 0, 3944,
736 0, -655, 0, 2825,
737 0, -109,
738 0, -234,
739 0, 57,
740 0, 19773,
741 0, -2013,
742 0, 958,
743 0, -521,
744 0, -757,
745 0, 10594,
746 0, -9901,
747 0, 199,
748 0, -275,
749 0, 64,
750 0, 54,
751 0, 165,
752 0, 1110,
753 0, -3286,
754 0, 909,
755 0, 54,
756 0, 87,
757 0, 258,
758 0, 1261,
759 0, -51,
760 0, 336,
761 0, -114,
762 0, 2185,
763 0, -850,
764 0, 75,
765 0, -69,
766 0, -103,
767 0, 776,
768 0, -1238,
769 0, 137,
770 0, 67,
771 0, -260,
772 0, 130,
773 0, 49,
774 0, 228,
775 0, 215,
776 0, -178,
777 0, 57,
778 0, -133,
779 };
780 static long lrtabb[] = {-1};
781 static long lrtabr[] = {
782 -5422, -2120, 1077, 772,
783 39, 75, 3, 10,
784 -468, -326, -113, -78,
785 -4, -2,
786 1, 3,
787 29, 24, 4, 2,
788 1, 0,
789 -9, 7, -2, 0,
790 -32, -13, -3, -3,
791 233, 126, 89, 77,
792 -33, 16,
793 3, -3, 0, -1,
794 2, 0,
795 0, 1,
796 4, 9, 1, 1,
797 16, -1, 0, 18,
798 3, 2,
799 0, 0,
800 0, 0,
801 0, 0,
802 0, 0,
803 0, -1,
804 -22, -5,
805 10, 3, 1, 1,
806 -15, 7, -2, 1,
807 -8, -11, -1, -2,
808 -1, 1,
809 46, -58, 126, -23,
810 4, 8,
811 35, 8, 10, -17,
812 0, 0,
813 0, 0,
814 -10, -7,
815 0, 0,
816 -23, 3, 151, 10,
817 -327, 0,
818 4, -5, 6, 5,
819 1, 0,
820 -1, -3,
821 0, 0,
822 0, 1,
823 -185, 0,
824 -3, -24, -5, -2,
825 -1062, 3, 4560, 0,
826 -3, 0,
827 4, 1,
828 8, -1, 2, 4,
829 0, 1,
830 0, -1,
831 0, 0,
832 -1, 0,
833 0, 1,
834 0, 0,
835 -1, -1,
836 277, 3, -583, 1,
837 -1, 4, -32, 7,
838 0, -34,
839 1, -1,
840 -23685, 0,
841 -1, -2,
842 -1, -7,
843 -5, -4,
844 0, 2,
845 -2, 0,
846 -5, -1,
847 35, 0,
848 0, 2,
849 202, 0,
850 180, 0,
851 0, -1,
852 -3, -6,
853 -193, 0, 770, -1,
854 -2, -4,
855 -32, 23, -28, -46,
856 -13, -9,
857 -54, 10, -1, -61,
858 -44895, 0,
859 -230, 5,
860 -1, -4,
861 -71, 0,
862 -15, 0,
863 1, 0,
864 15, 11, -3, 6,
865 2, -3, 4, -1,
866 2576, -138, -19881, -47,
867 -65906, -1, 261925, -4,
868 -2, -7, 4, -2,
869 0, 0,
870 -1, 0,
871 1, -3,
872 172, -2, -727, 0,
873 4, 1,
874 324, 0,
875 -139, 1,
876 1, 3,
877 -276, 0,
878 5, 3,
879 9, 0,
880 -1, 10,
881 -37, 0,
882 5, -1,
883 76, -10,
884 1318810, 1,
885 12, -1,
886 -38, 1,
887 -141, 0, 611, 0,
888 0, -11,
889 4, 0,
890 -627, 2, -2882, -3,
891 5711, -2,
892 -48, -7,
893 55294, 0,
894 2, -7,
895 31, 0,
896 34, 0,
897 -259, 0,
898 -55, 2,
899 6, 3,
900 -4273, 20, -13554, 3,
901 53878, 0,
902 -46, 0,
903 -85, 0, 114, 0,
904 -45, 0,
905 -818, 0, 3520, 0,
906 34, 0,
907 -157, 0,
908 29, 0,
909 -878, 0, 1838, 0,
910 -428, 0,
911 161, 0,
912 24, 0,
913 65, 0,
914 19, 0,
915 15, 0,
916 12, 0,
917 -26, 0,
918 -14, 0,
919 -149, 0,
920 584, 0, -793, 0,
921 4, -23,
922 -238, 0,
923 -18, -5,
924 45, 0,
925 -7, 42,
926 79, 0,
927 -1723, 0,
928 2895, -6, 13362, -4,
929 -26525, -1,
930 -2, 57,
931 291, 0,
932 52, -3,
933 -327, 5,
934 -2755, 0,
935 -63, 9,
936 5, -33,
937 -261, -1, 1122, 0,
938 621, -4,
939 -227, 0,
940 1077, 0,
941 -167, 0,
942 85, 0,
943 -4, 23,
944 -5, 32,
945 3, 30,
946 -32, 14,
947 64607, 141, 204958, 59,
948 -815115, 2,
949 -37, -1,
950 15, -15,
951 12, 24,
952 48, -1,
953 235, 4,
954 843, -25,
955 4621, 0,
956 -17, 191,
957 45, 34,
958 95, 159,
959 -132, 0,
960 13, 20,
961 32, 0,
962 -540, 0,
963 29, 0,
964 37, 25,
965 8, 19,
966 22127, 0,
967 -35, -5,
968 232, -48, 7, 262,
969 5428, 3, -11342, 1,
970 -45, 0,
971 -21, -49,
972 -100, -21,
973 -626, 1, 2665, 0,
974 532, -2,
975 235, -12,
976 -111, -105,
977 774, 1,
978 -283, 17,
979 29, 20,
980 3, 27,
981 47, -2,
982 -43, -192, -87, 136,
983 -269, -1264, 646, -330,
984 -79, 73, -33, -9,
985 60, -205, 61, 4,
986 -584, -85, -182, -555,
987 -780, -57, -3488, -45,
988 -19818328, -4,
989 583, 93, 182, 555,
990 -59, 208, -60, -4,
991 23, 17,
992 235, 1133, -608, 302,
993 41, 174, 84, -137,
994 6, -53,
995 63, 13,
996 -392, 52,
997 -10, -27,
998 -3, -27,
999 199, -31,
1000 99, 97,
1001 -218, -3,
1002 209, 0,
1003 84, 18,
1004 16, 40,
1005 2, -30,
1006 14, -154,
1007 30, 0,
1008 -2, 24,
1009 -108, 0,
1010 -24, -16,
1011 262, -2,
1012 55, 0,
1013 -304, 0,
1014 2, 25,
1015 55112, 95, 175036, 11,
1016 -694477, 5,
1017 41, 0,
1018 -38, -76,
1019 199, 1,
1020 679, -14,
1021 -17, -12,
1022 582619, 1,
1023 -16, 191,
1024 38, 27,
1025 -234, 2,
1026 -60, 0,
1027 80, 163,
1028 -10296, 48, -32526, 13,
1029 129703, 8,
1030 -1366, 0,
1031 -741, 0,
1032 -646, 0,
1033 25, 6,
1034 33, 23,
1035 10, 43,
1036 -31, 0,
1037 -6, 0,
1038 -12, 147,
1039 59, 0,
1040 287, -42, -7, 297,
1041 -59, 0,
1042 -4, -42,
1043 -27, -81,
1044 -69, -22,
1045 27, 0,
1046 -423, -2, 1779, -1,
1047 -57, 15,
1048 5, -23,
1049 94, 182,
1050 -197, -250,
1051 24, 1,
1052 -18, -30,
1053 581, -98, -2473, -303,
1054 -2, 43,
1055 -277, 70, -92, -136,
1056 -681, 925, -2165, 384,
1057 -8, -12,
1058 382, 82,
1059 -4, 35,
1060 -45, -31,
1061 -286, 48, 3, -328,
1062 -55, -17,
1063 8, -28,
1064 -106, 175,
1065 -6735, 1601, -2832, -6052,
1066 3495, -1730,
1067 -25, -17,
1068 -574, 944, -354, -112,
1069 -579, 476, -308, -625,
1070 -2411, 7074, -1529, 2828,
1071 -1335, 247,-112000844, -1,
1072 545, -409, 305, 637,
1073 572, -950, 356, 106,
1074 48, 44,
1075 1170, 5974, -3298, 1624,
1076 -4538, -106, -996, 294,
1077 92, -139,
1078 -12, 28,
1079 50, 16,
1080 2, -38,
1081 169, -133, 22, -3,
1082 38, 1,
1083 305, 7,
1084 4, -44,
1085 175, 116,
1086 59, 1,
1087 -573, 81, 2453, 297,
1088 29, 11,
1089 5674, -8,
1090 -27, 9,
1091 173, -173, 215, 228,
1092 -87, -184,
1093 102, -5,
1094 3206, 2,
1095 -53, 2,
1096 7159, -7, 22505, -19,
1097 -89344, -3,
1098 67, 22,
1099 24, 79,
1100 -40, -50,
1101 94, 0,
1102 186, 0,
1103 -6063, 0, 12612, -5,
1104 -271, 35, 7, -278,
1105 -479, -74,
1106 426754, 0,
1107 8, -116,
1108 -10, -47,
1109 -31, -22,
1110 645, 0,
1111 426, 0,
1112 -213, 0, 903, 0,
1113 -67, -133,
1114 -33, -23,
1115 13, -152,
1116 -9316, 0,
1117 29, -3,
1118 -564, 11,
1119 -167, 0,
1120 -34, 0,
1121 114, 12,
1122 4, -44,
1123 -44561, 42, -141493, 25,
1124 561256, -2,
1125 -1, -24,
1126 -261, 0,
1127 211, 0,
1128 -4263, 0,
1129 -262, 1,
1130 1842, 0,
1131 202, 0,
1132 41, -6,
1133 77165, 0,
1134 176, -1,
1135 39, 1,
1136 -24, 0,
1137 118, 0,
1138 -2991, -4, 6245, -1,
1139 46886, 0,
1140 -75, 0,
1141 -100, 0,
1142 40, 0,
1143 75, 0,
1144 -618, 0, 2652, 0,
1145 112, 0,
1146 1780, 0,
1147 30, 0,
1148 49, 0,
1149 86, 0,
1150 33, 0,
1151 -30, 0,
1152 -95, 0,
1153 277, 0, -580, 0,
1154 -35, 0,
1155 -319, 0,
1156 1622, 1, -2201, 0,
1157 79, 0,
1158 10, -57,
1159 2363, 0, -10162, 0,
1160 -41, -12,
1161 62, 0,
1162 30, 1,
1163 -14, 89,
1164 -2721, 0,
1165 5780, -19, 26674, -10,
1166 -52964, -2,
1167 -5, 30,
1168 -4, 111,
1169 -317, -1, 1369, 0,
1170 93, -6,
1171 -564, 9,
1172 -115913, 0,
1173 -113, 15,
1174 10, -62,
1175 99, 0,
1176 891, -7,
1177 36, 0,
1178 108, 0,
1179 -42, -2,
1180 7, 75,
1181 -50, 21,
1182 86822, 104, 275441, 65,
1183 -1096109, 1,
1184 -56, 3,
1185 31, 66,
1186 63, -1,
1187 307, 7,
1188 1097, -34,
1189 17453, 0,
1190 -22, 250,
1191 57, 43,
1192 120, 200,
1193 -297, 0, 1269, 0,
1194 166, 0,
1195 -662, 0,
1196 40, 28,
1197 1521, 0,
1198 -23, 288,
1199 351, -2, -729, 0,
1200 -22, -52,
1201 -96, -21,
1202 -139, -1, 589, 0,
1203 35, 0,
1204 210, 7,
1205 -118, -119,
1206 62, 0,
1207 -583, -26,
1208 -42, 5,
1209 -73, 152,
1210 -330, -1759, 983, -479,
1211 -23, -19,
1212 -522, -15, -185, -533,
1213 739, 1559, -1300, 614,
1214 -7332, 52, -15836758, 0,
1215 524, 16, 185, 532,
1216 23, 18,
1217 330, 1751, -978, 476,
1218 73, -151,
1219 519, 18,
1220 38, 0,
1221 105, 113,
1222 -178, -37,
1223 26, 0,
1224 262, 1, -1139, 0,
1225 71, 17,
1226 16, 42,
1227 151, 0,
1228 16, -148,
1229 4147, 0,
1230 149, 0,
1231 -30, 0,
1232 2980, 9, 9454, 2,
1233 -37519, 0,
1234 -28, -49,
1235 37, -1,
1236 2, -31,
1237 33870, 0,
1238 -208, 1,
1239 -59, 1,
1240 -13105, 68, -41564, 21,
1241 165148, 3,
1242 -1022, 0,
1243 -40, 0,
1244 -132, 0,
1245 -228, 0,
1246 95, 0,
1247 -138, -16,
1248 -126, 16,
1249 24, 5,
1250 -57, -346, 191, -94,
1251 -14, -11,
1252 -12, -37,
1253 -3053364, -1,
1254 13, 36,
1255 17, 13,
1256 51, 327, -179, 90,
1257 138, 16,
1258 233, 0,
1259 62, 0,
1260 1164, 0, -5000, 0,
1261 -407, 117, 770, 9,
1262 -4, 1, 21, 2,
1263 1, 0,
1264 -16869, 0,
1265 -1, 0,
1266 1, 0,
1267 35, 0,
1268 -78, 0,
1269 78, 0,
1270 -533, 0,
1271 -31, 1,
1272 -2448, -6, -7768, -1,
1273 30812, 0,
1274 37, 0,
1275 -227, 0,
1276 197, 0, -846, 0,
1277 -77, 0,
1278 4171, 0,
1279 -67, 0,
1280 287, 0,
1281 2532, 0,
1282 -19, 0,
1283 -40, 0,
1284 -56, 0,
1285 128, 0,
1286 83, 0,
1287 -45, 0,
1288 -36, 0,
1289 -92, 0,
1290 -134, 0,
1291 714, 0, -1495, 0,
1292 32, 0,
1293 -981, 0,
1294 15, 0,
1295 -166, 0,
1296 -59, 0,
1297 4923, 0, -21203, 0,
1298 246, 0,
1299 15, 0,
1300 104, 0,
1301 1683, 0, -3523, 0,
1302 -865, 0,
1303 -25, 1,
1304 -186329, -1,
1305 10, 0,
1306 50, 0,
1307 53, 0,
1308 5455, -45, 17271, -10,
1309 -68747, 0,
1310 69, -2,
1311 -7604, 0,
1312 -724, 1, 3101, 0,
1313 -46, 0, 200, 0,
1314 -44, 0,
1315 97, 0,
1316 -53, 0,
1317 62, 0,
1318 -54, -4,
1319 88, -24,
1320 -9, -36,
1321 -581, 27, -914711, 3,
1322 8, 35,
1323 -86, 24,
1324 51, 3,
1325 48, 0,
1326 26, 0,
1327 133, 1, -577, 0,
1328 105, 0,
1329 -3, -1,
1330 3194, 0,
1331 528, 0, -2263, 0,
1332 2028, 0,
1333 -3266, 1, 14016, 0,
1334 10, 0, -41, 0,
1335 -100, 0,
1336 -32, 0,
1337 -124348, 0,
1338 16, 0,
1339 -325, 0,
1340 50, -1,
1341 1, 0,
1342 -553, 0,
1343 0, 0,
1344 0, 0,
1345 2, 0,
1346 -34, 0,
1347 -444, 0, 1902, 0,
1348 9, 0, -37, 0,
1349 254, 0,
1350 156, 0,
1351 -2, 0,
1352 -35, 0,
1353 -48, 0,
1354 -368, 0,
1355 327, 0, -686, 0,
1356 -2263, 0,
1357 1952, 0, -8418, 0,
1358 -13, 0,
1359 52, 0,
1360 9, 0,
1361 21, 0,
1362 -261, 0,
1363 -62404, 0,
1364 0, 0,
1365 79, 0,
1366 1056, 0, -4547, 0,
1367 -351, 0,
1368 -305, 0, 1310, 0,
1369 -1, 0, 6, 0,
1370 0, 0,
1371 -55953, 0,
1372 -80, 0,
1373 0, 0,
1374 168, 0,
1375 -147, 0,
1376 127, 0,
1377 -265, 0, 1138, 0,
1378 -1, 0,
1379 -9, 0,
1380 -8, 0,
1381 -5984, 0,
1382 -22, 0,
1383 -5, 0,
1384 0, 0,
1385 0, 0,
1386 127, 0,
1387 -2, 0,
1388 10, 0,
1389 -31, 0,
1390 -29, 0,
1391 -286, 0,
1392 -98, 0,
1393 -1535, 0,
1394 252, 0, -1087, 0,
1395 43, 0,
1396 4, 0,
1397 -19, 0,
1398 -7620, 0,
1399 29, 0,
1400 -322, 0,
1401 203, 0,
1402 0, 0,
1403 -3587, 0,
1404 10, 0,
1405 0, 0,
1406 94, 0,
1407 0, 0,
1408 -1, 0,
1409 -1, 0,
1410 -315, 0,
1411 1, 0,
1412 0, 0,
1413 0, 0,
1414 -30, 0,
1415 -94, 0,
1416 -460, 0,
1417 1, 0,
1418 -114, 0,
1419 0, 0,
1420 -746, 0,
1421 4, 0,
1422 -23, 0,
1423 24, 0,
1424 0, 0,
1425 -237, 0,
1426 1, 0,
1427 0, 0,
1428 -18, 0,
1429 0, 0,
1430 0, 0,
1431 -16, 0,
1432 -76, 0,
1433 -67, 0,
1434 0, 0,
1435 -16, 0,
1436 0, 0,
1437 };
1438 static CHAR lrargs[] = {
1439 0, 3,
1440 3, 4, 3, -8, 4, 3, 5, 1,
1441 2, 2, 5, -5, 6, 2,
1442 5, -1, 10, 2, 13, -1, 11, 3, 3, -7, 4, 0,
1443 3, 1, 13, -1, 11, 2, 5, 1,
1444 2, 4, 5,-10, 6, 0,
1445 4, 2, 10, -2, 13, 14, 3,-23, 4, 1,
1446 3, 3, 2, -7, 3, 4, 4, 1,
1447 3, -1, 13, 18, 2,-16, 3, 2,
1448 2, 8, 2,-13, 3, 1,
1449 5, 2, 10, -2, 13, 2, 3, -3, 5, 1, 6, 0,
1450 3, -1, 13, 26, 2,-29, 3, 0,
1451 3, 1, 10, -1, 11, 2, 4, 1,
1452 4, 1, 10, -1, 13, 3, 2, -4, 3, 1,
1453 4, 1, 10, -1, 13, 3, 3, -4, 4, 0,
1454 3, -1, 10, 15, 2,-12, 3, 0,
1455 4, 2, 10, -3, 13, 24, 2,-24, 3, 0,
1456 3, -1, 10, 23, 2,-25, 3, 0,
1457 4, 1, 10, -1, 11, 1, 3, 1, 6, 0,
1458 4, 2, 10, -2, 11, 5, 2, -6, 3, 0,
1459 4, 2, 10, -2, 13, 6, 2, -8, 3, 0,
1460 4, -2, 10, 1, 13, 12, 2, -8, 3, 1,
1461 5, -1, 10, 1, 13, -1, 11, 20, 2,-20, 3, 1,
1462 4, -2, 10, 1, 13, 3, 1, -1, 3, 1,
1463 5, 2, 10, -2, 13, 2, 3, -5, 5, 5, 6, 0,
1464 4, 2, 10, -2, 13, 2, 3, -3, 5, 1,
1465 4, 2, 10, -2, 13, 6, 3, -8, 4, 0,
1466 4, -2, 10, 1, 13, 20, 2,-21, 3, 1,
1467 4, 1, 10, -1, 11, 1, 3, 1, 5, 0,
1468 1, 1, 6, 0,
1469 4, 2, 10, -2, 13, 5, 3, -6, 4, 0,
1470 3, 3, 2, -5, 3, 2, 5, 0,
1471 2, -1, 11, 1, 14, 1,
1472 4, 2, 10, -2, 13, 2, 3, -2, 5, 0,
1473 2, 1, 3, -2, 4, 1,
1474 4, 1, 10, -1, 11, 5, 2, -7, 3, 0,
1475 1, 1, 5, 0,
1476 2, 7, 3,-13, 4, 0,
1477 4, -2, 10, 1, 13, 15, 2,-13, 3, 0,
1478 4, 2, 10, -2, 13, 3, 2, -3, 3, 0,
1479 2, -2, 11, 2, 14, 1,
1480 3, 1, 10, 1, 12, -1, 13, 1,
1481 3, -1, 13, 21, 2,-21, 3, 0,
1482 2, 3, 2, -5, 3, 0,
1483 2, 2, 3, -4, 4, 1,
1484 2, 5, 2, -8, 3, 0,
1485 3, -1, 13, 23, 2,-24, 3, 0,
1486 2, 6, 3,-11, 4, 0,
1487 1, 2, 5, 0,
1488 2, 3, 3, -6, 4, 0,
1489 2, 5, 3, -9, 4, 0,
1490 4, 1, 10, -1, 11, 1, 3, -2, 5, 0,
1491 3, 2, 10, 2, 12, -2, 13, 1,
1492 2, 2, 2, -3, 3, 2,
1493 2, 4, 3, -7, 4, 0,
1494 2, 2, 13, -2, 11, 0,
1495 2, 3, 3, -5, 4, 0,
1496 2, 1, 2, -2, 3, 0,
1497 2, 2, 3, -3, 4, 0,
1498 4, 1, 10, -1, 11, 4, 2, -5, 3, 0,
1499 2, 1, 3, -1, 4, 0,
1500 2, 4, 2, -6, 3, 0,
1501 4, 2, 10, -2, 13, 2, 2, -2, 3, 0,
1502 3, 1, 10, -1, 11, 1, 2, 0,
1503 2, 1, 2, -1, 3, 0,
1504 3, 1, 12, 2, 13, -2, 11, 0,
1505 2, 5, 3, -8, 4, 0,
1506 2, 1, 3, -3, 5, 0,
1507 3, 2, 10, 1, 12, -2, 13, 1,
1508 2, 4, 3, -6, 4, 0,
1509 2, 1, 3, -2, 5, 1,
1510 2, 3, 3, -4, 4, 0,
1511 2, 3, 2, -4, 3, 1,
1512 2, 1, 10, -1, 13, 0,
1513 2, 1, 3, -1, 5, 0,
1514 2, 1, 3, -2, 6, 0,
1515 2, 2, 3, -2, 4, 0,
1516 2, 1, 3, -1, 6, 0,
1517 2, 8, 2,-14, 3, 0,
1518 3, 1, 3, 2, 5, -5, 6, 1,
1519 3, 5, 3, -8, 4, 3, 5, 1,
1520 1, 1, 12, 3,
1521 3, 3, 3, -8, 4, 3, 5, 1,
1522 3, 1, 3, -2, 5, 5, 6, 0,
1523 2, 8, 2,-12, 3, 0,
1524 2, 1, 3, 1, 5, 0,
1525 3, 2, 10, 1, 12, -2, 11, 1,
1526 2, 5, 2, -7, 3, 0,
1527 3, 1, 10, 1, 13, -2, 11, 0,
1528 2, 2, 2, -2, 3, 0,
1529 2, 5, 3, -7, 4, 0,
1530 3, 1, 12, -2, 13, 2, 11, 0,
1531 2, 4, 3, -5, 4, 0,
1532 2, 3, 3, -3, 4, 0,
1533 1, 1, 2, 0,
1534 3, 3, 10, 1, 12, -3, 13, 0,
1535 2, 2, 3, -4, 5, 0,
1536 2, 2, 3, -3, 5, 0,
1537 2, 2, 10, -2, 13, 0,
1538 2, 2, 3, -2, 5, 0,
1539 2, 3, 2, -3, 3, 0,
1540 3, 1, 10, -1, 12, -1, 13, 1,
1541 2, 2, 3, -1, 5, 0,
1542 2, 2, 3, -2, 6, 0,
1543 1, 2, 12, 2,
1544 3, -2, 10, 1, 11, 1, 14, 0,
1545 2, 2, 10, -2, 11, 0,
1546 2, 2, 2, -1, 3, 0,
1547 4, -2, 10, 2, 13, 1, 2, -1, 3, 0,
1548 2, 4, 2, -4, 3, 0,
1549 2, 3, 10, -3, 13, 0,
1550 4, -2, 10, 2, 13, 1, 3, -1, 5, 0,
1551 2, 3, 3, -3, 5, 0,
1552 3, 2, 10, -1, 12, -2, 13, 2,
1553 3, 3, 10, -1, 13, -2, 11, 0,
1554 1, 3, 12, 1,
1555 4, -2, 10, 2, 13, 2, 2, -2, 3, 0,
1556 3, 2, 10, -1, 12, -2, 11, 1,
1557 2, 5, 2, -5, 3, 0,
1558 2, 4, 10, -4, 13, 0,
1559 2, 6, 2, -6, 3, 0,
1560 3, 2, 10, -2, 12, -2, 13, 1,
1561 3, 4, 10, -2, 13, -2, 11, 0,
1562 3, 2, 10, -2, 12, -2, 11, 0,
1563 2, 7, 2, -7, 3, 0,
1564 3, 2, 10, -3, 12, -2, 13, 0,
1565 2, 8, 2, -8, 3, 0,
1566 2, 9, 2, -9, 3, 0,
1567 2, 10, 2,-10, 3, 0,
1568 3, 2, 10, -4, 12, -1, 13, 0,
1569 3, 4, 10, -2, 12, -3, 13, 0,
1570 4, 4, 10, -1, 12, -1, 13, -2, 11, 0,
1571 3, 2, 10, -3, 12, -1, 13, 1,
1572 4, -2, 10, 1, 13, 3, 3, -2, 5, 0,
1573 3, 4, 10, -1, 12, -3, 13, 0,
1574 4, -2, 10, 1, 13, 3, 3, -3, 5, 0,
1575 4, 2, 10, -2, 12, 1, 13, -2, 11, 0,
1576 4, -2, 10, 1, 13, 2, 2, -1, 3, 0,
1577 3, 3, 10, -1, 12, -2, 11, 0,
1578 3, 4, 10, -1, 13, -2, 11, 0,
1579 3, 2, 10, -2, 12, -1, 13, 2,
1580 4, -2, 10, 1, 13, 2, 3, -1, 5, 0,
1581 3, 3, 10, -1, 12, -2, 13, 0,
1582 4, -2, 10, 1, 13, 3, 2, -3, 3, 0,
1583 4, -2, 10, 1, 13, 2, 3, -2, 5, 0,
1584 2, 4, 10, -3, 13, 0,
1585 4, -2, 10, 1, 13, 2, 3, -3, 5, 0,
1586 3, -2, 10, 1, 13, 1, 2, 0,
1587 4, 2, 10, -1, 12, 1, 13, -2, 11, 1,
1588 4, -2, 10, 1, 13, 2, 2, -2, 3, 0,
1589 2, 3, 12, -1, 13, 0,
1590 2, 3, 10, -2, 11, 0,
1591 2, 1, 10, -2, 12, 0,
1592 4, 4, 10, 1, 12, -1, 13, -2, 11, 0,
1593 3, -1, 13, 3, 2, -2, 3, 0,
1594 3, -1, 13, 3, 3, -2, 5, 0,
1595 3, -2, 10, 18, 2,-15, 3, 0,
1596 5, 2, 10, -1, 13, 3, 3, -8, 4, 3, 5, 0,
1597 3, 2, 10, -1, 12, -1, 13, 2,
1598 5, -2, 10, 1, 13, 5, 3, -8, 4, 3, 5, 0,
1599 5, -2, 10, 1, 13, 1, 3, 2, 5, -5, 6, 0,
1600 4, 2, 10, -2, 13, 18, 2,-17, 3, 0,
1601 4, -2, 10, 1, 13, 1, 3, -1, 6, 0,
1602 4, -2, 10, 1, 13, 2, 3, -2, 4, 0,
1603 4, -2, 10, 1, 13, 1, 3, -1, 5, 0,
1604 2, 3, 10, -2, 13, 0,
1605 4, -2, 10, 1, 13, 3, 2, -4, 3, 0,
1606 4, -2, 10, 1, 13, 3, 3, -4, 4, 0,
1607 4, -2, 10, 1, 13, 1, 3, -2, 5, 0,
1608 3, 4, 10, 1, 12, -3, 13, 0,
1609 4, -2, 10, 1, 13, 1, 3, -3, 5, 0,
1610 3, -1, 13, 4, 2, -4, 3, 0,
1611 4, -2, 10, 1, 13, 1, 2, -1, 3, 0,
1612 4, -2, 10, 1, 13, 1, 3, -1, 4, 0,
1613 4, -2, 10, 1, 13, 2, 3, -3, 4, 0,
1614 4, -2, 10, 1, 13, 3, 3, -5, 4, 0,
1615 3, 2, 10, 1, 13, -2, 11, 0,
1616 4, -2, 10, -1, 13, 1, 11, 1, 14, 0,
1617 4, -2, 10, 1, 13, 2, 2, -3, 3, 1,
1618 2, 2, 12, -1, 13, 1,
1619 3, 3, 10, 1, 12, -2, 11, 0,
1620 4, 2, 10, -1, 13, 2, 3, -4, 4, 0,
1621 4, 2, 10, -1, 13, 3, 2, -5, 3, 0,
1622 2, 1, 10, -1, 12, 1,
1623 3, -1, 13, 3, 2, -3, 3, 0,
1624 3, -2, 10, 1, 13, 1, 5, 0,
1625 4, 2, 10, -1, 13, 1, 3, -2, 4, 0,
1626 3, -1, 13, 2, 3, -2, 5, 0,
1627 4, 2, 10, -1, 13, -1, 11, 1, 14, 0,
1628 3, -1, 13, 5, 3, -6, 4, 0,
1629 3, -2, 10, 1, 13, 1, 6, 0,
1630 3, -1, 10, 1, 3, -1, 5, 0,
1631 4, -2, 10, 1, 13, 8, 2,-13, 3, 1,
1632 3, -2, 10, 18, 2,-16, 3, 1,
1633 5, -2, 10, 1, 13, 3, 2, -7, 3, 4, 4, 1,
1634 4, 2, 10, -1, 13, 2, 5, -5, 6, 1,
1635 5, 2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 1,
1636 2, 2, 10, -1, 13, 2,
1637 5, -2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 1,
1638 4, -2, 10, 1, 13, 2, 5, -5, 6, 1,
1639 5, 2, 10, -1, 13, 3, 2, -7, 3, 4, 4, 0,
1640 4, 2, 10, -2, 13, 18, 2,-16, 3, 1,
1641 4, 2, 10, -1, 13, 8, 2,-13, 3, 1,
1642 3, -1, 10, 3, 2, -4, 3, 0,
1643 3, -1, 13, 6, 2, -8, 3, 0,
1644 3, -1, 13, 2, 3, -3, 5, 0,
1645 3, -1, 13, 6, 3, -8, 4, 0,
1646 3, 2, 10, -1, 13, 1, 6, 0,
1647 4, -2, 10, 1, 13, -1, 11, 1, 14, 0,
1648 4, -2, 10, 1, 13, 1, 3, -2, 4, 0,
1649 3, 2, 10, -1, 13, 1, 5, 0,
1650 3, 3, 10, 1, 12, -2, 13, 0,
1651 4, -2, 10, 1, 13, 3, 2, -5, 3, 0,
1652 4, -2, 10, 1, 13, 2, 3, -4, 4, 0,
1653 2, -1, 13, 1, 2, 0,
1654 4, 2, 10, -1, 13, 2, 2, -3, 3, 0,
1655 3, -1, 10, 1, 2, -1, 3, 0,
1656 3, -1, 13, 4, 2, -5, 3, 0,
1657 3, 2, 10, -3, 13, 2, 11, 0,
1658 4, 2, 10, -1, 13, 2, 3, -3, 4, 0,
1659 3, -1, 13, 2, 2, -2, 3, 0,
1660 4, 2, 10, -1, 13, 1, 2, -1, 3, 0,
1661 4, 2, 10, 1, 12, 1, 13, -2, 11, 0,
1662 3, -2, 13, 18, 2,-15, 3, 0,
1663 2, 1, 12, -1, 13, 2,
1664 3, -1, 13, 1, 3, -1, 6, 0,
1665 4, 2, 10, -1, 13, 1, 3, -2, 5, 0,
1666 3, -1, 13, 2, 3, -2, 4, 0,
1667 3, -1, 13, 1, 3, -1, 5, 0,
1668 4, 2, 10, -1, 13, 3, 3, -4, 4, 0,
1669 1, 1, 10, 0,
1670 3, -1, 13, 3, 2, -4, 3, 0,
1671 3, -1, 13, 3, 3, -4, 4, 0,
1672 4, 2, 10, -1, 13, 1, 3, -1, 5, 0,
1673 4, 2, 10, -1, 13, 2, 3, -2, 4, 0,
1674 3, -1, 13, 1, 3, -2, 5, 0,
1675 3, 2, 10, 1, 12, -1, 13, 2,
1676 3, 1, 12, 1, 13, -2, 11, 0,
1677 3, -1, 13, 1, 2, -1, 3, 0,
1678 4, 2, 10, -1, 13, 2, 2, -2, 3, 0,
1679 3, -1, 13, 4, 2, -6, 3, 0,
1680 3, -1, 13, 2, 3, -3, 4, 0,
1681 3, 1, 13, 1, 2, -2, 3, 0,
1682 4, 2, 10, -1, 13, 3, 3, -3, 4, 0,
1683 2, 3, 13, -2, 11, 0,
1684 4, 2, 10, -1, 13, 4, 2, -5, 3, 0,
1685 3, 1, 10, 1, 2, -1, 3, 0,
1686 3, -1, 13, 2, 2, -3, 3, 1,
1687 3, 2, 10, 2, 12, -3, 13, 0,
1688 3, 2, 10, -1, 13, 1, 2, 0,
1689 3, 1, 13, 2, 3, -4, 4, 0,
1690 3, 1, 13, 3, 2, -5, 3, 0,
1691 2, 21, 2,-21, 3, 0,
1692 3, 1, 10, 1, 12, -2, 13, 1,
1693 4, 2, 10, -1, 13, 2, 3, -4, 5, 0,
1694 4, 2, 10, -1, 13, 7, 3,-10, 4, 0,
1695 2, -1, 13, 1, 5, 0,
1696 3, 1, 13, 1, 3, -2, 4, 0,
1697 4, 2, 10, -3, 13, 2, 3, -2, 5, 0,
1698 3, 1, 10, 1, 3, -2, 5, 0,
1699 3, 1, 13, -1, 11, 1, 14, 1,
1700 2, -1, 13, 1, 6, 0,
1701 4, 2, 10, -1, 13, 6, 3, -8, 4, 1,
1702 4, 2, 10, -1, 13, 2, 3, -3, 5, 1,
1703 3, -1, 13, 8, 3,-15, 4, 0,
1704 4, 2, 10, -1, 13, 6, 2, -8, 3, 0,
1705 5, 2, 10, -1, 13, -2, 11, 5, 2, -6, 3, 0,
1706 3, 1, 10, 3, 3, -4, 4, 0,
1707 3, 1, 10, 3, 2, -4, 3, 1,
1708 4, 1, 10, -1, 13, -1, 11, 2, 4, 0,
1709 3, -2, 13, 26, 2,-29, 3, 0,
1710 3, -1, 13, 8, 2,-13, 3, 0,
1711 3, -2, 13, 18, 2,-16, 3, 2,
1712 4, -1, 13, 3, 2, -7, 3, 4, 4, 0,
1713 3, 1, 13, 2, 5, -5, 6, 1,
1714 4, 1, 13, 4, 3, -8, 4, 3, 5, 1,
1715 1, 1, 13, 3,
1716 4, -1, 13, 4, 3, -8, 4, 3, 5, 1,
1717 3, -1, 13, 2, 5, -5, 6, 1,
1718 4, 1, 13, 3, 2, -7, 3, 4, 4, 0,
1719 2, 18, 2,-16, 3, 1,
1720 3, 1, 13, 8, 2,-13, 3, 2,
1721 2, 26, 2,-29, 3, 0,
1722 4, 1, 10, 1, 13, -1, 11, 2, 4, 0,
1723 5, 2, 10, 1, 13, -2, 11, 5, 2, -6, 3, 0,
1724 3, 1, 13, 8, 3,-15, 4, 1,
1725 4, 2, 10, -3, 13, 2, 3, -3, 5, 0,
1726 3, 1, 10, 1, 3, -1, 5, 0,
1727 2, 1, 13, 1, 6, 0,
1728 4, 2, 10, -1, 13, 5, 3, -6, 4, 0,
1729 3, 1, 10, 2, 3, -2, 4, 0,
1730 3, -1, 13, -1, 11, 1, 14, 1,
1731 4, 2, 10, -1, 13, 2, 3, -5, 6, 0,
1732 4, 2, 10, -1, 13, 2, 3, -2, 5, 0,
1733 5, 2, 10, -1, 13, 2, 3, -4, 5, 5, 6, 0,
1734 3, -1, 13, 1, 3, -2, 4, 1,
1735 2, 1, 13, 1, 5, 0,
1736 4, 2, 10, -1, 13, 4, 3, -4, 4, 0,
1737 4, 2, 10, -1, 13, 3, 2, -3, 3, 0,
1738 4, 2, 10, 2, 12, -1, 13, -2, 11, 0,
1739 2, 1, 10, 1, 12, 2,
1740 3, -1, 13, 3, 2, -5, 3, 0,
1741 3, -1, 13, 2, 3, -4, 4, 0,
1742 4, 2, 10, -1, 13, 2, 3, -1, 5, 0,
1743 4, 2, 10, -1, 13, 2, 3, -2, 6, 0,
1744 3, 1, 10, 1, 12, -2, 11, 0,
1745 3, 2, 10, 2, 12, -1, 13, 1,
1746 3, 1, 13, 2, 2, -3, 3, 1,
1747 3, -1, 13, 1, 11, 1, 14, 0,
1748 2, 1, 13, -2, 11, 0,
1749 4, 2, 10, -1, 13, 5, 2, -6, 3, 0,
1750 3, -1, 13, 1, 2, -2, 3, 0,
1751 3, 1, 13, 2, 3, -3, 4, 0,
1752 3, 1, 13, 1, 2, -1, 3, 0,
1753 4, 2, 10, -1, 13, 4, 2, -4, 3, 0,
1754 3, 2, 10, 1, 12, -3, 13, 1,
1755 3, 1, 13, 1, 3, -2, 5, 0,
1756 3, 1, 13, 3, 3, -4, 4, 0,
1757 3, 1, 13, 3, 2, -4, 3, 0,
1758 2, 1, 10, -2, 13, 0,
1759 4, 2, 10, -1, 13, 3, 3, -4, 5, 0,
1760 3, 1, 13, 1, 3, -1, 5, 0,
1761 3, 1, 13, 2, 3, -2, 4, 0,
1762 3, 1, 13, 1, 3, -1, 6, 0,
1763 4, 2, 10, -1, 13, 3, 3, -3, 5, 0,
1764 4, 2, 10, -1, 13, 6, 2, -7, 3, 0,
1765 2, 1, 12, 1, 13, 2,
1766 4, 2, 10, -1, 13, 3, 3, -2, 5, 0,
1767 4, 2, 10, 1, 12, -1, 13, -2, 11, 0,
1768 2, 1, 10, 2, 12, 0,
1769 2, 1, 10, -2, 11, 0,
1770 3, 1, 13, 2, 2, -2, 3, 0,
1771 3, 1, 12, -1, 13, 2, 11, 0,
1772 4, 2, 10, -1, 13, 5, 2, -5, 3, 0,
1773 3, 1, 13, 2, 3, -3, 5, 0,
1774 2, 2, 10, -3, 13, 0,
1775 3, 1, 13, 2, 3, -2, 5, 0,
1776 3, 1, 13, 3, 2, -3, 3, 0,
1777 3, 1, 10, -1, 12, -2, 13, 0,
1778 4, 2, 10, -1, 13, 6, 2, -6, 3, 0,
1779 2, 2, 12, 1, 13, 1,
1780 3, 2, 10, -1, 13, -2, 11, 0,
1781 3, 1, 10, -1, 12, -2, 11, 0,
1782 3, 2, 10, 1, 13, -4, 11, 0,
1783 3, 1, 13, 4, 2, -4, 3, 0,
1784 4, 2, 10, -1, 13, 7, 2, -7, 3, 0,
1785 3, 2, 10, -1, 12, -3, 13, 1,
1786 2, 3, 12, 1, 13, 0,
1787 4, 2, 10, -1, 12, -1, 13, -2, 11, 0,
1788 3, 1, 13, 5, 2, -5, 3, 0,
1789 4, 2, 10, -1, 13, 8, 2, -8, 3, 0,
1790 3, 2, 10, -2, 12, -3, 13, 0,
1791 4, 2, 10, -1, 13, 9, 2, -9, 3, 0,
1792 3, 4, 10, -3, 12, -2, 13, 0,
1793 2, 2, 10, -4, 12, 0,
1794 3, 4, 10, -2, 12, -2, 13, 1,
1795 2, 6, 10, -4, 13, 0,
1796 3, 4, 10, -1, 12, -2, 11, 0,
1797 2, 2, 10, -3, 12, 1,
1798 3, 3, 10, -2, 12, -1, 13, 0,
1799 3, -2, 10, 3, 3, -2, 5, 0,
1800 3, 4, 10, -1, 12, -2, 13, 1,
1801 3, -2, 10, 3, 3, -3, 5, 0,
1802 2, 5, 10, -3, 13, 0,
1803 3, -2, 10, 4, 2, -4, 3, 0,
1804 3, -2, 10, 2, 2, -1, 3, 0,
1805 2, 4, 10, -2, 11, 0,
1806 2, 2, 10, -2, 12, 2,
1807 3, -2, 10, 3, 3, -2, 4, 0,
1808 3, -2, 10, 2, 3, -1, 5, 0,
1809 3, 3, 10, -1, 12, -1, 13, 1,
1810 3, -2, 10, 3, 2, -3, 3, 0,
1811 3, -2, 10, 2, 3, -2, 5, 0,
1812 2, 4, 10, -2, 13, 0,
1813 3, -2, 10, 2, 3, -3, 5, 0,
1814 2, -2, 10, 1, 2, 0,
1815 4, 2, 10, -1, 12, 2, 13, -2, 11, 0,
1816 3, -2, 10, 2, 2, -2, 3, 0,
1817 3, 3, 10, 1, 13, -2, 11, 0,
1818 3, 4, 10, 1, 12, -2, 11, 0,
1819 4, 2, 10, -1, 12, -1, 11, 1, 14, 0,
1820 4, -2, 10, -1, 13, 18, 2,-15, 3, 0,
1821 4, 2, 10, 3, 3, -8, 4, 3, 5, 0,
1822 2, 2, 10, -1, 12, 2,
1823 4, -2, 10, 5, 3, -8, 4, 3, 5, 0,
1824 4, 2, 10, -1, 13, 18, 2,-17, 3, 0,
1825 3, -2, 10, 1, 3, -1, 6, 0,
1826 3, -2, 10, 2, 3, -2, 4, 0,
1827 3, -2, 10, 1, 3, -1, 5, 0,
1828 2, 3, 10, -1, 13, 0,
1829 3, -2, 10, 3, 2, -4, 3, 0,
1830 3, -2, 10, 3, 3, -4, 4, 0,
1831 3, -2, 10, 1, 3, -2, 5, 0,
1832 3, 4, 10, 1, 12, -2, 13, 1,
1833 4, 2, 10, -1, 12, -2, 13, 2, 11, 0,
1834 3, -2, 10, 1, 2, -1, 3, 0,
1835 3, -2, 10, 2, 3, -3, 4, 0,
1836 3, 2, 10, 2, 13, -2, 11, 0,
1837 3, -2, 10, 2, 2, -3, 3, 0,
1838 2, 2, 12, -2, 13, 1,
1839 3, 2, 10, 2, 3, -4, 4, 0,
1840 3, 2, 10, 3, 2, -5, 3, 0,
1841 3, 1, 10, -1, 12, 1, 13, 1,
1842 3, -2, 13, 3, 2, -3, 3, 0,
1843 2, -2, 10, 1, 5, 0,
1844 3, 2, 10, 1, 3, -2, 4, 0,
1845 3, -2, 13, 2, 3, -2, 5, 0,
1846 3, 2, 10, -1, 11, 1, 14, 0,
1847 4, 4, 10, -2, 13, 2, 3, -3, 5, 0,
1848 3, -2, 10, 8, 2,-13, 3, 0,
1849 4, -2, 10, -1, 13, 18, 2,-16, 3, 1,
1850 4, -2, 10, 3, 2, -7, 3, 4, 4, 0,
1851 4, 2, 10, 4, 3, -8, 4, 3, 5, 1,
1852 1, 2, 10, 3,
1853 4, -2, 10, 4, 3, -8, 4, 3, 5, 1,
1854 4, 2, 10, 3, 2, -7, 3, 4, 4, 0,
1855 4, 2, 10, -1, 13, 18, 2,-16, 3, 1,
1856 3, 2, 10, 8, 2,-13, 3, 0,
1857 3, -2, 10, -1, 11, 1, 14, 0,
1858 4, 4, 10, -2, 13, 2, 3, -2, 5, 0,
1859 3, -2, 10, 1, 3, -2, 4, 0,
1860 2, 2, 10, 1, 5, 0,
1861 4, 4, 10, -2, 13, 3, 2, -3, 3, 0,
1862 3, 3, 10, 1, 12, -1, 13, 1,
1863 3, -2, 10, 3, 2, -5, 3, 0,
1864 3, -2, 10, 2, 3, -4, 4, 0,
1865 3, 4, 10, 2, 12, -2, 13, 0,
1866 3, 2, 10, 2, 2, -3, 3, 0,
1867 3, 2, 10, -2, 13, 2, 11, 0,
1868 3, 2, 10, 1, 2, -1, 3, 0,
1869 4, 2, 10, 1, 12, 2, 13, -2, 11, 0,
1870 2, 1, 12, -2, 13, 2,
1871 3, 2, 10, 1, 3, -2, 5, 0,
1872 3, -2, 13, 1, 3, -1, 5, 0,
1873 3, 2, 10, 3, 2, -4, 3, 0,
1874 2, 1, 10, 1, 13, 0,
1875 3, 2, 10, 1, 3, -1, 5, 0,
1876 3, 2, 10, 2, 3, -2, 4, 0,
1877 2, 2, 10, 1, 12, 2,
1878 2, 1, 12, -2, 11, 0,
1879 3, -2, 13, 1, 2, -1, 3, 0,
1880 3, 1, 10, -1, 13, 2, 11, 0,
1881 3, 2, 10, 2, 2, -2, 3, 0,
1882 3, 1, 10, 1, 12, -3, 13, 0,
1883 3, 2, 13, -1, 11, 1, 14, 0,
1884 3, 2, 10, 2, 3, -3, 5, 0,
1885 3, 2, 10, 6, 2, -8, 3, 0,
1886 3, -3, 13, 18, 2,-16, 3, 1,
1887 3, 2, 13, 2, 5, -5, 6, 0,
1888 4, 2, 13, 4, 3, -8, 4, 3, 5, 0,
1889 1, 2, 13, 0,
1890 4, -2, 13, 4, 3, -8, 4, 3, 5, 0,
1891 3, -2, 13, 2, 5, -5, 6, 0,
1892 3, 1, 13, 18, 2,-16, 3, 1,
1893 3, -2, 13, -1, 11, 1, 14, 0,
1894 3, 2, 10, 2, 3, -2, 5, 0,
1895 3, 2, 10, 3, 2, -3, 3, 0,
1896 3, 1, 10, 1, 12, 1, 13, 1,
1897 2, 2, 10, 2, 12, 1,
1898 2, 1, 11, 1, 14, 1,
1899 4, -1, 13, -2, 11, 18, 2,-16, 3, 0,
1900 1, 2, 11, 0,
1901 4, -1, 13, 2, 11, 18, 2,-16, 3, 0,
1902 2, -3, 11, 1, 14, 0,
1903 3, 2, 13, 1, 2, -1, 3, 0,
1904 3, 2, 10, 4, 2, -4, 3, 0,
1905 3, 2, 10, 1, 12, -4, 13, 0,
1906 2, 1, 10, -3, 13, 0,
1907 3, 2, 13, 1, 3, -1, 5, 0,
1908 2, 1, 12, 2, 13, 2,
1909 3, 1, 10, 2, 12, 1, 13, 0,
1910 3, 1, 10, -1, 13, -2, 11, 0,
1911 2, 1, 12, 2, 11, 1,
1912 3, 2, 10, 5, 2, -5, 3, 0,
1913 2, 2, 10, -4, 13, 0,
1914 3, 2, 10, 6, 2, -6, 3, 0,
1915 2, 2, 12, 2, 13, 0,
1916 3, 2, 10, -2, 13, -2, 11, 0,
1917 2, 2, 12, 2, 11, 0,
1918 2, 2, 10, -4, 11, 0,
1919 3, 2, 10, 7, 2, -7, 3, 0,
1920 3, 2, 10, -1, 12, -4, 13, 0,
1921 4, 2, 10, -1, 12, -2, 13, -2, 11, 0,
1922 3, 2, 10, 8, 2, -8, 3, 0,
1923 3, 2, 10, 9, 2, -9, 3, 0,
1924 3, 4, 10, -3, 12, -1, 13, 0,
1925 3, 6, 10, -1, 12, -3, 13, 0,
1926 3, 4, 10, -2, 12, -1, 13, 1,
1927 3, 5, 10, -1, 12, -2, 13, 0,
1928 2, 6, 10, -3, 13, 0,
1929 4, 4, 10, -1, 12, 1, 13, -2, 11, 0,
1930 3, 2, 10, -3, 12, 1, 13, 0,
1931 2, 3, 10, -2, 12, 0,
1932 3, 4, 10, -1, 12, -1, 13, 1,
1933 2, 5, 10, -2, 13, 0,
1934 3, 6, 10, 1, 12, -3, 13, 0,
1935 3, 4, 10, 1, 13, -2, 11, 0,
1936 3, 2, 10, -2, 12, 1, 13, 1,
1937 2, 3, 10, -1, 12, 0,
1938 4, -2, 10, -1, 13, 2, 3, -2, 5, 0,
1939 2, 4, 10, -1, 13, 0,
1940 4, 2, 10, -2, 12, -1, 13, 2, 11, 0,
1941 3, 4, 10, -3, 13, 2, 11, 0,
1942 4, -2, 10, -1, 13, 2, 2, -2, 3, 0,
1943 3, 2, 10, -1, 12, 1, 13, 2,
1944 4, -2, 10, -1, 13, 1, 3, -1, 5, 0,
1945 1, 3, 10, 0,
1946 3, 4, 10, 1, 12, -1, 13, 1,
1947 4, 2, 10, -1, 12, -1, 13, 2, 11, 1,
1948 4, -2, 10, -1, 13, 1, 2, -1, 3, 0,
1949 3, 2, 10, 3, 13, -2, 11, 0,
1950 2, 2, 12, -3, 13, 0,
1951 3, 1, 10, -1, 12, 2, 13, 0,
1952 4, 2, 10, 1, 13, -1, 11, 1, 14, 0,
1953 4, -2, 10, -2, 13, 18, 2,-16, 3, 0,
1954 5, 2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 0,
1955 2, 2, 10, 1, 13, 1,
1956 5, -2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 0,
1957 3, 2, 10, 18, 2,-16, 3, 0,
1958 4, -2, 10, -1, 13, -1, 11, 1, 14, 0,
1959 4, 4, 10, -1, 13, 2, 3, -2, 5, 0,
1960 4, 4, 10, -1, 13, 3, 2, -3, 3, 0,
1961 2, 3, 10, 1, 12, 1,
1962 3, 4, 10, 2, 12, -1, 13, 0,
1963 4, 2, 10, -1, 13, 1, 11, 1, 14, 0,
1964 3, 2, 10, -1, 13, 2, 11, 0,
1965 2, 1, 12, -3, 13, 1,
1966 2, 1, 10, 2, 13, 0,
1967 3, 2, 10, 1, 12, 1, 13, 1,
1968 3, 1, 12, -1, 13, -2, 11, 1,
1969 2, 1, 10, 2, 11, 0,
1970 4, 2, 10, 1, 12, -1, 13, 2, 11, 0,
1971 1, 3, 13, 0,
1972 4, 2, 10, 1, 13, 2, 3, -2, 5, 0,
1973 3, 1, 10, 1, 12, 2, 13, 0,
1974 3, 2, 10, 2, 12, 1, 13, 0,
1975 3, 1, 13, 1, 11, 1, 14, 0,
1976 2, 1, 13, 2, 11, 0,
1977 3, 1, 10, 1, 12, 2, 11, 0,
1978 4, 2, 10, 2, 12, -1, 13, 2, 11, 0,
1979 2, 1, 13, -4, 11, 0,
1980 2, 1, 10, -4, 13, 0,
1981 2, 1, 12, 3, 13, 1,
1982 3, 1, 12, 1, 13, 2, 11, 1,
1983 2, 2, 10, -5, 13, 0,
1984 3, 2, 10, -3, 13, -2, 11, 0,
1985 3, 2, 10, -1, 13, -4, 11, 0,
1986 3, 6, 10, -2, 12, -2, 13, 0,
1987 2, 4, 10, -3, 12, 0,
1988 3, 6, 10, -1, 12, -2, 13, 0,
1989 2, 4, 10, -2, 12, 1,
1990 2, 6, 10, -2, 13, 0,
1991 2, 4, 10, -1, 12, 1,
1992 2, 5, 10, -1, 13, 0,
1993 3, 6, 10, 1, 12, -2, 13, 0,
1994 4, 4, 10, -1, 12, -2, 13, 2, 11, 0,
1995 3, 4, 10, 2, 13, -2, 11, 0,
1996 3, 2, 10, -2, 12, 2, 13, 0,
1997 1, 4, 10, 0,
1998 3, 2, 10, -2, 12, 2, 11, 0,
1999 3, 4, 10, -2, 13, 2, 11, 0,
2000 3, 2, 10, -1, 12, 2, 13, 1,
2001 2, 3, 10, 1, 13, 0,
2002 2, 4, 10, 1, 12, 1,
2003 3, 2, 10, -1, 12, 2, 11, 1,
2004 3, 3, 10, -1, 13, 2, 11, 0,
2005 2, 2, 10, 2, 13, 0,
2006 3, 3, 10, 1, 12, 1, 13, 0,
2007 3, 2, 10, 1, 11, 1, 14, 0,
2008 2, 2, 10, 2, 11, 0,
2009 2, 1, 12, -4, 13, 0,
2010 2, 1, 10, 3, 13, 0,
2011 3, 2, 10, 1, 12, 2, 13, 1,
2012 3, 1, 12, -2, 13, -2, 11, 0,
2013 3, 1, 10, 1, 13, 2, 11, 0,
2014 3, 2, 10, 1, 12, 2, 11, 0,
2015 1, 4, 13, 0,
2016 3, 1, 10, 1, 12, 3, 13, 0,
2017 2, 2, 13, 2, 11, 0,
2018 4, 1, 10, 1, 12, 1, 13, 2, 11, 0,
2019 1, 4, 11, 0,
2020 2, 1, 12, 4, 13, 0,
2021 3, 1, 12, 2, 13, 2, 11, 0,
2022 3, 2, 10, -4, 13, -2, 11, 0,
2023 3, 6, 10, -2, 12, -1, 13, 0,
2024 2, 8, 10, -3, 13, 0,
2025 3, 6, 10, -1, 12, -1, 13, 0,
2026 3, 4, 10, -2, 12, 1, 13, 0,
2027 2, 6, 10, -1, 13, 0,
2028 3, 4, 10, -1, 12, 1, 13, 1,
2029 3, 6, 10, 1, 12, -1, 13, 0,
2030 4, 4, 10, -1, 12, -1, 13, 2, 11, 0,
2031 3, 2, 10, -2, 12, 3, 13, 0,
2032 2, 4, 10, 1, 13, 0,
2033 3, 4, 10, -1, 13, 2, 11, 0,
2034 3, 2, 10, -1, 12, 3, 13, 0,
2035 3, 4, 10, 1, 12, 1, 13, 0,
2036 4, 2, 10, -1, 12, 1, 13, 2, 11, 0,
2037 2, 2, 10, 3, 13, 0,
2038 3, 2, 10, 1, 13, 2, 11, 0,
2039 3, 2, 10, -1, 13, 4, 11, 0,
2040 3, 2, 10, 1, 12, 3, 13, 0,
2041 3, 1, 12, -3, 13, -2, 11, 0,
2042 3, 1, 10, 2, 13, 2, 11, 0,
2043 4, 2, 10, 1, 12, 1, 13, 2, 11, 0,
2044 1, 5, 13, 0,
2045 2, 3, 13, 2, 11, 0,
2046 2, 1, 13, 4, 11, 0,
2047 3, 1, 12, 3, 13, 2, 11, 0,
2048 2, 8, 10, -2, 13, 0,
2049 2, 6, 10, -1, 12, 0,
2050 1, 6, 10, 0,
2051 3, 6, 10, -2, 13, 2, 11, 0,
2052 3, 4, 10, -1, 12, 2, 13, 0,
2053 3, 4, 10, -1, 12, 2, 11, 0,
2054 2, 4, 10, 2, 13, 0,
2055 2, 4, 10, 2, 11, 0,
2056 3, 2, 10, -1, 12, 4, 13, 0,
2057 3, 4, 10, 1, 12, 2, 13, 0,
2058 4, 2, 10, -1, 12, 2, 13, 2, 11, 0,
2059 2, 2, 10, 4, 13, 0,
2060 3, 2, 10, 2, 13, 2, 11, 0,
2061 2, 2, 10, 4, 11, 0,
2062 1, 6, 13, 0,
2063 2, 4, 13, 2, 11, 0,
2064 2, 2, 13, 4, 11, 0,
2065 3, 6, 10, -1, 12, 1, 13, 0,
2066 2, 6, 10, 1, 13, 0,
2067 2, 4, 10, 3, 13, 0,
2068 3, 4, 10, 1, 13, 2, 11, 0,
2069 2, 2, 10, 5, 13, 0,
2070 3, 2, 10, 3, 13, 2, 11, 0,
2071 -1
2072 };
2073
2074 static long btabr[] = {-1};
2075 static long btabb[] = {-1};
2076 static long btabl[] = {
2077 -3, -4,
2078 4, -1856, 0, 8043,
2079 -9, -1082,
2080 -1, -310,
2081 -1, -522,
2082 -330, -1449, -853, 4656,
2083 -66, 7,
2084 -1, 9996928,
2085 -66, 6,
2086 23, 183,
2087 0, 173,
2088 0, -56,
2089 0, 50,
2090 0, -785,
2091 1, 51,
2092 0, -60,
2093 1, 11843, 0, -50754,
2094 0, 1834, 1, -7910,
2095 0, -48060,
2096 1, 56,
2097 0, 13141, -1, -56318,
2098 0, 2541,
2099 -1, -649,
2100 -133, 778,
2101 -46, 8,
2102 1, 1665737,
2103 -47, 7,
2104 0, 65,
2105 0, 45,
2106 0, -138,
2107 0, -1005,
2108 0, -2911,
2109 0, -47,
2110 0, 96,
2111 0, -394,
2112 2, 76,
2113 2, -17302, 0, 74337,
2114 0, -101,
2115 0, 58,
2116 0, -171,
2117 0, -77,
2118 0, -1283, 0, 2686,
2119 0, -55,
2120 0, 99,
2121 0, 55,
2122 0, 397,
2123 0, 540,
2124 0, 626,
2125 -1, -5188, 0, 10857,
2126 0, -216,
2127 -2, -123,
2128 0, 6337,
2129 2, 224,
2130 -152, -23472, -29, -74336, 0, 295775,
2131 -20, 149,
2132 -2, 84,
2133 9, 304,
2134 0, -3051,
2135 -70, -6,
2136 -57, 34,
2137 0, -638,
2138 0, -201,
2139 -73, 9,
2140 0, -100,
2141 -101, -8,
2142 0, -57,
2143 0, -207,
2144 -3, 80,
2145 -45, 45,
2146 -5, 102,
2147 -59, -23,
2148 52, 201,
2149 -48, 233, -220, 71,
2150 4, 2810, 0, 6236541,
2151 -61, 218, -216, 67,
2152 51, 201,
2153 -59, -23,
2154 -144, -837, -457, 3029,
2155 -45, 42,
2156 -15, 73,
2157 -6, -169,
2158 0, 135,
2159 -64, -7,
2160 0, -16245,
2161 0, -81,
2162 -74, -10,
2163 0, 702, 0, -3013,
2164 0, -5889,
2165 1, 141,
2166 58, 9598, 12, 30443, 1, -120946,
2167 -1, -84,
2168 -2, 11246, -1, -48391,
2169 0, 1393,
2170 0, 200,
2171 -136, -17,
2172 0, 558,
2173 -64, -8,
2174 0, -71,
2175 0, 317577,
2176 -28, 183,
2177 1, 219,
2178 0, 421,
2179 0, -133,
2180 501, -139,
2181 3, 354,
2182 -101, -13,
2183 74, 7,
2184 144, -84,
2185 59, -2,
2186 1, 64,
2187 -2931, 12559, -4641, 2638, -303, -2058,
2188 -13, -100, -123, -79,
2189 -19214, 6084, 1494, 26993, 15213, -82219,
2190 42, 52, 48, -101,
2191 -53, -4,
2192 4, 47,
2193 58, -131,
2194 46, 14,
2195 -21, -6,
2196 -1311, -8791, 10198, -4185, 2815, 5640,
2197 167, 422, -229, 83,
2198 3140, 39, 1221, 120, 96, -30,
2199 -1, 184612405,
2200 187, 416, -226, 81,
2201 -1985, -10083, 9983, -4464, 2807, 5643,
2202 -21, -9,
2203 113, -367,
2204 120, 580, -667, 27,
2205 8, 66,
2206 -56, -6,
2207 337, 95,
2208 -87, 3303,
2209 -1, 65,
2210 68, -374,
2211 0, -574,
2212 15, -94,
2213 0, -53,
2214 0, -1303,
2215 0, -236,
2216 283, 36,
2217 -1, -54,
2218 269, -35,
2219 0, -83,
2220 0, -52,
2221 0, 730, 0, -3129,
2222 0, 813,
2223 0, -4299,
2224 1, 59,
2225 -6, 5130, 1, 16239, -1, -64603,
2226 0, -80,
2227 91, 12,
2228 0, -561,
2229 133, -17,
2230 0, 250,
2231 -12, 71,
2232 0, 155664,
2233 82, -11,
2234 0, 106,
2235 0, -604,
2236 0, 21862,
2237 55, -7,
2238 0, -1514, 0, 6501,
2239 0, 906,
2240 0, -68,
2241 0, 241,
2242 0, 366,
2243 0, 70,
2244 0, -1382, 0, 5957,
2245 0, 113,
2246 0, -51,
2247 0, -55,
2248 0, 731,
2249 0, -264,
2250 0, 65788,
2251 1, -1504, 0, 3147,
2252 0, 217,
2253 0, -4105, 0, 17658,
2254 1, 69,
2255 0, -3518,
2256 0, -1767,
2257 -43, -7044, -10, -22304, 0, 88685,
2258 3, 91,
2259 0, -485,
2260 0, -57,
2261 -1, 333548,
2262 -24, 172,
2263 11, 544, 1, -1132,
2264 0, 353,
2265 0, -188,
2266 0, 53,
2267 0, 77,
2268 158, -887,
2269 35, 131,
2270 -54, 13,
2271 0, 1994821,
2272 -53, 14,
2273 36, 125,
2274 2, 56,
2275 0, -243,
2276 0, -364,
2277 -2, 1916, 0, -8227,
2278 0, 15700, -1, -67308,
2279 1, 66,
2280 0, -53686,
2281 1, 3058, 1, -13177,
2282 0, -72,
2283 0, -72,
2284 0, 61,
2285 0, 15812,
2286 0, 165,
2287 8, -96,
2288 318, 1341, 803, -4252,
2289 24, 193,
2290 1137, -226, 310, 622,
2291 -56, 30,
2292 -3, 10101666,
2293 -56, 30,
2294 1096, -225, 300, 600,
2295 -31, 409,
2296 -1, -507,
2297 0, -287,
2298 0, -1869, 0, 8026,
2299 1, 544, -1, -1133,
2300 0, 27984,
2301 0, -62,
2302 0, -249,
2303 0, 187,
2304 0, -1096,
2305 1, 53,
2306 2, 12388, 0, -53107,
2307 0, -322,
2308 0, -94,
2309 0, 15157,
2310 0, -582,
2311 0, 3291,
2312 0, 565,
2313 0, 106,
2314 0, 112,
2315 0, 306,
2316 0, 809,
2317 0, 130,
2318 0, -961, 0, 4149,
2319 0, 174,
2320 0, -105,
2321 0, 2196,
2322 0, 59,
2323 0, 36737,
2324 -1, -1832, 0, 3835,
2325 0, -139,
2326 0, 24138,
2327 0, 1325,
2328 1, 64,
2329 0, -361,
2330 0, -1162,
2331 -44, -6320, -10, -20003, 0, 79588,
2332 2, 80,
2333 0, -2059,
2334 0, -304,
2335 0, 21460,
2336 0, -166,
2337 0, -87,
2338 89, -493,
2339 32, 114,
2340 34, 510, 1, 1172616,
2341 31, 113,
2342 -1, 57,
2343 0, 214,
2344 0, -656,
2345 0, -646,
2346 0, 1850, 0, -7931,
2347 0, -6674,
2348 0, 2944, 0, -12641,
2349 0, 916,
2350 45, -255,
2351 16, 60,
2352 -1, 619116,
2353 16, 57,
2354 0, -58,
2355 0, 1045,
2356 0, -156,
2357 -15, 88,
2358 0, -62964,
2359 0, -126,
2360 0, 1490, 0, -6387,
2361 0, 119,
2362 0, 1338,
2363 0, -56,
2364 0, 204,
2365 0, 153,
2366 0, 940,
2367 0, 251,
2368 0, 312,
2369 0, 584,
2370 0, -786, 0, 3388,
2371 0, -52,
2372 0, 4733,
2373 0, 618,
2374 0, 29982,
2375 0, 101,
2376 0, -174,
2377 0, -2637, 0, 11345,
2378 0, -284,
2379 0, -524,
2380 0, -121,
2381 0, 1464,
2382 11, -60,
2383 -1, 151205,
2384 0, 139,
2385 0, -2448,
2386 0, -51,
2387 0, -768,
2388 0, -638,
2389 0, 552, 0, -2370,
2390 0, 70,
2391 0, 64,
2392 0, 57,
2393 0, 39840,
2394 0, 104,
2395 0, -10194,
2396 0, -635,
2397 0, 69,
2398 0, 113,
2399 0, 67,
2400 0, 96,
2401 0, 367,
2402 0, 134,
2403 0, 596,
2404 0, 63,
2405 0, 1622,
2406 0, 483,
2407 0, 72,
2408 0, 11917,
2409 0, -63,
2410 0, 1273,
2411 0, -66,
2412 0, -262,
2413 0, -97,
2414 0, 103,
2415 0, 15196,
2416 0, -1445,
2417 0, -66,
2418 0, -55,
2419 0, -323,
2420 0, 2632,
2421 0, -1179,
2422 0, 59,
2423 0, -56,
2424 0, 78,
2425 0, 65,
2426 0, 422,
2427 0, 309,
2428 0, 2125,
2429 0, -66,
2430 0, 124,
2431 0, -57,
2432 0, 1379,
2433 0, -304,
2434 0, 177,
2435 0, -118,
2436 0, 146,
2437 0, 283,
2438 0, 119,
2439 };
2440 static CHAR bargs[] = {
2441 0, 1,
2442 3, 1, 10, 1, 12, -1, 11, 1,
2443 4, 2, 10, 2, 12, -1, 13, -1, 11, 0,
2444 5, 2, 10, -1, 13, -1, 11, 3, 2, -3, 3, 0,
2445 5, 2, 10, -1, 13, -1, 11, 2, 3, -2, 5, 0,
2446 2, -1, 13, 1, 14, 1,
2447 5, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0,
2448 2, 1, 13, -1, 11, 0,
2449 5, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0,
2450 5, 2, 10, -1, 13, -1, 11, 2, 3, -3, 5, 0,
2451 4, 1, 10, 1, 12, -2, 13, 1, 11, 0,
2452 4, 1, 13, -1, 11, 1, 2, -1, 3, 0,
2453 5, 2, 10, -1, 13, -1, 11, 2, 2, -2, 3, 0,
2454 3, 1, 10, -2, 13, 1, 11, 0,
2455 4, 1, 13, -1, 11, 1, 3, -1, 5, 0,
2456 4, -1, 13, 1, 11, 1, 2, -1, 3, 0,
2457 3, 1, 12, 1, 13, -1, 11, 1,
2458 4, 2, 10, 1, 12, -1, 13, -1, 11, 1,
2459 2, 1, 10, -1, 11, 0,
2460 4, -1, 13, 1, 11, 1, 3, -1, 5, 0,
2461 3, 1, 12, -1, 13, 1, 11, 1,
2462 3, 2, 10, -3, 13, 1, 11, 0,
2463 3, 2, 12, 1, 13, -1, 11, 0,
2464 3, -2, 10, 1, 13, 1, 14, 0,
2465 6, -2, 10, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0,
2466 3, 2, 10, -1, 13, -1, 11, 0,
2467 6, 2, 10, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0,
2468 4, -1, 13, 1, 11, 2, 3, -2, 5, 0,
2469 4, -1, 13, 1, 11, 3, 2, -3, 3, 0,
2470 3, 1, 10, -1, 12, -1, 11, 0,
2471 3, 2, 12, -1, 13, 1, 11, 0,
2472 3, 2, 10, 1, 13, -3, 11, 0,
2473 5, -2, 10, 1, 13, 1, 11, 1, 2, -1, 3, 0,
2474 4, 2, 10, -1, 12, -3, 13, 1, 11, 0,
2475 3, 3, 10, -2, 13, -1, 11, 0,
2476 5, -2, 10, 1, 13, 1, 11, 1, 3, -1, 5, 0,
2477 4, 2, 10, -1, 12, -1, 13, -1, 11, 1,
2478 2, 3, 10, -3, 11, 0,
2479 5, -2, 10, 1, 13, 1, 11, 2, 2, -2, 3, 0,
2480 4, 2, 10, -1, 12, 1, 13, -3, 11, 0,
2481 3, 4, 10, -3, 13, -1, 11, 0,
2482 4, 2, 10, -2, 12, -1, 13, -1, 11, 1,
2483 3, 4, 10, -1, 13, -3, 11, 0,
2484 4, 2, 10, -3, 12, -1, 13, -1, 11, 0,
2485 3, 4, 10, -1, 12, -3, 11, 0,
2486 3, 2, 10, -3, 12, -1, 11, 0,
2487 4, 4, 10, -1, 12, -2, 13, -1, 11, 0,
2488 2, 4, 10, -3, 11, 0,
2489 3, 2, 10, -2, 12, -1, 11, 1,
2490 4, 3, 10, -1, 12, -1, 13, -1, 11, 0,
2491 4, -2, 10, 1, 11, 2, 3, -2, 5, 0,
2492 3, 4, 10, -2, 13, -1, 11, 0,
2493 4, -2, 10, 1, 11, 2, 2, -2, 3, 0,
2494 3, 2, 10, -1, 12, -1, 11, 2,
2495 3, -2, 10, 1, 12, 1, 14, 0,
2496 4, -2, 10, 1, 11, 2, 3, -2, 4, 0,
2497 4, -2, 10, 1, 11, 1, 3, -1, 5, 0,
2498 3, 3, 10, -1, 13, -1, 11, 0,
2499 4, -2, 10, 1, 11, 3, 2, -4, 3, 0,
2500 4, -2, 10, 1, 11, 1, 3, -2, 5, 0,
2501 4, 2, 10, -1, 12, -2, 13, 1, 11, 0,
2502 4, -2, 10, 1, 11, 1, 2, -1, 3, 0,
2503 2, -1, 10, 1, 2, 0,
2504 3, 2, 10, 2, 13, -3, 11, 0,
2505 4, -2, 10, 1, 11, 2, 2, -3, 3, 0,
2506 3, 2, 12, -2, 13, 1, 11, 0,
2507 4, 1, 10, -1, 12, 1, 13, -1, 11, 0,
2508 3, -2, 10, 1, 11, 1, 5, 0,
2509 4, 2, 10, -1, 11, 1, 3, -2, 4, 0,
2510 3, 2, 10, -2, 11, 1, 14, 0,
2511 4, -2, 10, 1, 11, 8, 2,-13, 3, 0,
2512 5, -2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0,
2513 5, 2, 10, -1, 11, 4, 3, -8, 4, 3, 5, 1,
2514 2, 2, 10, -1, 11, 1,
2515 5, -2, 10, 1, 11, 4, 3, -8, 4, 3, 5, 1,
2516 5, 2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0,
2517 4, 2, 10, -1, 11, 8, 2,-13, 3, 0,
2518 2, -2, 10, 1, 14, 1,
2519 4, -2, 10, 1, 11, 1, 3, -2, 4, 0,
2520 3, 2, 10, -1, 11, 1, 5, 0,
2521 2, 2, 12, -1, 11, 0,
2522 4, 3, 10, 1, 12, -1, 13, -1, 11, 0,
2523 4, 2, 10, -1, 11, 2, 2, -3, 3, 0,
2524 3, 2, 10, -2, 13, 1, 11, 0,
2525 4, 2, 10, -1, 11, 1, 2, -1, 3, 0,
2526 3, 1, 10, 1, 2, -2, 3, 0,
2527 3, 1, 12, -2, 13, 1, 11, 1,
2528 3, 1, 10, 1, 13, -1, 11, 0,
2529 4, 2, 10, -1, 11, 1, 3, -1, 5, 0,
2530 3, 2, 10, 1, 12, -1, 11, 2,
2531 3, -2, 10, -1, 12, 1, 14, 0,
2532 2, 1, 12, -1, 11, 1,
2533 3, 1, 10, -1, 13, 1, 11, 0,
2534 4, 2, 10, -1, 11, 2, 2, -2, 3, 0,
2535 3, 1, 10, 2, 2, -3, 3, 0,
2536 4, 2, 10, 1, 12, -2, 13, 1, 11, 0,
2537 3, -1, 10, 1, 2, -2, 3, 0,
2538 3, -1, 11, 1, 2, -1, 3, 0,
2539 2, 2, 13, -1, 11, 0,
2540 2, -2, 13, 1, 14, 0,
2541 4, 2, 10, -1, 11, 2, 3, -2, 5, 0,
2542 4, 2, 10, -1, 11, 3, 2, -3, 3, 0,
2543 4, 2, 10, 2, 12, -2, 13, -1, 11, 0,
2544 3, 1, 10, 1, 3, -2, 5, 0,
2545 4, 1, 10, 1, 12, 1, 13, -1, 11, 0,
2546 3, 1, 10, 3, 2, -4, 3, 0,
2547 3, 1, 10, 1, 3, -1, 5, 0,
2548 3, 1, 10, 1, 3, -2, 6, 0,
2549 3, 1, 10, 2, 3, -2, 4, 0,
2550 4, 1, 10, 1, 12, -1, 13, -1, 11, 0,
2551 3, 2, 10, 2, 12, -1, 11, 2,
2552 4, 1, 10, 1, 3, 2, 5, -5, 6, 1,
2553 1, 1, 14, 2,
2554 3, 1, 10, 8, 2,-12, 3, 1,
2555 5, -2, 10, 1, 13, -1, 11, 20, 2,-21, 3, 0,
2556 5, 2, 10, -2, 13, 1, 11, 2, 3, -3, 5, 0,
2557 3, 1, 10, 1, 3, 1, 6, 0,
2558 4, -1, 13, -1, 11, 26, 2,-29, 3, 0,
2559 3, -1, 11, 8, 2,-13, 3, 0,
2560 4, -1, 13, -1, 11, 18, 2,-16, 3, 2,
2561 4, -1, 13, 1, 11, 10, 2, -3, 3, 1,
2562 1, 1, 11, 3,
2563 4, -1, 13, -1, 11, 10, 2, -3, 3, 1,
2564 4, -1, 13, 1, 11, 18, 2,-16, 3, 2,
2565 3, 1, 11, 8, 2,-13, 3, 0,
2566 2, 1, 10, 2, 4, 0,
2567 4, 2, 10, -1, 11, 5, 2, -6, 3, 1,
2568 5, 2, 10, -2, 13, -1, 11, 2, 3, -3, 5, 0,
2569 5, -2, 10, 1, 13, 1, 11, 20, 2,-21, 3, 0,
2570 3, 1, 10, 1, 3, 1, 5, 0,
2571 2, -2, 11, 1, 14, 0,
2572 5, 2, 10, -2, 13, 1, 11, 2, 3, -2, 5, 0,
2573 3, 1, 10, 5, 2, -7, 3, 0,
2574 4, 1, 10, 1, 12, -1, 13, 1, 11, 0,
2575 3, 1, 10, 2, 2, -2, 3, 0,
2576 4, 2, 10, 2, 12, -2, 13, 1, 11, 0,
2577 2, 2, 13, -3, 11, 0,
2578 4, 2, 10, -1, 11, 4, 2, -4, 3, 0,
2579 3, 1, 10, 4, 2, -5, 3, 0,
2580 3, 1, 10, -3, 13, 1, 11, 0,
2581 2, 1, 10, 1, 2, 0,
2582 3, 1, 11, 1, 2, -1, 3, 0,
2583 4, 2, 10, -1, 11, 3, 3, -3, 5, 0,
2584 3, 1, 12, 2, 13, -1, 11, 1,
2585 4, 2, 10, 1, 12, -2, 13, -1, 11, 0,
2586 3, 1, 10, -1, 13, -1, 11, 0,
2587 3, 1, 11, 1, 3, -1, 5, 0,
2588 2, 1, 12, 1, 11, 2,
2589 4, 2, 10, -1, 11, 5, 2, -5, 3, 0,
2590 3, 1, 10, 5, 2, -6, 3, 0,
2591 3, 2, 10, 1, 12, -3, 11, 0,
2592 3, 1, 10, 2, 2, -1, 3, 0,
2593 3, 2, 10, -4, 13, 1, 11, 0,
2594 3, -2, 10, 2, 13, 1, 14, 0,
2595 3, 2, 10, -2, 13, -1, 11, 0,
2596 3, 1, 10, 3, 2, -2, 3, 0,
2597 4, 1, 10, -1, 12, -1, 13, -1, 11, 0,
2598 2, 2, 12, 1, 11, 0,
2599 2, 2, 10, -3, 11, 0,
2600 3, 1, 10, 4, 2, -3, 3, 0,
2601 4, 2, 10, -1, 12, -2, 13, -1, 11, 1,
2602 3, 2, 10, -1, 12, -3, 11, 0,
2603 3, 4, 10, -4, 13, -1, 11, 0,
2604 4, 2, 10, -2, 12, -2, 13, -1, 11, 0,
2605 4, 4, 10, -2, 12, -1, 13, -1, 11, 0,
2606 3, 6, 10, -3, 13, -1, 11, 0,
2607 4, 4, 10, -1, 12, -1, 13, -1, 11, 1,
2608 4, 2, 10, -3, 12, -1, 13, 1, 11, 0,
2609 3, 5, 10, -2, 13, -1, 11, 0,
2610 3, 4, 10, 1, 13, -3, 11, 0,
2611 4, 2, 10, -2, 12, 1, 13, -1, 11, 0,
2612 3, 3, 10, -1, 12, -1, 11, 0,
2613 3, 4, 10, -1, 13, -1, 11, 0,
2614 4, 2, 10, -2, 12, -1, 13, 1, 11, 1,
2615 3, 4, 10, -3, 13, 1, 11, 0,
2616 4, 2, 10, -1, 12, 1, 13, -1, 11, 1,
2617 5, -2, 10, 1, 13, -1, 11, 2, 2, -2, 3, 0,
2618 2, 3, 10, -1, 11, 0,
2619 4, 4, 10, 1, 12, -1, 13, -1, 11, 0,
2620 4, 2, 10, -1, 12, -1, 13, 1, 11, 2,
2621 5, -2, 10, 1, 13, -1, 11, 1, 3, -1, 5, 0,
2622 3, 3, 10, -2, 13, 1, 11, 0,
2623 5, -2, 10, 1, 13, -1, 11, 1, 2, -1, 3, 0,
2624 3, 2, 10, 1, 13, -1, 11, 0,
2625 3, -2, 10, -1, 13, 1, 14, 0,
2626 3, 2, 12, -1, 13, -1, 11, 1,
2627 3, 3, 10, 1, 12, -1, 11, 0,
2628 3, 1, 10, -1, 12, 1, 11, 0,
2629 4, -1, 13, -1, 11, 3, 2, -3, 3, 0,
2630 4, -1, 13, -1, 11, 2, 3, -2, 5, 0,
2631 3, 2, 10, -1, 13, 1, 14, 0,
2632 4, -2, 10, -1, 11, 18, 2,-16, 3, 0,
2633 6, 2, 10, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0,
2634 3, 2, 10, -1, 13, 1, 11, 0,
2635 6, -2, 10, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0,
2636 5, 2, 10, -2, 13, 1, 11, 18, 2,-16, 3, 0,
2637 4, -2, 10, 1, 13, -2, 11, 1, 14, 0,
2638 3, 1, 12, -3, 13, 1, 11, 0,
2639 3, 1, 10, 2, 13, -1, 11, 0,
2640 4, 2, 10, 1, 12, 1, 13, -1, 11, 1,
2641 3, 1, 12, -1, 13, -1, 11, 1,
2642 4, -1, 13, -1, 11, 1, 3, -1, 5, 0,
2643 2, 1, 10, 1, 11, 0,
2644 4, 2, 10, 1, 12, -1, 13, 1, 11, 1,
2645 3, 1, 12, 1, 13, -3, 11, 0,
2646 4, -1, 13, -1, 11, 1, 2, -1, 3, 0,
2647 5, 2, 10, -1, 13, 1, 11, 2, 2, -2, 3, 0,
2648 2, 3, 13, -1, 11, 0,
2649 4, 1, 10, 1, 12, -2, 13, -1, 11, 0,
2650 4, 2, 10, 2, 12, 1, 13, -1, 11, 0,
2651 2, 1, 13, 1, 14, 1,
2652 5, 2, 10, -1, 13, 1, 11, 2, 3, -3, 5, 0,
2653 4, -2, 13, -1, 11, 18, 2,-16, 3, 1,
2654 5, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0,
2655 2, 1, 13, 1, 11, 0,
2656 5, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0,
2657 3, 1, 11, 18, 2,-16, 3, 1,
2658 3, -1, 13, -2, 11, 1, 14, 0,
2659 5, 2, 10, -1, 13, 1, 11, 2, 3, -2, 5, 0,
2660 5, 2, 10, -1, 13, 1, 11, 3, 2, -3, 3, 0,
2661 3, 1, 10, 1, 12, 1, 11, 1,
2662 4, 2, 10, 2, 12, -1, 13, 1, 11, 1,
2663 2, 1, 13, -3, 11, 0,
2664 4, 1, 13, 1, 11, 1, 2, -1, 3, 0,
2665 3, 1, 12, 3, 13, -1, 11, 0,
2666 4, 2, 10, 1, 12, -3, 13, -1, 11, 0,
2667 3, 1, 10, -2, 13, -1, 11, 0,
2668 4, 1, 13, 1, 11, 1, 3, -1, 5, 0,
2669 3, 1, 12, 1, 13, 1, 11, 1,
2670 2, 1, 10, -3, 11, 0,
2671 3, 1, 12, -1, 13, 3, 11, 0,
2672 3, 2, 10, -3, 13, -1, 11, 0,
2673 3, 2, 12, 1, 13, 1, 11, 0,
2674 3, 2, 10, -1, 13, -3, 11, 0,
2675 4, 2, 10, -1, 12, -3, 13, -1, 11, 0,
2676 4, 2, 10, -1, 12, -1, 13, -3, 11, 0,
2677 4, 6, 10, -1, 12, -2, 13, -1, 11, 0,
2678 3, 4, 10, -2, 12, -1, 11, 0,
2679 3, 6, 10, -2, 13, -1, 11, 0,
2680 4, 4, 10, -2, 12, -2, 13, 1, 11, 0,
2681 3, 4, 10, -1, 12, -1, 11, 1,
2682 3, 2, 10, -3, 12, 1, 11, 0,
2683 3, 5, 10, -1, 13, -1, 11, 0,
2684 4, 4, 10, -1, 12, -2, 13, 1, 11, 0,
2685 4, 2, 10, -2, 12, 2, 13, -1, 11, 0,
2686 2, 4, 10, -1, 11, 0,
2687 3, 2, 10, -2, 12, 1, 11, 1,
2688 4, 3, 10, -1, 12, -1, 13, 1, 11, 0,
2689 3, 4, 10, -2, 13, 1, 11, 0,
2690 4, 2, 10, -1, 12, 2, 13, -1, 11, 0,
2691 4, -2, 10, -1, 11, 2, 2, -2, 3, 0,
2692 3, 3, 10, 1, 13, -1, 11, 0,
2693 3, 4, 10, 1, 12, -1, 11, 0,
2694 3, 2, 10, -1, 12, 1, 11, 2,
2695 4, -2, 10, -1, 11, 1, 3, -1, 5, 0,
2696 3, 3, 10, -1, 13, 1, 11, 0,
2697 4, 4, 10, 1, 12, -2, 13, 1, 11, 0,
2698 3, 2, 10, 2, 13, -1, 11, 0,
2699 3, 2, 12, -2, 13, -1, 11, 0,
2700 4, 1, 10, -1, 12, 1, 13, 1, 11, 0,
2701 2, 2, 10, 1, 14, 0,
2702 5, -2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0,
2703 2, 2, 10, 1, 11, 1,
2704 5, 2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0,
2705 3, -2, 10, -2, 11, 1, 14, 0,
2706 4, 3, 10, 1, 12, -1, 13, 1, 11, 0,
2707 3, 2, 10, -2, 13, 3, 11, 0,
2708 4, 2, 10, 1, 12, 2, 13, -1, 11, 0,
2709 3, 1, 12, -2, 13, -1, 11, 1,
2710 3, 1, 10, 1, 13, 1, 11, 0,
2711 3, 2, 10, 1, 12, 1, 11, 1,
2712 2, 4, 13, -1, 11, 0,
2713 2, 2, 13, 1, 14, 0,
2714 4, -3, 13, -1, 11, 18, 2,-16, 3, 0,
2715 2, 2, 13, 1, 11, 0,
2716 4, 1, 13, 1, 11, 18, 2,-16, 3, 0,
2717 4, 2, 10, 1, 11, 2, 3, -2, 5, 0,
2718 4, 1, 10, 1, 12, 1, 13, 1, 11, 0,
2719 3, 2, 10, 2, 12, 1, 11, 0,
2720 2, 2, 11, 1, 14, 0,
2721 1, 3, 11, 0,
2722 3, 1, 10, -3, 13, -1, 11, 0,
2723 3, 1, 12, 2, 13, 1, 11, 1,
2724 2, 1, 12, 3, 11, 0,
2725 3, 2, 10, -4, 13, -1, 11, 0,
2726 3, 2, 12, 2, 13, 1, 11, 0,
2727 3, 2, 10, -2, 13, -3, 11, 0,
2728 4, 6, 10, -1, 12, -1, 13, -1, 11, 0,
2729 3, 6, 10, -1, 13, -1, 11, 0,
2730 4, 4, 10, -2, 12, -1, 13, 1, 11, 0,
2731 3, 6, 10, -3, 13, 1, 11, 0,
2732 4, 4, 10, -1, 12, 1, 13, -1, 11, 0,
2733 4, 4, 10, -1, 12, -1, 13, 1, 11, 1,
2734 3, 5, 10, -2, 13, 1, 11, 0,
2735 3, 4, 10, 1, 13, -1, 11, 0,
2736 4, 2, 10, -2, 12, 1, 13, 1, 11, 0,
2737 3, 4, 10, -1, 13, 1, 11, 0,
2738 4, 2, 10, -1, 12, 3, 13, -1, 11, 0,
2739 4, 4, 10, 1, 12, 1, 13, -1, 11, 0,
2740 4, 2, 10, -1, 12, 1, 13, 1, 11, 1,
2741 2, 3, 10, 1, 11, 0,
2742 4, 4, 10, 1, 12, -1, 13, 1, 11, 0,
2743 4, 2, 10, -1, 12, -1, 13, 3, 11, 0,
2744 3, 2, 10, 3, 13, -1, 11, 0,
2745 3, 2, 10, 1, 13, 1, 14, 0,
2746 3, 2, 10, 1, 13, 1, 11, 0,
2747 3, 3, 10, 1, 12, 1, 11, 0,
2748 3, 2, 10, -1, 13, 3, 11, 0,
2749 4, 2, 10, 1, 12, 3, 13, -1, 11, 0,
2750 3, 1, 12, -3, 13, -1, 11, 0,
2751 3, 1, 10, 2, 13, 1, 11, 0,
2752 4, 2, 10, 1, 12, 1, 13, 1, 11, 1,
2753 3, 1, 12, -1, 13, -3, 11, 0,
2754 2, 1, 10, 3, 11, 0,
2755 2, 5, 13, -1, 11, 0,
2756 2, 3, 13, 1, 11, 0,
2757 4, 1, 10, 1, 12, 2, 13, 1, 11, 0,
2758 2, 1, 13, 3, 11, 0,
2759 3, 1, 12, 3, 13, 1, 11, 0,
2760 3, 1, 12, 1, 13, 3, 11, 0,
2761 3, 2, 10, -5, 13, -1, 11, 0,
2762 3, 6, 10, -1, 12, -1, 11, 0,
2763 4, 6, 10, -1, 12, -2, 13, 1, 11, 0,
2764 2, 6, 10, -1, 11, 0,
2765 3, 4, 10, -2, 12, 1, 11, 0,
2766 3, 6, 10, -2, 13, 1, 11, 0,
2767 4, 4, 10, -1, 12, 2, 13, -1, 11, 0,
2768 3, 4, 10, -1, 12, 1, 11, 0,
2769 3, 4, 10, 2, 13, -1, 11, 0,
2770 4, 2, 10, -2, 12, 2, 13, 1, 11, 0,
2771 2, 4, 10, 1, 11, 0,
2772 3, 4, 10, -2, 13, 3, 11, 0,
2773 4, 2, 10, -1, 12, 2, 13, 1, 11, 0,
2774 3, 3, 10, 1, 13, 1, 11, 0,
2775 3, 4, 10, 1, 12, 1, 11, 0,
2776 3, 2, 10, -1, 12, 3, 11, 0,
2777 3, 2, 10, 4, 13, -1, 11, 0,
2778 3, 2, 10, 2, 13, 1, 11, 0,
2779 2, 2, 10, 3, 11, 0,
2780 3, 1, 12, -4, 13, -1, 11, 0,
2781 3, 1, 10, 3, 13, 1, 11, 0,
2782 4, 2, 10, 1, 12, 2, 13, 1, 11, 0,
2783 2, 4, 13, 1, 11, 0,
2784 2, 2, 13, 3, 11, 0,
2785 1, 5, 11, 0,
2786 3, 1, 12, 4, 13, 1, 11, 0,
2787 4, 6, 10, -1, 12, -1, 13, 1, 11, 0,
2788 3, 6, 10, 1, 13, -1, 11, 0,
2789 3, 6, 10, -1, 13, 1, 11, 0,
2790 4, 4, 10, -1, 12, 1, 13, 1, 11, 0,
2791 3, 4, 10, 1, 13, 1, 11, 0,
2792 3, 4, 10, -1, 13, 3, 11, 0,
2793 4, 2, 10, -1, 12, 3, 13, 1, 11, 0,
2794 4, 4, 10, 1, 12, 1, 13, 1, 11, 0,
2795 3, 2, 10, 3, 13, 1, 11, 0,
2796 3, 2, 10, 1, 13, 3, 11, 0,
2797 2, 5, 13, 1, 11, 0,
2798 2, 3, 13, 3, 11, 0,
2799 2, 6, 10, 1, 11, 0,
2800 3, 4, 10, 2, 13, 1, 11, 0,
2801 3, 2, 10, 4, 13, 1, 11, 0,
2802 -1
2803 };
2804 struct plantbl moonlr = {
2805 { 3, 26, 29, 23, 5, 10, 0, 0, 0, 8, 4, 4, 6, 2, 0, 0, 0, 0,},
2806 3,
2807 lrargs,
2808 lrtabl,
2809 lrtabb,
2810 lrtabr,
2811 2.5735686895300000e-03,
2812 3.6525000000000000e+06,
2813 1.0000000000000000e-04,
2814 };
2815
2816 struct plantbl moonlat = {
2817 { 0, 26, 29, 8, 3, 5, 0, 0, 0, 6, 5, 3, 5, 1, 0, 0, 0, 0,},
2818 3,
2819 bargs,
2820 btabl,
2821 btabb,
2822 btabr,
2823 0.0000000000000000e+00,
2824 3.6525000000000000e+06,
2825 1.0000000000000000e-04,
2826 };
2827
2828
2829 /* Reduce arc seconds modulo 360 degrees
2830 answer in arc seconds */
2831 static double
mods3600(double x)2832 mods3600(double x)
2833 {
2834 double y;
2835 #if !defined(__STDC__)
2836 double floor();
2837 #endif
2838
2839 y = x - 1296000. * floor( x/1296000.);
2840 return(y);
2841 }
2842
2843
2844 /* Time argument is Julian ephemeris date. */
2845
2846 static void
mean_elements(double JED)2847 mean_elements (double JED)
2848 {
2849 double x, T, T2;
2850
2851 /* Time variables. T is in Julian centuries. */
2852 T = (JED - MOSHIER_J2000) / 36525.0;
2853 T2 = T*T;
2854
2855 /* Mean longitudes of planets (Simon et al, 1994)
2856 .047" subtracted from constant term for offset to DE403 origin. */
2857
2858 /* Mercury */
2859 x = mods3600( 538101628.6889819 * T + 908103.213 );
2860 x += (6.39e-6 * T
2861 - 0.0192789) * T2;
2862 Args[0] = x;
2863
2864 /* Venus */
2865 x = mods3600( 210664136.4335482 * T + 655127.236 );
2866 x += (-6.27e-6 * T
2867 + 0.0059381) * T2;
2868 Args[1] = x;
2869
2870 /* Earth */
2871 x = mods3600( 129597742.283429 * T + 361679.198 );
2872 x += (-5.23e-6 * T
2873 - 2.04411e-2 ) * T2;
2874 Ea_arcsec = x;
2875 Args[2] = x;
2876
2877 /* Mars */
2878 x = mods3600( 68905077.493988 * T + 1279558.751 );
2879 x += (-1.043e-5 * T
2880 + 0.0094264) * T2;
2881 Args[3] = x;
2882
2883 /* Jupiter */
2884 x = mods3600( 10925660.377991 * T + 123665.420 );
2885 x += ((((-3.4e-10 * T
2886 + 5.91e-8) * T
2887 + 4.667e-6) * T
2888 + 5.706e-5) * T
2889 - 3.060378e-1)*T2;
2890 Args[4] = x;
2891
2892 /* Saturn */
2893 x = mods3600( 4399609.855372 * T + 180278.752 );
2894 x += (((( 8.3e-10 * T
2895 - 1.452e-7) * T
2896 - 1.1484e-5) * T
2897 - 1.6618e-4) * T
2898 + 7.561614E-1)*T2;
2899 Args[5] = x;
2900
2901 /* Uranus */
2902 x = mods3600( 1542481.193933 * T + 1130597.971 )
2903 + (0.00002156*T - 0.0175083)*T2;
2904 Args[6] = x;
2905
2906 /* Neptune */
2907 x = mods3600( 786550.320744 * T + 1095655.149 )
2908 + (-0.00000895*T + 0.0021103)*T2;
2909 Args[7] = x;
2910
2911 /* Copied from cmoon.c, DE404 version. */
2912 /* Mean elongation of moon = D */
2913 x = mods3600( 1.6029616009939659e+09 * T + 1.0722612202445078e+06 );
2914 x += (((((-3.207663637426e-013 * T
2915 + 2.555243317839e-011) * T
2916 + 2.560078201452e-009) * T
2917 - 3.702060118571e-005) * T
2918 + 6.9492746836058421e-03) * T /* D, t^3 */
2919 - 6.7352202374457519e+00) * T2; /* D, t^2 */
2920 Args[9] = x;
2921
2922 /* Mean distance of moon from its ascending node = F */
2923 x = mods3600( 1.7395272628437717e+09 * T + 3.3577951412884740e+05 );
2924 x += ((((( 4.474984866301e-013 * T
2925 + 4.189032191814e-011) * T
2926 - 2.790392351314e-009) * T
2927 - 2.165750777942e-006) * T
2928 - 7.5311878482337989e-04) * T /* F, t^3 */
2929 - 1.3117809789650071e+01) * T2; /* F, t^2 */
2930 NF_arcsec = x;
2931 Args[10] = x;
2932
2933 /* Mean anomaly of sun = l' (J. Laskar) */
2934 x = mods3600(1.2959658102304320e+08 * T + 1.2871027407441526e+06);
2935 x += ((((((((
2936 1.62e-20 * T
2937 - 1.0390e-17 ) * T
2938 - 3.83508e-15 ) * T
2939 + 4.237343e-13 ) * T
2940 + 8.8555011e-11 ) * T
2941 - 4.77258489e-8 ) * T
2942 - 1.1297037031e-5 ) * T
2943 + 8.7473717367324703e-05) * T
2944 - 5.5281306421783094e-01) * T2;
2945 Args[11] = x;
2946
2947 /* Mean anomaly of moon = l */
2948 x = mods3600( 1.7179159228846793e+09 * T + 4.8586817465825332e+05 );
2949 x += (((((-1.755312760154e-012) * T
2950 + 3.452144225877e-011 * T
2951 - 2.506365935364e-008) * T
2952 - 2.536291235258e-004) * T
2953 + 5.2099641302735818e-02) * T /* l, t^3 */
2954 + 3.1501359071894147e+01) * T2; /* l, t^2 */
2955 Args[12] = x;
2956
2957 /* Mean longitude of moon, re mean ecliptic and equinox of date = L */
2958 x = mods3600( 1.7325643720442266e+09 * T + 7.8593980921052420e+05);
2959 x += ((((( 7.200592540556e-014 * T
2960 + 2.235210987108e-010) * T
2961 - 1.024222633731e-008) * T
2962 - 6.073960534117e-005) * T
2963 + 6.9017248528380490e-03) * T /* L, t^3 */
2964 - 5.6550460027471399e+00) * T2; /* L, t^2 */
2965 LP_equinox = x;
2966 Args[13] = x;
2967
2968 /* Precession of the equinox */
2969 x = ((((((((( -8.66e-20*T - 4.759e-17)*T
2970 + 2.424e-15)*T
2971 + 1.3095e-12)*T
2972 + 1.7451e-10)*T
2973 - 1.8055e-8)*T
2974 - 0.0000235316)*T
2975 + 0.000076)*T
2976 + 1.105414)*T
2977 + 5028.791959)*T;
2978 /* Moon's longitude re fixed J2000 equinox. */
2979 /*
2980 Args[13] -= x;
2981 */
2982 pA_precession = x;
2983
2984 /* OM = LP - NF; */
2985
2986 /* Free librations. */
2987 /* LB 2.891725 years, psi amplitude 1.8" */
2988 Args[14] = mods3600( 4.48175409e7 * T + 8.060457e5 );
2989
2990 /* 24.2 years */
2991 Args[15] = mods3600( 5.36486787e6 * T - 391702.8 );
2992
2993 #if 0
2994 /* 27.34907 days */
2995 Args[16] = mods3600( 1.7308227257e9 * T - 4.443583e5 );
2996 #endif
2997 /* LA 74.7 years. */
2998 Args[17] = mods3600( 1.73573e6 * T );
2999 }
3000
3001
3002 /* Prepare lookup table of sin and cos ( i*Lj )
3003 * for required multiple angles
3004 */
3005 static int
sscc(int k,double arg,int n)3006 sscc (int k, double arg, int n)
3007 {
3008 double cu, su, cv, sv, s;
3009 int i;
3010
3011 s = STR * arg;
3012 su = sin (s);
3013 cu = cos (s);
3014 ss[k][0] = su; /* sin(L) */
3015 cc[k][0] = cu; /* cos(L) */
3016 sv = 2.0 * su * cu;
3017 cv = cu * cu - su * su;
3018 ss[k][1] = sv; /* sin(2L) */
3019 cc[k][1] = cv;
3020 for (i = 2; i < n; i++)
3021 {
3022 s = su * cv + cu * sv;
3023 cv = cu * cv - su * sv;
3024 sv = s;
3025 ss[k][i] = sv; /* sin( i+1 L ) */
3026 cc[k][i] = cv;
3027 }
3028 return (0);
3029 }
3030
3031 /* Generic program to accumulate sum of trigonometric series
3032 in two variables (e.g., longitude, radius)
3033 of the same list of arguments. */
3034 static int
g2plan(double J,struct plantbl * plan,double pobj[],int flag)3035 g2plan (double J, struct plantbl *plan, double pobj[], int flag)
3036 {
3037 int i, j, k, m, k1, ip, np, nt;
3038 /* On some systems such as Silicon Graphics, char is unsigned
3039 by default. */
3040 CHAR *p;
3041 long *pl, *pr;
3042 double su, cu, sv, cv;
3043 double t, sl, sr;
3044
3045 mean_elements (J);
3046 /* For librations, moon's longitude is sidereal. */
3047 if (flag)
3048 Args[13] -= pA_precession;
3049
3050 T = (J - MOSHIER_J2000) / plan->timescale;
3051 /* Calculate sin( i*MM ), etc. for needed multiple angles. */
3052 for (i = 0; i < NARGS; i++)
3053 {
3054 if ((j = plan->max_harmonic[i]) > 0)
3055 {
3056 sscc (i, Args[i], j);
3057 }
3058 }
3059
3060 /* Point to start of table of arguments. */
3061 p = plan->arg_tbl;
3062 /* Point to tabulated cosine and sine amplitudes. */
3063 pl = plan->lon_tbl;
3064 pr = plan->rad_tbl;
3065 sl = 0.0;
3066 sr = 0.0;
3067
3068 for (;;)
3069 {
3070 /* argument of sine and cosine */
3071 /* Number of periodic arguments. */
3072 np = *p++;
3073 if (np < 0)
3074 break;
3075 if (np == 0)
3076 { /* It is a polynomial term. */
3077 nt = *p++;
3078 /* Longitude polynomial. */
3079 cu = *pl++;
3080 for (ip = 0; ip < nt; ip++)
3081 {
3082 cu = cu * T + *pl++;
3083 }
3084 /* sl += mods3600 (cu); */
3085 sl += cu;
3086 /* Radius polynomial. */
3087 cu = *pr++;
3088 for (ip = 0; ip < nt; ip++)
3089 {
3090 cu = cu * T + *pr++;
3091 }
3092 sr += cu;
3093 continue;
3094 }
3095 k1 = 0;
3096 cv = 0.0;
3097 sv = 0.0;
3098 for (ip = 0; ip < np; ip++)
3099 {
3100 /* What harmonic. */
3101 j = *p++;
3102 /* Which planet. */
3103 m = *p++ - 1;
3104 if (j)
3105 {
3106 k = abs (j);
3107 k -= 1;
3108 su = ss[m][k]; /* sin(k*angle) */
3109 if (j < 0)
3110 su = -su;
3111 cu = cc[m][k];
3112 if (k1 == 0)
3113 { /* set first angle */
3114 sv = su;
3115 cv = cu;
3116 k1 = 1;
3117 }
3118 else
3119 { /* combine angles */
3120 t = su * cv + cu * sv;
3121 cv = cu * cv - su * sv;
3122 sv = t;
3123 }
3124 }
3125 }
3126 /* Highest power of T. */
3127 nt = *p++;
3128 /* Longitude. */
3129 cu = *pl++;
3130 su = *pl++;
3131 for (ip = 0; ip < nt; ip++)
3132 {
3133 cu = cu * T + *pl++;
3134 su = su * T + *pl++;
3135 }
3136 sl += cu * cv + su * sv;
3137 /* Radius. */
3138 cu = *pr++;
3139 su = *pr++;
3140 for (ip = 0; ip < nt; ip++)
3141 {
3142 cu = cu * T + *pr++;
3143 su = su * T + *pr++;
3144 }
3145 sr += cu * cv + su * sv;
3146 }
3147 t = plan->trunclvl;
3148 pobj[0] = t * sl;
3149 pobj[2] = t * sr;
3150 return (0);
3151 }
3152
3153
3154
3155 /* Generic program to accumulate sum of trigonometric series
3156 in one variable. */
3157
3158 static double
g1plan(double J,struct plantbl * plan)3159 g1plan (double J, struct plantbl *plan)
3160 {
3161 int i, j, k, m, k1, ip, np, nt;
3162 /* On some systems such as Silicon Graphics, char is unsigned
3163 by default. */
3164 CHAR *p;
3165 long *pl;
3166 double su, cu, sv, cv;
3167 double t, sl;
3168
3169 T = (J - MOSHIER_J2000) / plan->timescale;
3170 mean_elements (J);
3171 /* Calculate sin( i*MM ), etc. for needed multiple angles. */
3172 for (i = 0; i < NARGS; i++)
3173 {
3174 if ((j = plan->max_harmonic[i]) > 0)
3175 {
3176 sscc (i, Args[i], j);
3177 }
3178 }
3179
3180 /* Point to start of table of arguments. */
3181 p = plan->arg_tbl;
3182 /* Point to tabulated cosine and sine amplitudes. */
3183 pl = plan->lon_tbl;
3184 sl = 0.0;
3185
3186 for (;;)
3187 {
3188 /* argument of sine and cosine */
3189 /* Number of periodic arguments. */
3190 np = *p++;
3191 if (np < 0)
3192 break;
3193 if (np == 0)
3194 { /* It is a polynomial term. */
3195 nt = *p++;
3196 cu = *pl++;
3197 for (ip = 0; ip < nt; ip++)
3198 {
3199 cu = cu * T + *pl++;
3200 }
3201 /* sl += mods3600 (cu); */
3202 sl += cu;
3203 continue;
3204 }
3205 k1 = 0;
3206 cv = 0.0;
3207 sv = 0.0;
3208 for (ip = 0; ip < np; ip++)
3209 {
3210 /* What harmonic. */
3211 j = *p++;
3212 /* Which planet. */
3213 m = *p++ - 1;
3214 if (j)
3215 {
3216 k = abs (j);
3217 k -= 1;
3218 su = ss[m][k]; /* sin(k*angle) */
3219 if (j < 0)
3220 su = -su;
3221 cu = cc[m][k];
3222 if (k1 == 0)
3223 { /* set first angle */
3224 sv = su;
3225 cv = cu;
3226 k1 = 1;
3227 }
3228 else
3229 { /* combine angles */
3230 t = su * cv + cu * sv;
3231 cv = cu * cv - su * sv;
3232 sv = t;
3233 }
3234 }
3235 }
3236 /* Highest power of T. */
3237 nt = *p++;
3238 /* Cosine and sine coefficients. */
3239 cu = *pl++;
3240 su = *pl++;
3241 for (ip = 0; ip < nt; ip++)
3242 {
3243 cu = cu * T + *pl++;
3244 su = su * T + *pl++;
3245 }
3246 sl += cu * cv + su * sv;
3247 }
3248 return (plan->trunclvl * sl);
3249 }
3250
3251
3252 /* geocentric moon, mean ecliptic and equinox of date
3253 * J is Julian Epemeris Date
3254 * output in pobj[]:
3255 * pobj[0]: l in rad
3256 * pobj[1]: b in rad
3257 * pobj[2]: r in au
3258 */
3259 static int
gecmoon(double J,struct plantbl * lrtab,struct plantbl * lattab,double pobj[])3260 gecmoon (double J, struct plantbl *lrtab, struct plantbl *lattab, double pobj[])
3261 {
3262 double x;
3263
3264 g2plan (J, lrtab, pobj, 0);
3265 x = pobj[0];
3266 x += LP_equinox;
3267 if (x < -6.45e5)
3268 x += 1.296e6;
3269 if (x > 6.45e5)
3270 x -= 1.296e6;
3271 pobj[0] = STR * x;
3272 x = g1plan (J, lattab);
3273 pobj[1] = STR * x;
3274 pobj[2] = (STR * pobj[2] + 1.0) * lrtab->distance;
3275 return 0;
3276 }
3277
3278 /*********** end stephen moshier's moon code ****************/
3279
3280 static void moon_fast (double mj, double *lam, double *bet,
3281 double *hp, double *msp, double *mdp);
3282
3283 /* previous version (elwood):
3284 *
3285 * given the mjd, find the geocentric ecliptic longitude, lam, and latitude,
3286 * bet, and horizontal parallax, hp for the moon. also return the sun's
3287 * mean anomaly, *msp, and the moon's mean anomaly, *mdp.
3288 * N.B. series for long and lat are good to about 10 and 3 arcseconds. however,
3289 * math errors cause up to 100 and 30 arcseconds error, even if use double.
3290 * why?? suspect highly sensitive nature of difference used to get m1..6.
3291 * N.B. still need to correct for nutation. then for topocentric location
3292 * further correct for parallax and refraction.
3293 */
3294 static void
moon_fast(double mj,double * lam,double * bet,double * hp,double * msp,double * mdp)3295 moon_fast (double mj, double *lam, double *bet, double *hp, double *msp,
3296 double *mdp)
3297 {
3298 double t, t2;
3299 double ld;
3300 double ms;
3301 double md;
3302 double de;
3303 double f;
3304 double n;
3305 double a, sa, sn, b, sb, c, sc, e, e2, l, g, w1, w2;
3306 double m1, m2, m3, m4, m5, m6;
3307
3308 t = mj/36525.;
3309 t2 = t*t;
3310
3311 m1 = mj/27.32158213;
3312 m1 = 360.0*(m1-(long)m1);
3313 m2 = mj/365.2596407;
3314 m2 = 360.0*(m2-(long)m2);
3315 m3 = mj/27.55455094;
3316 m3 = 360.0*(m3-(long)m3);
3317 m4 = mj/29.53058868;
3318 m4 = 360.0*(m4-(long)m4);
3319 m5 = mj/27.21222039;
3320 m5 = 360.0*(m5-(long)m5);
3321 m6 = mj/6798.363307;
3322 m6 = 360.0*(m6-(long)m6);
3323
3324 ld = 270.434164+m1-(.001133-.0000019*t)*t2;
3325 ms = 358.475833+m2-(.00015+.0000033*t)*t2;
3326 md = 296.104608+m3+(.009192+.0000144*t)*t2;
3327 de = 350.737486+m4-(.001436-.0000019*t)*t2;
3328 f = 11.250889+m5-(.003211+.0000003*t)*t2;
3329 n = 259.183275-m6+(.002078+.000022*t)*t2;
3330
3331 a = degrad(51.2+20.2*t);
3332 sa = sin(a);
3333 sn = sin(degrad(n));
3334 b = 346.56+(132.87-.0091731*t)*t;
3335 sb = .003964*sin(degrad(b));
3336 c = degrad(n+275.05-2.3*t);
3337 sc = sin(c);
3338 ld = ld+.000233*sa+sb+.001964*sn;
3339 ms = ms-.001778*sa;
3340 md = md+.000817*sa+sb+.002541*sn;
3341 f = f+sb-.024691*sn-.004328*sc;
3342 de = de+.002011*sa+sb+.001964*sn;
3343 e = 1-(.002495+7.52e-06*t)*t;
3344 e2 = e*e;
3345
3346 ld = degrad(ld);
3347 ms = degrad(ms);
3348 n = degrad(n);
3349 de = degrad(de);
3350 f = degrad(f);
3351 md = degrad(md);
3352
3353 l = 6.28875*sin(md)+1.27402*sin(2*de-md)+.658309*sin(2*de)+
3354 .213616*sin(2*md)-e*.185596*sin(ms)-.114336*sin(2*f)+
3355 .058793*sin(2*(de-md))+.057212*e*sin(2*de-ms-md)+
3356 .05332*sin(2*de+md)+.045874*e*sin(2*de-ms)+.041024*e*sin(md-ms);
3357 l = l-.034718*sin(de)-e*.030465*sin(ms+md)+.015326*sin(2*(de-f))-
3358 .012528*sin(2*f+md)-.01098*sin(2*f-md)+.010674*sin(4*de-md)+
3359 .010034*sin(3*md)+.008548*sin(4*de-2*md)-e*.00791*sin(ms-md+2*de)-
3360 e*.006783*sin(2*de+ms);
3361 l = l+.005162*sin(md-de)+e*.005*sin(ms+de)+.003862*sin(4*de)+
3362 e*.004049*sin(md-ms+2*de)+.003996*sin(2*(md+de))+
3363 .003665*sin(2*de-3*md)+e*.002695*sin(2*md-ms)+
3364 .002602*sin(md-2*(f+de))+e*.002396*sin(2*(de-md)-ms)-
3365 .002349*sin(md+de);
3366 l = l+e2*.002249*sin(2*(de-ms))-e*.002125*sin(2*md+ms)-
3367 e2*.002079*sin(2*ms)+e2*.002059*sin(2*(de-ms)-md)-
3368 .001773*sin(md+2*(de-f))-.001595*sin(2*(f+de))+
3369 e*.00122*sin(4*de-ms-md)-.00111*sin(2*(md+f))+.000892*sin(md-3*de);
3370 l = l-e*.000811*sin(ms+md+2*de)+e*.000761*sin(4*de-ms-2*md)+
3371 e2*.000704*sin(md-2*(ms+de))+e*.000693*sin(ms-2*(md-de))+
3372 e*.000598*sin(2*(de-f)-ms)+.00055*sin(md+4*de)+.000538*sin(4*md)+
3373 e*.000521*sin(4*de-ms)+.000486*sin(2*md-de);
3374 l = l+e2*.000717*sin(md-2*ms);
3375 *lam = ld+degrad(l);
3376 range (lam, 2*PI);
3377
3378 g = 5.12819*sin(f)+.280606*sin(md+f)+.277693*sin(md-f)+
3379 .173238*sin(2*de-f)+.055413*sin(2*de+f-md)+.046272*sin(2*de-f-md)+
3380 .032573*sin(2*de+f)+.017198*sin(2*md+f)+.009267*sin(2*de+md-f)+
3381 .008823*sin(2*md-f)+e*.008247*sin(2*de-ms-f);
3382 g = g+.004323*sin(2*(de-md)-f)+.0042*sin(2*de+f+md)+
3383 e*.003372*sin(f-ms-2*de)+e*.002472*sin(2*de+f-ms-md)+
3384 e*.002222*sin(2*de+f-ms)+e*.002072*sin(2*de-f-ms-md)+
3385 e*.001877*sin(f-ms+md)+.001828*sin(4*de-f-md)-e*.001803*sin(f+ms)-
3386 .00175*sin(3*f);
3387 g = g+e*.00157*sin(md-ms-f)-.001487*sin(f+de)-e*.001481*sin(f+ms+md)+
3388 e*.001417*sin(f-ms-md)+e*.00135*sin(f-ms)+.00133*sin(f-de)+
3389 .001106*sin(f+3*md)+.00102*sin(4*de-f)+.000833*sin(f+4*de-md)+
3390 .000781*sin(md-3*f)+.00067*sin(f+4*de-2*md);
3391 g = g+.000606*sin(2*de-3*f)+.000597*sin(2*(de+md)-f)+
3392 e*.000492*sin(2*de+md-ms-f)+.00045*sin(2*(md-de)-f)+
3393 .000439*sin(3*md-f)+.000423*sin(f+2*(de+md))+
3394 .000422*sin(2*de-f-3*md)-e*.000367*sin(ms+f+2*de-md)-
3395 e*.000353*sin(ms+f+2*de)+.000331*sin(f+4*de);
3396 g = g+e*.000317*sin(2*de+f-ms+md)+e2*.000306*sin(2*(de-ms)-f)-
3397 .000283*sin(md+3*f);
3398 w1 = .0004664*cos(n);
3399 w2 = .0000754*cos(c);
3400 *bet = degrad(g)*(1-w1-w2);
3401
3402 *hp = .950724+.051818*cos(md)+.009531*cos(2*de-md)+.007843*cos(2*de)+
3403 .002824*cos(2*md)+.000857*cos(2*de+md)+e*.000533*cos(2*de-ms)+
3404 e*.000401*cos(2*de-md-ms)+e*.00032*cos(md-ms)-.000271*cos(de)-
3405 e*.000264*cos(ms+md)-.000198*cos(2*f-md);
3406 *hp = *hp+.000173*cos(3*md)+.000167*cos(4*de-md)-e*.000111*cos(ms)+
3407 .000103*cos(4*de-2*md)-.000084*cos(2*md-2*de)-
3408 e*.000083*cos(2*de+ms)+.000079*cos(2*de+2*md)+.000072*cos(4*de)+
3409 e*.000064*cos(2*de-ms+md)-e*.000063*cos(2*de+ms-md)+
3410 e*.000041*cos(ms+de);
3411 *hp = *hp+e*.000035*cos(2*md-ms)-.000033*cos(3*md-2*de)-
3412 .00003*cos(md+de)-.000029*cos(2*(f-de))-e*.000029*cos(2*md+ms)+
3413 e2*.000026*cos(2*(de-ms))-.000023*cos(2*(f-de)+md)+
3414 e*.000019*cos(4*de-ms-md);
3415 *hp = degrad(*hp);
3416
3417 *msp = ms;
3418 *mdp = md;
3419 }
3420
3421
3422 #define EarthRadius 6378.16 /* Kilometers */
3423
3424 /* moon() - front end rountine to get moon position; stern
3425 *
3426 * given the mjd, find the geocentric ecliptic longitude, lam, and latitude,
3427 * bet, and geocentric distance, rho in a.u. for the moon. also return
3428 * the sun's mean anomaly, *msp, and the moon's mean anomaly, *mdp.
3429 *
3430 * now uses Stephen Moshier's expansion and code.
3431 *
3432 * TODO: - clarify lunar aberration for apparent places
3433 *
3434 * still need to correct for nutation. then for topocentric location
3435 * further correct for parallax and refraction.
3436 * NB: Do NOT correct for aberration - the geocentric moon frame moves
3437 * along with the earth.
3438 */
3439 void
moon(double mj,double * lam,double * bet,double * rho,double * msp,double * mdp)3440 moon (double mj, double *lam, double *bet, double *rho, double *msp,
3441 double *mdp)
3442 {
3443 double pobj[3], dt;
3444 double hp;
3445
3446 if (mj >= MOSHIER_BEGIN && mj <= MOSHIER_END) {
3447 /* retard for light time */
3448 moon_fast (mj, lam, bet, &hp, msp, mdp);
3449 *rho = EarthRadius/AUKM/sin(hp);
3450 dt = *rho * 5.7755183e-3; /* speed of light in a.u/day */
3451 gecmoon(mj + MJD0 - dt, &moonlr, &moonlat, pobj);
3452
3453 *lam = pobj[0];
3454 range (lam, 2*PI);
3455 *bet = pobj[1];
3456 *rho = pobj[2];
3457 *msp = STR * Args[11]; /* don't need range correction here */
3458 *mdp = STR * Args[12];
3459 } else {
3460 moon_fast (mj, lam, bet, &hp, msp, mdp);
3461 *rho = EarthRadius/AUKM/sin(hp);
3462
3463 }
3464 }
3465
3466