1/*
2 * Topro TP6800/6810 webcam driver.
3 *
4 * Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
5 * Copyright (C) 2009 Anders Blomdell (anders.blomdell@control.lth.se)
6 * Copyright (C) 2008 Thomas Champagne (lafeuil@gmail.com)
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
23
24#include "gspca.h"
25
26MODULE_DESCRIPTION("Topro TP6800/6810 gspca webcam driver");
27MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>, "
28		"Anders Blomdell <anders.blomdell@control.lth.se>");
29MODULE_LICENSE("GPL");
30
31static int force_sensor = -1;
32
33/* JPEG header */
34static const u8 jpeg_head[] = {
35	0xff, 0xd8,			/* jpeg */
36
37/* quantization table quality 50% */
38	0xff, 0xdb, 0x00, 0x84,		/* DQT */
390,
40#define JPEG_QT0_OFFSET 7
41	0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e,
42	0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28,
43	0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
44	0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
45	0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
46	0x57, 0x45, 0x37, 0x38, 0x50, 0x6d, 0x51, 0x57,
47	0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71,
48	0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63,
491,
50#define JPEG_QT1_OFFSET 72
51	0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
52	0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
53	0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
54	0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
55	0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
56	0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
57	0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
58	0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
59
60	/* Define Huffman table (thanks to Thomas Kaiser) */
61	0xff, 0xc4, 0x01, 0x5e,
62	0x00, 0x00, 0x02, 0x03,
63	0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
64	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
65	0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10,
66	0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
67	0x07, 0x05, 0x04, 0x06, 0x01, 0x00, 0x00, 0x57,
68	0x01, 0x02, 0x03, 0x00, 0x11, 0x04, 0x12, 0x21,
69	0x31, 0x13, 0x41, 0x51, 0x61, 0x05, 0x22, 0x32,
70	0x14, 0x71, 0x81, 0x91, 0x15, 0x23, 0x42, 0x52,
71	0x62, 0xa1, 0xb1, 0x06, 0x33, 0x72, 0xc1, 0xd1,
72	0x24, 0x43, 0x53, 0x82, 0x16, 0x34, 0x92, 0xa2,
73	0xe1, 0xf1, 0xf0, 0x07, 0x08, 0x17, 0x18, 0x25,
74	0x26, 0x27, 0x28, 0x35, 0x36, 0x37, 0x38, 0x44,
75	0x45, 0x46, 0x47, 0x48, 0x54, 0x55, 0x56, 0x57,
76	0x58, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x73,
77	0x74, 0x75, 0x76, 0x77, 0x78, 0x83, 0x84, 0x85,
78	0x86, 0x87, 0x88, 0x93, 0x94, 0x95, 0x96, 0x97,
79	0x98, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2,
80	0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3,
81	0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4,
82	0xd5, 0xd6, 0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5,
83	0xe6, 0xe7, 0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,
84	0xf7, 0xf8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
85	0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
86	0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
87	0x05, 0x06, 0x07, 0x08, 0x09, 0x11, 0x00, 0x02,
88	0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
89	0x04, 0x06, 0x01, 0x00, 0x00, 0x57, 0x00, 0x01,
90	0x11, 0x02, 0x21, 0x03, 0x12, 0x31, 0x41, 0x13,
91	0x22, 0x51, 0x61, 0x04, 0x32, 0x71, 0x05, 0x14,
92	0x23, 0x42, 0x33, 0x52, 0x81, 0x91, 0xa1, 0xb1,
93	0xf0, 0x06, 0x15, 0xc1, 0xd1, 0xe1, 0x24, 0x43,
94	0x62, 0xf1, 0x16, 0x25, 0x34, 0x53, 0x72, 0x82,
95	0x92, 0x07, 0x08, 0x17, 0x18, 0x26, 0x27, 0x28,
96	0x35, 0x36, 0x37, 0x38, 0x44, 0x45, 0x46, 0x47,
97	0x48, 0x54, 0x55, 0x56, 0x57, 0x58, 0x63, 0x64,
98	0x65, 0x66, 0x67, 0x68, 0x73, 0x74, 0x75, 0x76,
99	0x77, 0x78, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
100	0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0xa2, 0xa3,
101	0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2, 0xb3, 0xb4,
102	0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3, 0xc4, 0xc5,
103	0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
104	0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
105	0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
106	0xff, 0xc0, 0x00, 0x11,		/* SOF0 (start of frame 0 */
107	0x08,				/* data precision */
108#define JPEG_HEIGHT_OFFSET 493
109	0x01, 0xe0,			/* height */
110	0x02, 0x80,			/* width */
111	0x03,				/* component number */
112		0x01,
113			0x21,		/* samples Y = jpeg 422 */
114			0x00,		/* quant Y */
115		0x02, 0x11, 0x01,	/* samples CbCr - quant CbCr */
116		0x03, 0x11, 0x01,
117
118	0xff, 0xda, 0x00, 0x0c,		/* SOS (start of scan) */
119	0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00
120#define JPEG_HDR_SZ 521
121};
122
123enum e_ctrl {
124	EXPOSURE,
125	QUALITY,
126	SHARPNESS,
127	RGAIN,
128	GAIN,
129	BGAIN,
130	GAMMA,
131	AUTOGAIN,
132	NCTRLS		/* number of controls */
133};
134
135#define AUTOGAIN_DEF 1
136
137struct sd {
138	struct gspca_dev gspca_dev;	/* !! must be the first item */
139
140	struct gspca_ctrl ctrls[NCTRLS];
141
142	u8 framerate;
143	u8 quality;		/* webcam current JPEG quality (0..16) */
144	s8 ag_cnt;		/* autogain / start counter for tp6810 */
145#define AG_CNT_START 13		/* check gain every N frames */
146
147	u8 bridge;
148	u8 sensor;
149
150	u8 jpeg_hdr[JPEG_HDR_SZ];
151};
152
153enum bridges {
154	BRIDGE_TP6800,
155	BRIDGE_TP6810,
156};
157
158enum sensors {
159	SENSOR_CX0342,
160	SENSOR_SOI763A,		/* ~= ov7630 / ov7648 */
161	NSENSORS
162};
163
164static const struct v4l2_pix_format vga_mode[] = {
165	{320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
166		.bytesperline = 320,
167		.sizeimage = 320 * 240 * 4 / 8 + 590,
168		.colorspace = V4L2_COLORSPACE_JPEG},
169	{640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
170		.bytesperline = 640,
171		.sizeimage = 640 * 480 * 3 / 8 + 590,
172		.colorspace = V4L2_COLORSPACE_JPEG}
173};
174
175/*
176 * JPEG quality
177 * index: webcam compression
178 * value: JPEG quality in %
179 */
180static const u8 jpeg_q[17] = {
181	88, 77, 67, 57, 55, 55, 45, 45, 36, 36, 30, 30, 26, 26, 22, 22, 94
182};
183
184#define BULK_OUT_SIZE		0x20
185#if BULK_OUT_SIZE > USB_BUF_SZ
186#error "USB buffer too small"
187#endif
188
189static const u8 rates[] = {30, 20, 15, 10, 7, 5};
190static const struct framerates framerates[] = {
191	{
192		.rates = rates,
193		.nrates = ARRAY_SIZE(rates)
194	},
195	{
196		.rates = rates,
197		.nrates = ARRAY_SIZE(rates)
198	}
199};
200static const u8 rates_6810[] = {30, 15, 10, 7, 5};
201static const struct framerates framerates_6810[] = {
202	{
203		.rates = rates_6810,
204		.nrates = ARRAY_SIZE(rates_6810)
205	},
206	{
207		.rates = rates_6810,
208		.nrates = ARRAY_SIZE(rates_6810)
209	}
210};
211
212/*
213 * webcam quality in %
214 * the last value is the ultra fine quality
215 */
216
217/* TP6800 register offsets */
218#define TP6800_R10_SIF_TYPE		0x10
219#define TP6800_R11_SIF_CONTROL		0x11
220#define TP6800_R12_SIF_ADDR_S		0x12
221#define TP6800_R13_SIF_TX_DATA		0x13
222#define TP6800_R14_SIF_RX_DATA		0x14
223#define TP6800_R15_GPIO_PU		0x15
224#define TP6800_R16_GPIO_PD		0x16
225#define TP6800_R17_GPIO_IO		0x17
226#define TP6800_R18_GPIO_DATA		0x18
227#define TP6800_R19_SIF_ADDR_S2		0x19
228#define TP6800_R1A_SIF_TX_DATA2		0x1a
229#define TP6800_R1B_SIF_RX_DATA2		0x1b
230#define TP6800_R21_ENDP_1_CTL		0x21
231#define TP6800_R2F_TIMING_CFG		0x2f
232#define TP6800_R30_SENSOR_CFG		0x30
233#define TP6800_R31_PIXEL_START		0x31
234#define TP6800_R32_PIXEL_END_L		0x32
235#define TP6800_R33_PIXEL_END_H		0x33
236#define TP6800_R34_LINE_START		0x34
237#define TP6800_R35_LINE_END_L		0x35
238#define TP6800_R36_LINE_END_H		0x36
239#define TP6800_R37_FRONT_DARK_ST	0x37
240#define TP6800_R38_FRONT_DARK_END	0x38
241#define TP6800_R39_REAR_DARK_ST_L	0x39
242#define TP6800_R3A_REAR_DARK_ST_H	0x3a
243#define TP6800_R3B_REAR_DARK_END_L	0x3b
244#define TP6800_R3C_REAR_DARK_END_H	0x3c
245#define TP6800_R3D_HORIZ_DARK_LINE_L	0x3d
246#define TP6800_R3E_HORIZ_DARK_LINE_H	0x3e
247#define TP6800_R3F_FRAME_RATE		0x3f
248#define TP6800_R50			0x50
249#define TP6800_R51			0x51
250#define TP6800_R52			0x52
251#define TP6800_R53			0x53
252#define TP6800_R54_DARK_CFG		0x54
253#define TP6800_R55_GAMMA_R		0x55
254#define TP6800_R56_GAMMA_G		0x56
255#define TP6800_R57_GAMMA_B		0x57
256#define TP6800_R5C_EDGE_THRLD		0x5c
257#define TP6800_R5D_DEMOSAIC_CFG		0x5d
258#define TP6800_R78_FORMAT		0x78
259#define TP6800_R79_QUALITY		0x79
260#define TP6800_R7A_BLK_THRLD		0x7a
261
262/* CX0342 register offsets */
263
264#define CX0342_SENSOR_ID		0x00
265#define CX0342_VERSION_NO		0x01
266#define CX0342_ORG_X_L			0x02
267#define CX0342_ORG_X_H			0x03
268#define CX0342_ORG_Y_L			0x04
269#define CX0342_ORG_Y_H			0x05
270#define CX0342_STOP_X_L			0x06
271#define CX0342_STOP_X_H			0x07
272#define CX0342_STOP_Y_L			0x08
273#define CX0342_STOP_Y_H			0x09
274#define CX0342_FRAME_WIDTH_L		0x0a
275#define CX0342_FRAME_WIDTH_H		0x0b
276#define CX0342_FRAME_HEIGH_L		0x0c
277#define CX0342_FRAME_HEIGH_H		0x0d
278#define CX0342_EXPO_LINE_L		0x10
279#define CX0342_EXPO_LINE_H		0x11
280#define CX0342_EXPO_CLK_L		0x12
281#define CX0342_EXPO_CLK_H		0x13
282#define CX0342_RAW_GRGAIN_L		0x14
283#define CX0342_RAW_GRGAIN_H		0x15
284#define CX0342_RAW_GBGAIN_L		0x16
285#define CX0342_RAW_GBGAIN_H		0x17
286#define CX0342_RAW_RGAIN_L		0x18
287#define CX0342_RAW_RGAIN_H		0x19
288#define CX0342_RAW_BGAIN_L		0x1a
289#define CX0342_RAW_BGAIN_H		0x1b
290#define CX0342_GLOBAL_GAIN		0x1c
291#define CX0342_SYS_CTRL_0		0x20
292#define CX0342_SYS_CTRL_1		0x21
293#define CX0342_SYS_CTRL_2		0x22
294#define CX0342_BYPASS_MODE		0x23
295#define CX0342_SYS_CTRL_3		0x24
296#define CX0342_TIMING_EN		0x25
297#define CX0342_OUTPUT_CTRL		0x26
298#define CX0342_AUTO_ADC_CALIB		0x27
299#define CX0342_SYS_CTRL_4		0x28
300#define CX0342_ADCGN			0x30
301#define CX0342_SLPCR			0x31
302#define CX0342_SLPFN_LO			0x32
303#define CX0342_ADC_CTL			0x33
304#define CX0342_LVRST_BLBIAS		0x34
305#define CX0342_VTHSEL			0x35
306#define CX0342_RAMP_RIV			0x36
307#define CX0342_LDOSEL			0x37
308#define CX0342_CLOCK_GEN		0x40
309#define CX0342_SOFT_RESET		0x41
310#define CX0342_PLL			0x42
311#define CX0342_DR_ENH_PULSE_OFFSET_L	0x43
312#define CX0342_DR_ENH_PULSE_OFFSET_H	0x44
313#define CX0342_DR_ENH_PULSE_POS_L	0x45
314#define CX0342_DR_ENH_PULSE_POS_H	0x46
315#define CX0342_DR_ENH_PULSE_WIDTH	0x47
316#define CX0342_AS_CURRENT_CNT_L		0x48
317#define CX0342_AS_CURRENT_CNT_H		0x49
318#define CX0342_AS_PREVIOUS_CNT_L	0x4a
319#define CX0342_AS_PREVIOUS_CNT_H	0x4b
320#define CX0342_SPV_VALUE_L		0x4c
321#define CX0342_SPV_VALUE_H		0x4d
322#define CX0342_GPXLTHD_L		0x50
323#define CX0342_GPXLTHD_H		0x51
324#define CX0342_RBPXLTHD_L		0x52
325#define CX0342_RBPXLTHD_H		0x53
326#define CX0342_PLANETHD_L		0x54
327#define CX0342_PLANETHD_H		0x55
328#define CX0342_ROWDARK_TH		0x56
329#define CX0342_ROWDARK_TOL		0x57
330#define CX0342_RB_GAP_L			0x58
331#define CX0342_RB_GAP_H			0x59
332#define CX0342_G_GAP_L			0x5a
333#define CX0342_G_GAP_H			0x5b
334#define CX0342_AUTO_ROW_DARK		0x60
335#define CX0342_MANUAL_DARK_VALUE	0x61
336#define CX0342_GB_DARK_OFFSET		0x62
337#define CX0342_GR_DARK_OFFSET		0x63
338#define CX0342_RED_DARK_OFFSET		0x64
339#define CX0342_BLUE_DARK_OFFSET		0x65
340#define CX0342_DATA_SCALING_MULTI	0x66
341#define CX0342_AUTOD_Q_FRAME		0x67
342#define CX0342_AUTOD_ALLOW_VARI		0x68
343#define CX0342_AUTO_DARK_VALUE_L	0x69
344#define CX0342_AUTO_DARK_VALUE_H	0x6a
345#define CX0342_IO_CTRL_0		0x70
346#define CX0342_IO_CTRL_1		0x71
347#define CX0342_IO_CTRL_2		0x72
348#define CX0342_IDLE_CTRL		0x73
349#define CX0342_TEST_MODE		0x74
350#define CX0342_FRAME_FIX_DATA_TEST	0x75
351#define CX0342_FRAME_CNT_TEST		0x76
352#define CX0342_RST_OVERFLOW_L		0x80
353#define CX0342_RST_OVERFLOW_H		0x81
354#define CX0342_RST_UNDERFLOW_L		0x82
355#define CX0342_RST_UNDERFLOW_H		0x83
356#define CX0342_DATA_OVERFLOW_L		0x84
357#define CX0342_DATA_OVERFLOW_H		0x85
358#define CX0342_DATA_UNDERFLOW_L		0x86
359#define CX0342_DATA_UNDERFLOW_H		0x87
360#define CX0342_CHANNEL_0_0_L_irst	0x90
361#define CX0342_CHANNEL_0_0_H_irst	0x91
362#define CX0342_CHANNEL_0_1_L_irst	0x92
363#define CX0342_CHANNEL_0_1_H_irst	0x93
364#define CX0342_CHANNEL_0_2_L_irst	0x94
365#define CX0342_CHANNEL_0_2_H_irst	0x95
366#define CX0342_CHANNEL_0_3_L_irst	0x96
367#define CX0342_CHANNEL_0_3_H_irst	0x97
368#define CX0342_CHANNEL_0_4_L_irst	0x98
369#define CX0342_CHANNEL_0_4_H_irst	0x99
370#define CX0342_CHANNEL_0_5_L_irst	0x9a
371#define CX0342_CHANNEL_0_5_H_irst	0x9b
372#define CX0342_CHANNEL_0_6_L_irst	0x9c
373#define CX0342_CHANNEL_0_6_H_irst	0x9d
374#define CX0342_CHANNEL_0_7_L_irst	0x9e
375#define CX0342_CHANNEL_0_7_H_irst	0x9f
376#define CX0342_CHANNEL_1_0_L_itx	0xa0
377#define CX0342_CHANNEL_1_0_H_itx	0xa1
378#define CX0342_CHANNEL_1_1_L_itx	0xa2
379#define CX0342_CHANNEL_1_1_H_itx	0xa3
380#define CX0342_CHANNEL_1_2_L_itx	0xa4
381#define CX0342_CHANNEL_1_2_H_itx	0xa5
382#define CX0342_CHANNEL_1_3_L_itx	0xa6
383#define CX0342_CHANNEL_1_3_H_itx	0xa7
384#define CX0342_CHANNEL_1_4_L_itx	0xa8
385#define CX0342_CHANNEL_1_4_H_itx	0xa9
386#define CX0342_CHANNEL_1_5_L_itx	0xaa
387#define CX0342_CHANNEL_1_5_H_itx	0xab
388#define CX0342_CHANNEL_1_6_L_itx	0xac
389#define CX0342_CHANNEL_1_6_H_itx	0xad
390#define CX0342_CHANNEL_1_7_L_itx	0xae
391#define CX0342_CHANNEL_1_7_H_itx	0xaf
392#define CX0342_CHANNEL_2_0_L_iwl	0xb0
393#define CX0342_CHANNEL_2_0_H_iwl	0xb1
394#define CX0342_CHANNEL_2_1_L_iwl	0xb2
395#define CX0342_CHANNEL_2_1_H_iwl	0xb3
396#define CX0342_CHANNEL_2_2_L_iwl	0xb4
397#define CX0342_CHANNEL_2_2_H_iwl	0xb5
398#define CX0342_CHANNEL_2_3_L_iwl	0xb6
399#define CX0342_CHANNEL_2_3_H_iwl	0xb7
400#define CX0342_CHANNEL_2_4_L_iwl	0xb8
401#define CX0342_CHANNEL_2_4_H_iwl	0xb9
402#define CX0342_CHANNEL_2_5_L_iwl	0xba
403#define CX0342_CHANNEL_2_5_H_iwl	0xbb
404#define CX0342_CHANNEL_2_6_L_iwl	0xbc
405#define CX0342_CHANNEL_2_6_H_iwl	0xbd
406#define CX0342_CHANNEL_2_7_L_iwl	0xbe
407#define CX0342_CHANNEL_2_7_H_iwl	0xbf
408#define CX0342_CHANNEL_3_0_L_ensp	0xc0
409#define CX0342_CHANNEL_3_0_H_ensp	0xc1
410#define CX0342_CHANNEL_3_1_L_ensp	0xc2
411#define CX0342_CHANNEL_3_1_H_ensp	0xc3
412#define CX0342_CHANNEL_3_2_L_ensp	0xc4
413#define CX0342_CHANNEL_3_2_H_ensp	0xc5
414#define CX0342_CHANNEL_3_3_L_ensp	0xc6
415#define CX0342_CHANNEL_3_3_H_ensp	0xc7
416#define CX0342_CHANNEL_3_4_L_ensp	0xc8
417#define CX0342_CHANNEL_3_4_H_ensp	0xc9
418#define CX0342_CHANNEL_3_5_L_ensp	0xca
419#define CX0342_CHANNEL_3_5_H_ensp	0xcb
420#define CX0342_CHANNEL_3_6_L_ensp	0xcc
421#define CX0342_CHANNEL_3_6_H_ensp	0xcd
422#define CX0342_CHANNEL_3_7_L_ensp	0xce
423#define CX0342_CHANNEL_3_7_H_ensp	0xcf
424#define CX0342_CHANNEL_4_0_L_sela	0xd0
425#define CX0342_CHANNEL_4_0_H_sela	0xd1
426#define CX0342_CHANNEL_4_1_L_sela	0xd2
427#define CX0342_CHANNEL_4_1_H_sela	0xd3
428#define CX0342_CHANNEL_5_0_L_intla	0xe0
429#define CX0342_CHANNEL_5_0_H_intla	0xe1
430#define CX0342_CHANNEL_5_1_L_intla	0xe2
431#define CX0342_CHANNEL_5_1_H_intla	0xe3
432#define CX0342_CHANNEL_5_2_L_intla	0xe4
433#define CX0342_CHANNEL_5_2_H_intla	0xe5
434#define CX0342_CHANNEL_5_3_L_intla	0xe6
435#define CX0342_CHANNEL_5_3_H_intla	0xe7
436#define CX0342_CHANNEL_6_0_L_xa_sel_pos 0xf0
437#define CX0342_CHANNEL_6_0_H_xa_sel_pos 0xf1
438#define CX0342_CHANNEL_7_1_L_cds_pos	0xf2
439#define CX0342_CHANNEL_7_1_H_cds_pos	0xf3
440#define CX0342_SENSOR_HEIGHT_L		0xfb
441#define CX0342_SENSOR_HEIGHT_H		0xfc
442#define CX0342_SENSOR_WIDTH_L		0xfd
443#define CX0342_SENSOR_WIDTH_H		0xfe
444#define CX0342_VSYNC_HSYNC_READ		0xff
445
446struct cmd {
447	u8 reg;
448	u8 val;
449};
450
451static const u8 DQT[17][130] = {
452	/* Define quantization table (thanks to Thomas Kaiser) */
453	{			/* Quality 0 */
454	 0x00,
455	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
456	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
457	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
458	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
459	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
460	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
461	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
462	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
463	 0x01,
464	 0x04, 0x04, 0x04, 0x06, 0x05, 0x06, 0x0b, 0x06,
465	 0x06, 0x0b, 0x18, 0x10, 0x0e, 0x10, 0x18, 0x18,
466	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
467	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
468	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
469	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
470	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
471	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
472	 },
473	{			/* Quality 1 */
474	 0x00,
475	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
476	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
477	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
478	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
479	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
480	 0x04, 0x04, 0x04, 0x09, 0x09, 0x09, 0x09, 0x09,
481	 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
482	 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
483	 0x01,
484	 0x08, 0x09, 0x09, 0x0c, 0x0a, 0x0c, 0x17, 0x0d,
485	 0x0d, 0x17, 0x31, 0x21, 0x1c, 0x21, 0x31, 0x31,
486	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
487	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
488	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
489	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
490	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
491	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
492	 },
493	{			/* Quality 2 */
494	 0x00,
495	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
496	 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04,
497	 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
498	 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
499	 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
500	 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
501	 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
502	 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
503	 0x01,
504	 0x0c, 0x0d, 0x0d, 0x12, 0x0f, 0x12, 0x23, 0x13,
505	 0x13, 0x23, 0x4a, 0x31, 0x2a, 0x31, 0x4a, 0x4a,
506	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
507	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
508	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
509	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
510	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
511	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
512	 },
513	{			/* Quality 3 */
514	 0x00,
515	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
516	 0x04, 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
517	 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
518	 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
519	 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
520	 0x08, 0x08, 0x08, 0x13, 0x13, 0x13, 0x13, 0x13,
521	 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
522	 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
523	 0x01,
524	 0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
525	 0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
526	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
527	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
528	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
529	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
530	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
531	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
532	 },
533	{			/* Quality 4 */
534	 0x00,
535	 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
536	 0x05, 0x05, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x05,
537	 0x05, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
538	 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
539	 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
540	 0x0a, 0x0a, 0x0a, 0x17, 0x17, 0x17, 0x17, 0x17,
541	 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
542	 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
543	 0x01,
544	 0x11, 0x16, 0x16, 0x1e, 0x1a, 0x1e, 0x3a, 0x20,
545	 0x20, 0x3a, 0x7b, 0x52, 0x46, 0x52, 0x7b, 0x7b,
546	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
547	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
548	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
549	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
550	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
551	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
552	 },
553	{			/* Quality 5 */
554	 0x00,
555	 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
556	 0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x06, 0x06, 0x06,
557	 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
558	 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
559	 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
560	 0x0c, 0x0c, 0x0c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
561	 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
562	 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
563	 0x01,
564	 0x11, 0x1b, 0x1b, 0x24, 0x1f, 0x24, 0x46, 0x27,
565	 0x27, 0x46, 0x94, 0x63, 0x54, 0x63, 0x94, 0x94,
566	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
567	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
568	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
569	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
570	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
571	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
572	 },
573	{			/* Quality 6 */
574	 0x00,
575	 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
576	 0x07, 0x07, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07,
577	 0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
578	 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
579	 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
580	 0x0e, 0x0e, 0x0e, 0x21, 0x21, 0x21, 0x21, 0x21,
581	 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
582	 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
583	 0x01,
584	 0x15, 0x1f, 0x1f, 0x2a, 0x24, 0x2a, 0x52, 0x2d,
585	 0x2d, 0x52, 0xad, 0x73, 0x62, 0x73, 0xad, 0xad,
586	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
587	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
588	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
589	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
590	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
591	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
592	 },
593	{			/* Quality 7 */
594	 0x00,
595	 0x05, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
596	 0x08, 0x08, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08,
597	 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
598	 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
599	 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
600	 0x10, 0x10, 0x10, 0x26, 0x26, 0x26, 0x26, 0x26,
601	 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
602	 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
603	 0x01,
604	 0x15, 0x24, 0x24, 0x30, 0x2a, 0x30, 0x5e, 0x34,
605	 0x34, 0x5e, 0xc6, 0x84, 0x70, 0x84, 0xc6, 0xc6,
606	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
607	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
608	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
609	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
610	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
611	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
612	 },
613	{			/* Quality 8 */
614	 0x00,
615	 0x06, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
616	 0x0a, 0x0a, 0x14, 0x14, 0x14, 0x0a, 0x0a, 0x0a,
617	 0x0a, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
618	 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
619	 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
620	 0x14, 0x14, 0x14, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
621	 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
622	 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
623	 0x01,
624	 0x19, 0x2d, 0x2d, 0x3c, 0x34, 0x3c, 0x75, 0x41,
625	 0x41, 0x75, 0xf7, 0xa5, 0x8c, 0xa5, 0xf7, 0xf7,
626	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
627	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
628	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
629	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
630	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
631	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
632	 },
633	{			/* Quality 9 */
634	 0x00,
635	 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
636	 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x0c,
637	 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
638	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
639	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
640	 0x18, 0x18, 0x18, 0x39, 0x39, 0x39, 0x39, 0x39,
641	 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
642	 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
643	 0x01,
644	 0x19, 0x36, 0x36, 0x48, 0x3f, 0x48, 0x8d, 0x4e,
645	 0x4e, 0x8d, 0xff, 0xc6, 0xa8, 0xc6, 0xff, 0xff,
646	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
647	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
648	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
649	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
650	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
651	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
652	 },
653	{			/* Quality 10 */
654	 0x00,
655	 0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
656	 0x0e, 0x0e, 0x1c, 0x1c, 0x1c, 0x0e, 0x0e, 0x0e,
657	 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
658	 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
659	 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
660	 0x1c, 0x1c, 0x1c, 0x42, 0x42, 0x42, 0x42, 0x42,
661	 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
662	 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
663	 0x01,
664	 0x1d, 0x3f, 0x3f, 0x54, 0x49, 0x54, 0xa4, 0x5b,
665	 0x5b, 0xa4, 0xff, 0xe7, 0xc4, 0xe7, 0xff, 0xff,
666	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
667	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
668	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
669	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
670	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
671	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
672	 },
673	{			/* Quality 11 */
674	 0x00,
675	 0x07, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
676	 0x10, 0x10, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10,
677	 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
678	 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
679	 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
680	 0x20, 0x20, 0x20, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
681	 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
682	 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
683	 0x01,
684	 0x1d, 0x48, 0x48, 0x60, 0x54, 0x60, 0xbc, 0x68,
685	 0x68, 0xbc, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff,
686	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
687	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
688	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
689	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
690	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
691	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
692	 },
693	{			/* Quality 12 */
694	 0x00,
695	 0x08, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
696	 0x14, 0x14, 0x28, 0x28, 0x28, 0x14, 0x14, 0x14,
697	 0x14, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
698	 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
699	 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
700	 0x28, 0x28, 0x28, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
701	 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
702	 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
703	 0x01,
704	 0x22, 0x5a, 0x5a, 0x78, 0x69, 0x78, 0xeb, 0x82,
705	 0x82, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
706	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
707	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
708	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
709	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
710	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
711	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
712	 },
713	{			/* Quality 13 */
714	 0x00,
715	 0x08, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
716	 0x18, 0x18, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18,
717	 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
718	 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
719	 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
720	 0x30, 0x30, 0x30, 0x72, 0x72, 0x72, 0x72, 0x72,
721	 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
722	 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
723	 0x01,
724	 0x22, 0x6c, 0x6c, 0x90, 0x7e, 0x90, 0xff, 0x9c,
725	 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
726	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
727	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
728	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
729	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
730	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
731	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
732	 },
733	{			/* Quality 14 */
734	 0x00,
735	 0x0a, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
736	 0x1c, 0x1c, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x1c,
737	 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
738	 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
739	 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
740	 0x38, 0x38, 0x38, 0x85, 0x85, 0x85, 0x85, 0x85,
741	 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
742	 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
743	 0x01,
744	 0x2a, 0x7e, 0x7e, 0xa8, 0x93, 0xa8, 0xff, 0xb6,
745	 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
746	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
747	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
748	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
749	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
750	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
751	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
752	 },
753	{			/* Quality 15 */
754	 0x00,
755	 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
756	 0x20, 0x20, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20,
757	 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
758	 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
759	 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
760	 0x40, 0x40, 0x40, 0x98, 0x98, 0x98, 0x98, 0x98,
761	 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
762	 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
763	 0x01,
764	 0x2a, 0x90, 0x90, 0xc0, 0xa8, 0xc0, 0xff, 0xd0,
765	 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
766	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
767	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
768	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
769	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
770	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
771	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
772	 },
773	{			/* Quality 16-31 */
774	 0x00,
775	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
776	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
777	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
778	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
779	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
780	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
781	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
782	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
783	 0x01,
784	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
785	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
786	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
787	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
788	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
789	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
790	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
791	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
792	 }
793};
794
795static const struct cmd tp6810_cx_init_common[] = {
796	{0x1c, 0x00},
797	{TP6800_R10_SIF_TYPE, 0x00},
798	{0x4e, 0x00},
799	{0x4f, 0x00},
800	{TP6800_R50, 0xff},
801	{TP6800_R51, 0x03},
802	{0x00, 0x07},
803	{TP6800_R79_QUALITY, 0x03},
804	{TP6800_R2F_TIMING_CFG, 0x37},
805	{TP6800_R30_SENSOR_CFG, 0x10},
806	{TP6800_R21_ENDP_1_CTL, 0x00},
807	{TP6800_R52, 0x40},
808	{TP6800_R53, 0x40},
809	{TP6800_R54_DARK_CFG, 0x40},
810	{TP6800_R30_SENSOR_CFG, 0x18},
811	{0x4b, 0x00},
812	{TP6800_R3F_FRAME_RATE, 0x83},
813	{TP6800_R79_QUALITY, 0x05},
814	{TP6800_R21_ENDP_1_CTL, 0x00},
815	{0x7c, 0x04},
816	{0x25, 0x14},
817	{0x26, 0x0f},
818	{0x7b, 0x10},
819};
820
821static const struct cmd tp6810_ov_init_common[] = {
822	{0x1c, 0x00},
823	{TP6800_R10_SIF_TYPE, 0x00},
824	{0x4e, 0x00},
825	{0x4f, 0x00},
826	{TP6800_R50, 0xff},
827	{TP6800_R51, 0x03},
828	{0x00, 0x07},
829	{TP6800_R52, 0x40},
830	{TP6800_R53, 0x40},
831	{TP6800_R54_DARK_CFG, 0x40},
832	{TP6800_R79_QUALITY, 0x03},
833	{TP6800_R2F_TIMING_CFG, 0x17},
834	{TP6800_R30_SENSOR_CFG, 0x18},
835	{TP6800_R21_ENDP_1_CTL, 0x00},
836	{TP6800_R3F_FRAME_RATE, 0x86},
837	{0x25, 0x18},
838	{0x26, 0x0f},
839	{0x7b, 0x90},
840};
841
842static const struct cmd tp6810_bridge_start[] = {
843	{0x59, 0x88},
844	{0x5a, 0x0f},
845	{0x5b, 0x4e},
846	{TP6800_R5C_EDGE_THRLD, 0x63},
847	{TP6800_R5D_DEMOSAIC_CFG, 0x00},
848	{0x03, 0x7f},
849	{0x04, 0x80},
850	{0x06, 0x00},
851	{0x00, 0x00},
852};
853
854static const struct cmd tp6810_late_start[] = {
855	{0x7d, 0x01},
856	{0xb0, 0x04},
857	{0xb1, 0x04},
858	{0xb2, 0x04},
859	{0xb3, 0x04},
860	{0xb4, 0x04},
861	{0xb5, 0x04},
862	{0xb6, 0x08},
863	{0xb7, 0x08},
864	{0xb8, 0x04},
865	{0xb9, 0x04},
866	{0xba, 0x04},
867	{0xbb, 0x04},
868	{0xbc, 0x04},
869	{0xbd, 0x08},
870	{0xbe, 0x08},
871	{0xbf, 0x08},
872	{0xc0, 0x04},
873	{0xc1, 0x04},
874	{0xc2, 0x08},
875	{0xc3, 0x08},
876	{0xc4, 0x08},
877	{0xc5, 0x08},
878	{0xc6, 0x08},
879	{0xc7, 0x13},
880	{0xc8, 0x04},
881	{0xc9, 0x08},
882	{0xca, 0x08},
883	{0xcb, 0x08},
884	{0xcc, 0x08},
885	{0xcd, 0x08},
886	{0xce, 0x13},
887	{0xcf, 0x13},
888	{0xd0, 0x08},
889	{0xd1, 0x08},
890	{0xd2, 0x08},
891	{0xd3, 0x08},
892	{0xd4, 0x08},
893	{0xd5, 0x13},
894	{0xd6, 0x13},
895	{0xd7, 0x13},
896	{0xd8, 0x08},
897	{0xd9, 0x08},
898	{0xda, 0x08},
899	{0xdb, 0x08},
900	{0xdc, 0x13},
901	{0xdd, 0x13},
902	{0xde, 0x13},
903	{0xdf, 0x13},
904	{0xe0, 0x08},
905	{0xe1, 0x08},
906	{0xe2, 0x08},
907	{0xe3, 0x13},
908	{0xe4, 0x13},
909	{0xe5, 0x13},
910	{0xe6, 0x13},
911	{0xe7, 0x13},
912	{0xe8, 0x08},
913	{0xe9, 0x08},
914	{0xea, 0x13},
915	{0xeb, 0x13},
916	{0xec, 0x13},
917	{0xed, 0x13},
918	{0xee, 0x13},
919	{0xef, 0x13},
920	{0x7d, 0x02},
921
922	/* later after isoc start */
923	{0x7d, 0x08},
924	{0x7d, 0x00},
925};
926
927static const struct cmd cx0342_timing_seq[] = {
928	{CX0342_CHANNEL_0_1_L_irst, 0x20},
929	{CX0342_CHANNEL_0_2_L_irst, 0x24},
930	{CX0342_CHANNEL_0_2_H_irst, 0x00},
931	{CX0342_CHANNEL_0_3_L_irst, 0x2f},
932	{CX0342_CHANNEL_0_3_H_irst, 0x00},
933	{CX0342_CHANNEL_1_0_L_itx, 0x02},
934	{CX0342_CHANNEL_1_0_H_itx, 0x00},
935	{CX0342_CHANNEL_1_1_L_itx, 0x20},
936	{CX0342_CHANNEL_1_1_H_itx, 0x00},
937	{CX0342_CHANNEL_1_2_L_itx, 0xe4},
938	{CX0342_CHANNEL_1_2_H_itx, 0x00},
939	{CX0342_CHANNEL_1_3_L_itx, 0xee},
940	{CX0342_CHANNEL_1_3_H_itx, 0x00},
941	{CX0342_CHANNEL_2_0_L_iwl, 0x30},
942	{CX0342_CHANNEL_2_0_H_iwl, 0x00},
943	{CX0342_CHANNEL_3_0_L_ensp, 0x34},
944	{CX0342_CHANNEL_3_1_L_ensp, 0xe2},
945	{CX0342_CHANNEL_3_1_H_ensp, 0x00},
946	{CX0342_CHANNEL_3_2_L_ensp, 0xf6},
947	{CX0342_CHANNEL_3_2_H_ensp, 0x00},
948	{CX0342_CHANNEL_3_3_L_ensp, 0xf4},
949	{CX0342_CHANNEL_3_3_H_ensp, 0x02},
950	{CX0342_CHANNEL_4_0_L_sela, 0x26},
951	{CX0342_CHANNEL_4_0_H_sela, 0x00},
952	{CX0342_CHANNEL_4_1_L_sela, 0xe2},
953	{CX0342_CHANNEL_4_1_H_sela, 0x00},
954	{CX0342_CHANNEL_5_0_L_intla, 0x26},
955	{CX0342_CHANNEL_5_1_L_intla, 0x29},
956	{CX0342_CHANNEL_5_2_L_intla, 0xf0},
957	{CX0342_CHANNEL_5_2_H_intla, 0x00},
958	{CX0342_CHANNEL_5_3_L_intla, 0xf3},
959	{CX0342_CHANNEL_5_3_H_intla, 0x00},
960	{CX0342_CHANNEL_6_0_L_xa_sel_pos, 0x24},
961	{CX0342_CHANNEL_7_1_L_cds_pos, 0x02},
962	{CX0342_TIMING_EN, 0x01},
963};
964
965/* define the JPEG header */
966static void jpeg_define(u8 *jpeg_hdr,
967			int height,
968			int width)
969{
970	memcpy(jpeg_hdr, jpeg_head, sizeof jpeg_head);
971	jpeg_hdr[JPEG_HEIGHT_OFFSET + 0] = height >> 8;
972	jpeg_hdr[JPEG_HEIGHT_OFFSET + 1] = height;
973	jpeg_hdr[JPEG_HEIGHT_OFFSET + 2] = width >> 8;
974	jpeg_hdr[JPEG_HEIGHT_OFFSET + 3] = width;
975}
976
977/* set the JPEG quality for sensor soi763a */
978static void jpeg_set_qual(u8 *jpeg_hdr,
979			  int quality)
980{
981	int i, sc;
982
983	if (quality < 50)
984		sc = 5000 / quality;
985	else
986		sc = 200 - quality * 2;
987	for (i = 0; i < 64; i++) {
988		jpeg_hdr[JPEG_QT0_OFFSET + i] =
989			(jpeg_head[JPEG_QT0_OFFSET + i] * sc + 50) / 100;
990		jpeg_hdr[JPEG_QT1_OFFSET + i] =
991			(jpeg_head[JPEG_QT1_OFFSET + i] * sc + 50) / 100;
992	}
993}
994
995static void reg_w(struct gspca_dev *gspca_dev, u8 index, u8 value)
996{
997	struct usb_device *dev = gspca_dev->dev;
998	int ret;
999
1000	if (gspca_dev->usb_err < 0)
1001		return;
1002	ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1003			0x0e,
1004			USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1005			value, index, NULL, 0, 500);
1006	if (ret < 0) {
1007		pr_err("reg_w err %d\n", ret);
1008		gspca_dev->usb_err = ret;
1009	}
1010}
1011
1012/* the returned value is in gspca_dev->usb_buf */
1013static void reg_r(struct gspca_dev *gspca_dev, u8 index)
1014{
1015	struct usb_device *dev = gspca_dev->dev;
1016	int ret;
1017
1018	if (gspca_dev->usb_err < 0)
1019		return;
1020	ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1021			0x0d,
1022			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1023			0, index, gspca_dev->usb_buf, 1, 500);
1024	if (ret < 0) {
1025		pr_err("reg_r err %d\n", ret);
1026		gspca_dev->usb_err = ret;
1027	}
1028}
1029
1030static void reg_w_buf(struct gspca_dev *gspca_dev,
1031			const struct cmd *p, int l)
1032{
1033	do {
1034		reg_w(gspca_dev, p->reg, p->val);
1035		p++;
1036	} while (--l > 0);
1037}
1038
1039static int i2c_w(struct gspca_dev *gspca_dev, u8 index, u8 value)
1040{
1041	struct sd *sd = (struct sd *) gspca_dev;
1042
1043	reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1044	reg_w(gspca_dev, TP6800_R19_SIF_ADDR_S2, index);
1045	reg_w(gspca_dev, TP6800_R13_SIF_TX_DATA, value);
1046	reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x01);
1047	if (sd->bridge == BRIDGE_TP6800)
1048		return 0;
1049	msleep(5);
1050	reg_r(gspca_dev, TP6800_R11_SIF_CONTROL);
1051	if (gspca_dev->usb_buf[0] == 0)
1052		return 0;
1053	reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1054	return -1;				/* error */
1055}
1056
1057static void i2c_w_buf(struct gspca_dev *gspca_dev,
1058			const struct cmd *p, int l)
1059{
1060	do {
1061		i2c_w(gspca_dev, p->reg, p->val);
1062		p++;
1063	} while (--l > 0);
1064}
1065
1066static int i2c_r(struct gspca_dev *gspca_dev, u8 index, int len)
1067{
1068	struct sd *sd = (struct sd *) gspca_dev;
1069	int v;
1070
1071	reg_w(gspca_dev, TP6800_R19_SIF_ADDR_S2, index);
1072	reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x02);
1073	msleep(5);
1074	reg_r(gspca_dev, TP6800_R14_SIF_RX_DATA);
1075	v = gspca_dev->usb_buf[0];
1076	if (sd->bridge == BRIDGE_TP6800)
1077		return v;
1078	if (len > 1) {
1079		reg_r(gspca_dev, TP6800_R1B_SIF_RX_DATA2);
1080		v |= (gspca_dev->usb_buf[0] << 8);
1081	}
1082	reg_r(gspca_dev, TP6800_R11_SIF_CONTROL);
1083	if (gspca_dev->usb_buf[0] == 0)
1084		return v;
1085	reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1086	return -1;
1087}
1088
1089static void bulk_w(struct gspca_dev *gspca_dev,
1090		  u8 tag,
1091		  const u8 *data,
1092		  int length)
1093{
1094	struct usb_device *dev = gspca_dev->dev;
1095	int count, actual_count, ret;
1096
1097	if (gspca_dev->usb_err < 0)
1098		return;
1099	for (;;) {
1100		count = length > BULK_OUT_SIZE - 1
1101				? BULK_OUT_SIZE - 1 : length;
1102		gspca_dev->usb_buf[0] = tag;
1103		memcpy(&gspca_dev->usb_buf[1], data, count);
1104		ret = usb_bulk_msg(dev,
1105				   usb_sndbulkpipe(dev, 3),
1106				   gspca_dev->usb_buf, count + 1,
1107				   &actual_count, 500);
1108		if (ret < 0) {
1109			pr_err("bulk write error %d tag=%02x\n",
1110				ret, tag);
1111			gspca_dev->usb_err = ret;
1112			return;
1113		}
1114		length -= count;
1115		if (length <= 0)
1116			break;
1117		data += count;
1118	}
1119}
1120
1121static int probe_6810(struct gspca_dev *gspca_dev)
1122{
1123	u8 gpio;
1124	int ret;
1125
1126	reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
1127	gpio = gspca_dev->usb_buf[0];
1128	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1129	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1130	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1131	reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x04);	/* i2c 16 bits */
1132	reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x21);	/* ov??? */
1133	reg_w(gspca_dev, TP6800_R1A_SIF_TX_DATA2, 0x00);
1134	if (i2c_w(gspca_dev, 0x00, 0x00) >= 0)
1135		return SENSOR_SOI763A;
1136
1137	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1138	reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00);	/* i2c 8 bits */
1139	reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x7f);	/* (unknown i2c) */
1140	if (i2c_w(gspca_dev, 0x00, 0x00) >= 0)
1141		return -2;
1142
1143	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1144	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1145	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1146	reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00);	/* i2c 8 bits */
1147	reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x11);	/* tas??? / hv??? */
1148	ret = i2c_r(gspca_dev, 0x00, 1);
1149	if (ret > 0)
1150		return -3;
1151
1152	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1153	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1154	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1155	reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x6e);	/* po??? */
1156	ret = i2c_r(gspca_dev, 0x00, 1);
1157	if (ret > 0)
1158		return -4;
1159
1160	ret = i2c_r(gspca_dev, 0x01, 1);
1161	if (ret > 0)
1162		return -5;
1163
1164	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1165	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1166	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1167	reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x04);	/* i2c 16 bits */
1168	reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x5d);	/* mi/mt??? */
1169	ret = i2c_r(gspca_dev, 0x00, 2);
1170	if (ret > 0)
1171		return -6;
1172
1173	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1174	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1175	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1176	reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x5c);	/* mi/mt??? */
1177	ret = i2c_r(gspca_dev, 0x36, 2);
1178	if (ret > 0)
1179		return -7;
1180
1181	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1182	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1183	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1184	reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x61);	/* (unknown i2c) */
1185	reg_w(gspca_dev, TP6800_R1A_SIF_TX_DATA2, 0x10);
1186	if (i2c_w(gspca_dev, 0xff, 0x00) >= 0)
1187		return -8;
1188
1189	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1190	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1191	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1192	reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00);	/* i2c 8 bits */
1193	reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20);	/* cx0342 */
1194	ret = i2c_r(gspca_dev, 0x00, 1);
1195	if (ret > 0)
1196		return SENSOR_CX0342;
1197	return -9;
1198}
1199
1200static void cx0342_6810_init(struct gspca_dev *gspca_dev)
1201{
1202	static const struct cmd reg_init_1[] = {
1203		{TP6800_R2F_TIMING_CFG, 0x2f},
1204		{0x25, 0x02},
1205		{TP6800_R21_ENDP_1_CTL, 0x00},
1206		{TP6800_R3F_FRAME_RATE, 0x80},
1207		{TP6800_R2F_TIMING_CFG, 0x2f},
1208		{TP6800_R18_GPIO_DATA, 0xe1},
1209		{TP6800_R18_GPIO_DATA, 0xc1},
1210		{TP6800_R18_GPIO_DATA, 0xe1},
1211		{TP6800_R11_SIF_CONTROL, 0x00},
1212	};
1213	static const struct cmd reg_init_2[] = {
1214		{TP6800_R78_FORMAT, 0x48},
1215		{TP6800_R11_SIF_CONTROL, 0x00},
1216	};
1217	static const struct cmd sensor_init[] = {
1218		{CX0342_OUTPUT_CTRL, 0x07},
1219		{CX0342_BYPASS_MODE, 0x58},
1220		{CX0342_GPXLTHD_L, 0x28},
1221		{CX0342_RBPXLTHD_L, 0x28},
1222		{CX0342_PLANETHD_L, 0x50},
1223		{CX0342_PLANETHD_H, 0x03},
1224		{CX0342_RB_GAP_L, 0xff},
1225		{CX0342_RB_GAP_H, 0x07},
1226		{CX0342_G_GAP_L, 0xff},
1227		{CX0342_G_GAP_H, 0x07},
1228		{CX0342_RST_OVERFLOW_L, 0x5c},
1229		{CX0342_RST_OVERFLOW_H, 0x01},
1230		{CX0342_DATA_OVERFLOW_L, 0xfc},
1231		{CX0342_DATA_OVERFLOW_H, 0x03},
1232		{CX0342_DATA_UNDERFLOW_L, 0x00},
1233		{CX0342_DATA_UNDERFLOW_H, 0x00},
1234		{CX0342_SYS_CTRL_0, 0x40},
1235		{CX0342_GLOBAL_GAIN, 0x01},
1236		{CX0342_CLOCK_GEN, 0x00},
1237		{CX0342_SYS_CTRL_0, 0x02},
1238		{CX0342_IDLE_CTRL, 0x05},
1239		{CX0342_ADCGN, 0x00},
1240		{CX0342_ADC_CTL, 0x00},
1241		{CX0342_LVRST_BLBIAS, 0x01},
1242		{CX0342_VTHSEL, 0x0b},
1243		{CX0342_RAMP_RIV, 0x0b},
1244		{CX0342_LDOSEL, 0x07},
1245		{CX0342_SPV_VALUE_L, 0x40},
1246		{CX0342_SPV_VALUE_H, 0x02},
1247
1248		{CX0342_AUTO_ADC_CALIB, 0x81},
1249		{CX0342_TIMING_EN, 0x01},
1250	};
1251
1252	reg_w_buf(gspca_dev, reg_init_1, ARRAY_SIZE(reg_init_1));
1253	reg_w_buf(gspca_dev, tp6810_cx_init_common,
1254			ARRAY_SIZE(tp6810_cx_init_common));
1255	reg_w_buf(gspca_dev, reg_init_2, ARRAY_SIZE(reg_init_2));
1256
1257	reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20);	/* cx0342 I2C addr */
1258	i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
1259	i2c_w_buf(gspca_dev, cx0342_timing_seq, ARRAY_SIZE(cx0342_timing_seq));
1260}
1261
1262static void soi763a_6810_init(struct gspca_dev *gspca_dev)
1263{
1264	static const struct cmd reg_init_1[] = {
1265		{TP6800_R2F_TIMING_CFG, 0x2f},
1266		{TP6800_R18_GPIO_DATA, 0xe1},
1267		{0x25, 0x02},
1268		{TP6800_R21_ENDP_1_CTL, 0x00},
1269		{TP6800_R3F_FRAME_RATE, 0x80},
1270		{TP6800_R2F_TIMING_CFG, 0x2f},
1271		{TP6800_R18_GPIO_DATA, 0xc1},
1272	};
1273	static const struct cmd reg_init_2[] = {
1274		{TP6800_R78_FORMAT, 0x54},
1275	};
1276	static const struct cmd sensor_init[] = {
1277		{0x00, 0x00},
1278		{0x01, 0x80},
1279		{0x02, 0x80},
1280		{0x03, 0x90},
1281		{0x04, 0x20},
1282		{0x05, 0x20},
1283		{0x06, 0x80},
1284		{0x07, 0x00},
1285		{0x08, 0xff},
1286		{0x09, 0xff},
1287		{0x0a, 0x76},		/* 7630 = soi673a */
1288		{0x0b, 0x30},
1289		{0x0c, 0x20},
1290		{0x0d, 0x20},
1291		{0x0e, 0xff},
1292		{0x0f, 0xff},
1293		{0x10, 0x41},
1294		{0x15, 0x14},
1295		{0x11, 0x40},
1296		{0x12, 0x48},
1297		{0x13, 0x80},
1298		{0x14, 0x80},
1299		{0x16, 0x03},
1300		{0x28, 0xb0},
1301		{0x71, 0x20},
1302		{0x75, 0x8e},
1303		{0x17, 0x1b},
1304		{0x18, 0xbd},
1305		{0x19, 0x05},
1306		{0x1a, 0xf6},
1307		{0x1b, 0x04},
1308		{0x1c, 0x7f},		/* omnivision */
1309		{0x1d, 0xa2},
1310		{0x1e, 0x00},
1311		{0x1f, 0x00},
1312		{0x20, 0x45},
1313		{0x21, 0x80},
1314		{0x22, 0x80},
1315		{0x23, 0xee},
1316		{0x24, 0x50},
1317		{0x25, 0x7a},
1318		{0x26, 0xa0},
1319		{0x27, 0x9a},
1320		{0x29, 0x30},
1321		{0x2a, 0x80},
1322		{0x2b, 0x00},
1323		{0x2c, 0xac},
1324		{0x2d, 0x05},
1325		{0x2e, 0x80},
1326		{0x2f, 0x3c},
1327		{0x30, 0x22},
1328		{0x31, 0x00},
1329		{0x32, 0x86},
1330		{0x33, 0x08},
1331		{0x34, 0xff},
1332		{0x35, 0xff},
1333		{0x36, 0xff},
1334		{0x37, 0xff},
1335		{0x38, 0xff},
1336		{0x39, 0xff},
1337		{0x3a, 0xfe},
1338		{0x3b, 0xfe},
1339		{0x3c, 0xfe},
1340		{0x3d, 0xfe},
1341		{0x3e, 0xfe},
1342		{0x3f, 0x71},
1343		{0x40, 0xff},
1344		{0x41, 0xff},
1345		{0x42, 0xff},
1346		{0x43, 0xff},
1347		{0x44, 0xff},
1348		{0x45, 0xff},
1349		{0x46, 0xff},
1350		{0x47, 0xff},
1351		{0x48, 0xff},
1352		{0x49, 0xff},
1353		{0x4a, 0xfe},
1354		{0x4b, 0xff},
1355		{0x4c, 0x00},
1356		{0x4d, 0x00},
1357		{0x4e, 0xff},
1358		{0x4f, 0xff},
1359		{0x50, 0xff},
1360		{0x51, 0xff},
1361		{0x52, 0xff},
1362		{0x53, 0xff},
1363		{0x54, 0xff},
1364		{0x55, 0xff},
1365		{0x56, 0xff},
1366		{0x57, 0xff},
1367		{0x58, 0xff},
1368		{0x59, 0xff},
1369		{0x5a, 0xff},
1370		{0x5b, 0xfe},
1371		{0x5c, 0xff},
1372		{0x5d, 0x8f},
1373		{0x5e, 0xff},
1374		{0x5f, 0x8f},
1375		{0x60, 0xa2},
1376		{0x61, 0x4a},
1377		{0x62, 0xf3},
1378		{0x63, 0x75},
1379		{0x64, 0xf0},
1380		{0x65, 0x00},
1381		{0x66, 0x55},
1382		{0x67, 0x92},
1383		{0x68, 0xa0},
1384		{0x69, 0x4a},
1385		{0x6a, 0x22},
1386		{0x6b, 0x00},
1387		{0x6c, 0x33},
1388		{0x6d, 0x44},
1389		{0x6e, 0x22},
1390		{0x6f, 0x84},
1391		{0x70, 0x0b},
1392		{0x72, 0x10},
1393		{0x73, 0x50},
1394		{0x74, 0x21},
1395		{0x76, 0x00},
1396		{0x77, 0xa5},
1397		{0x78, 0x80},
1398		{0x79, 0x80},
1399		{0x7a, 0x80},
1400		{0x7b, 0xe2},
1401		{0x7c, 0x00},
1402		{0x7d, 0xf7},
1403		{0x7e, 0x00},
1404		{0x7f, 0x00},
1405	};
1406
1407	reg_w_buf(gspca_dev, reg_init_1, ARRAY_SIZE(reg_init_1));
1408	reg_w_buf(gspca_dev, tp6810_ov_init_common,
1409			ARRAY_SIZE(tp6810_ov_init_common));
1410	reg_w_buf(gspca_dev, reg_init_2, ARRAY_SIZE(reg_init_2));
1411
1412	i2c_w(gspca_dev, 0x12, 0x80);		/* sensor reset */
1413	msleep(10);
1414	i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
1415}
1416
1417/* set the gain and exposure */
1418static void setexposure(struct gspca_dev *gspca_dev)
1419{
1420	struct sd *sd = (struct sd *) gspca_dev;
1421
1422	if (sd->sensor == SENSOR_CX0342) {
1423		int expo;
1424
1425		expo = (sd->ctrls[EXPOSURE].val << 2) - 1;
1426		i2c_w(gspca_dev, CX0342_EXPO_LINE_L, expo);
1427		i2c_w(gspca_dev, CX0342_EXPO_LINE_H, expo >> 8);
1428		if (sd->bridge == BRIDGE_TP6800)
1429			i2c_w(gspca_dev, CX0342_RAW_GBGAIN_H,
1430						sd->ctrls[GAIN].val >> 8);
1431		i2c_w(gspca_dev, CX0342_RAW_GBGAIN_L, sd->ctrls[GAIN].val);
1432		if (sd->bridge == BRIDGE_TP6800)
1433			i2c_w(gspca_dev, CX0342_RAW_GRGAIN_H,
1434						sd->ctrls[GAIN].val >> 8);
1435		i2c_w(gspca_dev, CX0342_RAW_GRGAIN_L, sd->ctrls[GAIN].val);
1436		if (sd->bridge == BRIDGE_TP6800)
1437			i2c_w(gspca_dev, CX0342_RAW_BGAIN_H,
1438						sd->ctrls[BGAIN].val >> 8);
1439		i2c_w(gspca_dev, CX0342_RAW_BGAIN_L, sd->ctrls[BGAIN].val);
1440		if (sd->bridge == BRIDGE_TP6800)
1441			i2c_w(gspca_dev, CX0342_RAW_RGAIN_H,
1442						sd->ctrls[RGAIN].val >> 8);
1443		i2c_w(gspca_dev, CX0342_RAW_RGAIN_L, sd->ctrls[RGAIN].val);
1444		i2c_w(gspca_dev, CX0342_SYS_CTRL_0,
1445				sd->bridge == BRIDGE_TP6800 ? 0x80 : 0x81);
1446		return;
1447	}
1448
1449	/* soi763a */
1450	i2c_w(gspca_dev, 0x10,		/* AEC_H (exposure time) */
1451			 sd->ctrls[EXPOSURE].val);
1452/*	i2c_w(gspca_dev, 0x76, 0x02);	 * AEC_L ([1:0] */
1453	i2c_w(gspca_dev, 0x00,		/* gain */
1454			 sd->ctrls[GAIN].val);
1455}
1456
1457/* set the JPEG quantization tables */
1458static void set_dqt(struct gspca_dev *gspca_dev, u8 q)
1459{
1460	struct sd *sd = (struct sd *) gspca_dev;
1461
1462	/* update the jpeg quantization tables */
1463	PDEBUG(D_STREAM, "q %d -> %d", sd->quality, q);
1464	sd->quality = q;
1465	if (q > 16)
1466		q = 16;
1467	if (sd->sensor == SENSOR_SOI763A)
1468		jpeg_set_qual(sd->jpeg_hdr, jpeg_q[q]);
1469	else
1470		memcpy(&sd->jpeg_hdr[JPEG_QT0_OFFSET - 1],
1471			DQT[q], sizeof DQT[0]);
1472}
1473
1474/* set the JPEG compression quality factor */
1475static void setquality(struct gspca_dev *gspca_dev)
1476{
1477	struct sd *sd = (struct sd *) gspca_dev;
1478	u16 q;
1479
1480	q = sd->ctrls[QUALITY].val;
1481	if (q != 16)
1482		q = 15 - q;
1483
1484	reg_w(gspca_dev, TP6800_R7A_BLK_THRLD, 0x00);
1485	reg_w(gspca_dev, TP6800_R79_QUALITY, 0x04);
1486	reg_w(gspca_dev, TP6800_R79_QUALITY, q);
1487
1488	/* auto quality */
1489	if (q == 15 && sd->bridge == BRIDGE_TP6810) {
1490		msleep(4);
1491		reg_w(gspca_dev, TP6800_R7A_BLK_THRLD, 0x19);
1492	}
1493}
1494
1495static const u8 color_null[18] = {
1496	0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1497	0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1498	0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1499};
1500static const u8 color_gain[NSENSORS][18] = {
1501[SENSOR_CX0342] =
1502	{0x4c, 0x00, 0xa9, 0x00, 0x31, 0x00,	/* Y R/G/B (LE values) */
1503	 0xb6, 0x03, 0x6c, 0x03, 0xe0, 0x00,	/* U R/G/B */
1504	 0xdf, 0x00, 0x46, 0x03, 0xdc, 0x03},	/* V R/G/B */
1505[SENSOR_SOI763A] =
1506	{0x4c, 0x00, 0x95, 0x00, 0x1d, 0x00,	/* Y R/G/B (LE values) */
1507	 0xb6, 0x03, 0x6c, 0x03, 0xd7, 0x00,	/* U R/G/B */
1508	 0xd5, 0x00, 0x46, 0x03, 0xdc, 0x03},	/* V R/G/B */
1509};
1510
1511static void setgamma(struct gspca_dev *gspca_dev)
1512{
1513	struct sd *sd = (struct sd *) gspca_dev;
1514	int gamma;
1515#define NGAMMA 6
1516	static const u8 gamma_tb[NGAMMA][3][1024] = {
1517	    {				/* gamma 0 - from tp6800 + soi763a */
1518		{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1519		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1520		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1521		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1522		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1523		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1524		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1525		 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1526		 0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1527		 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1528		 0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1529		 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1530		 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1531		 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1532		 0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1533		 0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1534		 0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1535		 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1536		 0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1537		 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1538		 0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1539		 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1540		 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1541		 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1542		 0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1543		 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1544		 0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1545		 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1546		 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1547		 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1548		 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1549		 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1550		 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1551		 0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1552		 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
1553		 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1554		 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1555		 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1556		 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1557		 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1558		 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1559		 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1560		 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1561		 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1562		 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1563		 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1564		 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1565		 0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1566		 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1567		 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1568		 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1569		 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1570		 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1571		 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1572		 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1573		 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1574		 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1575		 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1576		 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1577		 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1578		 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1579		 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1580		 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1581		 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1582		 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1583		 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1584		 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1585		 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1586		 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1587		 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1588		 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1589		 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1590		 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1591		 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1592		 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1593		 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1594		 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1595		 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1596		 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1597		 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1598		 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1599		 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1600		 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1601		 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1602		 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1603		 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1604		 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1605		 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1606		 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1607		 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1608		 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1609		 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1610		 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1611		 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1612		 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1613		 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1614		 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1615		 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1616		 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1617		 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1618		 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1619		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1620		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1621		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1622		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1623		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1624		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1625		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1626		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1627		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1628		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1629		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1630		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1631		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1632		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1633		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1634		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1635		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1636		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1637		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1638		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1639		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1640		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1641		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1642		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1643		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1644		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1645		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
1646		{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1647		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1648		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1649		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1650		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1651		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1652		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1653		 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1654		 0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1655		 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1656		 0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1657		 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1658		 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1659		 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1660		 0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1661		 0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1662		 0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1663		 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1664		 0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1665		 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1666		 0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1667		 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1668		 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1669		 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1670		 0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1671		 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1672		 0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1673		 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1674		 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1675		 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1676		 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1677		 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1678		 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1679		 0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1680		 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
1681		 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1682		 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1683		 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1684		 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1685		 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1686		 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1687		 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1688		 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1689		 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1690		 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1691		 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1692		 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1693		 0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1694		 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1695		 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1696		 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1697		 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1698		 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1699		 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1700		 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1701		 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1702		 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1703		 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1704		 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1705		 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1706		 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1707		 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1708		 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1709		 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1710		 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1711		 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1712		 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1713		 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1714		 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1715		 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1716		 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1717		 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1718		 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1719		 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1720		 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1721		 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1722		 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1723		 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1724		 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1725		 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1726		 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1727		 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1728		 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1729		 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1730		 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1731		 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1732		 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1733		 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1734		 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1735		 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1736		 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1737		 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1738		 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1739		 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1740		 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1741		 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1742		 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1743		 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1744		 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1745		 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1746		 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1747		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1748		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1749		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1750		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1751		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1752		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1753		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1754		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1755		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1756		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1757		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1758		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1759		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1760		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1761		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1762		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1763		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1764		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1765		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1766		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1767		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1768		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1769		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1770		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1771		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1772		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1773		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
1774		{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1775		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1776		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1777		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1778		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1779		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1780		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1781		 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1782		 0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1783		 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1784		 0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1785		 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1786		 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1787		 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1788		 0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1789		 0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1790		 0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1791		 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1792		 0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1793		 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1794		 0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1795		 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1796		 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1797		 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1798		 0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1799		 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1800		 0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1801		 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1802		 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1803		 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1804		 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1805		 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1806		 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1807		 0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1808		 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76,
1809		 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1810		 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1811		 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1812		 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1813		 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1814		 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1815		 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1816		 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1817		 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1818		 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1819		 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1820		 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1821		 0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1822		 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1823		 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1824		 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1825		 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1826		 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1827		 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1828		 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1829		 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1830		 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1831		 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1832		 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1833		 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1834		 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1835		 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1836		 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1837		 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1838		 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1839		 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1840		 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1841		 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1842		 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1843		 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1844		 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1845		 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1846		 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1847		 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1848		 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1849		 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1850		 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1851		 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1852		 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1853		 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1854		 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1855		 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1856		 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1857		 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1858		 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1859		 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1860		 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1861		 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1862		 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1863		 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1864		 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1865		 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1866		 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1867		 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1868		 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1869		 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1870		 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1871		 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1872		 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1873		 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1874		 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1875		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1876		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1877		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1878		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1879		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1880		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1881		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1882		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1883		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1884		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1885		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1886		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1887		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1888		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1889		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1890		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1891		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1892		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1893		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1894		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1895		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1896		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1897		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1898		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1899		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1900		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1901		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
1902	    },
1903	    {				/* gamma 1 - from tp6810 + soi763a */
1904		{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1905		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1906		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1907		 0x01, 0x02, 0x03, 0x05, 0x07, 0x08, 0x09, 0x0a,
1908		 0x0c, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, 0x15,
1909		 0x16, 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1c, 0x1e,
1910		 0x1f, 0x20, 0x22, 0x22, 0x23, 0x25, 0x26, 0x27,
1911		 0x27, 0x28, 0x29, 0x2b, 0x2b, 0x2c, 0x2d, 0x2f,
1912		 0x2f, 0x30, 0x31, 0x33, 0x33, 0x34, 0x35, 0x35,
1913		 0x37, 0x38, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c,
1914		 0x3c, 0x3d, 0x3f, 0x3f, 0x40, 0x42, 0x42, 0x43,
1915		 0x43, 0x44, 0x45, 0x45, 0x47, 0x47, 0x48, 0x49,
1916		 0x49, 0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4d, 0x4d,
1917		 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
1918		 0x54, 0x54, 0x55, 0x56, 0x56, 0x58, 0x58, 0x59,
1919		 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5e,
1920		 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61, 0x61,
1921		 0x62, 0x62, 0x63, 0x63, 0x65, 0x65, 0x65, 0x66,
1922		 0x66, 0x67, 0x67, 0x68, 0x68, 0x69, 0x69, 0x69,
1923		 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1924		 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71,
1925		 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75,
1926		 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79,
1927		 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c,
1928		 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x80,
1929		 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x84, 0x84,
1930		 0x84, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x88,
1931		 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a,
1932		 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e,
1933		 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91,
1934		 0x91, 0x91, 0x92, 0x92, 0x92, 0x92, 0x93, 0x93,
1935		 0x93, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x97,
1936		 0x97, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
1937		 0x99, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b,
1938		 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9e,
1939		 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
1940		 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3,
1941		 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
1942		 0xa5, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1943		 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xab,
1944		 0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xad, 0xae,
1945		 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0,
1946		 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1947		 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
1948		 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
1949		 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
1950		 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
1951		 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd,
1952		 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1953		 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
1954		 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4,
1955		 0xc4, 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6,
1956		 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7,
1957		 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
1958		 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
1959		 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1960		 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1961		 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
1962		 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4,
1963		 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
1964		 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
1965		 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda,
1966		 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb,
1967		 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
1968		 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
1969		 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
1970		 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
1971		 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
1972		 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
1973		 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8,
1974		 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
1975		 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
1976		 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed,
1977		 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
1978		 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
1979		 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3,
1980		 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
1981		 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
1982		 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1983		 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
1984		 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1985		 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1986		 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
1987		 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe,
1988		 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
1989		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1990		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1991		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1992		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1993		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1994		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1995		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1996		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1997		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1998		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1999		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2000		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2001		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2002		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2003		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2004		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2005		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2006		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2007		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2008		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2009		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2010		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2011		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2012		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2013		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2014		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2015		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2016		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2017		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2018		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2019		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2020		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2021		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2022		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2023		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2024		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2025		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2026		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2027		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2028		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2029		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2030		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2031		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2032		{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2033		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2034		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2035		 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03,
2036		 0x05, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0c, 0x0d,
2037		 0x0e, 0x10, 0x10, 0x11, 0x12, 0x14, 0x15, 0x15,
2038		 0x16, 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1c, 0x1e,
2039		 0x1e, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x25, 0x25,
2040		 0x26, 0x27, 0x27, 0x28, 0x29, 0x29, 0x2b, 0x2c,
2041		 0x2c, 0x2d, 0x2d, 0x2f, 0x30, 0x30, 0x31, 0x31,
2042		 0x33, 0x34, 0x34, 0x35, 0x35, 0x37, 0x38, 0x38,
2043		 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d,
2044		 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x42, 0x43,
2045		 0x43, 0x44, 0x44, 0x45, 0x45, 0x47, 0x47, 0x48,
2046		 0x48, 0x49, 0x49, 0x4a, 0x4a, 0x4b, 0x4b, 0x4c,
2047		 0x4c, 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50,
2048		 0x52, 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x55,
2049		 0x55, 0x56, 0x56, 0x56, 0x58, 0x58, 0x59, 0x59,
2050		 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c,
2051		 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60,
2052		 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63, 0x65,
2053		 0x65, 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67,
2054		 0x68, 0x68, 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a,
2055		 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e,
2056		 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71,
2057		 0x71, 0x71, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74,
2058		 0x75, 0x75, 0x75, 0x77, 0x77, 0x77, 0x78, 0x78,
2059		 0x78, 0x79, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a,
2060		 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d,
2061		 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80,
2062		 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
2063		 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
2064		 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89, 0x89,
2065		 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b,
2066		 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e,
2067		 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90,
2068		 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2069		 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2070		 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97,
2071		 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
2072		 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b,
2073		 0x9b, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2074		 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0,
2075		 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
2076		 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
2077		 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2078		 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2079		 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab,
2080		 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
2081		 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
2082		 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
2083		 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
2084		 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
2085		 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
2086		 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
2087		 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
2088		 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
2089		 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2090		 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf,
2091		 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2092		 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
2093		 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2094		 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2095		 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9,
2096		 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
2097		 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
2098		 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd,
2099		 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcf,
2100		 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
2101		 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
2102		 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4,
2103		 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2104		 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8,
2105		 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
2106		 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb,
2107		 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
2108		 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
2109		 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
2110		 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2,
2111		 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3,
2112		 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
2113		 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2114		 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2115		 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
2116		 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
2117		 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
2118		 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
2119		 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2120		 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1,
2121		 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4,
2122		 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5,
2123		 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7,
2124		 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8,
2125		 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2126		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2127		 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc,
2128		 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2129		 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe,
2130		 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
2131		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2132		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2133		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2134		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2135		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2136		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2137		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2138		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2139		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2140		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2141		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2142		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2143		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2144		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2145		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2146		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2147		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2148		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2149		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2150		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2151		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2152		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2153		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2154		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2155		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2156		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2157		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2158		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2159		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2160		{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2161		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2162		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2163		 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2164		 0x00, 0x00, 0x01, 0x02, 0x03, 0x05, 0x05, 0x07,
2165		 0x08, 0x09, 0x0a, 0x0a, 0x0c, 0x0d, 0x0e, 0x0e,
2166		 0x10, 0x11, 0x12, 0x12, 0x14, 0x15, 0x16, 0x16,
2167		 0x17, 0x18, 0x18, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
2168		 0x1e, 0x1f, 0x1f, 0x20, 0x22, 0x22, 0x23, 0x23,
2169		 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x29, 0x29,
2170		 0x2b, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f, 0x30,
2171		 0x30, 0x31, 0x31, 0x33, 0x33, 0x34, 0x34, 0x35,
2172		 0x35, 0x37, 0x37, 0x38, 0x38, 0x39, 0x39, 0x3a,
2173		 0x3a, 0x3b, 0x3b, 0x3b, 0x3c, 0x3c, 0x3d, 0x3d,
2174		 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x42, 0x42, 0x43,
2175		 0x43, 0x44, 0x44, 0x45, 0x45, 0x47, 0x47, 0x47,
2176		 0x48, 0x48, 0x49, 0x49, 0x49, 0x4a, 0x4a, 0x4b,
2177		 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4f,
2178		 0x4f, 0x50, 0x50, 0x50, 0x52, 0x52, 0x52, 0x53,
2179		 0x53, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x56,
2180		 0x56, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x5a,
2181		 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c,
2182		 0x5e, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60,
2183		 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63,
2184		 0x63, 0x63, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66,
2185		 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69,
2186		 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2187		 0x6c, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e,
2188		 0x6f, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71,
2189		 0x71, 0x71, 0x71, 0x73, 0x73, 0x73, 0x74, 0x74,
2190		 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x77, 0x77,
2191		 0x77, 0x78, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79,
2192		 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b,
2193		 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
2194		 0x7d, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80,
2195		 0x80, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82,
2196		 0x82, 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85,
2197		 0x85, 0x86, 0x86, 0x86, 0x86, 0x88, 0x88, 0x88,
2198		 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a,
2199		 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8d,
2200		 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
2201		 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90,
2202		 0x90, 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92,
2203		 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94, 0x94,
2204		 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96, 0x96,
2205		 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
2206		 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
2207		 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
2208		 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2209		 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0,
2210		 0xa0, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1,
2211		 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3,
2212		 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
2213		 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6,
2214		 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
2215		 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab,
2216		 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac,
2217		 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xae, 0xae,
2218		 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2219		 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
2220		 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2,
2221		 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
2222		 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6,
2223		 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2224		 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2225		 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba,
2226		 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
2227		 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
2228		 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2229		 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
2230		 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2231		 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2232		 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2233		 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2234		 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2235		 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb,
2236		 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2237		 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce,
2238		 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
2239		 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2240		 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2241		 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
2242		 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7,
2243		 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2244		 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
2245		 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
2246		 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
2247		 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
2248		 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0,
2249		 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
2250		 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3,
2251		 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4,
2252		 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
2253		 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7,
2254		 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
2255		 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb,
2256		 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2257		 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee,
2258		 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef, 0xef,
2259		 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1,
2260		 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3,
2261		 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
2262		 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
2263		 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
2264		 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2265		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2266		 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc,
2267		 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd,
2268		 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2269		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2270		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2271		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2272		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2273		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2274		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2275		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2276		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2277		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2278		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2279		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2280		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2281		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2282		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2283		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2284		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2285		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2286		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2287		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
2288	    },
2289	    {							/* gamma 2 */
2290		{0x00, 0x01, 0x02, 0x05, 0x07, 0x08, 0x0a, 0x0c,
2291		 0x0d, 0x0e, 0x10, 0x12, 0x14, 0x15, 0x16, 0x17,
2292		 0x18, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x22,
2293		 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c,
2294		 0x2d, 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x34,
2295		 0x35, 0x37, 0x38, 0x38, 0x39, 0x3a, 0x3b, 0x3b,
2296		 0x3c, 0x3d, 0x3f, 0x3f, 0x40, 0x42, 0x42, 0x43,
2297		 0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x49, 0x49,
2298		 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4f, 0x4f,
2299		 0x50, 0x50, 0x52, 0x53, 0x53, 0x54, 0x54, 0x55,
2300		 0x55, 0x56, 0x56, 0x58, 0x58, 0x59, 0x5a, 0x5a,
2301		 0x5b, 0x5b, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f,
2302		 0x60, 0x60, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63,
2303		 0x65, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68,
2304		 0x68, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2305		 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x70,
2306		 0x70, 0x70, 0x71, 0x71, 0x73, 0x73, 0x73, 0x74,
2307		 0x74, 0x75, 0x75, 0x75, 0x77, 0x77, 0x78, 0x78,
2308		 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b,
2309		 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f,
2310		 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82,
2311		 0x82, 0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85,
2312		 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x89, 0x89,
2313		 0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8d,
2314		 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f,
2315		 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
2316		 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94,
2317		 0x94, 0x94, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
2318		 0x97, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99,
2319		 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
2320		 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
2321		 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
2322		 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3,
2323		 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5,
2324		 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8,
2325		 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2326		 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xad,
2327		 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
2328		 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0,
2329		 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
2330		 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4,
2331		 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
2332		 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
2333		 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba,
2334		 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
2335		 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
2336		 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0,
2337		 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3,
2338		 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4,
2339		 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6,
2340		 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7,
2341		 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2342		 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2343		 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2344		 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce,
2345		 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0,
2346		 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1,
2347		 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4,
2348		 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
2349		 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
2350		 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
2351		 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
2352		 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd,
2353		 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde,
2354		 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
2355		 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1,
2356		 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2357		 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4,
2358		 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5,
2359		 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
2360		 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8,
2361		 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
2362		 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
2363		 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
2364		 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2365		 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2366		 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1,
2367		 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
2368		 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
2369		 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
2370		 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2371		 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9,
2372		 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa,
2373		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2374		 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2375		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2376		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2377		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2378		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2379		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2380		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2381		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2382		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2383		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2384		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2385		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2386		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2387		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2388		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2389		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2390		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2391		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2392		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2393		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2394		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2395		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2396		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2397		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2398		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2399		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2400		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2401		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2402		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2403		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2404		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2405		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2406		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2407		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2408		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2409		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2410		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2411		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2412		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2413		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2414		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2415		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2416		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2417		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
2418		{0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x05,
2419		 0x07, 0x08, 0x09, 0x0a, 0x0d, 0x0e, 0x10, 0x11,
2420		 0x12, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x1a,
2421		 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x20, 0x22, 0x23,
2422		 0x25, 0x26, 0x26, 0x27, 0x28, 0x29, 0x29, 0x2b,
2423		 0x2c, 0x2d, 0x2d, 0x2f, 0x30, 0x30, 0x31, 0x33,
2424		 0x33, 0x34, 0x35, 0x35, 0x37, 0x38, 0x38, 0x39,
2425		 0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3d, 0x3f,
2426		 0x3f, 0x40, 0x42, 0x42, 0x43, 0x43, 0x44, 0x44,
2427		 0x45, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49, 0x4a,
2428		 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d,
2429		 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
2430		 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x56, 0x58,
2431		 0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
2432		 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f,
2433		 0x60, 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x63,
2434		 0x63, 0x63, 0x65, 0x65, 0x65, 0x66, 0x66, 0x67,
2435		 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69,
2436		 0x6a, 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d,
2437		 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
2438		 0x70, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73, 0x73,
2439		 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77, 0x77,
2440		 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x79,
2441		 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c,
2442		 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f,
2443		 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81,
2444		 0x82, 0x82, 0x82, 0x82, 0x84, 0x84, 0x84, 0x84,
2445		 0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x88,
2446		 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, 0x8a,
2447		 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8d,
2448		 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f,
2449		 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90, 0x91,
2450		 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2451		 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2452		 0x94, 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
2453		 0x97, 0x98, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99,
2454		 0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b,
2455		 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9c,
2456		 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e,
2457		 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
2458		 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2,
2459		 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
2460		 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
2461		 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2462		 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2463		 0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
2464		 0xac, 0xac, 0xad, 0xad, 0xad, 0xad, 0xad, 0xae,
2465		 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf,
2466		 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1,
2467		 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
2468		 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2469		 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6,
2470		 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2471		 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9,
2472		 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
2473		 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2474		 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
2475		 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf,
2476		 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2477		 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
2478		 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2479		 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2480		 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7,
2481		 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
2482		 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
2483		 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
2484		 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2485		 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
2486		 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
2487		 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1,
2488		 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2489		 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
2490		 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2491		 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
2492		 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
2493		 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
2494		 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
2495		 0xdb, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
2496		 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
2497		 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0,
2498		 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
2499		 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2500		 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
2501		 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
2502		 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6,
2503		 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2504		 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2505		 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
2506		 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2507		 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
2508		 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef,
2509		 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
2510		 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
2511		 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4,
2512		 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
2513		 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
2514		 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2515		 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9,
2516		 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa,
2517		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb,
2518		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2519		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2520		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2521		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2522		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2523		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2524		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2525		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2526		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2527		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2528		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2529		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2530		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2531		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2532		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2533		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2534		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2535		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2536		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2537		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2538		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2539		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2540		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2541		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2542		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2543		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2544		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2545		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
2546		{0x00, 0x00, 0x00, 0x01, 0x02, 0x05, 0x07, 0x08,
2547		 0x09, 0x0a, 0x0c, 0x0e, 0x10, 0x11, 0x12, 0x14,
2548		 0x15, 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1c, 0x1e,
2549		 0x1f, 0x20, 0x20, 0x22, 0x23, 0x25, 0x26, 0x27,
2550		 0x28, 0x28, 0x29, 0x2b, 0x2c, 0x2d, 0x2d, 0x2f,
2551		 0x30, 0x31, 0x31, 0x33, 0x34, 0x35, 0x35, 0x37,
2552		 0x38, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c, 0x3c,
2553		 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x43, 0x43,
2554		 0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49,
2555		 0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d,
2556		 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
2557		 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58,
2558		 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c,
2559		 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
2560		 0x61, 0x61, 0x62, 0x62, 0x63, 0x63, 0x65, 0x65,
2561		 0x65, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68,
2562		 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2563		 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f,
2564		 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x73, 0x73,
2565		 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
2566		 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a,
2567		 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
2568		 0x7c, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80,
2569		 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82,
2570		 0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85,
2571		 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
2572		 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b,
2573		 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e,
2574		 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90,
2575		 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2576		 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2577		 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97,
2578		 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
2579		 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
2580		 0x9b, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2581		 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0,
2582		 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
2583		 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
2584		 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2585		 0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2586		 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2587		 0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
2588		 0xad, 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
2589		 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0,
2590		 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1,
2591		 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3,
2592		 0xb3, 0xb3, 0xb3, 0xb4, 0xb3, 0xb4, 0xb4, 0xb4,
2593		 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2594		 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2595		 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
2596		 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2597		 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
2598		 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2599		 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
2600		 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
2601		 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2602		 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2603		 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2604		 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2605		 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb,
2606		 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2607		 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce,
2608		 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
2609		 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2610		 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2611		 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
2612		 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2613		 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8,
2614		 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9,
2615		 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
2616		 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2617		 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
2618		 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
2619		 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
2620		 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
2621		 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
2622		 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
2623		 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6,
2624		 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
2625		 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
2626		 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
2627		 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
2628		 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
2629		 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2630		 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2631		 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1,
2632		 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3,
2633		 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
2634		 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2635		 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7,
2636		 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
2637		 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2638		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2639		 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2640		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2641		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2642		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2643		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2644		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2645		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2646		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2647		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2648		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2649		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2650		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2651		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2652		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2653		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2654		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2655		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2656		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2657		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2658		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2659		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2660		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2661		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2662		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2663		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2664		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2665		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2666		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2667		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2668		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2669		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2670		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2671		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2672		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2673		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
2674	    },
2675	    {				/* gamma 3 - from tp6810 + cx0342 */
2676		{0x08, 0x09, 0x0c, 0x0d, 0x10, 0x11, 0x14, 0x15,
2677		 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x1f, 0x20, 0x23,
2678		 0x25, 0x26, 0x27, 0x28, 0x2b, 0x2c, 0x2d, 0x2f,
2679		 0x30, 0x31, 0x33, 0x34, 0x35, 0x37, 0x38, 0x39,
2680		 0x3a, 0x3b, 0x3c, 0x3d, 0x3f, 0x40, 0x42, 0x43,
2681		 0x44, 0x45, 0x47, 0x48, 0x48, 0x49, 0x4a, 0x4b,
2682		 0x4c, 0x4d, 0x4d, 0x4f, 0x50, 0x52, 0x53, 0x53,
2683		 0x54, 0x55, 0x56, 0x56, 0x58, 0x59, 0x5a, 0x5a,
2684		 0x5b, 0x5c, 0x5c, 0x5e, 0x5f, 0x5f, 0x60, 0x61,
2685		 0x61, 0x62, 0x63, 0x63, 0x65, 0x66, 0x66, 0x67,
2686		 0x68, 0x68, 0x69, 0x69, 0x6a, 0x6c, 0x6c, 0x6d,
2687		 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x73,
2688		 0x73, 0x74, 0x74, 0x75, 0x75, 0x77, 0x77, 0x78,
2689		 0x78, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c,
2690		 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81,
2691		 0x82, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
2692		 0x86, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b,
2693		 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x8f,
2694		 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92, 0x93,
2695		 0x93, 0x93, 0x94, 0x94, 0x96, 0x96, 0x97, 0x97,
2696		 0x97, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a,
2697		 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d,
2698		 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
2699		 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
2700		 0xa4, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa8, 0xa8,
2701		 0xa8, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac,
2702		 0xac, 0xac, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
2703		 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
2704		 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3,
2705		 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2706		 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2707		 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
2708		 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf,
2709		 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2,
2710		 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5,
2711		 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
2712		 0xc7, 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2713		 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
2714		 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce,
2715		 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
2716		 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3,
2717		 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6,
2718		 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2719		 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda,
2720		 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd,
2721		 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
2722		 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1,
2723		 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2724		 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4,
2725		 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2726		 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8,
2727		 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb,
2728		 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2729		 0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
2730		 0xee, 0xee, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
2731		 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
2732		 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
2733		 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2734		 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2735		 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9,
2736		 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2737		 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
2738		 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2739		 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
2740		 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff,
2741		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2742		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2743		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2744		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2745		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2746		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2747		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2748		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2749		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2750		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2751		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2752		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2753		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2754		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2755		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2756		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2757		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2758		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2759		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2760		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2761		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2762		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2763		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2764		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2765		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2766		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2767		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2768		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2769		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2770		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2771		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2772		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2773		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2774		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2775		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2776		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2777		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2778		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2779		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2780		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2781		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2782		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2783		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2784		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2785		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2786		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2787		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2788		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2789		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2790		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2791		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2792		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2793		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2794		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2795		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2796		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2797		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2798		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2799		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2800		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2801		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2802		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2803		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2804		{0x03, 0x05, 0x07, 0x09, 0x0a, 0x0c, 0x0d, 0x10,
2805		 0x11, 0x12, 0x14, 0x15, 0x17, 0x18, 0x1a, 0x1b,
2806		 0x1c, 0x1e, 0x1f, 0x20, 0x22, 0x23, 0x25, 0x26,
2807		 0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2f,
2808		 0x30, 0x31, 0x33, 0x33, 0x34, 0x35, 0x37, 0x38,
2809		 0x38, 0x39, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3f,
2810		 0x3f, 0x40, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45,
2811		 0x47, 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b, 0x4b,
2812		 0x4c, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x52, 0x52,
2813		 0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x56, 0x58,
2814		 0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c,
2815		 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
2816		 0x61, 0x62, 0x62, 0x63, 0x63, 0x65, 0x65, 0x66,
2817		 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x69, 0x69,
2818		 0x6a, 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e,
2819		 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71,
2820		 0x71, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75,
2821		 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79,
2822		 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
2823		 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80,
2824		 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x84,
2825		 0x84, 0x84, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86,
2826		 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a,
2827		 0x8a, 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e,
2828		 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90,
2829		 0x90, 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92,
2830		 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x96,
2831		 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x98, 0x98,
2832		 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a,
2833		 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c,
2834		 0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e,
2835		 0xa0, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1,
2836		 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3,
2837		 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2838		 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
2839		 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
2840		 0xab, 0xac, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad,
2841		 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf,
2842		 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1,
2843		 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
2844		 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4,
2845		 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2846		 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9,
2847		 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
2848		 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
2849		 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2850		 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0,
2851		 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3,
2852		 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2853		 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
2854		 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2855		 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2856		 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2857		 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2858		 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
2859		 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0,
2860		 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1,
2861		 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4,
2862		 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6,
2863		 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
2864		 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
2865		 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
2866		 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2867		 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
2868		 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
2869		 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1,
2870		 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2,
2871		 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
2872		 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
2873		 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2874		 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2875		 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2876		 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
2877		 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec,
2878		 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee,
2879		 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
2880		 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
2881		 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
2882		 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
2883		 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
2884		 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
2885		 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
2886		 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
2887		 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2888		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb,
2889		 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc,
2890		 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2891		 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe,
2892		 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
2893		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2894		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2895		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2896		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2897		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2898		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2899		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2900		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2901		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2902		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2903		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2904		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2905		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2906		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2907		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2908		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2909		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2910		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2911		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2912		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2913		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2914		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2915		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2916		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2917		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2918		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2919		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2920		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2921		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2922		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2923		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2924		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2925		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2926		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2927		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2928		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2929		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2930		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2931		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2932		{0x07, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14,
2933		 0x16, 0x17, 0x18, 0x1b, 0x1c, 0x1e, 0x1f, 0x20,
2934		 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2d,
2935		 0x2f, 0x30, 0x31, 0x33, 0x34, 0x35, 0x37, 0x38,
2936		 0x39, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3f, 0x40,
2937		 0x42, 0x43, 0x44, 0x44, 0x45, 0x47, 0x48, 0x49,
2938		 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4f, 0x50,
2939		 0x52, 0x52, 0x53, 0x54, 0x55, 0x55, 0x56, 0x58,
2940		 0x58, 0x59, 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5e,
2941		 0x5f, 0x5f, 0x60, 0x61, 0x61, 0x62, 0x63, 0x63,
2942		 0x65, 0x65, 0x66, 0x67, 0x67, 0x68, 0x68, 0x69,
2943		 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e, 0x6e,
2944		 0x6f, 0x70, 0x70, 0x71, 0x71, 0x73, 0x73, 0x74,
2945		 0x74, 0x75, 0x75, 0x77, 0x77, 0x78, 0x78, 0x79,
2946		 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d,
2947		 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81,
2948		 0x82, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
2949		 0x88, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b,
2950		 0x8b, 0x8b, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f,
2951		 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92,
2952		 0x92, 0x93, 0x93, 0x94, 0x94, 0x94, 0x96, 0x96,
2953		 0x96, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
2954		 0x99, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
2955		 0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0xa0,
2956		 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa3,
2957		 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
2958		 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8, 0xa9,
2959		 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac,
2960		 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xaf, 0xaf,
2961		 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1,
2962		 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4,
2963		 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2964		 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2965		 0xb9, 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc,
2966		 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbf,
2967		 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
2968		 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4,
2969		 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
2970		 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9,
2971		 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb,
2972		 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2973		 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xcf,
2974		 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1,
2975		 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
2976		 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
2977		 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2978		 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda,
2979		 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2980		 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde,
2981		 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
2982		 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
2983		 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
2984		 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5,
2985		 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
2986		 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2987		 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb,
2988		 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
2989		 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2990		 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
2991		 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
2992		 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
2993		 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2994		 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2995		 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9,
2996		 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2997		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb,
2998		 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2999		 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd,
3000		 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff,
3001		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3002		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3003		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3004		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3005		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3006		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3007		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3008		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3009		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3010		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3011		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3012		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3013		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3014		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3015		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3016		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3017		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3018		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3019		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3020		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3021		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3022		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3023		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3024		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3025		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3026		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3027		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3028		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3029		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3030		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3031		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3032		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3033		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3034		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3035		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3036		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3037		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3038		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3039		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3040		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3041		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3042		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3043		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3044		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3045		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3046		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3047		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3048		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3049		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3050		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3051		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3052		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3053		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3054		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3055		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3056		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3057		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3058		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3059		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
3060	    },
3061	    {				/* gamma 4 - from tp6800 + soi763a */
3062		{0x11, 0x14, 0x15, 0x17, 0x1a, 0x1b, 0x1e, 0x1f,
3063		 0x22, 0x23, 0x25, 0x27, 0x28, 0x2b, 0x2c, 0x2d,
3064		 0x2f, 0x31, 0x33, 0x34, 0x35, 0x38, 0x39, 0x3a,
3065		 0x3b, 0x3c, 0x3d, 0x40, 0x42, 0x43, 0x44, 0x45,
3066		 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4f,
3067		 0x50, 0x52, 0x53, 0x53, 0x54, 0x55, 0x56, 0x58,
3068		 0x59, 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5f, 0x60,
3069		 0x61, 0x61, 0x62, 0x63, 0x65, 0x65, 0x66, 0x67,
3070		 0x68, 0x68, 0x69, 0x6a, 0x6c, 0x6c, 0x6d, 0x6e,
3071		 0x6f, 0x6f, 0x70, 0x71, 0x71, 0x73, 0x74, 0x74,
3072		 0x75, 0x77, 0x77, 0x78, 0x79, 0x79, 0x7a, 0x7a,
3073		 0x7b, 0x7c, 0x7c, 0x7d, 0x7f, 0x7f, 0x80, 0x80,
3074		 0x81, 0x81, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86,
3075		 0x86, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b, 0x8b,
3076		 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x90, 0x90, 0x91,
3077		 0x91, 0x92, 0x92, 0x93, 0x93, 0x94, 0x94, 0x96,
3078		 0x96, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
3079		 0x9a, 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d,
3080		 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa2,
3081		 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa5, 0xa5,
3082		 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa9, 0xa9, 0xab,
3083		 0xab, 0xab, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
3084		 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb1, 0xb1,
3085		 0xb1, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb4,
3086		 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb8, 0xb8,
3087		 0xb8, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xbc,
3088		 0xbc, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbf,
3089		 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2,
3090		 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3091		 0xc5, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc9,
3092		 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3093		 0xcb, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xce,
3094		 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0,
3095		 0xd0, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
3096		 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3097		 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
3098		 0xd9, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb,
3099		 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf,
3100		 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1,
3101		 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3102		 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
3103		 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
3104		 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3105		 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec,
3106		 0xec, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
3107		 0xee, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
3108		 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3,
3109		 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5,
3110		 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3111		 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9,
3112		 0xf9, 0xf9, 0xfa, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa,
3113		 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3114		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3115		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3116		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3117		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3118		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3119		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3120		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3121		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3122		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3123		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3124		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3125		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3126		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3127		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3128		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3129		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3130		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3131		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3132		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3133		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3134		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3135		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3136		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3137		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3138		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3139		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3140		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3141		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3142		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3143		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3144		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3145		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3146		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3147		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3148		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3149		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3150		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3151		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3152		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3153		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3154		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3155		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3156		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3157		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3158		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3159		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3160		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3161		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3162		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3163		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3164		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3165		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3166		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3167		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3168		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3169		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3170		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3171		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3172		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3173		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3174		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3175		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3176		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3177		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3178		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3179		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3180		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3181		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3182		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3183		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3184		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3185		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3186		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3187		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3188		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3189		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
3190		{0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x11, 0x14, 0x15,
3191		 0x16, 0x17, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20,
3192		 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c,
3193		 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x34, 0x35,
3194		 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3c, 0x3d,
3195		 0x3f, 0x40, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45,
3196		 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b, 0x4b, 0x4c,
3197		 0x4d, 0x4f, 0x4f, 0x50, 0x52, 0x52, 0x53, 0x54,
3198		 0x54, 0x55, 0x55, 0x56, 0x58, 0x58, 0x59, 0x5a,
3199		 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f,
3200		 0x60, 0x60, 0x61, 0x61, 0x62, 0x63, 0x63, 0x65,
3201		 0x65, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68, 0x69,
3202		 0x69, 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e,
3203		 0x6e, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71, 0x73,
3204		 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x77, 0x77,
3205		 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b,
3206		 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f,
3207		 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82,
3208		 0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86, 0x86,
3209		 0x88, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8a,
3210		 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e,
3211		 0x8e, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91,
3212		 0x91, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x94,
3213		 0x94, 0x94, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
3214		 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a,
3215		 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c,
3216		 0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0xa0,
3217		 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
3218		 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4,
3219		 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa6,
3220		 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
3221		 0xaa, 0xab, 0xab, 0xac, 0xac, 0xac, 0xad, 0xad,
3222		 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf,
3223		 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
3224		 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3,
3225		 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6,
3226		 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8,
3227		 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3228		 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
3229		 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
3230		 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0,
3231		 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
3232		 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3233		 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
3234		 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9, 0xc9,
3235		 0xca, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3236		 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd,
3237		 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
3238		 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
3239		 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3,
3240		 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
3241		 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3242		 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3243		 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda,
3244		 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3245		 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
3246		 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3247		 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1,
3248		 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
3249		 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4,
3250		 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3251		 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7,
3252		 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
3253		 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb,
3254		 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
3255		 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3256		 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3257		 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3258		 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
3259		 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
3260		 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
3261		 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3262		 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
3263		 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
3264		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
3265		 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3266		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3267		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3268		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3269		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3270		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3271		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3272		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3273		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3274		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3275		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3276		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3277		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3278		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3279		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3280		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3281		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3282		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3283		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3284		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3285		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3286		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3287		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3288		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3289		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3290		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3291		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3292		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3293		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3294		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3295		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3296		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3297		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3298		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3299		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3300		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3301		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3302		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3303		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3304		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3305		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3306		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3307		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3308		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3309		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3310		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3311		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3312		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3313		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3314		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3315		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3316		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3317		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
3318		{0x0d, 0x10, 0x11, 0x14, 0x15, 0x17, 0x18, 0x1b,
3319		 0x1c, 0x1e, 0x20, 0x22, 0x23, 0x26, 0x27, 0x28,
3320		 0x29, 0x2b, 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34,
3321		 0x35, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
3322		 0x3f, 0x40, 0x42, 0x43, 0x44, 0x45, 0x47, 0x48,
3323		 0x49, 0x4a, 0x4b, 0x4b, 0x4c, 0x4d, 0x4f, 0x50,
3324		 0x52, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58,
3325		 0x59, 0x5a, 0x5a, 0x5b, 0x5c, 0x5e, 0x5e, 0x5f,
3326		 0x60, 0x60, 0x61, 0x62, 0x62, 0x63, 0x65, 0x65,
3327		 0x66, 0x67, 0x67, 0x68, 0x69, 0x69, 0x6a, 0x6c,
3328		 0x6c, 0x6d, 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3329		 0x71, 0x73, 0x73, 0x74, 0x74, 0x75, 0x75, 0x77,
3330		 0x78, 0x78, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b,
3331		 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80,
3332		 0x81, 0x81, 0x82, 0x82, 0x84, 0x84, 0x85, 0x85,
3333		 0x86, 0x86, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a,
3334		 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f,
3335		 0x8f, 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92,
3336		 0x93, 0x93, 0x94, 0x94, 0x94, 0x96, 0x96, 0x97,
3337		 0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x9a, 0x9a,
3338		 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d,
3339		 0x9d, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
3340		 0xa1, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
3341		 0xa4, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa8, 0xa8,
3342		 0xa8, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac,
3343		 0xac, 0xac, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
3344		 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
3345		 0xb1, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4,
3346		 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
3347		 0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba,
3348		 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
3349		 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
3350		 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc3,
3351		 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3352		 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7,
3353		 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
3354		 0xca, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc,
3355		 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
3356		 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0,
3357		 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
3358		 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
3359		 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8,
3360		 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
3361		 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
3362		 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf,
3363		 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1,
3364		 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3365		 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
3366		 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6,
3367		 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8,
3368		 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb,
3369		 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
3370		 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
3371		 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
3372		 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
3373		 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
3374		 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
3375		 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8,
3376		 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
3377		 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
3378		 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3379		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3380		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3381		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3382		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3383		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3384		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3385		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3386		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3387		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3388		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3389		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3390		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3391		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3392		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3393		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3394		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3395		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3396		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3397		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3398		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3399		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3400		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3401		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3402		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3403		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3404		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3405		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3406		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3407		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3408		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3409		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3410		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3411		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3412		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3413		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3414		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3415		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3416		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3417		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3418		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3419		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3420		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3421		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3422		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3423		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3424		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3425		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3426		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3427		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3428		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3429		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3430		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3431		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3432		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3433		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3434		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3435		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3436		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3437		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3438		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3439		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3440		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3441		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3442		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3443		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3444		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3445		 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
3446	    },
3447	    {							/* gamma 5 */
3448		{0x16, 0x18, 0x19, 0x1b, 0x1d, 0x1e, 0x20, 0x21,
3449		 0x23, 0x24, 0x25, 0x27, 0x28, 0x2a, 0x2b, 0x2c,
3450		 0x2d, 0x2f, 0x30, 0x31, 0x32, 0x34, 0x35, 0x36,
3451		 0x37, 0x38, 0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3452		 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3453		 0x48, 0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e,
3454		 0x4f, 0x50, 0x51, 0x51, 0x52, 0x53, 0x54, 0x55,
3455		 0x56, 0x56, 0x57, 0x58, 0x59, 0x59, 0x5a, 0x5b,
3456		 0x5c, 0x5c, 0x5d, 0x5e, 0x5f, 0x5f, 0x60, 0x61,
3457		 0x62, 0x62, 0x63, 0x64, 0x64, 0x65, 0x66, 0x66,
3458		 0x67, 0x68, 0x68, 0x69, 0x6a, 0x6a, 0x6b, 0x6b,
3459		 0x6c, 0x6d, 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3460		 0x71, 0x71, 0x72, 0x73, 0x73, 0x74, 0x74, 0x75,
3461		 0x75, 0x76, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79,
3462		 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e,
3463		 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82,
3464		 0x82, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85,
3465		 0x86, 0x86, 0x87, 0x87, 0x88, 0x88, 0x89, 0x89,
3466		 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8d,
3467		 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x90, 0x90,
3468		 0x91, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x94,
3469		 0x94, 0x94, 0x95, 0x95, 0x96, 0x96, 0x96, 0x97,
3470		 0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x9a, 0x9a,
3471		 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d,
3472		 0x9d, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f, 0xa0, 0xa0,
3473		 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa3,
3474		 0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa6,
3475		 0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8,
3476		 0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3477		 0xab, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
3478		 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
3479		 0xb0, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb3,
3480		 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5,
3481		 0xb5, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7,
3482		 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3483		 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbc, 0xbc, 0xbc,
3484		 0xbc, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
3485		 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1,
3486		 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
3487		 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3488		 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7,
3489		 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9,
3490		 0xc9, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3491		 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd,
3492		 0xcd, 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf,
3493		 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
3494		 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd3, 0xd3,
3495		 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5,
3496		 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3497		 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
3498		 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
3499		 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdd,
3500		 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde,
3501		 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0,
3502		 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
3503		 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
3504		 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3505		 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7,
3506		 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
3507		 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea, 0xeb,
3508		 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
3509		 0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
3510		 0xee, 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
3511		 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3512		 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3,
3513		 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
3514		 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
3515		 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
3516		 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
3517		 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
3518		 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd,
3519		 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
3520		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3521		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3522		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3523		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3524		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3525		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3526		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3527		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3528		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3529		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3530		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3531		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3532		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3533		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3534		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3535		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3536		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3537		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3538		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3539		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3540		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3541		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3542		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3543		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3544		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3545		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3546		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3547		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3548		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3549		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3550		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3551		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3552		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3553		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3554		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3555		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3556		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3557		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3558		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3559		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3560		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3561		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3562		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3563		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3564		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3565		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3566		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3567		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3568		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3569		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3570		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3571		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3572		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3573		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3574		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3575		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3576		{0x0f, 0x11, 0x12, 0x14, 0x15, 0x16, 0x18, 0x19,
3577		 0x1a, 0x1b, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
3578		 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
3579		 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x31, 0x32,
3580		 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x38, 0x39,
3581		 0x3a, 0x3b, 0x3c, 0x3c, 0x3d, 0x3e, 0x3f, 0x3f,
3582		 0x40, 0x41, 0x42, 0x42, 0x43, 0x44, 0x44, 0x45,
3583		 0x46, 0x47, 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b,
3584		 0x4b, 0x4c, 0x4c, 0x4d, 0x4e, 0x4e, 0x4f, 0x50,
3585		 0x50, 0x51, 0x51, 0x52, 0x53, 0x53, 0x54, 0x54,
3586		 0x55, 0x55, 0x56, 0x56, 0x57, 0x58, 0x58, 0x59,
3587		 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5d,
3588		 0x5d, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
3589		 0x61, 0x62, 0x62, 0x63, 0x63, 0x64, 0x64, 0x65,
3590		 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68,
3591		 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6b, 0x6b, 0x6c,
3592		 0x6c, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f,
3593		 0x6f, 0x70, 0x70, 0x71, 0x71, 0x71, 0x72, 0x72,
3594		 0x73, 0x73, 0x73, 0x74, 0x74, 0x75, 0x75, 0x75,
3595		 0x76, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78, 0x78,
3596		 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
3597		 0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e,
3598		 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81,
3599		 0x81, 0x81, 0x82, 0x82, 0x82, 0x83, 0x83, 0x83,
3600		 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x86,
3601		 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88,
3602		 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8b,
3603		 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x8d, 0x8d,
3604		 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f,
3605		 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
3606		 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94,
3607		 0x94, 0x94, 0x94, 0x95, 0x95, 0x95, 0x96, 0x96,
3608		 0x96, 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98,
3609		 0x98, 0x98, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
3610		 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
3611		 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e,
3612		 0x9e, 0x9e, 0x9f, 0x9f, 0x9f, 0x9f, 0xa0, 0xa0,
3613		 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
3614		 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
3615		 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
3616		 0xa6, 0xa6, 0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa7,
3617		 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9,
3618		 0xa9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3619		 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
3620		 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
3621		 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
3622		 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
3623		 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
3624		 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5,
3625		 0xb5, 0xb5, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
3626		 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
3627		 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3628		 0xba, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
3629		 0xbb, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
3630		 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
3631		 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0,
3632		 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
3633		 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
3634		 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
3635		 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
3636		 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
3637		 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9,
3638		 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca,
3639		 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
3640		 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd,
3641		 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3642		 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
3643		 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3644		 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3,
3645		 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
3646		 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3647		 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3648		 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3649		 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda,
3650		 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb,
3651		 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3652		 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde,
3653		 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf,
3654		 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
3655		 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
3656		 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
3657		 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
3658		 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
3659		 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3660		 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
3661		 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea,
3662		 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3663		 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
3664		 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
3665		 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
3666		 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1,
3667		 0xf1, 0xf1, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3668		 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
3669		 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
3670		 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3671		 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
3672		 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa,
3673		 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
3674		 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd,
3675		 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
3676		 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3677		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3678		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3679		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3680		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3681		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3682		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3683		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3684		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3685		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3686		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3687		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3688		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3689		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3690		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3691		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3692		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3693		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3694		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3695		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3696		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3697		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3698		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3699		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3700		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3701		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3702		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3703		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3704		{0x13, 0x15, 0x16, 0x18, 0x19, 0x1b, 0x1c, 0x1e,
3705		 0x1f, 0x20, 0x22, 0x23, 0x24, 0x26, 0x27, 0x28,
3706		 0x29, 0x2a, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
3707		 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
3708		 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41,
3709		 0x42, 0x43, 0x44, 0x44, 0x45, 0x46, 0x47, 0x48,
3710		 0x49, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e,
3711		 0x4f, 0x50, 0x50, 0x51, 0x52, 0x53, 0x53, 0x54,
3712		 0x55, 0x55, 0x56, 0x57, 0x57, 0x58, 0x59, 0x59,
3713		 0x5a, 0x5b, 0x5b, 0x5c, 0x5d, 0x5d, 0x5e, 0x5f,
3714		 0x5f, 0x60, 0x60, 0x61, 0x62, 0x62, 0x63, 0x63,
3715		 0x64, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68,
3716		 0x69, 0x69, 0x6a, 0x6a, 0x6b, 0x6b, 0x6c, 0x6c,
3717		 0x6d, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3718		 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x74, 0x74,
3719		 0x75, 0x75, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78,
3720		 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c,
3721		 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f,
3722		 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x83,
3723		 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
3724		 0x86, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89,
3725		 0x89, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c,
3726		 0x8c, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f,
3727		 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92,
3728		 0x92, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x95,
3729		 0x95, 0x95, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
3730		 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a,
3731		 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d,
3732		 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f,
3733		 0x9f, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2,
3734		 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
3735		 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6,
3736		 0xa7, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8, 0xa9,
3737		 0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3738		 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xad, 0xad,
3739		 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf,
3740		 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1,
3741		 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
3742		 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5, 0xb5,
3743		 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7,
3744		 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
3745		 0xba, 0xba, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbb,
3746		 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd,
3747		 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf,
3748		 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1,
3749		 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
3750		 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3751		 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
3752		 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8,
3753		 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
3754		 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
3755		 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
3756		 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
3757		 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
3758		 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3,
3759		 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3760		 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd6, 0xd6, 0xd6,
3761		 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
3762		 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9,
3763		 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb,
3764		 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3765		 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
3766		 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
3767		 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
3768		 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3769		 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3770		 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6,
3771		 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3772		 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3773		 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea,
3774		 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec,
3775		 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3776		 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3777		 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3778		 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2,
3779		 0xf2, 0xf2, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
3780		 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5,
3781		 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
3782		 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
3783		 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
3784		 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb,
3785		 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
3786		 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe,
3787		 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3788		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3789		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3790		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3791		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3792		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3793		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3794		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3795		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3796		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3797		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3798		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3799		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3800		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3801		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3802		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3803		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3804		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3805		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3806		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3807		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3808		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3809		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3810		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3811		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3812		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3813		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3814		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3815		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3816		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3817		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3818		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3819		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3820		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3821		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3822		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3823		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3824		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3825		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3826		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3827		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3828		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3829		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3830		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3831		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3832	    },
3833	};
3834
3835	reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
3836	if (sd->bridge == BRIDGE_TP6810)
3837		reg_w(gspca_dev, 0x02, 0x28);
3838/*	msleep(50); */
3839	gamma = sd->ctrls[GAMMA].val;
3840	bulk_w(gspca_dev, 0x00, gamma_tb[gamma][0], 1024);
3841	bulk_w(gspca_dev, 0x01, gamma_tb[gamma][1], 1024);
3842	bulk_w(gspca_dev, 0x02, gamma_tb[gamma][2], 1024);
3843	if (sd->bridge == BRIDGE_TP6810) {
3844		int i;
3845
3846		reg_w(gspca_dev, 0x02, 0x2b);
3847		reg_w(gspca_dev, 0x02, 0x28);
3848		for (i = 0; i < 6; i++)
3849			reg_w(gspca_dev, TP6800_R55_GAMMA_R,
3850				gamma_tb[gamma][0][i]);
3851		reg_w(gspca_dev, 0x02, 0x2b);
3852		reg_w(gspca_dev, 0x02, 0x28);
3853		for (i = 0; i < 6; i++)
3854			reg_w(gspca_dev, TP6800_R56_GAMMA_G,
3855				gamma_tb[gamma][1][i]);
3856		reg_w(gspca_dev, 0x02, 0x2b);
3857		reg_w(gspca_dev, 0x02, 0x28);
3858		for (i = 0; i < 6; i++)
3859			reg_w(gspca_dev, TP6800_R57_GAMMA_B,
3860				gamma_tb[gamma][2][i]);
3861		reg_w(gspca_dev, 0x02, 0x28);
3862	}
3863	reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3864/*	msleep(50); */
3865}
3866
3867static void setsharpness(struct gspca_dev *gspca_dev)
3868{
3869	struct sd *sd = (struct sd *) gspca_dev;
3870	u8 val;
3871
3872	if (sd->bridge == BRIDGE_TP6800) {
3873		val = sd->ctrls[SHARPNESS].val
3874				| 0x08;		/* grid compensation enable */
3875		if (gspca_dev->width == 640)
3876			reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
3877		else
3878			val |= 0x04;		/* scaling down enable */
3879		reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, val);
3880	} else {
3881		val = (sd->ctrls[SHARPNESS].val << 5) | 0x08;
3882		reg_w(gspca_dev, 0x59, val);
3883	}
3884}
3885
3886static void setautogain(struct gspca_dev *gspca_dev)
3887{
3888	struct sd *sd = (struct sd *) gspca_dev;
3889
3890	if (gspca_dev->ctrl_dis & (1 << AUTOGAIN))
3891		return;
3892	if (sd->ctrls[AUTOGAIN].val) {
3893		sd->ag_cnt = AG_CNT_START;
3894		gspca_dev->ctrl_inac |= (1 << EXPOSURE) | (1 << GAIN);
3895	} else {
3896		sd->ag_cnt = -1;
3897		gspca_dev->ctrl_inac &= ~((1 << EXPOSURE) | (1 << GAIN));
3898	}
3899}
3900
3901/* set the resolution for sensor cx0342 */
3902static void set_resolution(struct gspca_dev *gspca_dev)
3903{
3904	reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
3905	if (gspca_dev->width == 320) {
3906		reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x06);
3907		msleep(100);
3908		i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3909		msleep(100);
3910		reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3911		reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01);	/* qvga */
3912		reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, 0x0d);
3913		i2c_w(gspca_dev, CX0342_EXPO_LINE_L, 0x37);
3914		i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x01);
3915	} else {
3916		reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x05);
3917		msleep(100);
3918		i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3919		msleep(100);
3920		reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3921		reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00);	/* vga */
3922		reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, 0x09);
3923		i2c_w(gspca_dev, CX0342_EXPO_LINE_L, 0xcf);
3924		i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
3925	}
3926	i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
3927	bulk_w(gspca_dev, 0x03, color_gain[SENSOR_CX0342],
3928				ARRAY_SIZE(color_gain[0]));
3929	setgamma(gspca_dev);
3930	setquality(gspca_dev);
3931}
3932
3933/* convert the frame rate to a tp68x0 value */
3934static int get_fr_idx(struct gspca_dev *gspca_dev)
3935{
3936	struct sd *sd = (struct sd *) gspca_dev;
3937	int i;
3938
3939	if (sd->bridge == BRIDGE_TP6800) {
3940		for (i = 0; i < ARRAY_SIZE(rates) - 1; i++) {
3941			if (sd->framerate >= rates[i])
3942				break;
3943		}
3944		i = 6 - i;		/* 1 = 5fps .. 6 = 30fps */
3945
3946		/* 640x480 * 30 fps does not work */
3947		if (i == 6			/* if 30 fps */
3948		 && gspca_dev->width == 640)
3949			i = 0x05;		/* 15 fps */
3950	} else {
3951		for (i = 0; i < ARRAY_SIZE(rates_6810) - 1; i++) {
3952			if (sd->framerate >= rates_6810[i])
3953				break;
3954		}
3955		i = 7 - i;		/* 3 = 5fps .. 7 = 30fps */
3956
3957		/* 640x480 * 30 fps does not work */
3958		if (i == 7			/* if 30 fps */
3959		 && gspca_dev->width == 640)
3960			i = 6;			/* 15 fps */
3961		i |= 0x80;			/* clock * 1 */
3962	}
3963	return i;
3964}
3965
3966static void setframerate(struct gspca_dev *gspca_dev)
3967{
3968	struct sd *sd = (struct sd *) gspca_dev;
3969	u8 fr_idx;
3970
3971	fr_idx = get_fr_idx(gspca_dev);
3972
3973	if (sd->bridge == BRIDGE_TP6810) {
3974		reg_r(gspca_dev, 0x7b);
3975		reg_w(gspca_dev, 0x7b,
3976			sd->sensor == SENSOR_CX0342 ? 0x10 : 0x90);
3977		if (sd->ctrls[EXPOSURE].val >= 128)
3978			fr_idx = 0xf0;		/* lower frame rate */
3979	}
3980
3981	reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, fr_idx);
3982
3983	if (sd->sensor == SENSOR_CX0342)
3984		i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3985}
3986
3987static void setrgain(struct gspca_dev *gspca_dev)
3988{
3989	struct sd *sd = (struct sd *) gspca_dev;
3990	int rgain;
3991
3992	rgain = sd->ctrls[RGAIN].val;
3993	i2c_w(gspca_dev, CX0342_RAW_RGAIN_H, rgain >> 8);
3994	i2c_w(gspca_dev, CX0342_RAW_RGAIN_L, rgain);
3995	i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
3996}
3997
3998static int sd_setgain(struct gspca_dev *gspca_dev, __s32 val)
3999{
4000	struct sd *sd = (struct sd *) gspca_dev;
4001
4002	if (sd->sensor == SENSOR_CX0342) {
4003		sd->ctrls[BGAIN].val = sd->ctrls[BGAIN].val
4004					* val / sd->ctrls[GAIN].val;
4005		if (sd->ctrls[BGAIN].val > 4095)
4006			sd->ctrls[BGAIN].val = 4095;
4007		sd->ctrls[RGAIN].val = sd->ctrls[RGAIN].val
4008					* val / sd->ctrls[GAIN].val;
4009		if (sd->ctrls[RGAIN].val > 4095)
4010			sd->ctrls[RGAIN].val = 4095;
4011	}
4012	sd->ctrls[GAIN].val = val;
4013	if (gspca_dev->streaming)
4014		setexposure(gspca_dev);
4015	return gspca_dev->usb_err;
4016}
4017
4018static void setbgain(struct gspca_dev *gspca_dev)
4019{
4020	struct sd *sd = (struct sd *) gspca_dev;
4021	int bgain;
4022
4023	bgain = sd->ctrls[BGAIN].val;
4024	i2c_w(gspca_dev, CX0342_RAW_BGAIN_H, bgain >> 8);
4025	i2c_w(gspca_dev, CX0342_RAW_BGAIN_L, bgain);
4026	i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
4027}
4028
4029/* this function is called at probe time */
4030static int sd_config(struct gspca_dev *gspca_dev,
4031		     const struct usb_device_id *id)
4032{
4033	struct sd *sd = (struct sd *) gspca_dev;
4034
4035	sd->bridge = id->driver_info;
4036
4037	gspca_dev->cam.cam_mode = vga_mode;
4038	gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
4039	gspca_dev->cam.mode_framerates = sd->bridge == BRIDGE_TP6800 ?
4040			framerates : framerates_6810;
4041
4042	sd->framerate = 30;		/* default: 30 fps */
4043	gspca_dev->cam.ctrls = sd->ctrls;
4044	return 0;
4045}
4046
4047/* this function is called at probe and resume time */
4048static int sd_init(struct gspca_dev *gspca_dev)
4049{
4050	struct sd *sd = (struct sd *) gspca_dev;
4051	static const struct cmd tp6800_preinit[] = {
4052		{TP6800_R10_SIF_TYPE, 0x01},	/* sif */
4053		{TP6800_R11_SIF_CONTROL, 0x01},
4054		{TP6800_R15_GPIO_PU, 0x9f},
4055		{TP6800_R16_GPIO_PD, 0x9f},
4056		{TP6800_R17_GPIO_IO, 0x80},
4057		{TP6800_R18_GPIO_DATA, 0x40},	/* LED off */
4058	};
4059	static const struct cmd tp6810_preinit[] = {
4060		{TP6800_R2F_TIMING_CFG, 0x2f},
4061		{TP6800_R15_GPIO_PU, 0x6f},
4062		{TP6800_R16_GPIO_PD, 0x40},
4063		{TP6800_R17_GPIO_IO, 0x9f},
4064		{TP6800_R18_GPIO_DATA, 0xc1},	/* LED off */
4065	};
4066
4067	if (sd->bridge == BRIDGE_TP6800)
4068		reg_w_buf(gspca_dev, tp6800_preinit,
4069				ARRAY_SIZE(tp6800_preinit));
4070	else
4071		reg_w_buf(gspca_dev, tp6810_preinit,
4072				ARRAY_SIZE(tp6810_preinit));
4073	msleep(15);
4074	reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
4075	PDEBUG(D_PROBE, "gpio: %02x", gspca_dev->usb_buf[0]);
4076/* values:
4077 *	0x80: snapshot button
4078 *	0x40: LED
4079 *	0x20: (bridge / sensor) reset for tp6810 ?
4080 *	0x07: sensor type ?
4081 */
4082
4083	/* guess the sensor type */
4084	if (force_sensor >= 0) {
4085		sd->sensor = force_sensor;
4086	} else {
4087		if (sd->bridge == BRIDGE_TP6800) {
4088/*fixme: not sure this is working*/
4089			switch (gspca_dev->usb_buf[0] & 0x07) {
4090			case 0:
4091				sd->sensor = SENSOR_SOI763A;
4092				break;
4093			case 1:
4094				sd->sensor = SENSOR_CX0342;
4095				break;
4096			}
4097		} else {
4098			int sensor;
4099
4100			sensor = probe_6810(gspca_dev);
4101			if (sensor < 0) {
4102				pr_warn("Unknown sensor %d - forced to soi763a\n",
4103					-sensor);
4104				sensor = SENSOR_SOI763A;
4105			}
4106			sd->sensor = sensor;
4107		}
4108	}
4109	if (sd->sensor == SENSOR_SOI763A) {
4110		pr_info("Sensor soi763a\n");
4111		sd->ctrls[GAMMA].def = sd->bridge == BRIDGE_TP6800 ? 0 : 1;
4112		sd->ctrls[GAIN].max = 15;
4113		sd->ctrls[GAIN].def = 3;
4114		gspca_dev->ctrl_dis = (1 << RGAIN) | (1 << BGAIN);
4115		if (sd->bridge == BRIDGE_TP6810) {
4116			soi763a_6810_init(gspca_dev);
4117#if AUTOGAIN_DEF
4118			gspca_dev->ctrl_inac |= (1 << EXPOSURE) | (1 << GAIN);
4119#endif
4120		} else {
4121			gspca_dev->ctrl_dis |= (1 << AUTOGAIN);
4122		}
4123	} else {
4124		pr_info("Sensor cx0342\n");
4125		if (sd->bridge == BRIDGE_TP6810) {
4126			cx0342_6810_init(gspca_dev);
4127#if AUTOGAIN_DEF
4128			gspca_dev->ctrl_inac |= (1 << EXPOSURE) | (1 << GAIN);
4129#endif
4130		} else {
4131			gspca_dev->ctrl_dis |= (1 << AUTOGAIN);
4132		}
4133	}
4134
4135	if (sd->bridge == BRIDGE_TP6810)
4136		sd->ctrls[QUALITY].def = 0;	/* auto quality */
4137	set_dqt(gspca_dev, 0);
4138	return 0;
4139}
4140
4141/* This function is called before choosing the alt setting */
4142static int sd_isoc_init(struct gspca_dev *gspca_dev)
4143{
4144	struct sd *sd = (struct sd *) gspca_dev;
4145	static const struct cmd cx_sensor_init[] = {
4146		{CX0342_AUTO_ADC_CALIB, 0x81},
4147		{CX0342_EXPO_LINE_L, 0x37},
4148		{CX0342_EXPO_LINE_H, 0x01},
4149		{CX0342_RAW_GRGAIN_L, 0x00},
4150		{CX0342_RAW_GBGAIN_L, 0x00},
4151		{CX0342_RAW_RGAIN_L, 0x00},
4152		{CX0342_RAW_BGAIN_L, 0x00},
4153		{CX0342_SYS_CTRL_0, 0x81},
4154	};
4155	static const struct cmd cx_bridge_init[] = {
4156		{0x4d, 0x00},
4157		{0x4c, 0xff},
4158		{0x4e, 0xff},
4159		{0x4f, 0x00},
4160	};
4161	static const struct cmd ov_sensor_init[] = {
4162		{0x10, 0x75},		/* exposure */
4163		{0x76, 0x03},
4164		{0x00, 0x00},		/* gain */
4165	};
4166	static const struct cmd ov_bridge_init[] = {
4167		{0x7b, 0x90},
4168		{TP6800_R3F_FRAME_RATE, 0x87},
4169	};
4170
4171	if (sd->bridge == BRIDGE_TP6800)
4172		return 0;
4173	if (sd->sensor == SENSOR_CX0342) {
4174		reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20);
4175		reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x87);
4176		i2c_w_buf(gspca_dev, cx_sensor_init,
4177				ARRAY_SIZE(cx_sensor_init));
4178		reg_w_buf(gspca_dev, cx_bridge_init,
4179				ARRAY_SIZE(cx_bridge_init));
4180		bulk_w(gspca_dev, 0x03, color_null, sizeof color_null);
4181		reg_w(gspca_dev, 0x59, 0x40);
4182	} else {
4183		reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x21);
4184		i2c_w_buf(gspca_dev, ov_sensor_init,
4185				ARRAY_SIZE(ov_sensor_init));
4186		reg_r(gspca_dev, 0x7b);
4187		reg_w_buf(gspca_dev, ov_bridge_init,
4188				ARRAY_SIZE(ov_bridge_init));
4189	}
4190	reg_w(gspca_dev, TP6800_R78_FORMAT,
4191			gspca_dev->curr_mode ? 0x00 : 0x01);
4192	return gspca_dev->usb_err;
4193}
4194
4195static void set_led(struct gspca_dev *gspca_dev, int on)
4196{
4197	u8 data;
4198
4199	reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
4200	data = gspca_dev->usb_buf[0];
4201	if (on)
4202		data &= ~0x40;
4203	else
4204		data |= 0x40;
4205	reg_w(gspca_dev, TP6800_R18_GPIO_DATA, data);
4206}
4207
4208static void cx0342_6800_start(struct gspca_dev *gspca_dev)
4209{
4210	static const struct cmd reg_init[] = {
4211/*fixme: is this usefull?*/
4212		{TP6800_R17_GPIO_IO, 0x9f},
4213		{TP6800_R16_GPIO_PD, 0x40},
4214		{TP6800_R10_SIF_TYPE, 0x00},	/* i2c 8 bits */
4215		{TP6800_R50, 0x00},
4216		{TP6800_R51, 0x00},
4217		{TP6800_R52, 0xff},
4218		{TP6800_R53, 0x03},
4219		{TP6800_R54_DARK_CFG, 0x07},
4220		{TP6800_R5C_EDGE_THRLD, 0x40},
4221		{TP6800_R7A_BLK_THRLD, 0x40},
4222		{TP6800_R2F_TIMING_CFG, 0x17},
4223		{TP6800_R30_SENSOR_CFG, 0x18},	/* G1B..RG0 */
4224		{TP6800_R37_FRONT_DARK_ST, 0x00},
4225		{TP6800_R38_FRONT_DARK_END, 0x00},
4226		{TP6800_R39_REAR_DARK_ST_L, 0x00},
4227		{TP6800_R3A_REAR_DARK_ST_H, 0x00},
4228		{TP6800_R3B_REAR_DARK_END_L, 0x00},
4229		{TP6800_R3C_REAR_DARK_END_H, 0x00},
4230		{TP6800_R3D_HORIZ_DARK_LINE_L, 0x00},
4231		{TP6800_R3E_HORIZ_DARK_LINE_H, 0x00},
4232		{TP6800_R21_ENDP_1_CTL, 0x03},
4233
4234		{TP6800_R31_PIXEL_START, 0x0b},
4235		{TP6800_R32_PIXEL_END_L, 0x8a},
4236		{TP6800_R33_PIXEL_END_H, 0x02},
4237		{TP6800_R34_LINE_START, 0x0e},
4238		{TP6800_R35_LINE_END_L, 0xf4},
4239		{TP6800_R36_LINE_END_H, 0x01},
4240		{TP6800_R78_FORMAT, 0x00},
4241		{TP6800_R12_SIF_ADDR_S, 0x20},	/* cx0342 i2c addr */
4242	};
4243	static const struct cmd sensor_init[] = {
4244		{CX0342_OUTPUT_CTRL, 0x07},
4245		{CX0342_BYPASS_MODE, 0x58},
4246		{CX0342_GPXLTHD_L, 0x16},
4247		{CX0342_RBPXLTHD_L, 0x16},
4248		{CX0342_PLANETHD_L, 0xc0},
4249		{CX0342_PLANETHD_H, 0x03},
4250		{CX0342_RB_GAP_L, 0xff},
4251		{CX0342_RB_GAP_H, 0x07},
4252		{CX0342_G_GAP_L, 0xff},
4253		{CX0342_G_GAP_H, 0x07},
4254		{CX0342_RST_OVERFLOW_L, 0x5c},
4255		{CX0342_RST_OVERFLOW_H, 0x01},
4256		{CX0342_DATA_OVERFLOW_L, 0xfc},
4257		{CX0342_DATA_OVERFLOW_H, 0x03},
4258		{CX0342_DATA_UNDERFLOW_L, 0x00},
4259		{CX0342_DATA_UNDERFLOW_H, 0x00},
4260		{CX0342_SYS_CTRL_0, 0x40},
4261		{CX0342_GLOBAL_GAIN, 0x01},
4262		{CX0342_CLOCK_GEN, 0x00},
4263		{CX0342_SYS_CTRL_0, 0x02},
4264		{CX0342_IDLE_CTRL, 0x05},
4265		{CX0342_ADCGN, 0x00},
4266		{CX0342_ADC_CTL, 0x00},
4267		{CX0342_LVRST_BLBIAS, 0x01},
4268		{CX0342_VTHSEL, 0x0b},
4269		{CX0342_RAMP_RIV, 0x0b},
4270		{CX0342_LDOSEL, 0x07},
4271		{CX0342_SPV_VALUE_L, 0x40},
4272		{CX0342_SPV_VALUE_H, 0x02},
4273	};
4274
4275	reg_w_buf(gspca_dev, reg_init, ARRAY_SIZE(reg_init));
4276	i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
4277	i2c_w_buf(gspca_dev, cx0342_timing_seq, ARRAY_SIZE(cx0342_timing_seq));
4278	reg_w(gspca_dev, TP6800_R5C_EDGE_THRLD, 0x10);
4279	reg_w(gspca_dev, TP6800_R54_DARK_CFG, 0x00);
4280	i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
4281	i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
4282	setexposure(gspca_dev);
4283	set_led(gspca_dev, 1);
4284	set_resolution(gspca_dev);
4285}
4286
4287static void cx0342_6810_start(struct gspca_dev *gspca_dev)
4288{
4289	static const struct cmd sensor_init_2[] = {
4290		{CX0342_EXPO_LINE_L, 0x6f},
4291		{CX0342_EXPO_LINE_H, 0x02},
4292		{CX0342_RAW_GRGAIN_L, 0x00},
4293		{CX0342_RAW_GBGAIN_L, 0x00},
4294		{CX0342_RAW_RGAIN_L, 0x00},
4295		{CX0342_RAW_BGAIN_L, 0x00},
4296		{CX0342_SYS_CTRL_0, 0x81},
4297	};
4298	static const struct cmd bridge_init_2[] = {
4299		{0x4d, 0x00},
4300		{0x4c, 0xff},
4301		{0x4e, 0xff},
4302		{0x4f, 0x00},
4303		{TP6800_R7A_BLK_THRLD, 0x00},
4304		{TP6800_R79_QUALITY, 0x04},
4305		{TP6800_R79_QUALITY, 0x01},
4306	};
4307	static const struct cmd bridge_init_3[] = {
4308		{TP6800_R31_PIXEL_START, 0x08},
4309		{TP6800_R32_PIXEL_END_L, 0x87},
4310		{TP6800_R33_PIXEL_END_H, 0x02},
4311		{TP6800_R34_LINE_START, 0x0e},
4312		{TP6800_R35_LINE_END_L, 0xf4},
4313		{TP6800_R36_LINE_END_H, 0x01},
4314	};
4315	static const struct cmd sensor_init_3[] = {
4316		{CX0342_AUTO_ADC_CALIB, 0x81},
4317		{CX0342_EXPO_LINE_L, 0x6f},
4318		{CX0342_EXPO_LINE_H, 0x02},
4319		{CX0342_RAW_GRGAIN_L, 0x00},
4320		{CX0342_RAW_GBGAIN_L, 0x00},
4321		{CX0342_RAW_RGAIN_L, 0x00},
4322		{CX0342_RAW_BGAIN_L, 0x00},
4323		{CX0342_SYS_CTRL_0, 0x81},
4324	};
4325	static const struct cmd bridge_init_5[] = {
4326		{0x4d, 0x00},
4327		{0x4c, 0xff},
4328		{0x4e, 0xff},
4329		{0x4f, 0x00},
4330	};
4331	static const struct cmd sensor_init_4[] = {
4332		{CX0342_EXPO_LINE_L, 0xd3},
4333		{CX0342_EXPO_LINE_H, 0x01},
4334/*fixme: gains, but 00..80 only*/
4335		{CX0342_RAW_GRGAIN_L, 0x40},
4336		{CX0342_RAW_GBGAIN_L, 0x40},
4337		{CX0342_RAW_RGAIN_L, 0x40},
4338		{CX0342_RAW_BGAIN_L, 0x40},
4339		{CX0342_SYS_CTRL_0, 0x81},
4340	};
4341	static const struct cmd sensor_init_5[] = {
4342		{CX0342_IDLE_CTRL, 0x05},
4343		{CX0342_ADCGN, 0x00},
4344		{CX0342_ADC_CTL, 0x00},
4345		{CX0342_LVRST_BLBIAS, 0x01},
4346		{CX0342_VTHSEL, 0x0b},
4347		{CX0342_RAMP_RIV, 0x0b},
4348		{CX0342_LDOSEL, 0x07},
4349		{CX0342_SPV_VALUE_L, 0x40},
4350		{CX0342_SPV_VALUE_H, 0x02},
4351		{CX0342_AUTO_ADC_CALIB, 0x81},
4352	};
4353
4354	reg_w(gspca_dev, 0x22, gspca_dev->alt);
4355	i2c_w_buf(gspca_dev, sensor_init_2, ARRAY_SIZE(sensor_init_2));
4356	reg_w_buf(gspca_dev, bridge_init_2, ARRAY_SIZE(bridge_init_2));
4357	reg_w_buf(gspca_dev, tp6810_cx_init_common,
4358			ARRAY_SIZE(tp6810_cx_init_common));
4359	reg_w_buf(gspca_dev, bridge_init_3, ARRAY_SIZE(bridge_init_3));
4360	if (gspca_dev->curr_mode) {
4361		reg_w(gspca_dev, 0x4a, 0x7f);
4362		reg_w(gspca_dev, 0x07, 0x05);
4363		reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00);	/* vga */
4364	} else {
4365		reg_w(gspca_dev, 0x4a, 0xff);
4366		reg_w(gspca_dev, 0x07, 0x85);
4367		reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01);	/* qvga */
4368	}
4369	setgamma(gspca_dev);
4370	reg_w_buf(gspca_dev, tp6810_bridge_start,
4371			ARRAY_SIZE(tp6810_bridge_start));
4372	setsharpness(gspca_dev);
4373	bulk_w(gspca_dev, 0x03, color_gain[SENSOR_CX0342],
4374				ARRAY_SIZE(color_gain[0]));
4375	reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x87);
4376	i2c_w_buf(gspca_dev, sensor_init_3, ARRAY_SIZE(sensor_init_3));
4377	reg_w_buf(gspca_dev, bridge_init_5, ARRAY_SIZE(bridge_init_5));
4378	i2c_w_buf(gspca_dev, sensor_init_4, ARRAY_SIZE(sensor_init_4));
4379	reg_w_buf(gspca_dev, bridge_init_5, ARRAY_SIZE(bridge_init_5));
4380	i2c_w_buf(gspca_dev, sensor_init_5, ARRAY_SIZE(sensor_init_5));
4381
4382	set_led(gspca_dev, 1);
4383/*	setquality(gspca_dev); */
4384}
4385
4386static void soi763a_6800_start(struct gspca_dev *gspca_dev)
4387{
4388	static const struct cmd reg_init[] = {
4389		{TP6800_R79_QUALITY, 0x04},
4390		{TP6800_R79_QUALITY, 0x01},
4391		{TP6800_R10_SIF_TYPE, 0x00},	/* i2c 8 bits */
4392
4393		{TP6800_R50, 0x00},
4394		{TP6800_R51, 0x00},
4395		{TP6800_R52, 0xff},
4396		{TP6800_R53, 0x03},
4397		{TP6800_R54_DARK_CFG, 0x07},
4398		{TP6800_R5C_EDGE_THRLD, 0x40},
4399
4400		{TP6800_R79_QUALITY, 0x03},
4401		{TP6800_R7A_BLK_THRLD, 0x40},
4402
4403		{TP6800_R2F_TIMING_CFG, 0x46},
4404		{TP6800_R30_SENSOR_CFG, 0x10},	/* BG1..G0R */
4405		{TP6800_R37_FRONT_DARK_ST, 0x00},
4406		{TP6800_R38_FRONT_DARK_END, 0x00},
4407		{TP6800_R39_REAR_DARK_ST_L, 0x00},
4408		{TP6800_R3A_REAR_DARK_ST_H, 0x00},
4409		{TP6800_R3B_REAR_DARK_END_L, 0x00},
4410		{TP6800_R3C_REAR_DARK_END_H, 0x00},
4411		{TP6800_R3D_HORIZ_DARK_LINE_L, 0x00},
4412		{TP6800_R3E_HORIZ_DARK_LINE_H, 0x00},
4413		{TP6800_R21_ENDP_1_CTL, 0x03},
4414
4415		{TP6800_R3F_FRAME_RATE, 0x04},	/* 15 fps */
4416		{TP6800_R5D_DEMOSAIC_CFG, 0x0e}, /* scale down - medium edge */
4417
4418		{TP6800_R31_PIXEL_START, 0x1b},
4419		{TP6800_R32_PIXEL_END_L, 0x9a},
4420		{TP6800_R33_PIXEL_END_H, 0x02},
4421		{TP6800_R34_LINE_START, 0x0f},
4422		{TP6800_R35_LINE_END_L, 0xf4},
4423		{TP6800_R36_LINE_END_H, 0x01},
4424		{TP6800_R78_FORMAT, 0x01},	/* qvga */
4425		{TP6800_R12_SIF_ADDR_S, 0x21},	/* soi763a i2c addr */
4426		{TP6800_R1A_SIF_TX_DATA2, 0x00},
4427	};
4428	static const struct cmd sensor_init[] = {
4429		{0x12, 0x48},		/* mirror - RGB */
4430		{0x13, 0xa0},		/* clock - no AGC nor AEC */
4431		{0x03, 0xa4},		/* saturation */
4432		{0x04, 0x30},		/* hue */
4433		{0x05, 0x88},		/* contrast */
4434		{0x06, 0x60},		/* brightness */
4435		{0x10, 0x41},		/* AEC */
4436		{0x11, 0x40},		/* clock rate */
4437		{0x13, 0xa0},
4438		{0x14, 0x00},		/* 640x480 */
4439		{0x15, 0x14},
4440		{0x1f, 0x41},
4441		{0x20, 0x80},
4442		{0x23, 0xee},
4443		{0x24, 0x50},
4444		{0x25, 0x7a},
4445		{0x26, 0x00},
4446		{0x27, 0xe2},
4447		{0x28, 0xb0},
4448		{0x2a, 0x00},
4449		{0x2b, 0x00},
4450		{0x2d, 0x81},
4451		{0x2f, 0x9d},
4452		{0x60, 0x80},
4453		{0x61, 0x00},
4454		{0x62, 0x88},
4455		{0x63, 0x11},
4456		{0x64, 0x89},
4457		{0x65, 0x00},
4458		{0x67, 0x94},
4459		{0x68, 0x7a},
4460		{0x69, 0x0f},
4461		{0x6c, 0x80},
4462		{0x6d, 0x80},
4463		{0x6e, 0x80},
4464		{0x6f, 0xff},
4465		{0x71, 0x20},
4466		{0x74, 0x20},
4467		{0x75, 0x86},
4468		{0x77, 0xb5},
4469		{0x17, 0x18},		/* H href start */
4470		{0x18, 0xbf},		/* H href end */
4471		{0x19, 0x03},		/* V start */
4472		{0x1a, 0xf8},		/* V end */
4473		{0x01, 0x80},		/* blue gain */
4474		{0x02, 0x80},		/* red gain */
4475	};
4476
4477	reg_w_buf(gspca_dev, reg_init, ARRAY_SIZE(reg_init));
4478
4479	i2c_w(gspca_dev, 0x12, 0x80);		/* sensor reset */
4480	msleep(10);
4481
4482	i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
4483
4484	reg_w(gspca_dev, TP6800_R5C_EDGE_THRLD, 0x10);
4485	reg_w(gspca_dev, TP6800_R54_DARK_CFG, 0x00);
4486
4487	setsharpness(gspca_dev);
4488
4489	bulk_w(gspca_dev, 0x03, color_gain[SENSOR_SOI763A],
4490				ARRAY_SIZE(color_gain[0]));
4491
4492	set_led(gspca_dev, 1);
4493	setexposure(gspca_dev);
4494	setquality(gspca_dev);
4495	setgamma(gspca_dev);
4496}
4497
4498static void soi763a_6810_start(struct gspca_dev *gspca_dev)
4499{
4500	static const struct cmd bridge_init_2[] = {
4501		{TP6800_R7A_BLK_THRLD, 0x00},
4502		{TP6800_R79_QUALITY, 0x04},
4503		{TP6800_R79_QUALITY, 0x01},
4504	};
4505	static const struct cmd bridge_init_3[] = {
4506		{TP6800_R31_PIXEL_START, 0x20},
4507		{TP6800_R32_PIXEL_END_L, 0x9f},
4508		{TP6800_R33_PIXEL_END_H, 0x02},
4509		{TP6800_R34_LINE_START, 0x13},
4510		{TP6800_R35_LINE_END_L, 0xf8},
4511		{TP6800_R36_LINE_END_H, 0x01},
4512	};
4513	static const struct cmd bridge_init_6[] = {
4514		{0x08, 0xff},
4515		{0x09, 0xff},
4516		{0x0a, 0x5f},
4517		{0x0b, 0x80},
4518	};
4519
4520	reg_w(gspca_dev, 0x22, gspca_dev->alt);
4521	bulk_w(gspca_dev, 0x03, color_null, sizeof color_null);
4522	reg_w(gspca_dev, 0x59, 0x40);
4523	setexposure(gspca_dev);
4524	reg_w_buf(gspca_dev, bridge_init_2, ARRAY_SIZE(bridge_init_2));
4525	reg_w_buf(gspca_dev, tp6810_ov_init_common,
4526			ARRAY_SIZE(tp6810_ov_init_common));
4527	reg_w_buf(gspca_dev, bridge_init_3, ARRAY_SIZE(bridge_init_3));
4528	if (gspca_dev->curr_mode) {
4529		reg_w(gspca_dev, 0x4a, 0x7f);
4530		reg_w(gspca_dev, 0x07, 0x05);
4531		reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00);	/* vga */
4532	} else {
4533		reg_w(gspca_dev, 0x4a, 0xff);
4534		reg_w(gspca_dev, 0x07, 0x85);
4535		reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01);	/* qvga */
4536	}
4537	setgamma(gspca_dev);
4538	reg_w_buf(gspca_dev, tp6810_bridge_start,
4539			ARRAY_SIZE(tp6810_bridge_start));
4540
4541	if (gspca_dev->curr_mode) {
4542		reg_w(gspca_dev, 0x4f, 0x00);
4543		reg_w(gspca_dev, 0x4e, 0x7c);
4544	}
4545
4546	reg_w(gspca_dev, 0x00, 0x00);
4547
4548	setsharpness(gspca_dev);
4549	bulk_w(gspca_dev, 0x03, color_gain[SENSOR_SOI763A],
4550				ARRAY_SIZE(color_gain[0]));
4551	set_led(gspca_dev, 1);
4552	reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0xf0);
4553	setexposure(gspca_dev);
4554	reg_w_buf(gspca_dev, bridge_init_6, ARRAY_SIZE(bridge_init_6));
4555}
4556
4557/* -- start the camera -- */
4558static int sd_start(struct gspca_dev *gspca_dev)
4559{
4560	struct sd *sd = (struct sd *) gspca_dev;
4561
4562	jpeg_define(sd->jpeg_hdr, gspca_dev->height, gspca_dev->width);
4563	set_dqt(gspca_dev, sd->quality);
4564	if (sd->bridge == BRIDGE_TP6800) {
4565		if (sd->sensor == SENSOR_CX0342)
4566			cx0342_6800_start(gspca_dev);
4567		else
4568			soi763a_6800_start(gspca_dev);
4569	} else {
4570		if (sd->sensor == SENSOR_CX0342)
4571			cx0342_6810_start(gspca_dev);
4572		else
4573			soi763a_6810_start(gspca_dev);
4574		reg_w_buf(gspca_dev, tp6810_late_start,
4575				ARRAY_SIZE(tp6810_late_start));
4576		reg_w(gspca_dev, 0x80, 0x03);
4577		reg_w(gspca_dev, 0x82, gspca_dev->curr_mode ? 0x0a : 0x0e);
4578
4579		setexposure(gspca_dev);
4580		setquality(gspca_dev);
4581		setautogain(gspca_dev);
4582	}
4583
4584	setframerate(gspca_dev);
4585
4586	return gspca_dev->usb_err;
4587}
4588
4589static void sd_stopN(struct gspca_dev *gspca_dev)
4590{
4591	struct sd *sd = (struct sd *) gspca_dev;
4592
4593	if (sd->bridge == BRIDGE_TP6800)
4594		reg_w(gspca_dev, TP6800_R2F_TIMING_CFG, 0x03);
4595	set_led(gspca_dev, 0);
4596	reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
4597}
4598
4599static void sd_pkt_scan(struct gspca_dev *gspca_dev,
4600			u8 *data,
4601			int len)
4602{
4603	struct sd *sd = (struct sd *) gspca_dev;
4604
4605	/* the start of frame contains:
4606	 *	ff d8
4607	 *	ff fe
4608	 *	width / 16
4609	 *	height / 8
4610	 *	quality
4611	 */
4612	if (sd->bridge == BRIDGE_TP6810) {
4613		if (*data != 0x5a) {
4614/*fixme: don't discard the whole frame..*/
4615			if (*data == 0xaa || *data == 0x00)
4616				return;
4617			if (*data > 0xc0) {
4618				PDEBUG(D_FRAM, "bad frame");
4619				gspca_dev->last_packet_type = DISCARD_PACKET;
4620				return;
4621			}
4622		}
4623		data++;
4624		len--;
4625		if (*data == 0xff && data[1] == 0xd8) {
4626/*fixme: there may be information in the 4 high bits*/
4627			if ((data[6] & 0x0f) != sd->quality)
4628				set_dqt(gspca_dev, data[6] & 0x0f);
4629			gspca_frame_add(gspca_dev, FIRST_PACKET,
4630					sd->jpeg_hdr, JPEG_HDR_SZ);
4631			gspca_frame_add(gspca_dev, INTER_PACKET,
4632					data + 7, len - 7);
4633		} else if (data[len - 2] == 0xff && data[len - 1] == 0xd9) {
4634			gspca_frame_add(gspca_dev, LAST_PACKET,
4635					data, len);
4636		} else {
4637			gspca_frame_add(gspca_dev, INTER_PACKET,
4638					data, len);
4639		}
4640		return;
4641	}
4642
4643	switch (*data) {
4644	case 0x55:
4645		gspca_frame_add(gspca_dev, LAST_PACKET, data, 0);
4646
4647		if (len < 8
4648		 || data[1] != 0xff || data[2] != 0xd8
4649		 || data[3] != 0xff || data[4] != 0xfe) {
4650
4651			/* Have only seen this with corrupt frames */
4652			gspca_dev->last_packet_type = DISCARD_PACKET;
4653			return;
4654		}
4655		if (data[7] != sd->quality)
4656			set_dqt(gspca_dev, data[7]);
4657		gspca_frame_add(gspca_dev, FIRST_PACKET,
4658				sd->jpeg_hdr, JPEG_HDR_SZ);
4659		gspca_frame_add(gspca_dev, INTER_PACKET,
4660				data + 8, len - 8);
4661		break;
4662	case 0xaa:
4663		gspca_dev->last_packet_type = DISCARD_PACKET;
4664		break;
4665	case 0xcc:
4666		if (data[1] != 0xff || data[2] != 0xd8)
4667			gspca_frame_add(gspca_dev, INTER_PACKET,
4668					data + 1, len - 1);
4669		else
4670			gspca_dev->last_packet_type = DISCARD_PACKET;
4671		break;
4672	}
4673}
4674
4675/* -- do autogain -- */
4676/* gain setting is done in setexposure() for tp6810 */
4677static void setgain(struct gspca_dev *gspca_dev) {}
4678/* !! coarse_grained_expo_autogain is not used !! */
4679#define exp_too_low_cnt bridge
4680#define exp_too_high_cnt sensor
4681
4682#include "autogain_functions.h"
4683static void sd_dq_callback(struct gspca_dev *gspca_dev)
4684{
4685	struct sd *sd = (struct sd *) gspca_dev;
4686	int ret, alen;
4687	int luma, expo;
4688
4689	if (sd->ag_cnt < 0)
4690		return;
4691	if (--sd->ag_cnt > 5)
4692		return;
4693	switch (sd->ag_cnt) {
4694/*	case 5: */
4695	default:
4696		reg_w(gspca_dev, 0x7d, 0x00);
4697		break;
4698	case 4:
4699		reg_w(gspca_dev, 0x27, 0xb0);
4700		break;
4701	case 3:
4702		reg_w(gspca_dev, 0x0c, 0x01);
4703		break;
4704	case 2:
4705		ret = usb_bulk_msg(gspca_dev->dev,
4706				usb_rcvbulkpipe(gspca_dev->dev, 0x02),
4707				gspca_dev->usb_buf,
4708				32,
4709				&alen,
4710				500);
4711		if (ret < 0) {
4712			pr_err("bulk err %d\n", ret);
4713			break;
4714		}
4715		/* values not used (unknown) */
4716		break;
4717	case 1:
4718		reg_w(gspca_dev, 0x27, 0xd0);
4719		break;
4720	case 0:
4721		ret = usb_bulk_msg(gspca_dev->dev,
4722				usb_rcvbulkpipe(gspca_dev->dev, 0x02),
4723				gspca_dev->usb_buf,
4724				32,
4725				&alen,
4726				500);
4727		if (ret < 0) {
4728			pr_err("bulk err %d\n", ret);
4729			break;
4730		}
4731		luma = ((gspca_dev->usb_buf[8] << 8) + gspca_dev->usb_buf[7] +
4732			(gspca_dev->usb_buf[11] << 8) + gspca_dev->usb_buf[10] +
4733			(gspca_dev->usb_buf[14] << 8) + gspca_dev->usb_buf[13] +
4734			(gspca_dev->usb_buf[17] << 8) + gspca_dev->usb_buf[16] +
4735			(gspca_dev->usb_buf[20] << 8) + gspca_dev->usb_buf[19] +
4736			(gspca_dev->usb_buf[23] << 8) + gspca_dev->usb_buf[22] +
4737			(gspca_dev->usb_buf[26] << 8) + gspca_dev->usb_buf[25] +
4738			(gspca_dev->usb_buf[29] << 8) + gspca_dev->usb_buf[28])
4739				/ 8;
4740		if (gspca_dev->width == 640)
4741			luma /= 4;
4742		reg_w(gspca_dev, 0x7d, 0x00);
4743
4744		expo = sd->ctrls[EXPOSURE].val;
4745		ret = auto_gain_n_exposure(gspca_dev, luma,
4746				60,	/* desired luma */
4747				6,	/* dead zone */
4748				2,	/* gain knee */
4749				70);	/* expo knee */
4750		sd->ag_cnt = AG_CNT_START;
4751		if (sd->bridge == BRIDGE_TP6810) {
4752			if ((expo >= 128 && sd->ctrls[EXPOSURE].val < 128)
4753			 || (expo < 128 && sd->ctrls[EXPOSURE].val >= 128))
4754				setframerate(gspca_dev);
4755		}
4756		break;
4757	}
4758}
4759
4760/* get stream parameters (framerate) */
4761static void sd_get_streamparm(struct gspca_dev *gspca_dev,
4762			     struct v4l2_streamparm *parm)
4763{
4764	struct sd *sd = (struct sd *) gspca_dev;
4765	struct v4l2_captureparm *cp = &parm->parm.capture;
4766	struct v4l2_fract *tpf = &cp->timeperframe;
4767	int fr, i;
4768
4769	cp->capability |= V4L2_CAP_TIMEPERFRAME;
4770	tpf->numerator = 1;
4771	i = get_fr_idx(gspca_dev);
4772	if (i & 0x80) {
4773		if (sd->bridge == BRIDGE_TP6800)
4774			fr = rates[6 - (i & 0x07)];
4775		else
4776			fr = rates_6810[7 - (i & 0x07)];
4777	} else {
4778		fr = rates[6 - i];
4779	}
4780	tpf->denominator = fr;
4781}
4782
4783/* set stream parameters (framerate) */
4784static void sd_set_streamparm(struct gspca_dev *gspca_dev,
4785			     struct v4l2_streamparm *parm)
4786{
4787	struct sd *sd = (struct sd *) gspca_dev;
4788	struct v4l2_captureparm *cp = &parm->parm.capture;
4789	struct v4l2_fract *tpf = &cp->timeperframe;
4790	int fr, i;
4791
4792	sd->framerate = tpf->denominator / tpf->numerator;
4793	if (gspca_dev->streaming)
4794		setframerate(gspca_dev);
4795
4796	/* Return the actual framerate */
4797	i = get_fr_idx(gspca_dev);
4798	if (i & 0x80)
4799		fr = rates_6810[7 - (i & 0x07)];
4800	else
4801		fr = rates[6 - i];
4802	tpf->numerator = 1;
4803	tpf->denominator = fr;
4804}
4805
4806static int sd_set_jcomp(struct gspca_dev *gspca_dev,
4807			struct v4l2_jpegcompression *jcomp)
4808{
4809	struct sd *sd = (struct sd *) gspca_dev;
4810
4811	if (sd->sensor == SENSOR_SOI763A)
4812		jpeg_set_qual(sd->jpeg_hdr, jcomp->quality);
4813/*	else
4814		fixme: TODO
4815*/
4816	return gspca_dev->usb_err;
4817}
4818
4819static int sd_get_jcomp(struct gspca_dev *gspca_dev,
4820			struct v4l2_jpegcompression *jcomp)
4821{
4822	struct sd *sd = (struct sd *) gspca_dev;
4823
4824	memset(jcomp, 0, sizeof *jcomp);
4825	jcomp->quality = jpeg_q[sd->quality];
4826	jcomp->jpeg_markers = V4L2_JPEG_MARKER_DHT
4827			| V4L2_JPEG_MARKER_DQT;
4828	return 0;
4829}
4830
4831static struct ctrl sd_ctrls[NCTRLS] = {
4832[EXPOSURE] = {
4833	    {
4834		.id = V4L2_CID_EXPOSURE,
4835		.type = V4L2_CTRL_TYPE_INTEGER,
4836		.name = "Exposure",
4837		.minimum = 0x01,
4838		.maximum = 0xdc,
4839		.step = 1,
4840		.default_value = 0x4e,
4841	    },
4842	    .set_control = setexposure
4843	},
4844[QUALITY] = {
4845	    {
4846		.id = V4L2_CID_PRIVATE_BASE,
4847		.type = V4L2_CTRL_TYPE_INTEGER,
4848		.name = "Compression quality",
4849		.minimum = 0,
4850		.maximum = 15,
4851		.step = 1,
4852		.default_value = 13,
4853	    },
4854	    .set_control = setquality
4855	},
4856[RGAIN] = {
4857	    {
4858		.id = V4L2_CID_RED_BALANCE,
4859		.type = V4L2_CTRL_TYPE_INTEGER,
4860		.name = "Red balance",
4861		.minimum = 0,
4862		.maximum = 4095,
4863		.step = 1,
4864		.default_value = 256,
4865	    },
4866	    .set_control = setrgain
4867	},
4868[GAIN] = {
4869	    {
4870		.id = V4L2_CID_GAIN,
4871		.type = V4L2_CTRL_TYPE_INTEGER,
4872		.name = "Gain",
4873		.minimum = 0,
4874		.maximum = 4095,
4875		.step = 1,
4876		.default_value = 256,
4877	    },
4878	    .set = sd_setgain
4879	},
4880[BGAIN] = {
4881	    {
4882		.id = V4L2_CID_BLUE_BALANCE,
4883		.type = V4L2_CTRL_TYPE_INTEGER,
4884		.name = "Blue balance",
4885		.minimum = 0,
4886		.maximum = 4095,
4887		.step = 1,
4888		.default_value = 256,
4889	    },
4890	    .set_control = setbgain
4891	},
4892[SHARPNESS] = {
4893	    {
4894		.id	 = V4L2_CID_SHARPNESS,
4895		.type    = V4L2_CTRL_TYPE_INTEGER,
4896		.name    = "Sharpness",
4897		.minimum = 0,
4898		.maximum = 3,
4899		.step    = 1,
4900		.default_value = 2,
4901	    },
4902	    .set_control = setsharpness
4903	},
4904[GAMMA] = {
4905	    {
4906		.id      = V4L2_CID_GAMMA,
4907		.type    = V4L2_CTRL_TYPE_INTEGER,
4908		.name    = "Gamma",
4909		.minimum = 0,
4910		.maximum = NGAMMA - 1,
4911		.step    = 1,
4912		.default_value = 1,
4913	    },
4914	    .set_control = setgamma
4915	},
4916[AUTOGAIN] = {
4917	    {
4918		.id      = V4L2_CID_AUTOGAIN,
4919		.type    = V4L2_CTRL_TYPE_BOOLEAN,
4920		.name    = "Auto Gain",
4921		.minimum = 0,
4922		.maximum = 1,
4923		.step    = 1,
4924		.default_value = AUTOGAIN_DEF
4925	    },
4926	    .set_control = setautogain
4927	},
4928};
4929
4930static const struct sd_desc sd_desc = {
4931	.name = KBUILD_MODNAME,
4932	.ctrls = sd_ctrls,
4933	.nctrls = NCTRLS,
4934	.config = sd_config,
4935	.init = sd_init,
4936	.isoc_init = sd_isoc_init,
4937	.start = sd_start,
4938	.stopN = sd_stopN,
4939	.pkt_scan = sd_pkt_scan,
4940	.dq_callback = sd_dq_callback,
4941	.get_streamparm = sd_get_streamparm,
4942	.set_streamparm = sd_set_streamparm,
4943	.get_jcomp = sd_get_jcomp,
4944	.set_jcomp = sd_set_jcomp,
4945};
4946
4947static const struct usb_device_id device_table[] = {
4948	{USB_DEVICE(0x06a2, 0x0003), .driver_info = BRIDGE_TP6800},
4949	{USB_DEVICE(0x06a2, 0x6810), .driver_info = BRIDGE_TP6810},
4950	{}			/* Terminating entry */
4951};
4952
4953MODULE_DEVICE_TABLE(usb, device_table);
4954
4955static int sd_probe(struct usb_interface *interface,
4956		    const struct usb_device_id *id)
4957{
4958	return gspca_dev_probe(interface, id, &sd_desc, sizeof(struct sd),
4959			       THIS_MODULE);
4960}
4961
4962static struct usb_driver sd_driver = {
4963	.name = KBUILD_MODNAME,
4964	.id_table = device_table,
4965	.probe = sd_probe,
4966	.disconnect = gspca_disconnect,
4967#ifdef CONFIG_PM
4968	.suspend = gspca_suspend,
4969	.resume = gspca_resume,
4970	.reset_resume = gspca_resume,
4971#endif
4972};
4973
4974module_usb_driver(sd_driver);
4975
4976module_param(force_sensor, int, 0644);
4977MODULE_PARM_DESC(force_sensor,
4978	"Force sensor. 0: cx0342, 1: soi763a");
4979