Remove Unixware and openserver 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(__osf__) && !defined(linux) && !defined(CSRG_BASED) && \
58     !defined(sun)
59 #include <osfcn.h>
60 #endif
61
62 /* use prototypes in function declarations */
63 #define ol_data_USE_PROTOS
64
65 /* the "const" storage-class-modifier is valid */
66 #define ol_data_USE_CONST
67
68 #else   /* ! __cplusplus */
69
70 #ifdef __STDC__
71
72 #ifdef __GNUC__
73 #include <stddef.h>
74 void *malloc( size_t );
75 void free( void* );
76 #else
77 #include <stdlib.h>
78 #endif  /* __GNUC__ */
79
80 #define ol_data_USE_PROTOS
81 #define ol_data_USE_CONST
82
83 #endif  /* __STDC__ */
84 #endif  /* ! __cplusplus */
85
86
87 #ifdef __TURBOC__
88 #define ol_data_USE_CONST
89 #endif
90
91
92 #ifndef ol_data_USE_CONST
93 #define const
94 #endif
95
96
97 #ifdef ol_data_USE_PROTOS
98 #define ol_data_PROTO(proto) proto
99 #else
100 #define ol_data_PROTO(proto) ()
101 /* we can't get here if it's an ANSI C compiler, or a C++ compiler,
102  * so it's got to be a K&R compiler, and therefore there's no standard
103  * place from which to include these definitions
104  */
105 char *malloc();
106 int free();
107 int read();
108 #endif
109
110
111 /* amount of stuff to slurp up with each read */
112 #ifndef ol_data_READ_BUF_SIZE
113 #define ol_data_READ_BUF_SIZE 8192
114 #endif
115
116 /* returned upon end-of-file */
117 #define ol_data_END_TOK 0
118
119 /* copy whatever the last rule matched to the standard output */
120
121 /* cast to (char *) is because for 8-bit chars, ol_datatext is (unsigned char *) */
122 /* this used to be an fputs(), but since the string might contain NUL's,
123  * we now use fwrite()
124  */
125 #define ECHO (void) fwrite( (char *) ol_datatext, ol_dataleng, 1, ol_dataout )
126
127 /* gets input and stuffs it into "buf".  number of characters read, or ol_data_NULL,
128  * is returned in "result".
129  */
130 #define ol_data_INPUT(buf,result,max_size) \
131         if ( (result = read( fileno(ol_datain), (char *) buf, max_size )) < 0 ) \
132             ol_data_FATAL_ERROR( "read() in flex scanner failed" );
133 #define ol_data_NULL 0
134
135 /* no semi-colon after return; correct usage is to write "ol_dataterminate();" -
136  * we don't want an extra ';' after the "return" because that will cause
137  * some compilers to complain about unreachable statements.
138  */
139 #define ol_dataterminate() return ( ol_data_NULL )
140
141 /* report a fatal error */
142
143 /* The funky do-while is used to turn this macro definition into
144  * a single C statement (which needs a semi-colon terminator).
145  * This avoids problems with code like:
146  *
147  *      if ( something_happens )
148  *              ol_data_FATAL_ERROR( "oops, the something happened" );
149  *      else
150  *              everything_okay();
151  *
152  * Prior to using the do-while the compiler would get upset at the
153  * "else" because it interpreted the "if" statement as being all
154  * done when it reached the ';' after the ol_data_FATAL_ERROR() call.
155  */
156
157 #define ol_data_FATAL_ERROR(msg) \
158         do \
159                 { \
160                 (void) fputs( msg, stderr ); \
161                 (void) putc( '\n', stderr ); \
162                 exit( 1 ); \
163                 } \
164         while ( 0 )
165
166 /* default ol_datawrap function - always treat EOF as an EOF */
167 #define ol_datawrap() 1
168
169 /* enter a start condition.  This macro really ought to take a parameter,
170  * but we do it the disgusting crufty way forced on us by the ()-less
171  * definition of BEGIN
172  */
173 #define BEGIN ol_data_start = 1 + 2 *
174
175 /* action number for EOF rule of a given start state */
176 #define ol_data_STATE_EOF(state) (ol_data_END_OF_BUFFER + state + 1)
177
178 /* special action meaning "start processing a new file" */
179 #define ol_data_NEW_FILE \
180         do \
181                 { \
182                 ol_data_init_buffer( ol_data_current_buffer, ol_datain ); \
183                 ol_data_load_buffer_state(); \
184                 } \
185         while ( 0 )
186
187 /* default declaration of generated scanner - a define so the user can
188  * easily add parameters
189  */
190 #define ol_data_DECL int ol_datalex ol_data_PROTO(( void )) 
191
192 /* code executed at the end of each rule */
193 #define ol_data_BREAK break;
194
195 #define ol_data_END_OF_BUFFER_CHAR 0
196
197 #ifndef ol_data_BUF_SIZE
198 #define ol_data_BUF_SIZE (ol_data_READ_BUF_SIZE * 2) /* size of default input buffer */
199 #endif
200
201 typedef struct ol_data_buffer_state *ol_data_BUFFER_STATE;
202
203 #define ol_data_CHAR unsigned char
204 #define INITIAL 0
205 #include <iostream>
206 #include <sstream>
207 using namespace std;
208 #include <stdio.h>
209 #include <memory.h>
210 #include <string.h>
211 #include <stdlib.h>
212 #include <assert.h>  
213
214 #include "Exceptions.hh"
215
216 #include "Task.h"  
217 #include "SGMLName.h"  
218 #include "ExprList.h"
219 #include "Expression.h"
220 #include "OL_DataExpr.tab.h"
221 #include "ContentType.h"
222 #include "api/utility.h"
223   
224 /* CurrentContentPtr is used as the communication media between
225  * ol_dataparse and ContentType::Parse()
226  */
227
228 ContentType *CurrentContentPtr;
229   
230 /*
231  * Forward declaration for my_input
232  */
233 static int my_input ( char *, int );
234 extern       int ol_dataparse();
235
236   
237 #undef ol_data_INPUT
238 #define ol_data_INPUT(b, r, ms ) ( r=my_input( ( char *)b,ms) )
239   
240 static char *myinput;
241 static char *myinputptr;
242 static char *myinputlim;
243
244 // Debugging macro
245 #ifdef DEBUG
246 #define DBG(level) if ( dbgLevel >= level)
247 #else
248 #define DBG(level) if (0)
249 #endif
250
251 static int dbgLevel = -1;
252
253 static short int ol_data_nxt[][256] =
254     {
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         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
265
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         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
276
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,    0,    0,    0,    0,
282         0,    0,    0,    0,    0,    0 },
283
284      {  3,    4,    4,    4,    4,    4,    4,    4,    4,    5,
285         6,    4,    4,    4,    4,    4,    4,    4,    4,    4,
286         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
287         4,    4,    5,    4,    7,    8,    4,    4,    4,    9,
288        10,   10,    4,    4,   10,    4,    4,    4,    4,    4,
289         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
290         4,    4,    4,    4,   11,   12,    4,   13,    4,    4,
291        14,    4,    4,    4,    4,    4,    4,    4,    4,    4,
292         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
293         4,    4,    4,    4,    4,    4,    4,   12,    4,   13,
294
295         4,    4,   14,    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         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
305
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,    4,    4,    4,    4,
311         4,    4,    4,    4,    4,    4 },
312
313      {  3,    4,    4,    4,    4,    4,    4,    4,    4,    5,
314         6,    4,    4,    4,    4,    4,    4,    4,    4,    4,
315         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
316         4,    4,    5,    4,    7,    8,    4,    4,    4,    9,
317        10,   10,    4,    4,   10,    4,    4,    4,    4,    4,
318         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
319         4,    4,    4,    4,   11,   12,    4,   13,    4,    4,
320        14,    4,    4,    4,    4,    4,    4,    4,    4,    4,
321         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
322         4,    4,    4,    4,    4,    4,    4,   12,    4,   13,
323
324         4,    4,   14,    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         4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
334
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,    4,    4,    4,    4,
340         4,    4,    4,    4,    4,    4 },
341
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        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
352
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        -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,   -3,
363
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,   -3,   -3,   -3,   -3,
369        -3,   -3,   -3,   -3,   -3,   -3 },
370
371      {  3,   15,   15,   15,   15,   15,   15,   15,   15,   -4,
372        -4,   15,   15,   15,   15,   15,   15,   15,   15,   15,
373        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
374        15,   15,   -4,   15,   15,   15,   15,   15,   15,   15,
375        -4,   -4,   15,   15,   -4,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
381
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
392
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,   15,   15,   15,   15,
398        15,   15,   15,   15,   15,   15 },
399
400      {  3,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   16,
401        16,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
402        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
403        -5,   -5,   16,   -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        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
410
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        -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,   -5,
421
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,   -5,   -5,   -5,   -5,
427        -5,   -5,   -5,   -5,   -5,   -5 },
428
429      {  3,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   16,
430        16,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
431        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
432        -6,   -6,   16,   -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        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
439
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        -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,   -6,
450
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,   -6,   -6,   -6,   -6,
456        -6,   -6,   -6,   -6,   -6,   -6 },
457
458      {  3,   17,   17,   17,   17,   17,   17,   17,   17,   18,
459        18,   17,   17,   17,   17,   17,   17,   17,   17,   17,
460        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
461        17,   17,   18,   17,   19,   17,   17,   17,   17,   17,
462        18,   18,   17,   17,   18,   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        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
468
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        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
479
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,   17,   17,   17,   17,
485        17,   17,   17,   17,   17,   17 },
486
487      {  3,   15,   15,   15,   15,   15,   15,   15,   15,   -8,
488        -8,   15,   15,   15,   15,   15,   15,   15,   15,   15,
489        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
490        15,   15,   -8,   15,   15,   15,   15,   15,   15,   15,
491        -8,   -8,   15,   15,   -8,   15,   15,   15,   15,   15,
492        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
493        15,   15,   15,   15,   15,   15,   15,   20,   15,   15,
494        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
495        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
496        15,   15,   15,   15,   15,   15,   15,   15,   15,   20,
497
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
508
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,   15,   15,   15,   15,
514        15,   15,   15,   15,   15,   15 },
515
516      {  3,   21,   21,   21,   21,   21,   21,   21,   21,   22,
517        22,   21,   21,   21,   21,   21,   21,   21,   21,   21,
518        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
519        21,   21,   22,   21,   21,   21,   21,   21,   21,   23,
520        22,   22,   21,   21,   22,   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        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
526
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        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
537
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,   21,   21,   21,   21,
543        21,   21,   21,   21,   21,   21 },
544
545      {  3,  -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       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
555
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       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
566
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,  -10,  -10,  -10,  -10,
572       -10,  -10,  -10,  -10,  -10,  -10 },
573
574      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -11,
575       -11,   15,   15,   15,   15,   15,   15,   15,   15,   15,
576        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
577        15,   15,  -11,   15,   15,   15,   15,   15,   15,   15,
578       -11,  -11,   15,   15,  -11,   15,   15,   15,   24,   24,
579        24,   24,   24,   24,   24,   24,   24,   24,   15,   15,
580        15,   15,   15,   15,   15,   24,   24,   24,   24,   24,
581        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
582        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
583        24,   15,   15,   15,   15,   15,   15,   24,   24,   24,
584
585        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
586        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
587        24,   24,   24,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
595
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,   15,   15,   15,   15,
601        15,   15,   15,   15,   15,   15 },
602
603      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -12,
604       -12,   15,   15,   15,   15,   15,   15,   15,   15,   15,
605        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
606        15,   15,  -12,   15,   15,   15,   15,   15,   15,   15,
607       -12,  -12,   15,   15,  -12,   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,   15,   15,   15,   15,   15,   15,
611        15,   15,   15,   15,   25,   15,   15,   15,   15,   15,
612        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
613
614        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
615        15,   15,   15,   15,   15,   15,   25,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
624
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,   15,   15,   15,   15,
630        15,   15,   15,   15,   15,   15 },
631
632      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -13,
633       -13,   15,   15,   15,   15,   15,   15,   15,   15,   15,
634        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
635        15,   15,  -13,   15,   15,   15,   15,   15,   15,   15,
636       -13,  -13,   15,   15,  -13,   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,   15,
639        15,   15,   15,   15,   15,   15,   15,   15,   15,   26,
640        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
641        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
642
643        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
644        15,   26,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
653
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,   15,   15,   15,   15,
659        15,   15,   15,   15,   15,   15 },
660
661      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -14,
662       -14,   15,   15,   15,   15,   15,   15,   15,   15,   15,
663        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
664        15,   15,  -14,   15,   15,   15,   15,   15,   15,   15,
665       -14,  -14,   15,   15,  -14,   15,   15,   15,   15,   15,
666        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
667        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
668        15,   15,   15,   27,   15,   15,   15,   15,   15,   15,
669        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
670        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
671
672        15,   15,   15,   15,   15,   27,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
682
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,   15,   15,   15,   15,
688        15,   15,   15,   15,   15,   15 },
689
690      {  3,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
700
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
711
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,   15,   15,   15,   15,
717        15,   15,   15,   15,   15,   15 },
718
719      {  3,  -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       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
729
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       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
740
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,  -16,  -16,  -16,  -16,
746       -16,  -16,  -16,  -16,  -16,  -16 },
747
748      {  3,   17,   17,   17,   17,   17,   17,   17,   17,   18,
749        18,   17,   17,   17,   17,   17,   17,   17,   17,   17,
750        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
751        17,   17,   18,   17,   19,   17,   17,   17,   17,   17,
752        18,   18,   17,   17,   18,   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        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
758
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        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
769
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,   17,   17,   17,   17,
775        17,   17,   17,   17,   17,   17 },
776
777      {  3,   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,   18,   18,   18,   18,   18,   18,
780        18,   18,   18,   18,   28,   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        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
787
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        18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
798
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,   18,   18,   18,   18,
804        18,   18,   18,   18,   18,   18 },
805
806      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -19,
807       -19,   15,   15,   15,   15,   15,   15,   15,   15,   15,
808        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
809        15,   15,  -19,   15,   15,   15,   15,   15,   15,   15,
810       -19,  -19,   15,   15,  -19,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
816
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
827
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,   15,   15,   15,   15,
833        15,   15,   15,   15,   15,   15 },
834
835      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -20,
836       -20,   15,   15,   15,   15,   15,   15,   15,   15,   15,
837        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
838        15,   15,  -20,   15,   15,   15,   15,   15,   15,   15,
839       -20,  -20,   15,   15,  -20,   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,   15,
842        15,   15,   15,   15,   15,   15,   15,   15,   15,   29,
843        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
844        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
845
846        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
847        15,   29,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
856
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,   15,   15,   15,   15,
862        15,   15,   15,   15,   15,   15 },
863
864      {  3,   21,   21,   21,   21,   21,   21,   21,   21,   22,
865        22,   21,   21,   21,   21,   21,   21,   21,   21,   21,
866        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
867        21,   21,   22,   21,   21,   21,   21,   21,   21,   23,
868        22,   22,   21,   21,   22,   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        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
874
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        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
885
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,   21,   21,   21,   21,
891        21,   21,   21,   21,   21,   21 },
892
893      {  3,   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,   22,
896        22,   22,   22,   22,   22,   22,   22,   22,   22,   30,
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        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
903
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        22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
914
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,   22,   22,   22,   22,
920        22,   22,   22,   22,   22,   22 },
921
922      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -23,
923       -23,   15,   15,   15,   15,   15,   15,   15,   15,   15,
924        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
925        15,   15,  -23,   15,   15,   15,   15,   15,   15,   15,
926       -23,  -23,   15,   15,  -23,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
932
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
943
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,   15,   15,   15,   15,
949        15,   15,   15,   15,   15,   15 },
950
951      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -24,
952       -24,   15,   15,   15,   15,   15,   15,   15,   15,   15,
953        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
954        15,   15,  -24,   15,   15,   15,   15,   15,   15,   15,
955       -24,  -24,   15,   15,  -24,   15,   15,   15,   24,   24,
956        24,   24,   24,   24,   24,   24,   24,   24,   15,   15,
957        15,   15,   15,   15,   15,   24,   24,   24,   24,   24,
958        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
959        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
960        24,   15,   15,   15,   15,   15,   15,   24,   24,   24,
961
962        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
963        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
964        24,   24,   24,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
972
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,   15,   15,   15,   15,
978        15,   15,   15,   15,   15,   15 },
979
980      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -25,
981       -25,   15,   15,   15,   15,   15,   15,   15,   15,   15,
982        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
983        15,   15,  -25,   15,   15,   15,   15,   15,   15,   15,
984       -25,  -25,   15,   15,  -25,   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,   15,   15,   15,   15,   15,   15,
988        15,   15,   15,   15,   31,   15,   15,   15,   15,   15,
989        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
990
991        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
992        15,   15,   15,   15,   15,   15,   31,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1001
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,   15,   15,   15,   15,
1007        15,   15,   15,   15,   15,   15 },
1008
1009      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -26,
1010       -26,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1011        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1012        15,   15,  -26,   15,   15,   15,   15,   15,   15,   15,
1013       -26,  -26,   15,   15,  -26,   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,   15,   15,
1016        15,   15,   15,   15,   15,   15,   15,   15,   32,   15,
1017        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1018        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1019
1020        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1021        32,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1030
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,   15,   15,   15,   15,
1036        15,   15,   15,   15,   15,   15 },
1037
1038      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -27,
1039       -27,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1040        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1041        15,   15,  -27,   15,   15,   15,   15,   15,   15,   15,
1042       -27,  -27,   15,   15,  -27,   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,   15,   15,   15,   15,   15,   15,   15,   15,
1046        15,   15,   33,   15,   15,   15,   15,   15,   15,   15,
1047        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1048
1049        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1050        15,   15,   15,   15,   33,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1059
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,   15,   15,   15,   15,
1065        15,   15,   15,   15,   15,   15 },
1066
1067      {  3,  -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       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1077
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       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
1088
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,  -28,  -28,  -28,  -28,
1094       -28,  -28,  -28,  -28,  -28,  -28 },
1095
1096      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -29,
1097       -29,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1098        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1099        15,   15,  -29,   15,   15,   15,   15,   15,   15,   15,
1100       -29,  -29,   15,   15,  -29,   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,   15,   15,
1103        15,   15,   15,   15,   15,   15,   15,   15,   34,   15,
1104        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1105        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1106
1107        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1108        34,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1117
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,   15,   15,   15,   15,
1123        15,   15,   15,   15,   15,   15 },
1124
1125      {  3,  -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       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1135
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       -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,  -30,
1146
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,  -30,  -30,  -30,  -30,
1152       -30,  -30,  -30,  -30,  -30,  -30 },
1153
1154      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -31,
1155       -31,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1156        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1157        15,   15,  -31,   15,   15,   15,   15,   15,   15,   15,
1158       -31,  -31,   15,   15,  -31,   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,   15,   15,   15,   15,   15,   15,   15,   15,
1162        15,   15,   35,   15,   15,   15,   15,   15,   15,   15,
1163        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1164
1165        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1166        15,   15,   15,   15,   35,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1175
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,   15,   15,   15,   15,
1181        15,   15,   15,   15,   15,   15 },
1182
1183      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -32,
1184       -32,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1185        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1186        15,   15,  -32,   15,   15,   15,   15,   15,   15,   15,
1187       -32,  -32,   15,   15,  -32,   15,   15,   15,   15,   15,
1188        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1189        15,   15,   15,   15,   15,   15,   15,   36,   15,   15,
1190        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1191        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1192        15,   15,   15,   15,   15,   15,   15,   15,   15,   36,
1193
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1204
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,   15,   15,   15,   15,
1210        15,   15,   15,   15,   15,   15 },
1211
1212      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -33,
1213       -33,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1214        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1215        15,   15,  -33,   15,   15,   15,   15,   15,   15,   15,
1216       -33,  -33,   15,   15,  -33,   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,   15,   15,   15,   15,   15,   15,   15,
1220        15,   15,   15,   37,   15,   15,   15,   15,   15,   15,
1221        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1222
1223        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1224        15,   15,   15,   15,   15,   37,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1233
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,   15,   15,   15,   15,
1239        15,   15,   15,   15,   15,   15 },
1240
1241      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -34,
1242       -34,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1243        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1244        15,   15,  -34,   15,   15,   15,   15,   15,   15,   15,
1245       -34,  -34,   15,   15,  -34,   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,   15,   15,   15,   15,   15,   15,
1249        15,   15,   15,   15,   38,   15,   15,   15,   15,   15,
1250        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1251
1252        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1253        15,   15,   15,   15,   15,   15,   38,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1262
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,   15,   15,   15,   15,
1268        15,   15,   15,   15,   15,   15 },
1269
1270      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -35,
1271       -35,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1272        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1273        15,   15,  -35,   15,   15,   15,   15,   15,   15,   15,
1274       -35,  -35,   15,   15,  -35,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1280
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1291
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,   15,   15,   15,   15,
1297        15,   15,   15,   15,   15,   15 },
1298
1299      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -36,
1300       -36,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1301        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1302        15,   15,  -36,   15,   15,   15,   15,   15,   15,   15,
1303       -36,  -36,   15,   15,  -36,   15,   15,   15,   15,   15,
1304        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1305        15,   15,   15,   15,   15,   39,   15,   15,   15,   15,
1306        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1307        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1308        15,   15,   15,   15,   15,   15,   15,   39,   15,   15,
1309
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1320
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,   15,   15,   15,   15,
1326        15,   15,   15,   15,   15,   15 },
1327
1328      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -37,
1329       -37,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1330        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1331        15,   15,  -37,   15,   15,   15,   15,   15,   15,   15,
1332       -37,  -37,   15,   15,  -37,   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,   15,   15,   15,   15,   15,   15,
1336        15,   15,   15,   15,   40,   15,   15,   15,   15,   15,
1337        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1338
1339        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1340        15,   15,   15,   15,   15,   15,   40,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1349
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,   15,   15,   15,   15,
1355        15,   15,   15,   15,   15,   15 },
1356
1357      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -38,
1358       -38,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1359        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1360        15,   15,  -38,   15,   15,   15,   15,   15,   15,   15,
1361       -38,  -38,   15,   15,  -38,   15,   15,   15,   15,   15,
1362        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1363        15,   15,   15,   15,   15,   15,   15,   15,   15,   41,
1364        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1365        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1366        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1367
1368        15,   41,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1378
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,   15,   15,   15,   15,
1384        15,   15,   15,   15,   15,   15 },
1385
1386      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -39,
1387       -39,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1388        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1389        15,   15,  -39,   15,   15,   15,   15,   15,   15,   15,
1390       -39,  -39,   15,   15,  -39,   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,   15,   15,   15,   15,   15,   15,
1394        15,   15,   15,   15,   42,   15,   15,   15,   15,   15,
1395        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1396
1397        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1398        15,   15,   15,   15,   15,   15,   42,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1407
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,   15,   15,   15,   15,
1413        15,   15,   15,   15,   15,   15 },
1414
1415      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -40,
1416       -40,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1417        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1418        15,   15,  -40,   15,   15,   15,   15,   15,   15,   15,
1419       -40,  -40,   15,   15,  -40,   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,   15,
1422        15,   15,   15,   15,   15,   15,   15,   15,   15,   43,
1423        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1424        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1425
1426        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1427        15,   43,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1436
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,   15,   15,   15,   15,
1442        15,   15,   15,   15,   15,   15 },
1443
1444      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -41,
1445       -41,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1446        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1447        15,   15,  -41,   15,   15,   15,   15,   15,   15,   15,
1448       -41,  -41,   15,   15,  -41,   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,   15,   15,
1451        15,   15,   15,   15,   15,   15,   15,   15,   44,   15,
1452        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1453        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1454
1455        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1456        44,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1465
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,   15,   15,   15,   15,
1471        15,   15,   15,   15,   15,   15 },
1472
1473      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -42,
1474       -42,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1475        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1476        15,   15,  -42,   15,   15,   15,   15,   15,   15,   15,
1477       -42,  -42,   15,   15,  -42,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1483
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1494
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,   15,   15,   15,   15,
1500        15,   15,   15,   15,   15,   15 },
1501
1502      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -43,
1503       -43,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1504        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1505        15,   15,  -43,   15,   15,   15,   15,   15,   15,   15,
1506       -43,  -43,   15,   15,  -43,   15,   15,   15,   15,   15,
1507        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1508        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1509        45,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1510        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1511        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1512
1513        15,   15,   45,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1523
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,   15,   15,   15,   15,
1529        15,   15,   15,   15,   15,   15 },
1530
1531      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -44,
1532       -44,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1533        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1534        15,   15,  -44,   15,   15,   15,   15,   15,   15,   15,
1535       -44,  -44,   15,   15,  -44,   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,   15,   15,   15,   15,   15,   15,
1539        15,   15,   15,   15,   46,   15,   15,   15,   15,   15,
1540        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1541
1542        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1543        15,   15,   15,   15,   15,   15,   46,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1552
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,   15,   15,   15,   15,
1558        15,   15,   15,   15,   15,   15 },
1559
1560      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -45,
1561       -45,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1562        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1563        15,   15,  -45,   15,   15,   15,   15,   15,   15,   15,
1564       -45,  -45,   15,   15,  -45,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1570
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1581
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,   15,   15,   15,   15,
1587        15,   15,   15,   15,   15,   15 },
1588
1589      {  3,   15,   15,   15,   15,   15,   15,   15,   15,  -46,
1590       -46,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1591        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1592        15,   15,  -46,   15,   15,   15,   15,   15,   15,   15,
1593       -46,  -46,   15,   15,  -46,   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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1599
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        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1610
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,   15,   15,   15,   15,
1616        15,   15,   15,   15,   15,   15 }
1617
1618     } ;
1619
1620
1621 /* done after the current pattern has been matched and before the
1622  * corresponding action - sets up ol_datatext
1623  */
1624 #define ol_data_DO_BEFORE_ACTION \
1625         ol_datatext = ol_data_bp; \
1626         ol_dataleng = ol_data_cp - ol_data_bp; \
1627         ol_data_hold_char = *ol_data_cp; \
1628         *ol_data_cp = '\0'; \
1629         ol_data_c_buf_p = ol_data_cp;
1630
1631 #define EOB_ACT_CONTINUE_SCAN 0
1632 #define EOB_ACT_END_OF_FILE 1
1633 #define EOB_ACT_LAST_MATCH 2
1634
1635 /* return all but the first 'n' matched characters back to the input stream */
1636 #define ol_dataless(n) \
1637         do \
1638                 { \
1639                 /* undo effects of setting up ol_datatext */ \
1640                 *ol_data_cp = ol_data_hold_char; \
1641                 ol_data_c_buf_p = ol_data_cp = ol_data_bp + n; \
1642                 ol_data_DO_BEFORE_ACTION; /* set up ol_datatext again */ \
1643                 } \
1644         while ( 0 )
1645
1646 #define unput(c) ol_dataunput( c, ol_datatext )
1647
1648
1649 struct ol_data_buffer_state
1650     {
1651     FILE *ol_data_input_file;
1652
1653     ol_data_CHAR *ol_data_ch_buf;               /* input buffer */
1654     ol_data_CHAR *ol_data_buf_pos;      /* current position in input buffer */
1655
1656     /* size of input buffer in bytes, not including room for EOB characters*/
1657     int ol_data_buf_size;       
1658
1659     /* number of characters read into ol_data_ch_buf, not including EOB characters */
1660     int ol_data_n_chars;
1661
1662     int ol_data_eof_status;             /* whether we've seen an EOF on this buffer */
1663 #define EOF_NOT_SEEN 0
1664     /* "pending" happens when the EOF has been seen but there's still
1665      * some text process
1666      */
1667 #define EOF_PENDING 1
1668 #define EOF_DONE 2
1669     };
1670
1671 static ol_data_BUFFER_STATE ol_data_current_buffer;
1672
1673 /* we provide macros for accessing buffer states in case in the
1674  * future we want to put the buffer states in a more general
1675  * "scanner state"
1676  */
1677 #define ol_data_CURRENT_BUFFER ol_data_current_buffer
1678
1679
1680 /* ol_data_hold_char holds the character lost when ol_datatext is formed */
1681 static ol_data_CHAR ol_data_hold_char;
1682
1683 static int ol_data_n_chars;             /* number of characters read into ol_data_ch_buf */
1684
1685
1686
1687 #ifndef ol_data_USER_ACTION
1688 #define ol_data_USER_ACTION
1689 #endif
1690
1691 #ifndef ol_data_USER_INIT
1692 #define ol_data_USER_INIT
1693 #endif
1694
1695 extern ol_data_CHAR *ol_datatext;
1696 extern int ol_dataleng;
1697 extern FILE *ol_datain, *ol_dataout;
1698
1699 ol_data_CHAR *ol_datatext;
1700 int ol_dataleng;
1701
1702 FILE *ol_datain = (FILE *) 0, *ol_dataout = (FILE *) 0;
1703
1704 #define ol_data_END_OF_BUFFER 13
1705 typedef int ol_data_state_type;
1706 static const short int ol_data_accept[47] =
1707     {   0,
1708         0,    0,   13,    8,   10,   10,    8,    8,    8,    9,
1709         8,    8,    8,    8,    8,   10,    8,    0,    2,    8,
1710         8,    0,    3,    1,    8,    8,    8,    2,    8,    3,
1711         8,    8,    8,    8,    4,    8,    8,    8,    8,    8,
1712         8,    5,    8,    8,    6,    7
1713     } ;
1714
1715 static ol_data_state_type ol_data_last_accepting_state;
1716 static ol_data_CHAR *ol_data_last_accepting_cpos;
1717
1718 static const ol_data_state_type ol_data_NUL_trans[47] =
1719     {   0,
1720         4,    4,    0,   15,    0,    0,   17,   15,   21,    0,
1721        15,   15,   15,   15,   15,    0,   17,   18,   15,   15,
1722        21,   22,   15,   15,   15,   15,   15,    0,   15,    0,
1723        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1724        15,   15,   15,   15,   15,   15
1725     } ;
1726
1727 /* the intent behind this definition is that it'll catch
1728  * any uses of REJECT which flex missed
1729  */
1730 #define REJECT reject_used_but_not_detected
1731 #define ol_datamore() ol_datamore_used_but_not_detected
1732 #define ol_data_MORE_ADJ 0
1733
1734 /* these variables are all declared out here so that section 3 code can
1735  * manipulate them
1736  */
1737 /* points to current character in buffer */
1738 static ol_data_CHAR *ol_data_c_buf_p = (ol_data_CHAR *) 0;
1739 static int ol_data_init = 1;            /* whether we need to initialize */
1740 static int ol_data_start = 0;   /* start state number */
1741
1742 /* flag which is used to allow ol_datawrap()'s to do buffer switches
1743  * instead of setting up a fresh ol_datain.  A bit of a hack ...
1744  */
1745 static int ol_data_did_buffer_switch_on_eof;
1746
1747 static ol_data_state_type ol_data_get_previous_state ol_data_PROTO(( void ));
1748 static ol_data_state_type ol_data_try_NUL_trans ol_data_PROTO(( ol_data_state_type current_state ));
1749 static int ol_data_get_next_buffer ol_data_PROTO(( void ));
1750 #if 0
1751 static void ol_dataunput ol_data_PROTO(( ol_data_CHAR c, ol_data_CHAR *buf_ptr ));
1752 #endif
1753 void ol_datarestart ol_data_PROTO(( FILE *input_file ));
1754 void ol_data_switch_to_buffer ol_data_PROTO(( ol_data_BUFFER_STATE new_buffer ));
1755 void ol_data_load_buffer_state ol_data_PROTO(( void ));
1756 ol_data_BUFFER_STATE ol_data_create_buffer ol_data_PROTO(( FILE *file, int size ));
1757 void ol_data_delete_buffer ol_data_PROTO(( ol_data_BUFFER_STATE b ));
1758 void ol_data_init_buffer ol_data_PROTO(( ol_data_BUFFER_STATE b, FILE *file ));
1759
1760 #define ol_data_new_buffer ol_data_create_buffer
1761
1762 #if 0
1763 #ifdef __cplusplus
1764 static int ol_datainput ol_data_PROTO(( void ));
1765 #else
1766 static int input ol_data_PROTO(( void ));
1767 #endif
1768 #endif
1769
1770 ol_data_DECL
1771     {
1772     register ol_data_state_type ol_data_current_state;
1773     register ol_data_CHAR *ol_data_cp, *ol_data_bp;
1774     register int ol_data_act;
1775
1776
1777
1778
1779     if ( ol_data_init )
1780         {
1781         ol_data_USER_INIT;
1782
1783         if ( ! ol_data_start )
1784             ol_data_start = 1;  /* first start state */
1785
1786         if ( ! ol_datain )
1787             ol_datain = stdin;
1788
1789         if ( ! ol_dataout )
1790             ol_dataout = stdout;
1791
1792         if ( ol_data_current_buffer )
1793             ol_data_init_buffer( ol_data_current_buffer, ol_datain );
1794         else
1795             ol_data_current_buffer = ol_data_create_buffer( ol_datain, ol_data_BUF_SIZE );
1796
1797         ol_data_load_buffer_state();
1798
1799         ol_data_init = 0;
1800         }
1801
1802     while ( 1 )         /* loops until end-of-file is reached */
1803         {
1804         ol_data_cp = ol_data_c_buf_p;
1805
1806         /* support of ol_datatext */
1807         *ol_data_cp = ol_data_hold_char;
1808
1809         /* ol_data_bp points to the position in ol_data_ch_buf of the start of the
1810          * current run.
1811          */
1812         ol_data_bp = ol_data_cp;
1813
1814         ol_data_current_state = ol_data_start;
1815 ol_data_match:
1816         while ( (ol_data_current_state = ol_data_nxt[ol_data_current_state][*ol_data_cp]) > 0 )
1817             {
1818             if ( ol_data_accept[ol_data_current_state] )
1819                 {
1820                 ol_data_last_accepting_state = ol_data_current_state;
1821                 ol_data_last_accepting_cpos = ol_data_cp;
1822                 }
1823
1824             ++ol_data_cp;
1825             }
1826
1827         ol_data_current_state = -ol_data_current_state;
1828
1829 ol_data_find_action:
1830         ol_data_act = ol_data_accept[ol_data_current_state];
1831
1832         ol_data_DO_BEFORE_ACTION;
1833         ol_data_USER_ACTION;
1834
1835 do_action:      /* this label is used only to access EOF actions */
1836
1837
1838         switch ( ol_data_act )
1839             {
1840             case 0: /* must backtrack */
1841             /* undo the effects of ol_data_DO_BEFORE_ACTION */
1842             *ol_data_cp = ol_data_hold_char;
1843             ol_data_cp = ol_data_last_accepting_cpos + 1;
1844             ol_data_current_state = ol_data_last_accepting_state;
1845             goto ol_data_find_action;
1846
1847 case 1:
1848 {
1849                                   ol_datalval.name = SGMLName::intern((const char *)ol_datatext+1 ,1); 
1850                                   return( Reference );
1851                                 }
1852         ol_data_BREAK
1853 case 2:
1854 {
1855                                   if ( *(ol_datatext + 1) != '"' ) {
1856                                      // get rid of the 2 quotes 
1857                                      int len = strlen(( const char *)ol_datatext)-2;
1858                                      char *lit_str = new char [ len + 1 ];
1859                                      *((char *) memcpy(lit_str,
1860                                                 (const char *)ol_datatext + 1,
1861                                                  len) + len) = '\0';
1862                                      ol_datalval.string = lit_str;
1863                                   }
1864                                   else {
1865                                      ol_datalval.string = 0;
1866                                   }
1867
1868                                   DBG(50) cerr << "(DEBUG) literal \"string\" = "
1869                                                << ol_datalval.string << endl;
1870
1871                                   return( Literal );
1872                                 }
1873         ol_data_BREAK
1874 case 3:
1875 {
1876                                   if ( *(ol_datatext + 1) != '\'' ) {
1877                                      // get rid of the 2 quotes 
1878                                      int len = strlen(( const char *)ol_datatext)-2;
1879                                      char *lit_str = new char [ len + 1 ];
1880                                      *((char *) memcpy(lit_str,
1881                                                 (const char *)ol_datatext + 1,
1882                                                  len) + len) = '\0';
1883                                      ol_datalval.string = lit_str;
1884                                      
1885                                   }
1886                                   else {
1887                                      ol_datalval.string = 0;
1888                                   }
1889
1890                                   DBG(50) cerr << "(DEBUG) literal 'string' = "
1891                                                << ol_datalval.string << endl;
1892          
1893                                   return( Literal );
1894                                 }
1895         ol_data_BREAK
1896 case 4:
1897 { return( Attr );      }
1898         ol_data_BREAK
1899 case 5:
1900 { return( Concat );    }
1901         ol_data_BREAK
1902 case 6:
1903 { return( FirstOf);    }
1904         ol_data_BREAK
1905 case 7:
1906 { return( Content );   }
1907         ol_data_BREAK
1908 case 8:
1909 {
1910                                   ol_datalval.name = SGMLName::intern((const char *)ol_datatext,1);
1911                                   DBG(10) cerr << "(DEBUG) matches"
1912                                                << (char *)SGMLName::lookup(ol_datalval.name)
1913                                                << endl;
1914                                   return ( Id );
1915                                 }
1916         ol_data_BREAK
1917 case 9:
1918 {
1919                                   DBG(10) cerr << "(DEBUG) matches"
1920                                                << (char *)ol_datatext
1921                                                << endl;
1922                                   return ( ol_datatext[0] );
1923                                 }
1924         ol_data_BREAK
1925 case 10:
1926 ;
1927         ol_data_BREAK
1928 case 11:
1929 {
1930                                   throw(Unexpected(
1931                                                    "Syntax error in value expression"));
1932
1933                                 }
1934         ol_data_BREAK
1935 case 12:
1936 ol_data_FATAL_ERROR( "flex scanner jammed" );
1937         ol_data_BREAK
1938 case ol_data_STATE_EOF(INITIAL):
1939     ol_dataterminate();
1940
1941             case ol_data_END_OF_BUFFER:
1942                 {
1943                 /* amount of text matched not including the EOB char */
1944                 int ol_data_amount_of_matched_text = ol_data_cp - ol_datatext - 1;
1945
1946                 /* undo the effects of ol_data_DO_BEFORE_ACTION */
1947                 *ol_data_cp = ol_data_hold_char;
1948
1949                 /* note that here we test for ol_data_c_buf_p "<=" to the position
1950                  * of the first EOB in the buffer, since ol_data_c_buf_p will
1951                  * already have been incremented past the NUL character
1952                  * (since all states make transitions on EOB to the end-
1953                  * of-buffer state).  Contrast this with the test in ol_datainput().
1954                  */
1955                 if ( ol_data_c_buf_p <= &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] )
1956                     /* this was really a NUL */
1957                     {
1958                     ol_data_state_type ol_data_next_state;
1959
1960                     ol_data_c_buf_p = ol_datatext + ol_data_amount_of_matched_text;
1961
1962                     ol_data_current_state = ol_data_get_previous_state();
1963
1964                     /* okay, we're now positioned to make the
1965                      * NUL transition.  We couldn't have
1966                      * ol_data_get_previous_state() go ahead and do it
1967                      * for us because it doesn't know how to deal
1968                      * with the possibility of jamming (and we
1969                      * don't want to build jamming into it because
1970                      * then it will run more slowly)
1971                      */
1972
1973                     ol_data_next_state = ol_data_try_NUL_trans( ol_data_current_state );
1974
1975                     ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
1976
1977                     if ( ol_data_next_state )
1978                         {
1979                         /* consume the NUL */
1980                         ol_data_cp = ++ol_data_c_buf_p;
1981                         ol_data_current_state = ol_data_next_state;
1982                         goto ol_data_match;
1983                         }
1984
1985                     else
1986                         {
1987                             ol_data_cp = ol_data_c_buf_p;
1988                         goto ol_data_find_action;
1989                         }
1990                     }
1991
1992                 else switch ( ol_data_get_next_buffer() )
1993                     {
1994                     case EOB_ACT_END_OF_FILE:
1995                         {
1996                         ol_data_did_buffer_switch_on_eof = 0;
1997
1998                         if ( ol_datawrap() )
1999                             {
2000                             /* note: because we've taken care in
2001                              * ol_data_get_next_buffer() to have set up ol_datatext,
2002                              * we can now set up ol_data_c_buf_p so that if some
2003                              * total hoser (like flex itself) wants
2004                              * to call the scanner after we return the
2005                              * ol_data_NULL, it'll still work - another ol_data_NULL
2006                              * will get returned.
2007                              */
2008                             ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2009
2010                             ol_data_act = ol_data_STATE_EOF((ol_data_start - 1) / 2);
2011                             goto do_action;
2012                             }
2013
2014                         else
2015                             {
2016                             if ( ! ol_data_did_buffer_switch_on_eof )
2017                                 ol_data_NEW_FILE;
2018                             }
2019                         }
2020                         break;
2021
2022                     case EOB_ACT_CONTINUE_SCAN:
2023                         ol_data_c_buf_p = ol_datatext + ol_data_amount_of_matched_text;
2024
2025                         ol_data_current_state = ol_data_get_previous_state();
2026
2027                         ol_data_cp = ol_data_c_buf_p;
2028                         ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
2029                         goto ol_data_match;
2030
2031                     case EOB_ACT_LAST_MATCH:
2032                         ol_data_c_buf_p =
2033                             &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars];
2034
2035                         ol_data_current_state = ol_data_get_previous_state();
2036
2037                         ol_data_cp = ol_data_c_buf_p;
2038                         ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
2039                         goto ol_data_find_action;
2040                     }
2041                 break;
2042                 }
2043
2044             default:
2045 #ifdef FLEX_DEBUG
2046                 printf( "action # %d\n", ol_data_act );
2047 #endif
2048                 ol_data_FATAL_ERROR(
2049                         "fatal flex scanner internal error--no action found" );
2050             }
2051         }
2052     }
2053
2054
2055 /* ol_data_get_next_buffer - try to read in a new buffer
2056  *
2057  * synopsis
2058  *     int ol_data_get_next_buffer();
2059  *     
2060  * returns a code representing an action
2061  *     EOB_ACT_LAST_MATCH - 
2062  *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2063  *     EOB_ACT_END_OF_FILE - end of file
2064  */
2065
2066 static int ol_data_get_next_buffer()
2067
2068     {
2069     register ol_data_CHAR *dest = ol_data_current_buffer->ol_data_ch_buf;
2070     register ol_data_CHAR *source = ol_datatext - 1; /* copy prev. char, too */
2071     register int number_to_move, i;
2072     int ret_val;
2073
2074     if ( ol_data_c_buf_p > &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars + 1] )
2075         ol_data_FATAL_ERROR(
2076                 "fatal flex scanner internal error--end of buffer missed" );
2077
2078     /* try to read more data */
2079
2080     /* first move last chars to start of buffer */
2081     number_to_move = ol_data_c_buf_p - ol_datatext;
2082
2083     for ( i = 0; i < number_to_move; ++i )
2084         *(dest++) = *(source++);
2085
2086     if ( ol_data_current_buffer->ol_data_eof_status != EOF_NOT_SEEN )
2087         /* don't do the read, it's not guaranteed to return an EOF,
2088          * just force an EOF
2089          */
2090         ol_data_n_chars = 0;
2091
2092     else
2093         {
2094         int num_to_read = ol_data_current_buffer->ol_data_buf_size - number_to_move - 1;
2095
2096         if ( num_to_read > ol_data_READ_BUF_SIZE )
2097             num_to_read = ol_data_READ_BUF_SIZE;
2098
2099         else if ( num_to_read <= 0 )
2100             ol_data_FATAL_ERROR( "fatal error - scanner input buffer overflow" );
2101
2102         /* read in more data */
2103         ol_data_INPUT( (&ol_data_current_buffer->ol_data_ch_buf[number_to_move]),
2104                   ol_data_n_chars, num_to_read );
2105         }
2106
2107     if ( ol_data_n_chars == 0 )
2108         {
2109         if ( number_to_move == 1 )
2110             {
2111             ret_val = EOB_ACT_END_OF_FILE;
2112             ol_data_current_buffer->ol_data_eof_status = EOF_DONE;
2113             }
2114
2115         else
2116             {
2117             ret_val = EOB_ACT_LAST_MATCH;
2118             ol_data_current_buffer->ol_data_eof_status = EOF_PENDING;
2119             }
2120         }
2121
2122     else
2123         ret_val = EOB_ACT_CONTINUE_SCAN;
2124
2125     ol_data_n_chars += number_to_move;
2126     ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] = ol_data_END_OF_BUFFER_CHAR;
2127     ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars + 1] = ol_data_END_OF_BUFFER_CHAR;
2128
2129     /* ol_datatext begins at the second character in ol_data_ch_buf; the first
2130      * character is the one which preceded it before reading in the latest
2131      * buffer; it needs to be kept around in case it's a newline, so
2132      * ol_data_get_previous_state() will have with '^' rules active
2133      */
2134
2135     ol_datatext = &ol_data_current_buffer->ol_data_ch_buf[1];
2136
2137     return ( ret_val );
2138     }
2139
2140
2141 /* ol_data_get_previous_state - get the state just before the EOB char was reached
2142  *
2143  * synopsis
2144  *     ol_data_state_type ol_data_get_previous_state();
2145  */
2146
2147 static ol_data_state_type ol_data_get_previous_state()
2148
2149     {
2150     register ol_data_state_type ol_data_current_state;
2151     register ol_data_CHAR *ol_data_cp;
2152
2153     ol_data_current_state = ol_data_start;
2154
2155     for ( ol_data_cp = ol_datatext + ol_data_MORE_ADJ; ol_data_cp < ol_data_c_buf_p; ++ol_data_cp )
2156         {
2157         if ( *ol_data_cp )
2158             {
2159             ol_data_current_state = ol_data_nxt[ol_data_current_state][*ol_data_cp];
2160             }
2161         else
2162             ol_data_current_state = ol_data_NUL_trans[ol_data_current_state];
2163         if ( ol_data_accept[ol_data_current_state] )
2164             {
2165             ol_data_last_accepting_state = ol_data_current_state;
2166             ol_data_last_accepting_cpos = ol_data_cp;
2167             }
2168         }
2169
2170     return ( ol_data_current_state );
2171     }
2172
2173
2174 /* ol_data_try_NUL_trans - try to make a transition on the NUL character
2175  *
2176  * synopsis
2177  *     next_state = ol_data_try_NUL_trans( current_state );
2178  */
2179
2180 #ifdef ol_data_USE_PROTOS
2181 static ol_data_state_type ol_data_try_NUL_trans( register ol_data_state_type ol_data_current_state )
2182 #else
2183 static ol_data_state_type ol_data_try_NUL_trans( ol_data_current_state )
2184 register ol_data_state_type ol_data_current_state;
2185 #endif
2186
2187     {
2188     register int ol_data_is_jam;
2189     register ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2190
2191     ol_data_current_state = ol_data_NUL_trans[ol_data_current_state];
2192     ol_data_is_jam = (ol_data_current_state == 0);
2193
2194     if ( ! ol_data_is_jam )
2195         {
2196         if ( ol_data_accept[ol_data_current_state] )
2197             {
2198             ol_data_last_accepting_state = ol_data_current_state;
2199             ol_data_last_accepting_cpos = ol_data_cp;
2200             }
2201         }
2202
2203     return ( ol_data_is_jam ? 0 : ol_data_current_state );
2204     }
2205
2206
2207 #if 0
2208 #ifdef ol_data_USE_PROTOS
2209 static void ol_dataunput( ol_data_CHAR c, register ol_data_CHAR *ol_data_bp )
2210 #else
2211 static void ol_dataunput( c, ol_data_bp )
2212 ol_data_CHAR c;
2213 register ol_data_CHAR *ol_data_bp;
2214 #endif
2215
2216     {
2217     register ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2218
2219     /* undo effects of setting up ol_datatext */
2220     *ol_data_cp = ol_data_hold_char;
2221
2222     if ( ol_data_cp < ol_data_current_buffer->ol_data_ch_buf + 2 )
2223         { /* need to shift things up to make room */
2224         register int number_to_move = ol_data_n_chars + 2; /* +2 for EOB chars */
2225         register ol_data_CHAR *dest =
2226             &ol_data_current_buffer->ol_data_ch_buf[ol_data_current_buffer->ol_data_buf_size + 2];
2227         register ol_data_CHAR *source =
2228             &ol_data_current_buffer->ol_data_ch_buf[number_to_move];
2229
2230         while ( source > ol_data_current_buffer->ol_data_ch_buf )
2231             *--dest = *--source;
2232
2233         ol_data_cp += dest - source;
2234         ol_data_bp += dest - source;
2235         ol_data_n_chars = ol_data_current_buffer->ol_data_buf_size;
2236
2237         if ( ol_data_cp < ol_data_current_buffer->ol_data_ch_buf + 2 )
2238             ol_data_FATAL_ERROR( "flex scanner push-back overflow" );
2239         }
2240
2241     if ( ol_data_cp > ol_data_bp && ol_data_cp[-1] == '\n' )
2242         ol_data_cp[-2] = '\n';
2243
2244     *--ol_data_cp = c;
2245
2246     /* note: the formal parameter *must* be called "ol_data_bp" for this
2247      *       macro to now work correctly
2248      */
2249     ol_data_DO_BEFORE_ACTION; /* set up ol_datatext again */
2250     }
2251 #endif
2252
2253
2254 #if 0
2255 #ifdef __cplusplus
2256 static int ol_datainput()
2257 #else
2258 static int input()
2259 #endif
2260
2261     {
2262     int c;
2263     ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2264
2265     *ol_data_cp = ol_data_hold_char;
2266
2267     if ( *ol_data_c_buf_p == ol_data_END_OF_BUFFER_CHAR )
2268         {
2269         /* ol_data_c_buf_p now points to the character we want to return.
2270          * If this occurs *before* the EOB characters, then it's a
2271          * valid NUL; if not, then we've hit the end of the buffer.
2272          */
2273         if ( ol_data_c_buf_p < &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] )
2274             /* this was really a NUL */
2275             *ol_data_c_buf_p = '\0';
2276
2277         else
2278             { /* need more input */
2279             ol_datatext = ol_data_c_buf_p;
2280             ++ol_data_c_buf_p;
2281
2282             switch ( ol_data_get_next_buffer() )
2283                 {
2284                 case EOB_ACT_END_OF_FILE:
2285                     {
2286                     if ( ol_datawrap() )
2287                         {
2288                         ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2289                         return ( EOF );
2290                         }
2291
2292                     ol_data_NEW_FILE;
2293
2294 #ifdef __cplusplus
2295                     return ( ol_datainput() );
2296 #else
2297                     return ( input() );
2298 #endif
2299                     }
2300                     break;
2301
2302                 case EOB_ACT_CONTINUE_SCAN:
2303                     ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2304                     break;
2305
2306                 case EOB_ACT_LAST_MATCH:
2307 #ifdef __cplusplus
2308                     ol_data_FATAL_ERROR( "unexpected last match in ol_datainput()" );
2309 #else
2310                     ol_data_FATAL_ERROR( "unexpected last match in input()" );
2311 #endif
2312                 }
2313             }
2314         }
2315
2316     c = *ol_data_c_buf_p;
2317     ol_data_hold_char = *++ol_data_c_buf_p;
2318
2319     return ( c );
2320     }
2321 #endif
2322
2323
2324 #ifdef ol_data_USE_PROTOS
2325 void ol_datarestart( FILE *input_file )
2326 #else
2327 void ol_datarestart( input_file )
2328 FILE *input_file;
2329 #endif
2330
2331     {
2332     ol_data_init_buffer( ol_data_current_buffer, input_file );
2333     ol_data_load_buffer_state();
2334     }
2335
2336
2337 #ifdef ol_data_USE_PROTOS
2338 void ol_data_switch_to_buffer( ol_data_BUFFER_STATE new_buffer )
2339 #else
2340 void ol_data_switch_to_buffer( new_buffer )
2341 ol_data_BUFFER_STATE new_buffer;
2342 #endif
2343
2344     {
2345     if ( ol_data_current_buffer == new_buffer )
2346         return;
2347
2348     if ( ol_data_current_buffer )
2349         {
2350         /* flush out information for old buffer */
2351         *ol_data_c_buf_p = ol_data_hold_char;
2352         ol_data_current_buffer->ol_data_buf_pos = ol_data_c_buf_p;
2353         ol_data_current_buffer->ol_data_n_chars = ol_data_n_chars;
2354         }
2355
2356     ol_data_current_buffer = new_buffer;
2357     ol_data_load_buffer_state();
2358
2359     /* we don't actually know whether we did this switch during
2360      * EOF (ol_datawrap()) processing, but the only time this flag
2361      * is looked at is after ol_datawrap() is called, so it's safe
2362      * to go ahead and always set it.
2363      */
2364     ol_data_did_buffer_switch_on_eof = 1;
2365     }
2366
2367
2368 #ifdef ol_data_USE_PROTOS
2369 void ol_data_load_buffer_state( void )
2370 #else
2371 void ol_data_load_buffer_state()
2372 #endif
2373
2374     {
2375     ol_data_n_chars = ol_data_current_buffer->ol_data_n_chars;
2376     ol_datatext = ol_data_c_buf_p = ol_data_current_buffer->ol_data_buf_pos;
2377     ol_datain = ol_data_current_buffer->ol_data_input_file;
2378     ol_data_hold_char = *ol_data_c_buf_p;
2379     }
2380
2381
2382 #ifdef ol_data_USE_PROTOS
2383 ol_data_BUFFER_STATE ol_data_create_buffer( FILE *file, int size )
2384 #else
2385 ol_data_BUFFER_STATE ol_data_create_buffer( file, size )
2386 FILE *file;
2387 int size;
2388 #endif
2389
2390     {
2391     ol_data_BUFFER_STATE b;
2392
2393     b = (ol_data_BUFFER_STATE) malloc( sizeof( struct ol_data_buffer_state ) );
2394
2395     if ( ! b )
2396         ol_data_FATAL_ERROR( "out of dynamic memory in ol_data_create_buffer()" );
2397
2398     b->ol_data_buf_size = size;
2399
2400     /* ol_data_ch_buf has to be 2 characters longer than the size given because
2401      * we need to put in 2 end-of-buffer characters.
2402      */
2403     b->ol_data_ch_buf = (ol_data_CHAR *) malloc( (unsigned) (b->ol_data_buf_size + 2) );
2404
2405     if ( ! b->ol_data_ch_buf )
2406         ol_data_FATAL_ERROR( "out of dynamic memory in ol_data_create_buffer()" );
2407
2408     ol_data_init_buffer( b, file );
2409
2410     return ( b );
2411     }
2412
2413
2414 #ifdef ol_data_USE_PROTOS
2415 void ol_data_delete_buffer( ol_data_BUFFER_STATE b )
2416 #else
2417 void ol_data_delete_buffer( b )
2418 ol_data_BUFFER_STATE b;
2419 #endif
2420
2421     {
2422     if ( b == ol_data_current_buffer )
2423         ol_data_current_buffer = (ol_data_BUFFER_STATE) 0;
2424
2425     free( (char *) b->ol_data_ch_buf );
2426     free( (char *) b );
2427     }
2428
2429
2430 #ifdef ol_data_USE_PROTOS
2431 void ol_data_init_buffer( ol_data_BUFFER_STATE b, FILE *file )
2432 #else
2433 void ol_data_init_buffer( b, file )
2434 ol_data_BUFFER_STATE b;
2435 FILE *file;
2436 #endif
2437
2438     {
2439     b->ol_data_input_file = file;
2440
2441     /* we put in the '\n' and start reading from [1] so that an
2442      * initial match-at-newline will be true.
2443      */
2444
2445     b->ol_data_ch_buf[0] = '\n';
2446     b->ol_data_n_chars = 1;
2447
2448     /* we always need two end-of-buffer characters.  The first causes
2449      * a transition to the end-of-buffer state.  The second causes
2450      * a jam in that state.
2451      */
2452     b->ol_data_ch_buf[1] = ol_data_END_OF_BUFFER_CHAR;
2453     b->ol_data_ch_buf[2] = ol_data_END_OF_BUFFER_CHAR;
2454
2455     b->ol_data_buf_pos = &b->ol_data_ch_buf[1];
2456
2457     b->ol_data_eof_status = EOF_NOT_SEEN;
2458     }
2459
2460
2461 static int
2462 my_input ( char *buf, int max_size )
2463 {
2464
2465   int remain = myinputlim - myinputptr;
2466   int n = ( max_size > remain ? remain : max_size );
2467
2468   if ( n > 0 ) {
2469     memcpy ( buf, myinputptr, n );
2470     myinputptr += n;
2471   }
2472   return n;
2473 }
2474
2475 //--------------------------------------------------------------
2476 void
2477 ol_dataerror(char *str)
2478 {
2479   throw(Unexpected(form("Syntax error in %s", myinput)));
2480 }
2481
2482 //--------------------------------------------------------------
2483 ContentType::ContentType()
2484 {
2485   char *dbgStr;
2486   dbgStr = getenv ("OL_DEBUG");
2487   dbgLevel = ( dbgStr ? atoi ( dbgStr ) : 0 );
2488   exprlist  = 0;
2489 }
2490
2491 //--------------------------------------------------------------
2492 ContentType::~ContentType()
2493 {
2494
2495    OL_Expression *eptr = exprlist;
2496    while ( eptr ) {
2497       OL_Expression *tmp = eptr;
2498       eptr = eptr->next;
2499       delete tmp;
2500    }
2501 }
2502
2503 //--------------------------------------------------------------
2504 void
2505 ContentType::Parse( char *str )
2506 {
2507
2508   DBG(10) cerr << "(DEBUG) ContentType::Parse() str = " << str << endl;
2509
2510   myinput = str;
2511   myinputptr = str;
2512   myinputlim = str + strlen(str);
2513
2514   CurrentContentPtr = this;
2515   
2516   ol_dataparse();
2517   
2518   BEGIN INITIAL;
2519   ol_datarestart(NULL);
2520 }
2521
2522 //--------------------------------------------------------------
2523 void
2524 ContentType::init( OL_Expression *expr )
2525 {
2526   assert(expr != NULL);
2527   if ( expr->next ) {
2528     
2529     /*
2530      * The same as CONCAT
2531      */
2532     ExprList *elist = new ExprList( expr );
2533     OL_Expression *new_expr = new OL_Expression ( CONCAT, -1, elist );
2534     assert(new_expr != NULL);
2535
2536     exprlist = new_expr;
2537   }
2538   else {
2539     exprlist = expr;
2540   }
2541 }
2542