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