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