remove OSF1 support
[oweals/cde.git] / cde / programs / dtinfo / dtinfogen / infolib / etc / ContentType.C
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these libraries and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: ContentType.C /main/5 1996/08/21 15:57:45 drk $ 
24  *
25  * (c) Copyright 1996 Digital Equipment Corporation.
26  * (c) Copyright 1996 Hewlett-Packard Company.
27  * (c) Copyright 1996 International Business Machines Corp.
28  * (c) Copyright 1996 Sun Microsystems, Inc.
29  * (c) Copyright 1996 Novell, Inc. 
30  * (c) Copyright 1996 FUJITSU LIMITED.
31  * (c) Copyright 1996 Hitachi.
32  */
33
34 /* A lexical scanner generated by flex */
35
36 /* scanner skeleton version:
37  * $Header: /proj/.cde-1/programs/dtinfo/dtinfogen/infolib/etc/ContentType.C /main/5 1996/08/21 15:57:45 drk $
38  */
39
40 #define FLEX_SCANNER
41
42 #include <stdio.h>
43
44
45 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
46 #ifdef c_plusplus
47 #ifndef __cplusplus
48 #define __cplusplus
49 #endif
50 #endif
51
52
53 #ifdef __cplusplus
54
55 #include <stdlib.h>
56
57 #if !defined(linux) && !defined(CSRG_BASED) && !defined(sun)
58 #include <osfcn.h>
59 #endif
60
61 /* use prototypes in function declarations */
62 #define ol_data_USE_PROTOS
63
64 /* the "const" storage-class-modifier is valid */
65 #define ol_data_USE_CONST
66
67 #else   /* ! __cplusplus */
68
69 #ifdef __STDC__
70
71 #ifdef __GNUC__
72 #include <stddef.h>
73 void *malloc( size_t );
74 void free( void* );
75 #else
76 #include <stdlib.h>
77 #endif  /* __GNUC__ */
78
79 #define ol_data_USE_PROTOS
80 #define ol_data_USE_CONST
81
82 #endif  /* __STDC__ */
83 #endif  /* ! __cplusplus */
84
85
86 #ifdef __TURBOC__
87 #define ol_data_USE_CONST
88 #endif
89
90
91 #ifndef ol_data_USE_CONST
92 #define const
93 #endif
94
95
96 #ifdef ol_data_USE_PROTOS
97 #define ol_data_PROTO(proto) proto
98 #else
99 #define ol_data_PROTO(proto) ()
100 /* we can't get here if it's an ANSI C compiler, or a C++ compiler,
101  * so it's got to be a K&R compiler, and therefore there's no standard
102  * place from which to include these definitions
103  */
104 char *malloc();
105 int free();
106 int read();
107 #endif
108
109
110 /* amount of stuff to slurp up with each read */
111 #ifndef ol_data_READ_BUF_SIZE
112 #define ol_data_READ_BUF_SIZE 8192
113 #endif
114
115 /* returned upon end-of-file */
116 #define ol_data_END_TOK 0
117
118 /* copy whatever the last rule matched to the standard output */
119
120 /* cast to (char *) is because for 8-bit chars, ol_datatext is (unsigned char *) */
121 /* this used to be an fputs(), but since the string might contain NUL's,
122  * we now use fwrite()
123  */
124 #define ECHO (void) fwrite( (char *) ol_datatext, ol_dataleng, 1, ol_dataout )
125
126 /* gets input and stuffs it into "buf".  number of characters read, or ol_data_NULL,
127  * is returned in "result".
128  */
129 #define ol_data_INPUT(buf,result,max_size) \
130         if ( (result = read( fileno(ol_datain), (char *) buf, max_size )) < 0 ) \
131             ol_data_FATAL_ERROR( "read() in flex scanner failed" );
132 #define ol_data_NULL 0
133
134 /* no semi-colon after return; correct usage is to write "ol_dataterminate();" -
135  * we don't want an extra ';' after the "return" because that will cause
136  * some compilers to complain about unreachable statements.
137  */
138 #define ol_dataterminate() return ( ol_data_NULL )
139
140 /* report a fatal error */
141
142 /* The funky do-while is used to turn this macro definition into
143  * a single C statement (which needs a semi-colon terminator).
144  * This avoids problems with code like:
145  *
146  *      if ( something_happens )
147  *              ol_data_FATAL_ERROR( "oops, the something happened" );
148  *      else
149  *              everything_okay();
150  *
151  * Prior to using the do-while the compiler would get upset at the
152  * "else" because it interpreted the "if" statement as being all
153  * done when it reached the ';' after the ol_data_FATAL_ERROR() call.
154  */
155
156 #define ol_data_FATAL_ERROR(msg) \
157         do \
158                 { \
159                 (void) fputs( msg, stderr ); \
160                 (void) putc( '\n', stderr ); \
161                 exit( 1 ); \
162                 } \
163         while ( 0 )
164
165 /* default ol_datawrap function - always treat EOF as an EOF */
166 #define ol_datawrap() 1
167
168 /* enter a start condition.  This macro really ought to take a parameter,
169  * but we do it the disgusting crufty way forced on us by the ()-less
170  * definition of BEGIN
171  */
172 #define BEGIN ol_data_start = 1 + 2 *
173
174 /* action number for EOF rule of a given start state */
175 #define ol_data_STATE_EOF(state) (ol_data_END_OF_BUFFER + state + 1)
176
177 /* special action meaning "start processing a new file" */
178 #define ol_data_NEW_FILE \
179         do \
180                 { \
181                 ol_data_init_buffer( ol_data_current_buffer, ol_datain ); \
182                 ol_data_load_buffer_state(); \
183                 } \
184         while ( 0 )
185
186 /* default declaration of generated scanner - a define so the user can
187  * easily add parameters
188  */
189 #define ol_data_DECL int ol_datalex ol_data_PROTO(( void )) 
190
191 /* code executed at the end of each rule */
192 #define ol_data_BREAK break;
193
194 #define ol_data_END_OF_BUFFER_CHAR 0
195
196 #ifndef ol_data_BUF_SIZE
197 #define ol_data_BUF_SIZE (ol_data_READ_BUF_SIZE * 2) /* size of default input buffer */
198 #endif
199
200 typedef struct ol_data_buffer_state *ol_data_BUFFER_STATE;
201
202 #define ol_data_CHAR unsigned char
203 #define INITIAL 0
204 #include <iostream>
205 #include <sstream>
206 using namespace std;
207 #include <stdio.h>
208 #include <memory.h>
209 #include <string.h>
210 #include <stdlib.h>
211 #include <assert.h>  
212
213 #include "Exceptions.hh"
214
215 #include "Task.h"  
216 #include "SGMLName.h"  
217 #include "ExprList.h"
218 #include "Expression.h"
219 #include "OL_DataExpr.tab.h"
220 #include "ContentType.h"
221 #include "api/utility.h"
222   
223 /* CurrentContentPtr is used as the communication media between
224  * ol_dataparse and ContentType::Parse()
225  */
226
227 ContentType *CurrentContentPtr;
228   
229 /*
230  * Forward declaration for my_input
231  */
232 static int my_input ( char *, int );
233 extern       int ol_dataparse();
234
235   
236 #undef ol_data_INPUT
237 #define ol_data_INPUT(b, r, ms ) ( r=my_input( ( char *)b,ms) )
238   
239 static char *myinput;
240 static char *myinputptr;
241 static char *myinputlim;
242
243 // Debugging macro
244 #ifdef DEBUG
245 #define DBG(level) if ( dbgLevel >= level)
246 #else
247 #define DBG(level) if (0)
248 #endif
249
250 static int dbgLevel = -1;
251
252 static short int ol_data_nxt[][256] =
253     {
254      {  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
255         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
256         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
257         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
258         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
259         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
260         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
261         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
262         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
263         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
264
265         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
266         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
267         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
268         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
269         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
270         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
271         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
272         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
273         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
274         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
275
276         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
277         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
278         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
279         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
280         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
281         0,    0,    0,    0,    0,    0 },
282
283      {  3,    4,    4,    4,    4,    4,    4,    4,    4,    5,
284         6,    4,    4,    4,    4,    4,    4,    4,    4,    4,
285         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
286         4,    4,    5,    4,    7,    8,    4,    4,    4,    9,
287        10,   10,    4,    4,   10,    4,    4,    4,    4,    4,
288         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
289         4,    4,    4,    4,   11,   12,    4,   13,    4,    4,
290        14,    4,    4,    4,    4,    4,    4,    4,    4,    4,
291         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
292         4,    4,    4,    4,    4,    4,    4,   12,    4,   13,
293
294         4,    4,   14,    4,    4,    4,    4,    4,    4,    4,
295         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
296         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
297         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
298         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
299         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
300         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
301         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
302         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
303         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
304
305         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
306         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
307         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
308         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
309         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
310         4,    4,    4,    4,    4,    4 },
311
312      {  3,    4,    4,    4,    4,    4,    4,    4,    4,    5,
313         6,    4,    4,    4,    4,    4,    4,    4,    4,    4,
314         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
315         4,    4,    5,    4,    7,    8,    4,    4,    4,    9,
316        10,   10,    4,    4,   10,    4,    4,    4,    4,    4,
317         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
318         4,    4,    4,    4,   11,   12,    4,   13,    4,    4,
319        14,    4,    4,    4,    4,    4,    4,    4,    4,    4,
320         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
321         4,    4,    4,    4,    4,    4,    4,   12,    4,   13,
322
323         4,    4,   14,    4,    4,    4,    4,    4,    4,    4,
324         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
325         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
326         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
327         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
328         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
329         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
330         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
331         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
332         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
333
334         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
335         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
336         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
337         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
338         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
339         4,    4,    4,    4,    4,    4 },
340
341      { -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
342        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
343        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
344        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
345        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
346        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
347        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
348        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
349        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
350        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
351
352        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
353        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
354        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
355        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
356        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
357        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
358        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
359        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
360        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
361        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
362
363        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
364        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
365        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
366        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
367        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
368        -3,   -3,   -3,   -3,   -3,   -3 },
369
370      {  3,   15,   15,   15,   15,   15,   15,   15,   15,   -4,
371        -4,   15,   15,   15,   15,   15,   15,   15,   15,   15,
372        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
373        15,   15,   -4,   15,   15,   15,   15,   15,   15,   15,
374        -4,   -4,   15,   15,   -4,   15,   15,   15,   15,   15,
375        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
376        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
377        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
378        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
379        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
380
381        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
382        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
383        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
384        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
385        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
386        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
387        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
388        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
389        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
390        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
391
392        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
393        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
394        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
395        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
396        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
397        15,   15,   15,   15,   15,   15 },
398
399      {  3,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   16,
400        16,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
401        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
402        -5,   -5,   16,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
403        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
404        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
405        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
406        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
407        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
408        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
409
410        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
411        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
412        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
413        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
414        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
415        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
416        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
417        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
418        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
419        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
420
421        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
422        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
423        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
424        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
425        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
426        -5,   -5,   -5,   -5,   -5,   -5 },
427
428      {  3,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   16,
429        16,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
430        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
431        -6,   -6,   16,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
432        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
433        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
434        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
435        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
436        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
437        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
438
439        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
440        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
441        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
442        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
443        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
444        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
445        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
446        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
447        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
448        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
449
450        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
451        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
452        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
453        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
454        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
455        -6,   -6,   -6,   -6,   -6,   -6 },
456
457      {  3,   17,   17,   17,   17,   17,   17,   17,   17,   18,
458        18,   17,   17,   17,   17,   17,   17,   17,   17,   17,
459        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
460        17,   17,   18,   17,   19,   17,   17,   17,   17,   17,
461        18,   18,   17,   17,   18,   17,   17,   17,   17,   17,
462        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
463        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
464        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
465        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
466        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
467
468        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
469        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
470        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
471        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
472        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
473        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
474        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
475        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
476        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
477        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
478
479        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
480        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
481        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
482        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
483        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
484        17,   17,   17,   17,   17,   17 },
485
486      {  3,   15,   15,   15,   15,   15,   15,   15,   15,   -8,
487        -8,   15,   15,   15,   15,   15,   15,   15,   15,   15,
488        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
489        15,   15,   -8,   15,   15,   15,   15,   15,   15,   15,
490        -8,   -8,   15,   15,   -8,   15,   15,   15,   15,   15,
491        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
492        15,   15,   15,   15,   15,   15,   15,   20,   15,   15,
493        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
494        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
495        15,   15,   15,   15,   15,   15,   15,   15,   15,   20,
496
497        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
498        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
499        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
500        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
501        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
502        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
503        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
504        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
505        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
506        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
507
508        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
509        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
510        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
511        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
512        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
513        15,   15,   15,   15,   15,   15 },
514
515      {  3,   21,   21,   21,   21,   21,   21,   21,   21,   22,
516        22,   21,   21,   21,   21,   21,   21,   21,   21,   21,
517        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
518        21,   21,   22,   21,   21,   21,   21,   21,   21,   23,
519        22,   22,   21,   21,   22,   21,   21,   21,   21,   21,
520        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
521        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
522        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
523        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
524        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
525
526        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
527        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
528        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
529        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
530        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
531        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
532        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
533        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
534        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
535        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
536
537        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
538        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
539        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
540        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
541        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
542        21,   21,   21,   21,   21,   21 },
543
544      {  3,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
545       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
546       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
547       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
548       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
549       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
550       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
551       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
552       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
553       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
554
555       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
556       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
557       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
558       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
559       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
560       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
561       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
562       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
563       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
564       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
565
566       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
567       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
568       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
569       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
570       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
571       -10,  -10,  -10,  -10,  -10,  -10 },
572
573      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -11,
574       -11,   15,   15,   15,   15,   15,   15,   15,   15,   15,
575        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
576        15,   15,  -11,   15,   15,   15,   15,   15,   15,   15,
577       -11,  -11,   15,   15,  -11,   15,   15,   15,   24,   24,
578        24,   24,   24,   24,   24,   24,   24,   24,   15,   15,
579        15,   15,   15,   15,   15,   24,   24,   24,   24,   24,
580        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
581        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
582        24,   15,   15,   15,   15,   15,   15,   24,   24,   24,
583
584        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
585        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
586        24,   24,   24,   15,   15,   15,   15,   15,   15,   15,
587        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
588        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
589        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
590        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
591        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
592        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
593        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
594
595        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
596        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
597        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
598        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
599        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
600        15,   15,   15,   15,   15,   15 },
601
602      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -12,
603       -12,   15,   15,   15,   15,   15,   15,   15,   15,   15,
604        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
605        15,   15,  -12,   15,   15,   15,   15,   15,   15,   15,
606       -12,  -12,   15,   15,  -12,   15,   15,   15,   15,   15,
607        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
608        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
609        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
610        15,   15,   15,   15,   25,   15,   15,   15,   15,   15,
611        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
612
613        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
614        15,   15,   15,   15,   15,   15,   25,   15,   15,   15,
615        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
616        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
617        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
618        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
619        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
620        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
621        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
622        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
623
624        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
625        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
626        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
627        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
628        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
629        15,   15,   15,   15,   15,   15 },
630
631      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -13,
632       -13,   15,   15,   15,   15,   15,   15,   15,   15,   15,
633        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
634        15,   15,  -13,   15,   15,   15,   15,   15,   15,   15,
635       -13,  -13,   15,   15,  -13,   15,   15,   15,   15,   15,
636        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
637        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
638        15,   15,   15,   15,   15,   15,   15,   15,   15,   26,
639        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
640        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
641
642        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
643        15,   26,   15,   15,   15,   15,   15,   15,   15,   15,
644        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
645        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
646        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
647        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
648        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
649        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
650        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
651        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
652
653        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
654        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
655        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
656        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
657        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
658        15,   15,   15,   15,   15,   15 },
659
660      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -14,
661       -14,   15,   15,   15,   15,   15,   15,   15,   15,   15,
662        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
663        15,   15,  -14,   15,   15,   15,   15,   15,   15,   15,
664       -14,  -14,   15,   15,  -14,   15,   15,   15,   15,   15,
665        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
666        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
667        15,   15,   15,   27,   15,   15,   15,   15,   15,   15,
668        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
669        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
670
671        15,   15,   15,   15,   15,   27,   15,   15,   15,   15,
672        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
673        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
674        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
675        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
676        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
677        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
678        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
679        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
680        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
681
682        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
683        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
684        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
685        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
686        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
687        15,   15,   15,   15,   15,   15 },
688
689      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -15,
690       -15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
691        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
692        15,   15,  -15,   15,   15,   15,   15,   15,   15,   15,
693       -15,  -15,   15,   15,  -15,   15,   15,   15,   15,   15,
694        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
695        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
696        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
697        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
698        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
699
700        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
701        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
702        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
703        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
704        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
705        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
706        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
707        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
708        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
709        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
710
711        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
712        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
713        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
714        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
715        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
716        15,   15,   15,   15,   15,   15 },
717
718      {  3,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,   16,
719        16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
720       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
721       -16,  -16,   16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
722       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
723       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
724       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
725       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
726       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
727       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
728
729       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
730       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
731       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
732       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
733       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
734       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
735       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
736       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
737       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
738       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
739
740       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
741       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
742       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
743       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
744       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
745       -16,  -16,  -16,  -16,  -16,  -16 },
746
747      {  3,   17,   17,   17,   17,   17,   17,   17,   17,   18,
748        18,   17,   17,   17,   17,   17,   17,   17,   17,   17,
749        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
750        17,   17,   18,   17,   19,   17,   17,   17,   17,   17,
751        18,   18,   17,   17,   18,   17,   17,   17,   17,   17,
752        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
753        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
754        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
755        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
756        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
757
758        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
759        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
760        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
761        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
762        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
763        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
764        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
765        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
766        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
767        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
768
769        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
770        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
771        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
772        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
773        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
774        17,   17,   17,   17,   17,   17 },
775
776      {  3,   18,   18,   18,   18,   18,   18,   18,   18,   18,
777        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
778        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
779        18,   18,   18,   18,   28,   18,   18,   18,   18,   18,
780        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
781        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
782        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
783        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
784        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
785        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
786
787        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
788        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
789        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
790        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
791        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
792        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
793        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
794        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
795        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
796        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
797
798        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
799        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
800        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
801        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
802        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
803        18,   18,   18,   18,   18,   18 },
804
805      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -19,
806       -19,   15,   15,   15,   15,   15,   15,   15,   15,   15,
807        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
808        15,   15,  -19,   15,   15,   15,   15,   15,   15,   15,
809       -19,  -19,   15,   15,  -19,   15,   15,   15,   15,   15,
810        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
811        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
812        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
813        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
814        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
815
816        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
817        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
818        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
819        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
820        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
821        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
822        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
823        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
824        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
825        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
826
827        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
828        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
829        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
830        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
831        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
832        15,   15,   15,   15,   15,   15 },
833
834      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -20,
835       -20,   15,   15,   15,   15,   15,   15,   15,   15,   15,
836        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
837        15,   15,  -20,   15,   15,   15,   15,   15,   15,   15,
838       -20,  -20,   15,   15,  -20,   15,   15,   15,   15,   15,
839        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
840        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
841        15,   15,   15,   15,   15,   15,   15,   15,   15,   29,
842        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
843        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
844
845        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
846        15,   29,   15,   15,   15,   15,   15,   15,   15,   15,
847        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
848        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
849        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
850        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
851        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
852        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
853        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
854        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
855
856        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
857        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
858        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
859        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
860        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
861        15,   15,   15,   15,   15,   15 },
862
863      {  3,   21,   21,   21,   21,   21,   21,   21,   21,   22,
864        22,   21,   21,   21,   21,   21,   21,   21,   21,   21,
865        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
866        21,   21,   22,   21,   21,   21,   21,   21,   21,   23,
867        22,   22,   21,   21,   22,   21,   21,   21,   21,   21,
868        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
869        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
870        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
871        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
872        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
873
874        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
875        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
876        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
877        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
878        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
879        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
880        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
881        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
882        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
883        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
884
885        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
886        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
887        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
888        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
889        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
890        21,   21,   21,   21,   21,   21 },
891
892      {  3,   22,   22,   22,   22,   22,   22,   22,   22,   22,
893        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
894        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
895        22,   22,   22,   22,   22,   22,   22,   22,   22,   30,
896        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
897        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
898        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
899        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
900        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
901        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
902
903        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
904        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
905        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
906        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
907        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
908        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
909        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
910        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
911        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
912        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
913
914        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
915        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
916        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
917        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
918        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
919        22,   22,   22,   22,   22,   22 },
920
921      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -23,
922       -23,   15,   15,   15,   15,   15,   15,   15,   15,   15,
923        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
924        15,   15,  -23,   15,   15,   15,   15,   15,   15,   15,
925       -23,  -23,   15,   15,  -23,   15,   15,   15,   15,   15,
926        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
927        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
928        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
929        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
930        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
931
932        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
933        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
934        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
935        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
936        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
937        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
938        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
939        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
940        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
941        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
942
943        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
944        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
945        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
946        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
947        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
948        15,   15,   15,   15,   15,   15 },
949
950      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -24,
951       -24,   15,   15,   15,   15,   15,   15,   15,   15,   15,
952        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
953        15,   15,  -24,   15,   15,   15,   15,   15,   15,   15,
954       -24,  -24,   15,   15,  -24,   15,   15,   15,   24,   24,
955        24,   24,   24,   24,   24,   24,   24,   24,   15,   15,
956        15,   15,   15,   15,   15,   24,   24,   24,   24,   24,
957        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
958        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
959        24,   15,   15,   15,   15,   15,   15,   24,   24,   24,
960
961        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
962        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
963        24,   24,   24,   15,   15,   15,   15,   15,   15,   15,
964        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
965        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
966        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
967        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
968        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
969        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
970        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
971
972        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
973        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
974        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
975        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
976        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
977        15,   15,   15,   15,   15,   15 },
978
979      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -25,
980       -25,   15,   15,   15,   15,   15,   15,   15,   15,   15,
981        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
982        15,   15,  -25,   15,   15,   15,   15,   15,   15,   15,
983       -25,  -25,   15,   15,  -25,   15,   15,   15,   15,   15,
984        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
985        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
986        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
987        15,   15,   15,   15,   31,   15,   15,   15,   15,   15,
988        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
989
990        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
991        15,   15,   15,   15,   15,   15,   31,   15,   15,   15,
992        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
993        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
994        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
995        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
996        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
997        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
998        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
999        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1000
1001        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1002        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1003        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1004        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1005        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1006        15,   15,   15,   15,   15,   15 },
1007
1008      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -26,
1009       -26,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1010        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1011        15,   15,  -26,   15,   15,   15,   15,   15,   15,   15,
1012       -26,  -26,   15,   15,  -26,   15,   15,   15,   15,   15,
1013        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1014        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1015        15,   15,   15,   15,   15,   15,   15,   15,   32,   15,
1016        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1017        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1018
1019        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1020        32,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1021        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1022        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1023        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1024        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1025        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1026        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1027        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1028        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1029
1030        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1031        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1032        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1033        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1034        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1035        15,   15,   15,   15,   15,   15 },
1036
1037      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -27,
1038       -27,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1039        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1040        15,   15,  -27,   15,   15,   15,   15,   15,   15,   15,
1041       -27,  -27,   15,   15,  -27,   15,   15,   15,   15,   15,
1042        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1043        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1044        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1045        15,   15,   33,   15,   15,   15,   15,   15,   15,   15,
1046        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1047
1048        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1049        15,   15,   15,   15,   33,   15,   15,   15,   15,   15,
1050        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1051        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1052        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1053        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1054        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1055        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1056        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1057        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1058
1059        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1060        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1061        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1062        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1063        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1064        15,   15,   15,   15,   15,   15 },
1065
1066      {  3,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1067       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1068       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1069       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1070       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1071       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1072       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1073       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1074       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1075       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1076
1077       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1078       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1079       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1080       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1081       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1082       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1083       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1084       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1085       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1086       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1087
1088       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1089       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1090       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1091       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1092       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1093       -28,  -28,  -28,  -28,  -28,  -28 },
1094
1095      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -29,
1096       -29,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1097        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1098        15,   15,  -29,   15,   15,   15,   15,   15,   15,   15,
1099       -29,  -29,   15,   15,  -29,   15,   15,   15,   15,   15,
1100        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1101        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1102        15,   15,   15,   15,   15,   15,   15,   15,   34,   15,
1103        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1104        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1105
1106        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1107        34,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1108        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1109        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1110        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1111        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1112        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1113        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1114        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1115        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1116
1117        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1118        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1119        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1120        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1121        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1122        15,   15,   15,   15,   15,   15 },
1123
1124      {  3,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1125       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1126       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1127       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1128       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1129       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1130       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1131       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1132       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1133       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1134
1135       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1136       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1137       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1138       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1139       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1140       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1141       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1142       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1143       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1144       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1145
1146       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1147       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1148       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1149       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1150       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1151       -30,  -30,  -30,  -30,  -30,  -30 },
1152
1153      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -31,
1154       -31,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1155        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1156        15,   15,  -31,   15,   15,   15,   15,   15,   15,   15,
1157       -31,  -31,   15,   15,  -31,   15,   15,   15,   15,   15,
1158        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1159        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1160        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1161        15,   15,   35,   15,   15,   15,   15,   15,   15,   15,
1162        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1163
1164        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1165        15,   15,   15,   15,   35,   15,   15,   15,   15,   15,
1166        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1167        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1168        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1169        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1170        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1171        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1172        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1173        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1174
1175        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1176        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1177        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1178        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1179        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1180        15,   15,   15,   15,   15,   15 },
1181
1182      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -32,
1183       -32,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1184        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1185        15,   15,  -32,   15,   15,   15,   15,   15,   15,   15,
1186       -32,  -32,   15,   15,  -32,   15,   15,   15,   15,   15,
1187        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1188        15,   15,   15,   15,   15,   15,   15,   36,   15,   15,
1189        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1190        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1191        15,   15,   15,   15,   15,   15,   15,   15,   15,   36,
1192
1193        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1194        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1195        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1196        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1197        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1198        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1199        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1200        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1201        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1202        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1203
1204        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1205        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1206        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1207        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1208        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1209        15,   15,   15,   15,   15,   15 },
1210
1211      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -33,
1212       -33,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1213        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1214        15,   15,  -33,   15,   15,   15,   15,   15,   15,   15,
1215       -33,  -33,   15,   15,  -33,   15,   15,   15,   15,   15,
1216        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1217        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1218        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1219        15,   15,   15,   37,   15,   15,   15,   15,   15,   15,
1220        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1221
1222        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1223        15,   15,   15,   15,   15,   37,   15,   15,   15,   15,
1224        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1225        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1226        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1227        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1228        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1229        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1230        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1231        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1232
1233        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1234        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1235        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1236        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1237        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1238        15,   15,   15,   15,   15,   15 },
1239
1240      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -34,
1241       -34,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1242        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1243        15,   15,  -34,   15,   15,   15,   15,   15,   15,   15,
1244       -34,  -34,   15,   15,  -34,   15,   15,   15,   15,   15,
1245        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1246        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1247        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1248        15,   15,   15,   15,   38,   15,   15,   15,   15,   15,
1249        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1250
1251        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1252        15,   15,   15,   15,   15,   15,   38,   15,   15,   15,
1253        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1254        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1255        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1256        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1257        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1258        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1259        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1260        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1261
1262        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1263        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1264        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1265        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1266        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1267        15,   15,   15,   15,   15,   15 },
1268
1269      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -35,
1270       -35,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1271        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1272        15,   15,  -35,   15,   15,   15,   15,   15,   15,   15,
1273       -35,  -35,   15,   15,  -35,   15,   15,   15,   15,   15,
1274        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1275        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1276        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1277        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1278        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1279
1280        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1281        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1282        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1283        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1284        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1285        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1286        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1287        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1288        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1289        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1290
1291        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1292        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1293        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1294        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1295        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1296        15,   15,   15,   15,   15,   15 },
1297
1298      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -36,
1299       -36,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1300        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1301        15,   15,  -36,   15,   15,   15,   15,   15,   15,   15,
1302       -36,  -36,   15,   15,  -36,   15,   15,   15,   15,   15,
1303        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1304        15,   15,   15,   15,   15,   39,   15,   15,   15,   15,
1305        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1306        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1307        15,   15,   15,   15,   15,   15,   15,   39,   15,   15,
1308
1309        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1310        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1311        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1312        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1313        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1314        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1315        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1316        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1317        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1318        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1319
1320        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1321        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1322        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1323        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1324        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1325        15,   15,   15,   15,   15,   15 },
1326
1327      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -37,
1328       -37,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1329        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1330        15,   15,  -37,   15,   15,   15,   15,   15,   15,   15,
1331       -37,  -37,   15,   15,  -37,   15,   15,   15,   15,   15,
1332        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1333        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1334        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1335        15,   15,   15,   15,   40,   15,   15,   15,   15,   15,
1336        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1337
1338        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1339        15,   15,   15,   15,   15,   15,   40,   15,   15,   15,
1340        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1341        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1342        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1343        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1344        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1345        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1346        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1347        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1348
1349        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1350        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1351        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1352        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1353        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1354        15,   15,   15,   15,   15,   15 },
1355
1356      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -38,
1357       -38,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1358        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1359        15,   15,  -38,   15,   15,   15,   15,   15,   15,   15,
1360       -38,  -38,   15,   15,  -38,   15,   15,   15,   15,   15,
1361        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1362        15,   15,   15,   15,   15,   15,   15,   15,   15,   41,
1363        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1364        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1365        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1366
1367        15,   41,   15,   15,   15,   15,   15,   15,   15,   15,
1368        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1369        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1370        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1371        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1372        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1373        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1374        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1375        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1376        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1377
1378        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1379        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1380        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1381        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1382        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1383        15,   15,   15,   15,   15,   15 },
1384
1385      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -39,
1386       -39,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1387        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1388        15,   15,  -39,   15,   15,   15,   15,   15,   15,   15,
1389       -39,  -39,   15,   15,  -39,   15,   15,   15,   15,   15,
1390        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1391        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1392        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1393        15,   15,   15,   15,   42,   15,   15,   15,   15,   15,
1394        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1395
1396        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1397        15,   15,   15,   15,   15,   15,   42,   15,   15,   15,
1398        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1399        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1400        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1401        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1402        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1403        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1404        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1405        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1406
1407        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1408        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1409        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1410        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1411        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1412        15,   15,   15,   15,   15,   15 },
1413
1414      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -40,
1415       -40,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1416        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1417        15,   15,  -40,   15,   15,   15,   15,   15,   15,   15,
1418       -40,  -40,   15,   15,  -40,   15,   15,   15,   15,   15,
1419        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1420        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1421        15,   15,   15,   15,   15,   15,   15,   15,   15,   43,
1422        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1423        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1424
1425        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1426        15,   43,   15,   15,   15,   15,   15,   15,   15,   15,
1427        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1428        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1429        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1430        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1431        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1432        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1433        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1434        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1435
1436        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1437        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1438        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1439        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1440        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1441        15,   15,   15,   15,   15,   15 },
1442
1443      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -41,
1444       -41,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1445        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1446        15,   15,  -41,   15,   15,   15,   15,   15,   15,   15,
1447       -41,  -41,   15,   15,  -41,   15,   15,   15,   15,   15,
1448        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1449        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1450        15,   15,   15,   15,   15,   15,   15,   15,   44,   15,
1451        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1452        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1453
1454        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1455        44,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1456        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1457        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1458        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1459        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1460        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1461        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1462        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1463        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1464
1465        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1466        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1467        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1468        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1469        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1470        15,   15,   15,   15,   15,   15 },
1471
1472      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -42,
1473       -42,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1474        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1475        15,   15,  -42,   15,   15,   15,   15,   15,   15,   15,
1476       -42,  -42,   15,   15,  -42,   15,   15,   15,   15,   15,
1477        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1478        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1479        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1480        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1481        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1482
1483        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1484        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1485        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1486        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1487        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1488        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1489        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1490        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1491        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1492        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1493
1494        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1495        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1496        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1497        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1498        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1499        15,   15,   15,   15,   15,   15 },
1500
1501      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -43,
1502       -43,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1503        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1504        15,   15,  -43,   15,   15,   15,   15,   15,   15,   15,
1505       -43,  -43,   15,   15,  -43,   15,   15,   15,   15,   15,
1506        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1507        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1508        45,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1509        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1510        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1511
1512        15,   15,   45,   15,   15,   15,   15,   15,   15,   15,
1513        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1514        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1515        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1516        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1517        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1518        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1519        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1520        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1521        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1522
1523        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1524        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1525        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1526        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1527        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1528        15,   15,   15,   15,   15,   15 },
1529
1530      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -44,
1531       -44,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1532        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1533        15,   15,  -44,   15,   15,   15,   15,   15,   15,   15,
1534       -44,  -44,   15,   15,  -44,   15,   15,   15,   15,   15,
1535        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1536        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1537        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1538        15,   15,   15,   15,   46,   15,   15,   15,   15,   15,
1539        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1540
1541        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1542        15,   15,   15,   15,   15,   15,   46,   15,   15,   15,
1543        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1544        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1545        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1546        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1547        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1548        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1549        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1550        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1551
1552        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1553        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1554        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1555        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1556        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1557        15,   15,   15,   15,   15,   15 },
1558
1559      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -45,
1560       -45,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1561        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1562        15,   15,  -45,   15,   15,   15,   15,   15,   15,   15,
1563       -45,  -45,   15,   15,  -45,   15,   15,   15,   15,   15,
1564        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1565        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1566        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1567        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1568        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1569
1570        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1571        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1572        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1573        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1574        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1575        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1576        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1577        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1578        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1579        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1580
1581        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1582        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1583        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1584        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1585        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1586        15,   15,   15,   15,   15,   15 },
1587
1588      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -46,
1589       -46,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1590        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1591        15,   15,  -46,   15,   15,   15,   15,   15,   15,   15,
1592       -46,  -46,   15,   15,  -46,   15,   15,   15,   15,   15,
1593        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1594        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1595        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1596        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1597        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1598
1599        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1600        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1601        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1602        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1603        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1604        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1605        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1606        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1607        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1608        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1609
1610        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1611        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1612        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1613        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1614        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1615        15,   15,   15,   15,   15,   15 }
1616
1617     } ;
1618
1619
1620 /* done after the current pattern has been matched and before the
1621  * corresponding action - sets up ol_datatext
1622  */
1623 #define ol_data_DO_BEFORE_ACTION \
1624         ol_datatext = ol_data_bp; \
1625         ol_dataleng = ol_data_cp - ol_data_bp; \
1626         ol_data_hold_char = *ol_data_cp; \
1627         *ol_data_cp = '\0'; \
1628         ol_data_c_buf_p = ol_data_cp;
1629
1630 #define EOB_ACT_CONTINUE_SCAN 0
1631 #define EOB_ACT_END_OF_FILE 1
1632 #define EOB_ACT_LAST_MATCH 2
1633
1634 /* return all but the first 'n' matched characters back to the input stream */
1635 #define ol_dataless(n) \
1636         do \
1637                 { \
1638                 /* undo effects of setting up ol_datatext */ \
1639                 *ol_data_cp = ol_data_hold_char; \
1640                 ol_data_c_buf_p = ol_data_cp = ol_data_bp + n; \
1641                 ol_data_DO_BEFORE_ACTION; /* set up ol_datatext again */ \
1642                 } \
1643         while ( 0 )
1644
1645 #define unput(c) ol_dataunput( c, ol_datatext )
1646
1647
1648 struct ol_data_buffer_state
1649     {
1650     FILE *ol_data_input_file;
1651
1652     ol_data_CHAR *ol_data_ch_buf;               /* input buffer */
1653     ol_data_CHAR *ol_data_buf_pos;      /* current position in input buffer */
1654
1655     /* size of input buffer in bytes, not including room for EOB characters*/
1656     int ol_data_buf_size;       
1657
1658     /* number of characters read into ol_data_ch_buf, not including EOB characters */
1659     int ol_data_n_chars;
1660
1661     int ol_data_eof_status;             /* whether we've seen an EOF on this buffer */
1662 #define EOF_NOT_SEEN 0
1663     /* "pending" happens when the EOF has been seen but there's still
1664      * some text process
1665      */
1666 #define EOF_PENDING 1
1667 #define EOF_DONE 2
1668     };
1669
1670 static ol_data_BUFFER_STATE ol_data_current_buffer;
1671
1672 /* we provide macros for accessing buffer states in case in the
1673  * future we want to put the buffer states in a more general
1674  * "scanner state"
1675  */
1676 #define ol_data_CURRENT_BUFFER ol_data_current_buffer
1677
1678
1679 /* ol_data_hold_char holds the character lost when ol_datatext is formed */
1680 static ol_data_CHAR ol_data_hold_char;
1681
1682 static int ol_data_n_chars;             /* number of characters read into ol_data_ch_buf */
1683
1684
1685
1686 #ifndef ol_data_USER_ACTION
1687 #define ol_data_USER_ACTION
1688 #endif
1689
1690 #ifndef ol_data_USER_INIT
1691 #define ol_data_USER_INIT
1692 #endif
1693
1694 extern ol_data_CHAR *ol_datatext;
1695 extern int ol_dataleng;
1696 extern FILE *ol_datain, *ol_dataout;
1697
1698 ol_data_CHAR *ol_datatext;
1699 int ol_dataleng;
1700
1701 FILE *ol_datain = (FILE *) 0, *ol_dataout = (FILE *) 0;
1702
1703 #define ol_data_END_OF_BUFFER 13
1704 typedef int ol_data_state_type;
1705 static const short int ol_data_accept[47] =
1706     {   0,
1707         0,    0,   13,    8,   10,   10,    8,    8,    8,    9,
1708         8,    8,    8,    8,    8,   10,    8,    0,    2,    8,
1709         8,    0,    3,    1,    8,    8,    8,    2,    8,    3,
1710         8,    8,    8,    8,    4,    8,    8,    8,    8,    8,
1711         8,    5,    8,    8,    6,    7
1712     } ;
1713
1714 static ol_data_state_type ol_data_last_accepting_state;
1715 static ol_data_CHAR *ol_data_last_accepting_cpos;
1716
1717 static const ol_data_state_type ol_data_NUL_trans[47] =
1718     {   0,
1719         4,    4,    0,   15,    0,    0,   17,   15,   21,    0,
1720        15,   15,   15,   15,   15,    0,   17,   18,   15,   15,
1721        21,   22,   15,   15,   15,   15,   15,    0,   15,    0,
1722        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1723        15,   15,   15,   15,   15,   15
1724     } ;
1725
1726 /* the intent behind this definition is that it'll catch
1727  * any uses of REJECT which flex missed
1728  */
1729 #define REJECT reject_used_but_not_detected
1730 #define ol_datamore() ol_datamore_used_but_not_detected
1731 #define ol_data_MORE_ADJ 0
1732
1733 /* these variables are all declared out here so that section 3 code can
1734  * manipulate them
1735  */
1736 /* points to current character in buffer */
1737 static ol_data_CHAR *ol_data_c_buf_p = (ol_data_CHAR *) 0;
1738 static int ol_data_init = 1;            /* whether we need to initialize */
1739 static int ol_data_start = 0;   /* start state number */
1740
1741 /* flag which is used to allow ol_datawrap()'s to do buffer switches
1742  * instead of setting up a fresh ol_datain.  A bit of a hack ...
1743  */
1744 static int ol_data_did_buffer_switch_on_eof;
1745
1746 static ol_data_state_type ol_data_get_previous_state ol_data_PROTO(( void ));
1747 static ol_data_state_type ol_data_try_NUL_trans ol_data_PROTO(( ol_data_state_type current_state ));
1748 static int ol_data_get_next_buffer ol_data_PROTO(( void ));
1749 #if 0
1750 static void ol_dataunput ol_data_PROTO(( ol_data_CHAR c, ol_data_CHAR *buf_ptr ));
1751 #endif
1752 void ol_datarestart ol_data_PROTO(( FILE *input_file ));
1753 void ol_data_switch_to_buffer ol_data_PROTO(( ol_data_BUFFER_STATE new_buffer ));
1754 void ol_data_load_buffer_state ol_data_PROTO(( void ));
1755 ol_data_BUFFER_STATE ol_data_create_buffer ol_data_PROTO(( FILE *file, int size ));
1756 void ol_data_delete_buffer ol_data_PROTO(( ol_data_BUFFER_STATE b ));
1757 void ol_data_init_buffer ol_data_PROTO(( ol_data_BUFFER_STATE b, FILE *file ));
1758
1759 #define ol_data_new_buffer ol_data_create_buffer
1760
1761 #if 0
1762 #ifdef __cplusplus
1763 static int ol_datainput ol_data_PROTO(( void ));
1764 #else
1765 static int input ol_data_PROTO(( void ));
1766 #endif
1767 #endif
1768
1769 ol_data_DECL
1770     {
1771     register ol_data_state_type ol_data_current_state;
1772     register ol_data_CHAR *ol_data_cp, *ol_data_bp;
1773     register int ol_data_act;
1774
1775
1776
1777
1778     if ( ol_data_init )
1779         {
1780         ol_data_USER_INIT;
1781
1782         if ( ! ol_data_start )
1783             ol_data_start = 1;  /* first start state */
1784
1785         if ( ! ol_datain )
1786             ol_datain = stdin;
1787
1788         if ( ! ol_dataout )
1789             ol_dataout = stdout;
1790
1791         if ( ol_data_current_buffer )
1792             ol_data_init_buffer( ol_data_current_buffer, ol_datain );
1793         else
1794             ol_data_current_buffer = ol_data_create_buffer( ol_datain, ol_data_BUF_SIZE );
1795
1796         ol_data_load_buffer_state();
1797
1798         ol_data_init = 0;
1799         }
1800
1801     while ( 1 )         /* loops until end-of-file is reached */
1802         {
1803         ol_data_cp = ol_data_c_buf_p;
1804
1805         /* support of ol_datatext */
1806         *ol_data_cp = ol_data_hold_char;
1807
1808         /* ol_data_bp points to the position in ol_data_ch_buf of the start of the
1809          * current run.
1810          */
1811         ol_data_bp = ol_data_cp;
1812
1813         ol_data_current_state = ol_data_start;
1814 ol_data_match:
1815         while ( (ol_data_current_state = ol_data_nxt[ol_data_current_state][*ol_data_cp]) > 0 )
1816             {
1817             if ( ol_data_accept[ol_data_current_state] )
1818                 {
1819                 ol_data_last_accepting_state = ol_data_current_state;
1820                 ol_data_last_accepting_cpos = ol_data_cp;
1821                 }
1822
1823             ++ol_data_cp;
1824             }
1825
1826         ol_data_current_state = -ol_data_current_state;
1827
1828 ol_data_find_action:
1829         ol_data_act = ol_data_accept[ol_data_current_state];
1830
1831         ol_data_DO_BEFORE_ACTION;
1832         ol_data_USER_ACTION;
1833
1834 do_action:      /* this label is used only to access EOF actions */
1835
1836
1837         switch ( ol_data_act )
1838             {
1839             case 0: /* must backtrack */
1840             /* undo the effects of ol_data_DO_BEFORE_ACTION */
1841             *ol_data_cp = ol_data_hold_char;
1842             ol_data_cp = ol_data_last_accepting_cpos + 1;
1843             ol_data_current_state = ol_data_last_accepting_state;
1844             goto ol_data_find_action;
1845
1846 case 1:
1847 {
1848                                   ol_datalval.name = SGMLName::intern((const char *)ol_datatext+1 ,1); 
1849                                   return( Reference );
1850                                 }
1851         ol_data_BREAK
1852 case 2:
1853 {
1854                                   if ( *(ol_datatext + 1) != '"' ) {
1855                                      // get rid of the 2 quotes 
1856                                      int len = strlen(( const char *)ol_datatext)-2;
1857                                      char *lit_str = new char [ len + 1 ];
1858                                      *((char *) memcpy(lit_str,
1859                                                 (const char *)ol_datatext + 1,
1860                                                  len) + len) = '\0';
1861                                      ol_datalval.string = lit_str;
1862                                   }
1863                                   else {
1864                                      ol_datalval.string = 0;
1865                                   }
1866
1867                                   DBG(50) cerr << "(DEBUG) literal \"string\" = "
1868                                                << ol_datalval.string << endl;
1869
1870                                   return( Literal );
1871                                 }
1872         ol_data_BREAK
1873 case 3:
1874 {
1875                                   if ( *(ol_datatext + 1) != '\'' ) {
1876                                      // get rid of the 2 quotes 
1877                                      int len = strlen(( const char *)ol_datatext)-2;
1878                                      char *lit_str = new char [ len + 1 ];
1879                                      *((char *) memcpy(lit_str,
1880                                                 (const char *)ol_datatext + 1,
1881                                                  len) + len) = '\0';
1882                                      ol_datalval.string = lit_str;
1883                                      
1884                                   }
1885                                   else {
1886                                      ol_datalval.string = 0;
1887                                   }
1888
1889                                   DBG(50) cerr << "(DEBUG) literal 'string' = "
1890                                                << ol_datalval.string << endl;
1891          
1892                                   return( Literal );
1893                                 }
1894         ol_data_BREAK
1895 case 4:
1896 { return( Attr );      }
1897         ol_data_BREAK
1898 case 5:
1899 { return( Concat );    }
1900         ol_data_BREAK
1901 case 6:
1902 { return( FirstOf);    }
1903         ol_data_BREAK
1904 case 7:
1905 { return( Content );   }
1906         ol_data_BREAK
1907 case 8:
1908 {
1909                                   ol_datalval.name = SGMLName::intern((const char *)ol_datatext,1);
1910                                   DBG(10) cerr << "(DEBUG) matches"
1911                                                << (char *)SGMLName::lookup(ol_datalval.name)
1912                                                << endl;
1913                                   return ( Id );
1914                                 }
1915         ol_data_BREAK
1916 case 9:
1917 {
1918                                   DBG(10) cerr << "(DEBUG) matches"
1919                                                << (char *)ol_datatext
1920                                                << endl;
1921                                   return ( ol_datatext[0] );
1922                                 }
1923         ol_data_BREAK
1924 case 10:
1925 ;
1926         ol_data_BREAK
1927 case 11:
1928 {
1929                                   throw(Unexpected(
1930                                                    "Syntax error in value expression"));
1931
1932                                 }
1933         ol_data_BREAK
1934 case 12:
1935 ol_data_FATAL_ERROR( "flex scanner jammed" );
1936         ol_data_BREAK
1937 case ol_data_STATE_EOF(INITIAL):
1938     ol_dataterminate();
1939
1940             case ol_data_END_OF_BUFFER:
1941                 {
1942                 /* amount of text matched not including the EOB char */
1943                 int ol_data_amount_of_matched_text = ol_data_cp - ol_datatext - 1;
1944
1945                 /* undo the effects of ol_data_DO_BEFORE_ACTION */
1946                 *ol_data_cp = ol_data_hold_char;
1947
1948                 /* note that here we test for ol_data_c_buf_p "<=" to the position
1949                  * of the first EOB in the buffer, since ol_data_c_buf_p will
1950                  * already have been incremented past the NUL character
1951                  * (since all states make transitions on EOB to the end-
1952                  * of-buffer state).  Contrast this with the test in ol_datainput().
1953                  */
1954                 if ( ol_data_c_buf_p <= &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] )
1955                     /* this was really a NUL */
1956                     {
1957                     ol_data_state_type ol_data_next_state;
1958
1959                     ol_data_c_buf_p = ol_datatext + ol_data_amount_of_matched_text;
1960
1961                     ol_data_current_state = ol_data_get_previous_state();
1962
1963                     /* okay, we're now positioned to make the
1964                      * NUL transition.  We couldn't have
1965                      * ol_data_get_previous_state() go ahead and do it
1966                      * for us because it doesn't know how to deal
1967                      * with the possibility of jamming (and we
1968                      * don't want to build jamming into it because
1969                      * then it will run more slowly)
1970                      */
1971
1972                     ol_data_next_state = ol_data_try_NUL_trans( ol_data_current_state );
1973
1974                     ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
1975
1976                     if ( ol_data_next_state )
1977                         {
1978                         /* consume the NUL */
1979                         ol_data_cp = ++ol_data_c_buf_p;
1980                         ol_data_current_state = ol_data_next_state;
1981                         goto ol_data_match;
1982                         }
1983
1984                     else
1985                         {
1986                             ol_data_cp = ol_data_c_buf_p;
1987                         goto ol_data_find_action;
1988                         }
1989                     }
1990
1991                 else switch ( ol_data_get_next_buffer() )
1992                     {
1993                     case EOB_ACT_END_OF_FILE:
1994                         {
1995                         ol_data_did_buffer_switch_on_eof = 0;
1996
1997                         if ( ol_datawrap() )
1998                             {
1999                             /* note: because we've taken care in
2000                              * ol_data_get_next_buffer() to have set up ol_datatext,
2001                              * we can now set up ol_data_c_buf_p so that if some
2002                              * total hoser (like flex itself) wants
2003                              * to call the scanner after we return the
2004                              * ol_data_NULL, it'll still work - another ol_data_NULL
2005                              * will get returned.
2006                              */
2007                             ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2008
2009                             ol_data_act = ol_data_STATE_EOF((ol_data_start - 1) / 2);
2010                             goto do_action;
2011                             }
2012
2013                         else
2014                             {
2015                             if ( ! ol_data_did_buffer_switch_on_eof )
2016                                 ol_data_NEW_FILE;
2017                             }
2018                         }
2019                         break;
2020
2021                     case EOB_ACT_CONTINUE_SCAN:
2022                         ol_data_c_buf_p = ol_datatext + ol_data_amount_of_matched_text;
2023
2024                         ol_data_current_state = ol_data_get_previous_state();
2025
2026                         ol_data_cp = ol_data_c_buf_p;
2027                         ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
2028                         goto ol_data_match;
2029
2030                     case EOB_ACT_LAST_MATCH:
2031                         ol_data_c_buf_p =
2032                             &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars];
2033
2034                         ol_data_current_state = ol_data_get_previous_state();
2035
2036                         ol_data_cp = ol_data_c_buf_p;
2037                         ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
2038                         goto ol_data_find_action;
2039                     }
2040                 break;
2041                 }
2042
2043             default:
2044 #ifdef FLEX_DEBUG
2045                 printf( "action # %d\n", ol_data_act );
2046 #endif
2047                 ol_data_FATAL_ERROR(
2048                         "fatal flex scanner internal error--no action found" );
2049             }
2050         }
2051     }
2052
2053
2054 /* ol_data_get_next_buffer - try to read in a new buffer
2055  *
2056  * synopsis
2057  *     int ol_data_get_next_buffer();
2058  *     
2059  * returns a code representing an action
2060  *     EOB_ACT_LAST_MATCH - 
2061  *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2062  *     EOB_ACT_END_OF_FILE - end of file
2063  */
2064
2065 static int ol_data_get_next_buffer()
2066
2067     {
2068     register ol_data_CHAR *dest = ol_data_current_buffer->ol_data_ch_buf;
2069     register ol_data_CHAR *source = ol_datatext - 1; /* copy prev. char, too */
2070     register int number_to_move, i;
2071     int ret_val;
2072
2073     if ( ol_data_c_buf_p > &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars + 1] )
2074         ol_data_FATAL_ERROR(
2075                 "fatal flex scanner internal error--end of buffer missed" );
2076
2077     /* try to read more data */
2078
2079     /* first move last chars to start of buffer */
2080     number_to_move = ol_data_c_buf_p - ol_datatext;
2081
2082     for ( i = 0; i < number_to_move; ++i )
2083         *(dest++) = *(source++);
2084
2085     if ( ol_data_current_buffer->ol_data_eof_status != EOF_NOT_SEEN )
2086         /* don't do the read, it's not guaranteed to return an EOF,
2087          * just force an EOF
2088          */
2089         ol_data_n_chars = 0;
2090
2091     else
2092         {
2093         int num_to_read = ol_data_current_buffer->ol_data_buf_size - number_to_move - 1;
2094
2095         if ( num_to_read > ol_data_READ_BUF_SIZE )
2096             num_to_read = ol_data_READ_BUF_SIZE;
2097
2098         else if ( num_to_read <= 0 )
2099             ol_data_FATAL_ERROR( "fatal error - scanner input buffer overflow" );
2100
2101         /* read in more data */
2102         ol_data_INPUT( (&ol_data_current_buffer->ol_data_ch_buf[number_to_move]),
2103                   ol_data_n_chars, num_to_read );
2104         }
2105
2106     if ( ol_data_n_chars == 0 )
2107         {
2108         if ( number_to_move == 1 )
2109             {
2110             ret_val = EOB_ACT_END_OF_FILE;
2111             ol_data_current_buffer->ol_data_eof_status = EOF_DONE;
2112             }
2113
2114         else
2115             {
2116             ret_val = EOB_ACT_LAST_MATCH;
2117             ol_data_current_buffer->ol_data_eof_status = EOF_PENDING;
2118             }
2119         }
2120
2121     else
2122         ret_val = EOB_ACT_CONTINUE_SCAN;
2123
2124     ol_data_n_chars += number_to_move;
2125     ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] = ol_data_END_OF_BUFFER_CHAR;
2126     ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars + 1] = ol_data_END_OF_BUFFER_CHAR;
2127
2128     /* ol_datatext begins at the second character in ol_data_ch_buf; the first
2129      * character is the one which preceded it before reading in the latest
2130      * buffer; it needs to be kept around in case it's a newline, so
2131      * ol_data_get_previous_state() will have with '^' rules active
2132      */
2133
2134     ol_datatext = &ol_data_current_buffer->ol_data_ch_buf[1];
2135
2136     return ( ret_val );
2137     }
2138
2139
2140 /* ol_data_get_previous_state - get the state just before the EOB char was reached
2141  *
2142  * synopsis
2143  *     ol_data_state_type ol_data_get_previous_state();
2144  */
2145
2146 static ol_data_state_type ol_data_get_previous_state()
2147
2148     {
2149     register ol_data_state_type ol_data_current_state;
2150     register ol_data_CHAR *ol_data_cp;
2151
2152     ol_data_current_state = ol_data_start;
2153
2154     for ( ol_data_cp = ol_datatext + ol_data_MORE_ADJ; ol_data_cp < ol_data_c_buf_p; ++ol_data_cp )
2155         {
2156         if ( *ol_data_cp )
2157             {
2158             ol_data_current_state = ol_data_nxt[ol_data_current_state][*ol_data_cp];
2159             }
2160         else
2161             ol_data_current_state = ol_data_NUL_trans[ol_data_current_state];
2162         if ( ol_data_accept[ol_data_current_state] )
2163             {
2164             ol_data_last_accepting_state = ol_data_current_state;
2165             ol_data_last_accepting_cpos = ol_data_cp;
2166             }
2167         }
2168
2169     return ( ol_data_current_state );
2170     }
2171
2172
2173 /* ol_data_try_NUL_trans - try to make a transition on the NUL character
2174  *
2175  * synopsis
2176  *     next_state = ol_data_try_NUL_trans( current_state );
2177  */
2178
2179 #ifdef ol_data_USE_PROTOS
2180 static ol_data_state_type ol_data_try_NUL_trans( register ol_data_state_type ol_data_current_state )
2181 #else
2182 static ol_data_state_type ol_data_try_NUL_trans( ol_data_current_state )
2183 register ol_data_state_type ol_data_current_state;
2184 #endif
2185
2186     {
2187     register int ol_data_is_jam;
2188     register ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2189
2190     ol_data_current_state = ol_data_NUL_trans[ol_data_current_state];
2191     ol_data_is_jam = (ol_data_current_state == 0);
2192
2193     if ( ! ol_data_is_jam )
2194         {
2195         if ( ol_data_accept[ol_data_current_state] )
2196             {
2197             ol_data_last_accepting_state = ol_data_current_state;
2198             ol_data_last_accepting_cpos = ol_data_cp;
2199             }
2200         }
2201
2202     return ( ol_data_is_jam ? 0 : ol_data_current_state );
2203     }
2204
2205
2206 #if 0
2207 #ifdef ol_data_USE_PROTOS
2208 static void ol_dataunput( ol_data_CHAR c, register ol_data_CHAR *ol_data_bp )
2209 #else
2210 static void ol_dataunput( c, ol_data_bp )
2211 ol_data_CHAR c;
2212 register ol_data_CHAR *ol_data_bp;
2213 #endif
2214
2215     {
2216     register ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2217
2218     /* undo effects of setting up ol_datatext */
2219     *ol_data_cp = ol_data_hold_char;
2220
2221     if ( ol_data_cp < ol_data_current_buffer->ol_data_ch_buf + 2 )
2222         { /* need to shift things up to make room */
2223         register int number_to_move = ol_data_n_chars + 2; /* +2 for EOB chars */
2224         register ol_data_CHAR *dest =
2225             &ol_data_current_buffer->ol_data_ch_buf[ol_data_current_buffer->ol_data_buf_size + 2];
2226         register ol_data_CHAR *source =
2227             &ol_data_current_buffer->ol_data_ch_buf[number_to_move];
2228
2229         while ( source > ol_data_current_buffer->ol_data_ch_buf )
2230             *--dest = *--source;
2231
2232         ol_data_cp += dest - source;
2233         ol_data_bp += dest - source;
2234         ol_data_n_chars = ol_data_current_buffer->ol_data_buf_size;
2235
2236         if ( ol_data_cp < ol_data_current_buffer->ol_data_ch_buf + 2 )
2237             ol_data_FATAL_ERROR( "flex scanner push-back overflow" );
2238         }
2239
2240     if ( ol_data_cp > ol_data_bp && ol_data_cp[-1] == '\n' )
2241         ol_data_cp[-2] = '\n';
2242
2243     *--ol_data_cp = c;
2244
2245     /* note: the formal parameter *must* be called "ol_data_bp" for this
2246      *       macro to now work correctly
2247      */
2248     ol_data_DO_BEFORE_ACTION; /* set up ol_datatext again */
2249     }
2250 #endif
2251
2252
2253 #if 0
2254 #ifdef __cplusplus
2255 static int ol_datainput()
2256 #else
2257 static int input()
2258 #endif
2259
2260     {
2261     int c;
2262     ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2263
2264     *ol_data_cp = ol_data_hold_char;
2265
2266     if ( *ol_data_c_buf_p == ol_data_END_OF_BUFFER_CHAR )
2267         {
2268         /* ol_data_c_buf_p now points to the character we want to return.
2269          * If this occurs *before* the EOB characters, then it's a
2270          * valid NUL; if not, then we've hit the end of the buffer.
2271          */
2272         if ( ol_data_c_buf_p < &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] )
2273             /* this was really a NUL */
2274             *ol_data_c_buf_p = '\0';
2275
2276         else
2277             { /* need more input */
2278             ol_datatext = ol_data_c_buf_p;
2279             ++ol_data_c_buf_p;
2280
2281             switch ( ol_data_get_next_buffer() )
2282                 {
2283                 case EOB_ACT_END_OF_FILE:
2284                     {
2285                     if ( ol_datawrap() )
2286                         {
2287                         ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2288                         return ( EOF );
2289                         }
2290
2291                     ol_data_NEW_FILE;
2292
2293 #ifdef __cplusplus
2294                     return ( ol_datainput() );
2295 #else
2296                     return ( input() );
2297 #endif
2298                     }
2299                     break;
2300
2301                 case EOB_ACT_CONTINUE_SCAN:
2302                     ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2303                     break;
2304
2305                 case EOB_ACT_LAST_MATCH:
2306 #ifdef __cplusplus
2307                     ol_data_FATAL_ERROR( "unexpected last match in ol_datainput()" );
2308 #else
2309                     ol_data_FATAL_ERROR( "unexpected last match in input()" );
2310 #endif
2311                 }
2312             }
2313         }
2314
2315     c = *ol_data_c_buf_p;
2316     ol_data_hold_char = *++ol_data_c_buf_p;
2317
2318     return ( c );
2319     }
2320 #endif
2321
2322
2323 #ifdef ol_data_USE_PROTOS
2324 void ol_datarestart( FILE *input_file )
2325 #else
2326 void ol_datarestart( input_file )
2327 FILE *input_file;
2328 #endif
2329
2330     {
2331     ol_data_init_buffer( ol_data_current_buffer, input_file );
2332     ol_data_load_buffer_state();
2333     }
2334
2335
2336 #ifdef ol_data_USE_PROTOS
2337 void ol_data_switch_to_buffer( ol_data_BUFFER_STATE new_buffer )
2338 #else
2339 void ol_data_switch_to_buffer( new_buffer )
2340 ol_data_BUFFER_STATE new_buffer;
2341 #endif
2342
2343     {
2344     if ( ol_data_current_buffer == new_buffer )
2345         return;
2346
2347     if ( ol_data_current_buffer )
2348         {
2349         /* flush out information for old buffer */
2350         *ol_data_c_buf_p = ol_data_hold_char;
2351         ol_data_current_buffer->ol_data_buf_pos = ol_data_c_buf_p;
2352         ol_data_current_buffer->ol_data_n_chars = ol_data_n_chars;
2353         }
2354
2355     ol_data_current_buffer = new_buffer;
2356     ol_data_load_buffer_state();
2357
2358     /* we don't actually know whether we did this switch during
2359      * EOF (ol_datawrap()) processing, but the only time this flag
2360      * is looked at is after ol_datawrap() is called, so it's safe
2361      * to go ahead and always set it.
2362      */
2363     ol_data_did_buffer_switch_on_eof = 1;
2364     }
2365
2366
2367 #ifdef ol_data_USE_PROTOS
2368 void ol_data_load_buffer_state( void )
2369 #else
2370 void ol_data_load_buffer_state()
2371 #endif
2372
2373     {
2374     ol_data_n_chars = ol_data_current_buffer->ol_data_n_chars;
2375     ol_datatext = ol_data_c_buf_p = ol_data_current_buffer->ol_data_buf_pos;
2376     ol_datain = ol_data_current_buffer->ol_data_input_file;
2377     ol_data_hold_char = *ol_data_c_buf_p;
2378     }
2379
2380
2381 #ifdef ol_data_USE_PROTOS
2382 ol_data_BUFFER_STATE ol_data_create_buffer( FILE *file, int size )
2383 #else
2384 ol_data_BUFFER_STATE ol_data_create_buffer( file, size )
2385 FILE *file;
2386 int size;
2387 #endif
2388
2389     {
2390     ol_data_BUFFER_STATE b;
2391
2392     b = (ol_data_BUFFER_STATE) malloc( sizeof( struct ol_data_buffer_state ) );
2393
2394     if ( ! b )
2395         ol_data_FATAL_ERROR( "out of dynamic memory in ol_data_create_buffer()" );
2396
2397     b->ol_data_buf_size = size;
2398
2399     /* ol_data_ch_buf has to be 2 characters longer than the size given because
2400      * we need to put in 2 end-of-buffer characters.
2401      */
2402     b->ol_data_ch_buf = (ol_data_CHAR *) malloc( (unsigned) (b->ol_data_buf_size + 2) );
2403
2404     if ( ! b->ol_data_ch_buf )
2405         ol_data_FATAL_ERROR( "out of dynamic memory in ol_data_create_buffer()" );
2406
2407     ol_data_init_buffer( b, file );
2408
2409     return ( b );
2410     }
2411
2412
2413 #ifdef ol_data_USE_PROTOS
2414 void ol_data_delete_buffer( ol_data_BUFFER_STATE b )
2415 #else
2416 void ol_data_delete_buffer( b )
2417 ol_data_BUFFER_STATE b;
2418 #endif
2419
2420     {
2421     if ( b == ol_data_current_buffer )
2422         ol_data_current_buffer = (ol_data_BUFFER_STATE) 0;
2423
2424     free( (char *) b->ol_data_ch_buf );
2425     free( (char *) b );
2426     }
2427
2428
2429 #ifdef ol_data_USE_PROTOS
2430 void ol_data_init_buffer( ol_data_BUFFER_STATE b, FILE *file )
2431 #else
2432 void ol_data_init_buffer( b, file )
2433 ol_data_BUFFER_STATE b;
2434 FILE *file;
2435 #endif
2436
2437     {
2438     b->ol_data_input_file = file;
2439
2440     /* we put in the '\n' and start reading from [1] so that an
2441      * initial match-at-newline will be true.
2442      */
2443
2444     b->ol_data_ch_buf[0] = '\n';
2445     b->ol_data_n_chars = 1;
2446
2447     /* we always need two end-of-buffer characters.  The first causes
2448      * a transition to the end-of-buffer state.  The second causes
2449      * a jam in that state.
2450      */
2451     b->ol_data_ch_buf[1] = ol_data_END_OF_BUFFER_CHAR;
2452     b->ol_data_ch_buf[2] = ol_data_END_OF_BUFFER_CHAR;
2453
2454     b->ol_data_buf_pos = &b->ol_data_ch_buf[1];
2455
2456     b->ol_data_eof_status = EOF_NOT_SEEN;
2457     }
2458
2459
2460 static int
2461 my_input ( char *buf, int max_size )
2462 {
2463
2464   int remain = myinputlim - myinputptr;
2465   int n = ( max_size > remain ? remain : max_size );
2466
2467   if ( n > 0 ) {
2468     memcpy ( buf, myinputptr, n );
2469     myinputptr += n;
2470   }
2471   return n;
2472 }
2473
2474 //--------------------------------------------------------------
2475 void
2476 ol_dataerror(char *str)
2477 {
2478   throw(Unexpected(form("Syntax error in %s", myinput)));
2479 }
2480
2481 //--------------------------------------------------------------
2482 ContentType::ContentType()
2483 {
2484   char *dbgStr;
2485   dbgStr = getenv ("OL_DEBUG");
2486   dbgLevel = ( dbgStr ? atoi ( dbgStr ) : 0 );
2487   exprlist  = 0;
2488 }
2489
2490 //--------------------------------------------------------------
2491 ContentType::~ContentType()
2492 {
2493
2494    OL_Expression *eptr = exprlist;
2495    while ( eptr ) {
2496       OL_Expression *tmp = eptr;
2497       eptr = eptr->next;
2498       delete tmp;
2499    }
2500 }
2501
2502 //--------------------------------------------------------------
2503 void
2504 ContentType::Parse( char *str )
2505 {
2506
2507   DBG(10) cerr << "(DEBUG) ContentType::Parse() str = " << str << endl;
2508
2509   myinput = str;
2510   myinputptr = str;
2511   myinputlim = str + strlen(str);
2512
2513   CurrentContentPtr = this;
2514   
2515   ol_dataparse();
2516   
2517   BEGIN INITIAL;
2518   ol_datarestart(NULL);
2519 }
2520
2521 //--------------------------------------------------------------
2522 void
2523 ContentType::init( OL_Expression *expr )
2524 {
2525   assert(expr != NULL);
2526   if ( expr->next ) {
2527     
2528     /*
2529      * The same as CONCAT
2530      */
2531     ExprList *elist = new ExprList( expr );
2532     OL_Expression *new_expr = new OL_Expression ( CONCAT, -1, elist );
2533     assert(new_expr != NULL);
2534
2535     exprlist = new_expr;
2536   }
2537   else {
2538     exprlist = expr;
2539   }
2540 }
2541