diff --git a/device/config/chips/v851s3/configs/fastboot_sl100_front/board.dts b/device/config/chips/v851s3/configs/fastboot_sl100_front/board.dts index b691d0a71..7dcae6634 100755 --- a/device/config/chips/v851s3/configs/fastboot_sl100_front/board.dts +++ b/device/config/chips/v851s3/configs/fastboot_sl100_front/board.dts @@ -42,15 +42,15 @@ reserved-memory { e907_fw: e907_fw { - reg = <0x0 0x43080000 0x0 0x00180000>; + reg = <0x0 0x43080000 0x0 0x00190000>; }; isp_reserved: isp_reserved { - reg = <0x0 0x43200000 0x0 0x00a00000>; + reg = <0x0 0x43210000 0x0 0x01E00000>; }; e907_dram: riscv_memserve { - reg = <0x0 0x43c00000 0x0 0x00400000>; + reg = <0x0 0x45010000 0x0 0x00530000>; no-map; }; @@ -164,12 +164,12 @@ status = "okay"; ch_id = <0>;//vipp_num codec_type = <0>;//0//0:H264; 1:JPG; 2:H265 - res_w = <640>; - res_h = <480>; + res_w = <1920>; + res_h = <1080>; fps = <15>; bit_rate = <1536>;//kb gop = <40>; - vbr = <0>;//< operate venc. VBR=1, CBR=0 + vbr = <1>;//< operate venc. VBR=1, CBR=0 init_qp = <35>; i_min_qp = <25>; i_max_qp = <45>; @@ -189,12 +189,12 @@ status = "okay"; ch_id = <1>;//vipp_num codec_type = <0>;//0//0:H264; 1:JPG; 2:H265 - res_w = <640>; - res_h = <480>; + res_w = <1600>; + res_h = <1200>; fps = <15>; bit_rate = <1536>;//kb gop = <40>; - vbr = <0>;//< operate venc. VBR=1, CBR=0 + vbr = <1>;//< operate venc. VBR=1, CBR=0 init_qp = <35>; i_min_qp = <25>; i_max_qp = <45>; @@ -209,17 +209,17 @@ }; sensor_2_venc: sensor_2_venc@2 { - status = "disabled"; + status = "okay"; s2vencfg0: s2vencfg0@0 { - status = "disabled"; + status = "okay"; ch_id = <2>;//vipp_num codec_type = <0>;//0//0:H264; 1:JPG; 2:H265 - res_w = <1920>; - res_h = <1080>; + res_w = <1600>; + res_h = <1200>; fps = <15>; bit_rate = <1536>;//kb gop = <40>; - vbr = <0>;//< operate venc. VBR=1, CBR=0 + vbr = <1>;//< operate venc. VBR=1, CBR=0 init_qp = <35>; i_min_qp = <25>; i_max_qp = <45>; @@ -266,7 +266,9 @@ }; isp02:isp@2 { - status = "disabled"; + rpbuf = <&rpbuf_controller0>; + iommus = <&mmu_aw 4 0>; + delay_init = <1>; }; isp03:isp@3 { @@ -275,6 +277,7 @@ isp10:isp@4 { status = "disabled"; + iommus = <&mmu_aw 4 0>; }; scaler00:scaler@0 { @@ -289,7 +292,8 @@ }; scaler02:scaler@2 { - status = "disabled"; + iommus = <&mmu_aw 1 0>; + delay_init = <1>; }; scaler03:scaler@3 { @@ -308,7 +312,8 @@ }; scaler12:scaler@6 { - status = "disabled"; + iommus = <&mmu_aw 1 0>; + delay_init = <1>; }; scaler13:scaler@7 { @@ -327,7 +332,8 @@ }; scaler22:scaler@10 { - status = "disabled"; + iommus = <&mmu_aw 1 0>; + delay_init = <1>; }; scaler23:scaler@11 { @@ -346,7 +352,8 @@ }; scaler32:scaler@14 { - status = "disabled"; + iommus = <&mmu_aw 1 0>; + delay_init = <1>; }; scaler33:scaler@15 { @@ -372,6 +379,12 @@ flash0_flvdd_vol = <>; status = "disabled"; }; + + sensor_vsync0: sensor_vsync0@0 { + vsync_gpio = <&pio PE 11 1 0 1 0>; + switch_gpio = <&pio PF 3 1 0 1 0>; + }; + /* sensor0:sensor@0 { device_type = "sensor0"; @@ -421,8 +434,6 @@ /* sensor0_dvdd-supply = <®_dldo2>; */ /* sensor0_dvdd_vol = <1200000>; */ /* sensor0_power_en = <>; */ - /* sensor0_power_en = <&pio PF 3 1 0 1 0>; */ - /* sensor0_reset = <&pio PD 20 1 0 1 0>; */ sensor0_pwdn = <&pio PE 8 1 0 1 0>; sensor0_sm_hs = <>; sensor0_sm_vs = <>; @@ -431,12 +442,11 @@ status = "okay"; }; - // right sensor1:sensor@1 { device_type = "sensor1"; - sensor1_mname = "ov02b10_mipi"; + sensor1_mname = "sc2356_mipi"; sensor1_twi_cci_id = <1>; - sensor1_twi_addr = <0x78>; + sensor1_twi_addr = <0x6c>; sensor1_mclk_id = <1>; sensor1_pos = "front"; sensor1_isp_used = <1>; @@ -444,15 +454,15 @@ sensor1_stby_mode = <0>; sensor1_vflip = <0>; sensor1_hflip = <0>; - /* sensor1_iovdd-supply = <®_aldo2>; */ - /* sensor1_iovdd_vol = <1800000>; */ - /* sensor1_avdd-supply = <®_bldo2>; */ - /* sensor1_avdd_vol = <2800000>; */ - /* sensor1_dvdd-supply = <®_dldo2>; */ - /* sensor1_dvdd_vol = <1200000>; */ - sensor1_power_en = <&pio PF 3 1 0 1 0>; + /* sensor0_iovdd-supply = <®_aldo2>; */ + /* sensor0_iovdd_vol = <1800000>; */ + /* sensor0_avdd-supply = <®_bldo2>; */ + /* sensor0_avdd_vol = <2800000>; */ + /* sensor0_dvdd-supply = <®_dldo2>; */ + /* sensor0_dvdd_vol = <1200000>; */ + /* sensor0_power_en = <>; */ sensor1_reset = <&pio PE 6 1 0 1 0>; - sensor1_pwdn = <&pio PE 9 1 0 1 0>; + sensor1_pwdn = <&pio PE 7 1 0 1 0>; sensor1_sm_hs = <>; sensor1_sm_vs = <>; flash_handle = <>; @@ -460,36 +470,6 @@ status = "okay"; }; - // left - // sensor1:sensor@1 { - // device_type = "sensor1"; - // sensor1_mname = "ov02b10_mipi"; - // sensor1_twi_cci_id = <1>; - // sensor1_twi_addr = <0x7A>; - // sensor1_mclk_id = <1>; - // sensor1_pos = "front"; - // sensor1_isp_used = <1>; - // sensor1_fmt = <1>; - // sensor1_stby_mode = <0>; - // sensor1_vflip = <0>; - // sensor1_hflip = <0>; - // /* sensor1_iovdd-supply = <®_aldo2>; */ - // /* sensor1_iovdd_vol = <1800000>; */ - // /* sensor1_avdd-supply = <®_bldo2>; */ - // /* sensor1_avdd_vol = <2800000>; */ - // /* sensor1_dvdd-supply = <®_dldo2>; */ - // /* sensor1_dvdd_vol = <1200000>; */ - // /* sensor1_power_en = <>; */ - // sensor1_power_en = <&pio PF 3 1 0 1 0>; - // sensor1_reset = <&pio PE 7 1 0 1 0>; - // sensor1_pwdn = <&pio PE 10 1 0 1 0>; - // sensor1_sm_hs = <>; - // sensor1_sm_vs = <>; - // flash_handle = <>; - // act_handle = <>; - // status = "okay"; - // }; - vinc00:vinc@0 { vinc0_csi_sel = <0>; vinc0_mipi_sel = <0>; @@ -508,6 +488,7 @@ vinc01:vinc@1 { vinc1_csi_sel = <1>; vinc1_mipi_sel = <1>; + vinc1_csi_ch = <0x10>; vinc1_isp_sel = <1>; vinc1_isp_tx_ch = <0>; vinc1_tdm_rx_sel = <1>; @@ -520,15 +501,18 @@ }; vinc02:vinc@2 { - vinc2_csi_sel = <2>; - vinc2_mipi_sel = <0xff>; + vinc2_csi_sel = <1>; + vinc2_mipi_sel = <1>; + vinc2_csi_ch = <0x11>; vinc2_isp_sel = <2>; - vinc2_isp_tx_ch = <2>; + vinc2_isp_tx_ch = <0>; vinc2_tdm_rx_sel = <2>; - vinc2_rear_sensor_sel = <0>; - vinc2_front_sensor_sel = <0>; + vinc2_rear_sensor_sel = <1>; + vinc2_front_sensor_sel = <1>; vinc2_sensor_list = <0>; - status = "disabled"; + iommus = <&mmu_aw 1 0>; + delay_init = <1>; + status = "okay"; }; vinc03:vinc@3 { @@ -561,6 +545,7 @@ vinc11:vinc@5 { vinc5_csi_sel = <1>; vinc5_mipi_sel = <1>; + vinc5_csi_ch = <0x10>; vinc5_isp_sel = <1>; vinc5_isp_tx_ch = <0>; vinc5_tdm_rx_sel = <1>; @@ -573,15 +558,18 @@ }; vinc12:vinc@6 { - vinc6_csi_sel = <2>; - vinc6_mipi_sel = <0xff>; - vinc6_isp_sel = <0>; + vinc6_csi_sel = <1>; + vinc6_mipi_sel = <1>; + vinc6_csi_ch = <0x11>; + vinc6_isp_sel = <2>; vinc6_isp_tx_ch = <0>; - vinc6_tdm_rx_sel = <0>; - vinc6_rear_sensor_sel = <0>; - vinc6_front_sensor_sel = <0>; + vinc6_tdm_rx_sel = <2>; + vinc6_rear_sensor_sel = <1>; + vinc6_front_sensor_sel = <1>; vinc6_sensor_list = <0>; - status = "disabled"; + iommus = <&mmu_aw 1 0>; + delay_init = <1>; + status = "okay"; }; vinc13:vinc@7 { @@ -598,7 +586,7 @@ vinc20:vinc@8 { vinc8_csi_sel = <0>; - vinc8_mipi_sel = <0x0>; + vinc8_mipi_sel = <0>; vinc8_isp_sel = <0>; vinc8_isp_tx_ch = <0>; vinc8_tdm_rx_sel = <0>; @@ -614,6 +602,7 @@ vinc21:vinc@9 { vinc9_csi_sel = <1>; vinc9_mipi_sel = <1>; + vinc9_csi_ch = <0x10>; vinc9_isp_sel = <1>; vinc9_isp_tx_ch = <0>; vinc9_tdm_rx_sel = <1>; @@ -626,15 +615,18 @@ }; vinc22:vinc@10 { - vinc10_csi_sel = <2>; - vinc10_mipi_sel = <0xff>; - vinc10_isp_sel = <0>; + vinc10_csi_sel = <1>; + vinc10_mipi_sel = <1>; + vinc10_csi_ch = <0x11>; + vinc10_isp_sel = <2>; vinc10_isp_tx_ch = <0>; - vinc10_tdm_rx_sel = <0>; - vinc10_rear_sensor_sel = <0>; - vinc10_front_sensor_sel = <0>; + vinc10_tdm_rx_sel = <2>; + vinc10_rear_sensor_sel = <1>; + vinc10_front_sensor_sel = <1>; vinc10_sensor_list = <0>; - status = "disabled"; + iommus = <&mmu_aw 1 0>; + delay_init = <1>; + status = "okay"; }; vinc23:vinc@11 { @@ -651,7 +643,7 @@ vinc30:vinc@12 { vinc12_csi_sel = <0>; - vinc12_mipi_sel = <0x0>; + vinc12_mipi_sel = <0>; vinc12_isp_sel = <0>; vinc12_isp_tx_ch = <0>; vinc12_tdm_rx_sel = <0>; @@ -667,6 +659,7 @@ vinc31:vinc@13 { vinc13_csi_sel = <1>; vinc13_mipi_sel = <1>; + vinc13_csi_ch = <0x10>; vinc13_isp_sel = <1>; vinc13_isp_tx_ch = <0>; vinc13_tdm_rx_sel = <1>; @@ -679,15 +672,18 @@ }; vinc32:vinc@14 { - vinc14_csi_sel = <2>; - vinc14_mipi_sel = <0xff>; - vinc14_isp_sel = <0>; + vinc14_csi_sel = <1>; + vinc14_mipi_sel = <1>; + vinc14_csi_ch = <0x11>; + vinc14_isp_sel = <2>; vinc14_isp_tx_ch = <0>; - vinc14_tdm_rx_sel = <0>; - vinc14_rear_sensor_sel = <0>; - vinc14_front_sensor_sel = <0>; + vinc14_tdm_rx_sel = <2>; + vinc14_rear_sensor_sel = <1>; + vinc14_front_sensor_sel = <1>; vinc14_sensor_list = <0>; - status = "disabled"; + iommus = <&mmu_aw 1 0>; + delay_init = <1>; + status = "okay"; }; vinc33:vinc@15 { @@ -939,8 +935,8 @@ }; mipib_pins_a: mipib@0 { - allwinner,pins = "PA8", "PA9", "PA10", "PA11"; - allwinner,pname = "mipib_d1n", "mipib_d1p", "mipib_ck0n", "mipib_ck0p"; + allwinner,pins = "PA10", "PA11"; + allwinner,pname = "mipib_ck0n", "mipib_ck0p"; allwinner,function = "mipib_rx"; allwinner,muxsel = <2>; allwinner,drive = <1>; @@ -948,14 +944,14 @@ }; mipib_pins_b: mipib@1 { - allwinner,pins = "PA8", "PA9", "PA10", "PA11"; + allwinner,pins = "PA10", "PA11"; allwinner,pname = "mipib_d1n", "mipib_d1p", "mipib_ck0n", "mipib_ck0p"; allwinner,function = "io_disabled"; allwinner,muxsel = <0xf>; allwinner,drive = <1>; allwinner,pull = <0>; }; - +/* mipib_4lane_pins_a: mipib_4lane@0 { allwinner,pins = "PA8", "PA9"; allwinner,pname = "mipib_d1n", "mipib_d1p"; @@ -973,13 +969,13 @@ allwinner,drive = <1>; allwinner,pull = <0>; }; - +*/ twi0_pins_a: twi0@0 { allwinner,pins = "PE4", "PE5"; allwinner,pname = "twi0_scl", "twi0_sda"; allwinner,function = "twi0"; allwinner,muxsel = <8>; - allwinner,drive = <1>; + allwinner,drive = <0>; allwinner,pull = <1>; }; @@ -987,7 +983,7 @@ allwinner,pins = "PE4", "PE5"; allwinner,function = "io_disabled"; allwinner,muxsel = <0xf>; - allwinner,drive = <1>; + allwinner,drive = <0>; allwinner,pull = <0>; }; @@ -996,7 +992,7 @@ allwinner,pname = "twi1_scl", "twi1_sda"; allwinner,function = "twi1"; allwinner,muxsel = <8>; - allwinner,drive = <1>; + allwinner,drive = <0>; allwinner,pull = <1>; }; @@ -1004,7 +1000,7 @@ allwinner,pins = "PE2", "PE3"; allwinner,function = "io_disabled"; allwinner,muxsel = <0xf>; - allwinner,drive = <1>; + allwinner,drive = <0>; allwinner,pull = <0>; }; @@ -1936,7 +1932,7 @@ memory-mappings = /* DA len PA */ /* DDR for e907 */ - < 0x43c00000 0x00400000 0x43c00000 >; + < 0x45010000 0x00530000 0x45010000 >; // iommus = <&mmu_aw 5 1>; fw-region = <&e907_fw>; diff --git a/device/config/chips/v851s3/configs/fastboot_sl100_front/linux/config-4.9 b/device/config/chips/v851s3/configs/fastboot_sl100_front/linux/config-4.9 index f9d50aa9b..ef02299cd 100755 --- a/device/config/chips/v851s3/configs/fastboot_sl100_front/linux/config-4.9 +++ b/device/config/chips/v851s3/configs/fastboot_sl100_front/linux/config-4.9 @@ -1737,7 +1737,7 @@ CONFIG_VIDEO_V4L2=y CONFIG_VIDEOBUF2_CORE=y CONFIG_VIDEOBUF2_MEMOPS=y CONFIG_VIDEOBUF2_DMA_CONTIG=y -CONFIG_VIDEOBUF2_VMALLOC=m +CONFIG_VIDEOBUF2_VMALLOC=y # CONFIG_TTPCI_EEPROM is not set # @@ -1759,11 +1759,11 @@ CONFIG_ENABLE_SENSOR_FLIP_OPTION=y # CONFIG_PIPELINE_RESET is not set # CONFIG_MULTI_FRAME is not set CONFIG_SUPPORT_ISP_TDM=y -CONFIG_TDM_LBC_EN=y +# CONFIG_TDM_LBC_EN is not set # CONFIG_TDM_ONE_BUFFER is not set # CONFIG_TDM_OFFLINE_HANDLE_RAW is not set -# CONFIG_MIPI_VC is not set -# CONFIG_AVG_TDM_FIFO is not set +CONFIG_MIPI_VC=y +CONFIG_AVG_TDM_FIFO=y # CONFIG_DISPPLAY_SYNC is not set CONFIG_VIN_IOMMU=y CONFIG_D3D=y @@ -1773,7 +1773,7 @@ CONFIG_D3D_COMPRESS_EN=y CONFIG_FRAMEDONE_TWO_BUFFER=y CONFIG_ISP_SERVER_MELIS=y CONFIG_VIN_INIT_MELIS=y -# CONFIG_SUPPORT_THREE_CAMERA_MELIS is not set +CONFIG_SUPPORT_THREE_CAMERA_MELIS=y CONFIG_VIDEO_SUNXI_VIN_SPECIAL=y # @@ -1788,7 +1788,7 @@ CONFIG_VIDEO_SUNXI_VIN_SPECIAL=y # CONFIG_SENSOR_OV7251_MIPI is not set # CONFIG_SENSOR_OV2735_MIPI is not set # CONFIG_SENSOR_OV7750_MIPI is not set -CONFIG_SENSOR_OV02B10_MIPI=y +# CONFIG_SENSOR_OV02B10_MIPI is not set # CONFIG_SENSOR_OV5648 is not set # CONFIG_SENSOR_OS02G10 is not set # CONFIG_SENSOR_GC2145 is not set @@ -1812,6 +1812,7 @@ CONFIG_SENSOR_GC2083_MIPI=y # CONFIG_SENSOR_SC2336_MIPI is not set # CONFIG_SENSOR_SC5336_MIPI is not set # CONFIG_SENSOR_SC2355_MIPI is not set +CONFIG_SENSOR_SC2356_MIPI=y # CONFIG_SENSOR_SC031GS_MIPI is not set # CONFIG_SENSOR_SC500AI_MIPI is not set # CONFIG_SENSOR_SC530AI_MIPI is not set @@ -2024,8 +2025,8 @@ CONFIG_VIDEO_KERNEL_ENC_SUNXI=y # CONFIG_VIDEO_GOOGLE_VP9_DECODER_SUNXI is not set CONFIG_VIDEO_RT_MEDIA=y # CONFIG_RT_MEDIA_SINGEL_SENSOR is not set -CONFIG_RT_MEDIA_DUAL_SENSOR=y -# CONFIG_RT_MEDIA_THREE_SENSOR is not set +# CONFIG_RT_MEDIA_DUAL_SENSOR is not set +CONFIG_RT_MEDIA_THREE_SENSOR=y CONFIG_RT_MEDIA_CDC_LOG_LEVEL=3 # CONFIG_RT_MEDIA_SETUP_RECORDER_IN_KERNEL is not set # CONFIG_AW_TSC is not set diff --git a/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libisp/isp.c b/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libisp/isp.c index a8581a823..d452a098d 100755 --- a/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libisp/isp.c +++ b/external/eyesee-mpp/middleware/sun8iw21/media/LIBRARY/libisp/isp.c @@ -600,12 +600,12 @@ static void __isp_stats_process(struct hw_isp_device *isp, const void *buffer) exp_gain.b_gain |= (isp->id << 16); #if (HW_ISP_DEVICE_NUM > 1) /*isp0 and isp1 are opened and have same head sensor, so we only use isp0 control ae*/ - if (isp->id == 1 && media_params.isp_dev[0] != NULL && media_params.isp_dev[1] != NULL && - !strcmp(media_params.isp_dev[0]->sensor.info.name, media_params.isp_dev[1]->sensor.info.name)) { - ISP_DEV_LOG(ISP_LOG_ISP, "isp0 and isp1 are opened and have same head, so we only use isp0 to do ae!\n"); - } else { + // if (isp->id == 1 && media_params.isp_dev[0] != NULL && media_params.isp_dev[1] != NULL && + // !strcmp(media_params.isp_dev[0]->sensor.info.name, media_params.isp_dev[1]->sensor.info.name)) { + // ISP_DEV_LOG(ISP_LOG_ISP, "isp0 and isp1 are opened and have same head, so we only use isp0 to do ae!\n"); + // } else { isp_sensor_set_exp_gain(isp, &exp_gain); - } + // } #else isp_sensor_set_exp_gain(isp, &exp_gain); #endif diff --git a/lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi b/lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi index 7afbd4223..fe3bfeb47 100755 --- a/lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi +++ b/lichee/linux-4.9/arch/arm/boot/dts/sun8iw21p1.dtsi @@ -1021,6 +1021,7 @@ sunxi-dly-208M = <1 1 0 0 0 0>; /*sunxi-dly-104M-ddr = <1 0 0 0>;*/ /*sunxi-dly-208M-ddr = <1 0 0 0>;*/ + status = "disabled"; }; sdc1: sdmmc@04021000 { diff --git a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/Kconfig b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/Kconfig index 2e6906fd0..8afbbf429 100644 --- a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/Kconfig +++ b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/Kconfig @@ -140,6 +140,10 @@ config SENSOR_SC2355_MIPI tristate "use sc2355_mipi driver" default n +config SENSOR_SC2356_MIPI + tristate "use sc2356_mipi driver" + default n + config SENSOR_SC031GS_MIPI tristate "use sc031gs_mipi driver" default n diff --git a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/Makefile b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/Makefile index 9656593b8..2ea9be6cc 100644 --- a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/Makefile +++ b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/Makefile @@ -28,6 +28,7 @@ obj-$(CONFIG_SENSOR_GC5603_MIPI) += gc5603_mipi.o obj-$(CONFIG_SENSOR_GC02M1_MIPI) += gc02m1_mipi.o obj-$(CONFIG_SENSOR_SC2336_MIPI) += sc1346_mipi.o obj-$(CONFIG_SENSOR_SC2336_MIPI) += sc2336_mipi.o +obj-$(CONFIG_SENSOR_SC2356_MIPI) += sc2356_mipi.o obj-$(CONFIG_SENSOR_SC2232_MIPI) += sc2232_mipi.o obj-$(CONFIG_SENSOR_SC5336_MIPI) += sc5336_mipi.o obj-$(CONFIG_SENSOR_SC2355_MIPI) += sc2355_mipi.o diff --git a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/camera.h b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/camera.h index 8b73a30ff..05a0bd1bb 100644 --- a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/camera.h +++ b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/camera.h @@ -143,6 +143,7 @@ struct sensor_info { unsigned int act_fps; void (*sensor_fps_chenge_callback)(int act_fps); struct sensor_vysnc_config sensor_vysnc_cfg; + unsigned int isp_id[2]; }; #endif /*__CAMERA__H__*/ diff --git a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/camera_cfg.h b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/camera_cfg.h index 7909fce02..17767b29e 100644 --- a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/camera_cfg.h +++ b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/camera_cfg.h @@ -43,6 +43,8 @@ typedef enum tag_CAMERA_IO_CMD { GET_SENSOR_OUTPUT_BIT_WIDTH, SET_SENSOR_OUTPUT_BIT_WIDTH, SET_SWITCH_CHANGE, + SET_HFLIP, + SET_VFLIP, } __camera_cmd_t; struct sensor_exif_attribute { diff --git a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/sc2356_mipi.c b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/sc2356_mipi.c new file mode 100755 index 000000000..66515791e --- /dev/null +++ b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/sc2356_mipi.c @@ -0,0 +1,1630 @@ +/* + * A V4L2 driver for Raw cameras. + * + * Copyright (c) 2017 by Allwinnertech Co., Ltd. http://www.allwinnertech.com + * + * Authors: Zhao Wei + * Liang WeiJie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "camera.h" +#include "sensor_helper.h" + +MODULE_AUTHOR("kajon"); +MODULE_DESCRIPTION("A low-level driver for SC2356 sensors"); +MODULE_LICENSE("GPL"); + +#define MCLK (24*1000*1000) +#define V4L2_IDENT_SENSOR 0x2355 +#define MIPI_SWITCH_EN 1 + +//define the registers +#define EXP_HIGH 0x3e00 +#define EXP_MID 0x3e01 +#define EXP_LOW 0x3e02 +#define DIG_GAIN 0x3e06 +#define DIG_FINE_GAIN 0x3e07 +#define ANA_GAIN 0x3e09 +#define GAIN_STEP_BASE 128 //mean gain min step is 1/128gain + +#define ID_REG_HIGH 0x3e07 +#define ID_REG_LOW 0x3e08 +#define ID_VAL_HIGH 0x80 +#define ID_VAL_LOW 0x0 +#define SENSOR_FRAME_RATE 30 + +#define I2C_ADDR 0x60 +//#define I2C_ADDR_2 0x32 + +#define SENSOR_NUM 0x2 +#define SENSOR_NAME "sc2356_mipi" +#define SENSOR_NAME_2 "sc2356_mipi_2" + +#define YMT_I2C_ADDR + +#ifdef YMT_I2C_ADDR + #define I2C_ADDR_IR 0x20 + #define I2C_ADDR_RGB 0x6c + extern int ymt_pe7_data; +#endif +#define SC2356_1600X1200_30FPS +//#define SC2356_800X600_30FPS + +#define SHARE_RESET_PWDN +static struct mutex light_lock; + +#define A_I2C_ADDR 0x6c +#define B_I2C_ADDR 0x20 +#define GPIO_SWITCH_SENSOR_A_STATUS CSI_GPIO_HIGH +#define GPIO_SWITCH_SENSOR_B_STATUS CSI_GPIO_LOW +static DEFINE_MUTEX(device_mutex); + +struct sensor_switch_cfg_t { + bool sensor_is_detected; + bool sensor_with_switch_en; + unsigned int sensor_num; + unsigned int switch_status; + unsigned int i2c_addr_container[2]; + unsigned int frame_length_save[2]; + unsigned int exp_val_save[2]; + unsigned int gain_val_save[2]; + bool set_expgain_flags[2]; + bool sensor_detect_flag[2]; + int sensor_hflip_status[2]; + int sensor_vflip_status[2]; + unsigned int vsync_cnt; +}; + +typedef enum _sensor_switch_choice_type { + SWITCH_SENSOR_A = 0, + SWITCH_SENSOR_B = 1, + SWITCH_SENSOR_MAX, +} sensor_switch_choice_type; + +static struct sensor_switch_cfg_t sensor_switch_cfg[2] = { + [0] = { + .i2c_addr_container = {A_I2C_ADDR, B_I2C_ADDR}, + .switch_status = 0, + }, +}; + +/* + * The default register settings + */ +static struct regval_list sensor_default_regs[] = { + +}; + +#ifdef SC2356_800X600_30FPS +static struct regval_list sensor_800x600_30_regs[] = { + {0x0103, 0x01}, + {0x0100, 0x00}, + {0x36e9, 0x80}, + {0x36ea, 0x0f}, + {0x36eb, 0x24}, + {0x36ed, 0x14}, + {0x36e9, 0x01}, + {0x301f, 0x0c}, + {0x303f, 0x82}, + {0x3208, 0x03}, + {0x3209, 0x20}, + {0x320a, 0x02}, + {0x320b, 0x58}, + {0x320c, 0x07},//hts=1920 + {0x320d, 0x80}, + {0x320e, 0x04},//vts=1250 1920*1250*30=72 + {0x320f, 0xe2}, + {0x3211, 0x02}, + {0x3213, 0x02}, + {0x3215, 0x31}, + {0x3220, 0x01}, + {0x3221,0x60}, + {0x3248, 0x02}, + {0x3253, 0x0a}, + {0x3301, 0xff}, + {0x3302, 0xff}, + {0x3303, 0x10}, + {0x3306, 0x28}, + {0x3307, 0x02}, + {0x330a, 0x00}, + {0x330b, 0xb0}, + {0x3318, 0x02}, + {0x3320, 0x06}, + {0x3321, 0x02}, + {0x3326, 0x12}, + {0x3327, 0x0e}, + {0x3328, 0x03}, + {0x3329, 0x0f}, + {0x3364, 0x4f}, + {0x33b3, 0x40}, + {0x33f9, 0x2c}, + {0x33fb, 0x38}, + {0x33fc, 0x0f}, + {0x33fd, 0x1f}, + {0x349f, 0x03}, + {0x34a6, 0x01}, + {0x34a7, 0x1f}, + {0x34a8, 0x40}, + {0x34a9, 0x30}, + {0x34ab, 0xa6}, + {0x34ad, 0xa6}, + {0x3622, 0x60}, + {0x3623, 0x40}, + {0x3624, 0x61}, + {0x3625, 0x08}, + {0x3626, 0x03}, + {0x3630, 0xa8}, + {0x3631, 0x84}, + {0x3632, 0x90}, + {0x3633, 0x43}, + {0x3634, 0x09}, + {0x3635, 0x82}, + {0x3636, 0x48}, + {0x3637, 0xe4}, + {0x3641, 0x22}, + {0x3670, 0x0f}, + {0x3674, 0xc0}, + {0x3675, 0xc0}, + {0x3676, 0xc0}, + {0x3677, 0x86}, + {0x3678, 0x88}, + {0x3679, 0x8c}, + {0x367c, 0x01}, + {0x367d, 0x0f}, + {0x367e, 0x01}, + {0x367f, 0x0f}, + {0x3690, 0x63}, + {0x3691, 0x63}, + {0x3692, 0x73}, + {0x369c, 0x01}, + {0x369d, 0x1f}, + {0x369e, 0x8a}, + {0x369f, 0x9e}, + {0x36a0, 0xda}, + {0x36a1, 0x01}, + {0x36a2, 0x03}, + {0x3900, 0x0d}, + {0x3904, 0x04}, + {0x3905, 0x98}, + {0x391b, 0x81}, + {0x391c, 0x10}, + {0x391d, 0x19}, + {0x3933, 0x01}, + {0x3934, 0x82}, + {0x3940, 0x5d}, + {0x3942, 0x01}, + {0x3943, 0x82}, + {0x3949, 0xc8}, + {0x394b, 0x64}, + {0x3952, 0x02}, + {0x3e00, 0x00}, + {0x3e01, 0x03}, + {0x3e02, 0xe0}, + {0x4502, 0x34}, + {0x4509, 0x30}, + {0x450a, 0x71}, + {0x4819, 0x09}, + {0x481b, 0x05}, + {0x481d, 0x13}, + {0x481f, 0x04}, + {0x4821, 0x0a}, + {0x4823, 0x05}, + {0x4825, 0x04}, + {0x4827, 0x05}, + {0x4829, 0x08}, + {0x5000, 0x46}, + {0x5900, 0x01}, + {0x5901, 0x04}, + {0x0100, 0x01}, +}; +#endif + +#ifdef SC2356_1600X1200_30FPS +static struct regval_list sensor_1600x1200_30_regs[] = { + {0x0103,0x01}, + {0x0100,0x00}, + {0x3221,0x06},//hflip:0x06 vflip:0x60 + {0x36e9,0x80}, + {0x36e9,0x24}, + {0x301f,0x01}, + {0x3301,0xff}, + {0x3304,0x68}, + {0x3306,0x40}, + {0x3308,0x08}, + {0x3309,0xa8}, + {0x330b,0xb0}, + {0x330c,0x18}, + {0x330d,0xff}, + {0x330e,0x20}, + {0x331e,0x59}, + {0x331f,0x99}, + {0x3333,0x10}, + {0x335e,0x06}, + {0x335f,0x08}, + {0x3364,0x1f}, + {0x337c,0x02}, + {0x337d,0x0a}, + {0x338f,0xa0}, + {0x3390,0x01}, + {0x3391,0x03}, + {0x3392,0x1f}, + {0x3393,0xff}, + {0x3394,0xff}, + {0x3395,0xff}, + {0x33a2,0x04}, + {0x33ad,0x0c}, + {0x33b1,0x20}, + {0x33b3,0x38}, + {0x33f9,0x40}, + {0x33fb,0x48}, + {0x33fc,0x0f}, + {0x33fd,0x1f}, + {0x349f,0x03}, + {0x34a6,0x03}, + {0x34a7,0x1f}, + {0x34a8,0x38}, + {0x34a9,0x30}, + {0x34ab,0xb0}, + {0x34ad,0xb0}, + {0x34f8,0x1f}, + {0x34f9,0x20}, + {0x3630,0xa0}, + {0x3631,0x92}, + {0x3632,0x64}, + {0x3633,0x43}, + {0x3637,0x49}, + {0x363a,0x85}, + {0x363c,0x0f}, + {0x3650,0x31}, + {0x3670,0x0d}, + {0x3674,0xc0}, + {0x3675,0xa0}, + {0x3676,0xa0}, + {0x3677,0x92}, + {0x3678,0x96}, + {0x3679,0x9a}, + {0x367c,0x03}, + {0x367d,0x0f}, + {0x367e,0x01}, + {0x367f,0x0f}, + {0x3698,0x83}, + {0x3699,0x86}, + {0x369a,0x8c}, + {0x369b,0x94}, + {0x36a2,0x01}, + {0x36a3,0x03}, + {0x36a4,0x07}, + {0x36ae,0x0f}, + {0x36af,0x1f}, + {0x36bd,0x22}, + {0x36be,0x22}, + {0x36bf,0x22}, + {0x36d0,0x01}, + {0x370f,0x02}, + {0x3721,0x6c}, + {0x3722,0x8d}, + {0x3725,0xc5}, + {0x3727,0x14}, + {0x3728,0x04}, + {0x37b7,0x04}, + {0x37b8,0x04}, + {0x37b9,0x06}, + {0x37bd,0x07}, + {0x37be,0x0f}, + {0x3901,0x02}, + {0x3903,0x40}, + {0x3905,0x8d}, + {0x3907,0x00}, + {0x3908,0x41}, + {0x391f,0x41}, + {0x3933,0x80}, + {0x3934,0x02}, + {0x3937,0x6f}, + {0x393a,0x01}, + {0x393d,0x01}, + {0x393e,0xc0}, + {0x39dd,0x41}, + {0x3e00,0x00}, + {0x3e01,0x4d}, + {0x3e02,0xc0}, + {0x3e09,0x00}, + {0x4509,0x28}, + {0x450d,0x61}, + + // {0x4816,0x61},//{0x4816,0x65}, //vc ch1 + // {0x3222,0x00}, + // {0x3224,0x92}, + // {0x300a,0x40}, + // {0x0100,0x01}, +}; +#endif +static struct regval_list sensor_master_regs[] = { + + {0x4816,0x61},//vc ch0 + + {0x300a,0x40},//bit[6]:fsync output + {0x3032,0xa0},//bit[7]:output fsync + + {0x0100,0x01}, + +}; + +static struct regval_list sensor_slave_regs[] = { + + {0x4816,0x65},//vc ch1 + + {0x3222,0x02},//slave (0x00 :master) + {0x3224,0x83}, + + {0x0100,0x01}, + +}; + +#if MIPI_SWITCH_EN + +static struct sensor_switch_cfg_t* sensor_mipi_switch_get_cfg(struct v4l2_subdev *sd) +{ + if (!sd) { + sensor_err("sd is NULL!\n"); + return NULL; + } + + if (strncmp(SENSOR_NAME, sd->name, strlen(SENSOR_NAME)) == 0) { + return (&sensor_switch_cfg[0]); + } else { + sensor_err("It is no vaild sensor_switch_cfg_t\n"); + return NULL; + } +} + +static void sensor_i2c_switch_lock_init(void) +{ + mutex_init(&device_mutex); +} + +static void sensor_i2c_switch_lock_lock(void) +{ + mutex_lock(&device_mutex); +} + +static void sensor_i2c_switch_lock_unlock(void) +{ + mutex_unlock(&device_mutex); +} + +#define GPIO_SWITCH_NUM 163 //PF3 +// 初始化GPIO +static int init_gpio(void) { + int ret; + + // 请求GPIO引脚 + ret = gpio_request(GPIO_SWITCH_NUM, "mipi_switch"); + if (ret) { + printk(KERN_ERR "Failed to request GPIO pin\n"); + return ret; + }else{ + sensor_print("=============ywj_debug request switch gpio success!\n"); + } + + // 设置GPIO引脚为输出模式 + ret = gpio_direction_output(GPIO_SWITCH_NUM, 0); + if (ret) { + printk(KERN_ERR "Failed to set GPIO direction\n"); + gpio_free(GPIO_SWITCH_NUM); + return ret; + } + + return 0; +} + + +// 控制GPIO输出状态 +static void control_gpio(int value) { + unsigned int read_data; + unsigned int write_data; + int bit_data; + + // 设置GPIO引脚输出状态 + gpio_set_value(GPIO_SWITCH_NUM, value); +} + +// 清理GPIO资源 +static void cleanup_gpio(void) { + gpio_free(GPIO_SWITCH_NUM); +} + +#endif + +#ifdef YMT_I2C_ADDR +static int sensor_i2c_addr_get(struct v4l2_subdev *sd, unsigned int *iic_addr) +{ + struct i2c_client *client = v4l2_get_subdevdata(sd); + + if (client == NULL) { + sensor_err("client is NULL!!!\n"); + return -1; + } + /* i2c addr useful for 7bit */ + *iic_addr = client->addr << 1; + + return 0; +} + +static int sensor_i2c_addr_set(struct v4l2_subdev *sd, unsigned int iic_addr) +{ + struct i2c_client *client = v4l2_get_subdevdata(sd); + //printk("<<addr = iic_addr >> 1; + + return 0; +} +#endif +/* + * Here we'll try to encapsulate the changes for just the output + * video format. + * + */ + +static struct regval_list sensor_fmt_raw[] = { + +}; + +static int sensor_g_exp(struct v4l2_subdev *sd, __s32 *value) +{ + struct sensor_info *info = to_state(sd); + *value = info->exp; + + //data_type exp_high, exp_mid, exp_low; + //sensor_read(sd, EXP_HIGH, &exp_high); + //sensor_read(sd, EXP_MID, &exp_mid); + //sensor_read(sd, EXP_LOW, &exp_low); + //sensor_print("sensor_g_exp: %d", (exp_high & 0x0f << 12) + (exp_mid & 0xff << 4) + (exp_low & 0xf0 >> 4)); + //sensor_print("sensor get_exposure = %d\n", info->exp); + return 0; +} + +static int sensor_s_exp(struct v4l2_subdev *sd, unsigned int exp_val) +{ + struct sensor_info *info = to_state(sd); + unsigned int tmp_exp_val = exp_val; + data_type exp_high, exp_mid, exp_low; + int high_exp, mid_exp, low_exp; + data_type vts_val_high, vts_val_low; + + high_exp = (tmp_exp_val >> 12) & 0x0f; + mid_exp = (tmp_exp_val >> 4) & 0xff; + low_exp = (tmp_exp_val << 4) & 0xf0; + + //sensor_print("in-exp_val: 0x%x, high_exp: 0x%x, mid_exp: 0x%x, low_wxp: 0x%x\n", exp_val, high_exp, mid_exp, low_exp); + + sensor_write(sd, EXP_HIGH, (tmp_exp_val >> 12) & 0x0f); + sensor_write(sd, EXP_MID, (tmp_exp_val >> 4) & 0xFF); + sensor_write(sd, EXP_LOW, (tmp_exp_val << 4) & 0xf0); + +// high_exp = (tmp_exp_val >> 16) & 0x0f; +// mid_exp = (tmp_exp_val >> 8) & 0xff; +// low_exp = (tmp_exp_val << 0) & 0xf0; +// sensor_print("in-exp_val: 0x%x, high_exp: 0x%x, mid_exp: 0x%x, low_wxp: 0x%x\n", exp_val, high_exp, mid_exp, low_exp); +// sensor_write(sd, EXP_HIGH, (tmp_exp_val >> 16) & 0x0f); +// sensor_write(sd, EXP_MID, (tmp_exp_val >> 8) & 0xFF); +// sensor_write(sd, EXP_LOW, (tmp_exp_val << 0) & 0xf0); + + sensor_read(sd, 0x320e, &vts_val_high); + sensor_read(sd, 0x320f, &vts_val_low); + //sensor_print("0x320e: 0x%x, 0x320f: 0x%x\n", vts_val_high, vts_val_low); + + sensor_read(sd, EXP_HIGH, &exp_high); + sensor_read(sd, EXP_MID, &exp_mid); + sensor_read(sd, EXP_LOW, &exp_low); + //sensor_print("out-exp_val: 0x%x, exp_high: 0x%x, exp_mid: 0x%x, exp_low: 0x%x\n", exp_val, exp_high, exp_mid, exp_low); + info->exp = exp_val; + + return 0; +} + +static int sensor_g_gain(struct v4l2_subdev *sd, __s32 *value) +{ + struct sensor_info *info = to_state(sd); + data_type ana_gain, dig_gain, fine_gain; + + *value = info->gain; + + sensor_read(sd, ANA_GAIN, &ana_gain); + sensor_read(sd, DIG_GAIN, &dig_gain); + sensor_read(sd, DIG_FINE_GAIN, &fine_gain); + //sensor_print("sensor_g_gain ana_gain:%d, dig_gain:%d, fine_fain:%d", ana_gain, dig_gain, fine_gain); + return 0; +} + +static unsigned char analog_Gain_Reg[] = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f}; + +static int setSensorGain(struct v4l2_subdev *sd, int gain) +{ + int ana_gain = gain / GAIN_STEP_BASE; + int dig_Gain; + int gain_flag = 1; + + if (ana_gain >= 32 * 2) { + gain_flag = 5; + } else if (ana_gain >= 32) { + gain_flag = 5; + } else if (ana_gain >= 16) { + gain_flag = 4; + } else if (ana_gain >= 8) { + gain_flag = 3; + } else if (ana_gain >= 4) { + gain_flag = 2; + } else if (ana_gain >= 2) { + gain_flag = 1; + } else { + gain_flag = 0; + } + + sensor_write(sd, ANA_GAIN, analog_Gain_Reg[gain_flag]); + dig_Gain = gain >> gain_flag; //dig_Gain min mean 1/128gain + if (dig_Gain < 2 * GAIN_STEP_BASE) { + //step1/128 + sensor_write(sd, DIG_GAIN, 0x00); + sensor_write(sd, DIG_FINE_GAIN, dig_Gain - 128 + 0x80); + //sensor_print("sensor set analog_gain:0x%02x, dig_gain:0x%02x, dig_fine_gain:0x%02x", analog_Gain_Reg[gain_flag], 0x00, dig_Gain - 128 + 0x80); + } else if (dig_Gain < 4 * GAIN_STEP_BASE) { + //step1/64 + sensor_write(sd, DIG_GAIN, 0x01); + sensor_write(sd, DIG_FINE_GAIN, (dig_Gain - 128 * 2) / 2 + 0x80); + //sensor_print("sensor set analog_gain:0x%02x, dig_gain:0x%02x, dig_fine_gain:0x%02x", analog_Gain_Reg[gain_flag], 0x01, (dig_Gain - 128 * 2) / 2 + 0x80); + } else if (dig_Gain < 8 * GAIN_STEP_BASE) { + //step1/32 + sensor_write(sd, DIG_GAIN, 0x03); + sensor_write(sd, DIG_FINE_GAIN, (dig_Gain - 128 * 4) / 4 + 0x80); + //sensor_print("sensor set analog_gain:0x%02x, dig_gain:0x%02x, dig_fine_gain:0x%02x", analog_Gain_Reg[gain_flag], 0x03, (dig_Gain - 128 * 4) / 4 + 0x80); + } else { + sensor_write(sd, DIG_GAIN, 0x03); + sensor_write(sd, DIG_FINE_GAIN, 0xfe); + } + + return 0; +} + +static int sensor_s_gain(struct v4l2_subdev *sd, int gain_val) +{ + struct sensor_info *info = to_state(sd); + + //if (gain_val == info->gain) + // return 0; + + //sensor_print("gain_val:%d\n", gain_val); + setSensorGain(sd, gain_val); + info->gain = gain_val; + + return 0; +} + +static int sc2356_sensor_vts; +static int sensor_s_exp_gain(struct v4l2_subdev *sd, struct sensor_exp_gain *exp_gain) +{ + int exp_val, gain_val; + //int shutter = 0, frame_length = 0; + struct sensor_info *info = to_state(sd); + struct i2c_client *client = v4l2_get_subdevdata(sd); + int isp_id; + struct sensor_switch_cfg_t *sensor_switch_config; +#ifdef YMT_I2C_ADDR + unsigned int iic_addr; + + sensor_i2c_addr_get(sd, &iic_addr); +#endif + info->exp = exp_gain->exp_val; + info->gain = exp_gain->gain_val; + + + + if ((exp_gain->exp_val - exp_gain->exp_val / 16 * 16) > 0) { + exp_val = exp_gain->exp_val / 16 + 1; + } else { + exp_val = exp_gain->exp_val / 16; + } + exp_val = exp_val & 0xffff; + + if (exp_val > 1250){ + exp_val = 1250; + } + + //gain min step is 1/128gain + gain_val = exp_gain->gain_val * GAIN_STEP_BASE; + if ((gain_val - gain_val / 16 * 16) > 0) { + gain_val = gain_val / 16 + 1; + } else { + gain_val = gain_val / 16; + } + +#if MIPI_SWITCH_EN + sensor_switch_config = sensor_mipi_switch_get_cfg(sd); + isp_id = exp_gain->r_gain >> 16; //get isp id + if (isp_id == (SWITCH_SENSOR_A + 1)) { + sensor_switch_config->exp_val_save[SWITCH_SENSOR_A] = exp_val; + sensor_switch_config->gain_val_save[SWITCH_SENSOR_A] = gain_val; + sensor_switch_config->set_expgain_flags[SWITCH_SENSOR_A] = true; + } else if (isp_id == (SWITCH_SENSOR_B + 1)) { + sensor_switch_config->exp_val_save[SWITCH_SENSOR_B] = exp_val; + sensor_switch_config->gain_val_save[SWITCH_SENSOR_B] = gain_val; + sensor_switch_config->set_expgain_flags[SWITCH_SENSOR_B] = true; + } else { + sensor_err("get isp id is %d\n", exp_gain->r_gain >> 16); + return -1; + } +#else + sensor_s_exp(sd, exp_val); + sensor_s_gain(sd, gain_val); +#endif + info->exp = exp_val; + info->gain = gain_val; + return 0; +} + +static int sensor_flip_status; +static int sensor_s_vflip(struct v4l2_subdev *sd, int enable) +{ + data_type get_value; + data_type set_value; + + if (!(enable == 0 || enable == 1)) + return -1; + + sensor_read(sd, 0x3221, &get_value); + sensor_print("ready to vflip, regs_data = 0x%x\n", get_value); + + if (enable) { + set_value = get_value | 0x60; + sensor_flip_status |= 0x60; + } else { + set_value = get_value & 0x9F; + sensor_flip_status &= 0x9F; + } + sensor_write(sd, 0x3221, set_value); + usleep_range(8000, 100000); + sensor_read(sd, 0x3221, &get_value); + sensor_print("after vflip, regs_data = 0x%x, sensor_flip_status = %d\n", get_value, sensor_flip_status); + + return 0; +} + +static int sensor_s_hflip(struct v4l2_subdev *sd, int enable) +{ + data_type get_value; + data_type set_value; + + if (!(enable == 0 || enable == 1)) + return -1; + + sensor_read(sd, 0x3221, &get_value); + sensor_print("ready to hflip, regs_data = 0x%x\n", get_value); + + if (enable) { + set_value = get_value | 0x06; + sensor_flip_status |= 0x06; + } else { + set_value = get_value & 0xF9; + sensor_flip_status &= 0xF9; + } + sensor_write(sd, 0x3221, set_value); + usleep_range(80000, 100000); + sensor_read(sd, 0x3221, &get_value); + sensor_print("after hflip, regs_data = 0x%x, sensor_flip_status = %d\n", get_value, sensor_flip_status); + + return 0; +} + +static int sensor_get_fmt_mbus_core(struct v4l2_subdev *sd, int *code) +{ + *code = MEDIA_BUS_FMT_SBGGR10_1X10; + return 0; +} + +static int sensor_power(struct v4l2_subdev *sd, int on) +{ + switch (on) { + case STBY_ON: + sensor_dbg("STBY_ON!\n"); + cci_lock(sd); + vin_gpio_write(sd, PWDN, CSI_GPIO_LOW); + cci_unlock(sd); + break; + case STBY_OFF: + sensor_dbg("STBY_OFF!\n"); + cci_lock(sd); + vin_set_mclk_freq(sd, MCLK); + vin_set_mclk(sd, ON); + usleep_range(10000, 12000); + vin_gpio_write(sd, PWDN, CSI_GPIO_HIGH); + usleep_range(10000, 12000); + cci_unlock(sd); + usleep_range(10000, 12000); + break; + case PWR_ON: + sensor_print("PWR_ON!\n"); + cci_lock(sd); + vin_set_mclk(sd, ON); + usleep_range(1000, 1200); + vin_set_mclk_freq(sd, MCLK); + usleep_range(1000, 1200); + vin_gpio_set_status(sd, PWDN, 1); + vin_gpio_set_status(sd, RESET, 1); + vin_gpio_set_status(sd, POWER_EN, 1); + //vin_gpio_write(sd, PWDN, CSI_GPIO_LOW); + vin_gpio_write(sd, RESET, CSI_GPIO_LOW); + usleep_range(1000, 1200); + printk("==========================sensor reset =====================================\n"); + vin_set_pmu_channel(sd, IOVDD, ON); + usleep_range(1000, 1200); + vin_set_pmu_channel(sd, DVDD, ON); + usleep_range(1000, 1200); + vin_set_pmu_channel(sd, AVDD, ON); + usleep_range(1000, 1200); + vin_gpio_write(sd, PWDN, CSI_GPIO_HIGH); + usleep_range(10000, 12000); + vin_gpio_write(sd, RESET, CSI_GPIO_HIGH); + usleep_range(10000, 12000); + cci_unlock(sd); + break; + case PWR_OFF: + sensor_print("PWR_OFF!do nothing\n"); + cci_lock(sd); + vin_set_mclk(sd, OFF); + vin_set_pmu_channel(sd, AVDD, OFF); + vin_set_pmu_channel(sd, DVDD, OFF); + vin_set_pmu_channel(sd, IOVDD, OFF); + usleep_range(10000, 12000); + vin_gpio_write(sd, PWDN, CSI_GPIO_LOW); + vin_gpio_write(sd, RESET, CSI_GPIO_LOW); + cci_unlock(sd); + break; + default: + return -EINVAL; + } + + return 0; +} + + +static int sensor_reset(struct v4l2_subdev *sd, u32 val) +{ + switch (val) { + case 0: + printk("==========================sensor_reset high =====================================\n"); + vin_gpio_write(sd, RESET, CSI_GPIO_HIGH); + usleep_range(10000, 12000); + break; + case 1: + +printk("==========================sensor_reset low =====================================\n"); + vin_gpio_write(sd, RESET, CSI_GPIO_LOW); + usleep_range(10000, 12000); + break; + default: + return -EINVAL; + } + + return 0; +} + +static int sensor_detect(struct v4l2_subdev *sd) +{ +#if !defined CONFIG_VIN_INIT_MELIS + data_type rdval; + int eRet; + int times_out = 3; + do { + eRet = sensor_read(sd, ID_REG_HIGH, &rdval); + printk("<<<< 0); + + sensor_read(sd, ID_REG_HIGH, &rdval); + printk("<<<<switch_status) { + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[SWITCH_SENSOR_A]); + // sensor_write(sd, 0x0100, 0x01); //sleep disable + sensor_write(sd, 0x3650, 0x33); //driver max + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[SWITCH_SENSOR_B]); + // sensor_write(sd, 0x0100, 0x00); //sleep enable + sensor_write(sd, 0x3650, 0x31); //driver min + sensor_switch_config->switch_status = GPIO_SWITCH_SENSOR_B_STATUS; + } else if (GPIO_SWITCH_SENSOR_B_STATUS == sensor_switch_config->switch_status) { + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[SWITCH_SENSOR_B]); + // sensor_write(sd, 0x0100, 0x01); //sleep disable + sensor_write(sd, 0x3650, 0x33); //driver max + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[SWITCH_SENSOR_A]); + // sensor_write(sd, 0x0100, 0x00); //sleep enable + sensor_write(sd, 0x3650, 0x31); //driver min + sensor_switch_config->switch_status = GPIO_SWITCH_SENSOR_A_STATUS; + } + + // if (sensor_switch_config->switch_status == GPIO_SWITCH_SENSOR_B_STATUS) { + + if (sensor_switch_config->set_expgain_flags[SWITCH_SENSOR_A]) { + sensor_print("[exp_gain] A = (%d, %d), B = (%d, %d)\n", + sensor_switch_config->exp_val_save[SWITCH_SENSOR_A], sensor_switch_config->gain_val_save[SWITCH_SENSOR_A], + sensor_switch_config->exp_val_save[SWITCH_SENSOR_B], sensor_switch_config->gain_val_save[SWITCH_SENSOR_B]); + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[SWITCH_SENSOR_A]); + sensor_s_exp(sd, sensor_switch_config->exp_val_save[SWITCH_SENSOR_A]); + sensor_s_gain(sd, sensor_switch_config->gain_val_save[SWITCH_SENSOR_A]); + sensor_switch_config->set_expgain_flags[SWITCH_SENSOR_A] = false; + } + if (sensor_switch_config->set_expgain_flags[SWITCH_SENSOR_B]) { + sensor_print("[exp_gain] A = (%d, %d), B = (%d, %d)\n", + sensor_switch_config->exp_val_save[SWITCH_SENSOR_A], sensor_switch_config->gain_val_save[SWITCH_SENSOR_A], + sensor_switch_config->exp_val_save[SWITCH_SENSOR_B], sensor_switch_config->gain_val_save[SWITCH_SENSOR_B]); + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[SWITCH_SENSOR_B]); + sensor_s_exp(sd, sensor_switch_config->exp_val_save[SWITCH_SENSOR_B]); + sensor_s_gain(sd, sensor_switch_config->gain_val_save[SWITCH_SENSOR_B]); + sensor_switch_config->set_expgain_flags[SWITCH_SENSOR_B] = false; + } + // } +} + +static void __s_sensor_switch_change_handle(struct work_struct *work) +{ + struct sensor_vysnc_config *sensor_vysnc_cfg = container_of(work, struct sensor_vysnc_config, s_sensor_switch_change_task); + struct sensor_info *info = container_of(sensor_vysnc_cfg, struct sensor_info, sensor_vysnc_cfg); + struct v4l2_subdev *sd = &info->sd; + + if (!sd || !sd->entity.use_count) + return; + + sensor_switch_change(sd); + +} + +//vsync中断函数,每次中断后切换switch状态 +static irqreturn_t sensor_vsync_irq_func(int irq, void *priv) +{ + struct v4l2_subdev *sd = priv; + struct sensor_info *info = to_state(sd); + struct sensor_vysnc_config *sensor_vysnc_cfg = &info->sensor_vysnc_cfg; + struct sensor_switch_cfg_t *sensor_switch_config; + unsigned long flags; + + sensor_switch_config = sensor_mipi_switch_get_cfg(sd); + spin_lock_irqsave(&info->slock, flags); + if(sensor_switch_config->vsync_cnt % 500 == 0){ + sensor_print("========ywj_dg_add3 do irq func,count[%d]==============",sensor_switch_config->vsync_cnt); + } + sensor_switch_config->vsync_cnt++; + //初始化的前五次中断不做处理 + if (sensor_switch_config->vsync_cnt < 5) { + spin_unlock_irqrestore(&info->slock, flags); + return IRQ_HANDLED; + } + // 通过gpio来控制switch + + if (GPIO_SWITCH_SENSOR_A_STATUS == sensor_switch_config->switch_status) { + // sensor_print("========ywj_dg_add1 do irq func,switch change to A!!!\n"); + control_gpio(GPIO_SWITCH_SENSOR_A_STATUS); + } + else if(GPIO_SWITCH_SENSOR_B_STATUS == sensor_switch_config->switch_status) { + // sensor_print("========ywj_dg_add1 do irq func,switch change to B!!!\n"); + control_gpio(GPIO_SWITCH_SENSOR_B_STATUS); + } + + //切换完以后开始执行工作队列 + schedule_work(&sensor_vysnc_cfg->s_sensor_switch_change_task); + spin_unlock_irqrestore(&info->slock, flags); + + return IRQ_HANDLED; +} + + +static int sensor_vysnc_init(struct v4l2_subdev *sd) +{ + int ret; + struct device_node *np = NULL; + enum of_gpio_flags gc; + struct sensor_info *info = to_state(sd); + struct sensor_vysnc_config *sensor_vysnc_cfg = &info->sensor_vysnc_cfg; + char *node_name0 = "sensor_vsync0"; + char *vsync_gpio_name = "vsync_gpio"; + +//根据sensorname来匹配dts中的vsync节点 + if (!strcmp(sd->name, SENSOR_NAME)) { + np = of_find_node_by_name(NULL, node_name0); + if (np == NULL) { + sensor_err("sc2356_mipi can not find the %s node\n", node_name0); + return -EINVAL; + } else + sensor_print("find the %s node\n", node_name0); + } +//获取vsync的pin脚,对应vts的pe11 + sensor_vysnc_cfg->gpio = of_get_named_gpio_flags(np, vsync_gpio_name, 0, &gc); + sensor_print("get form %s gpio is %d\n", vsync_gpio_name, sensor_vysnc_cfg->gpio); + if (!gpio_is_valid(sensor_vysnc_cfg->gpio)) { + sensor_err("fetch %s from device_tree failed\n", vsync_gpio_name); + return -ENODEV; + } else { + //当dts中有这组配置后,尝试获取这组gpio + ret = gpio_request(sensor_vysnc_cfg->gpio, NULL); + if (ret < 0) { + sensor_err("request %s fail!\n", vsync_gpio_name); + return -1; + } + gpio_direction_input(sensor_vysnc_cfg->gpio); + //将指定的GPIO引脚映射到一个中断请求(IRQ)号 + sensor_vysnc_cfg->gpio_irq = gpio_to_irq(sensor_vysnc_cfg->gpio); + if (sensor_vysnc_cfg->gpio_irq <= 0) { + sensor_err("gpio %d get irq err\n", sensor_vysnc_cfg->gpio); + return -1; + } + //将中断请求号与中断处理函数绑定 + ret = request_irq(sensor_vysnc_cfg->gpio_irq, sensor_vsync_irq_func, + IRQF_TRIGGER_FALLING,//IRQF_TRIGGER_FALLING, //| IRQF_TRIGGER_RISING, + node_name0, sd); + sensor_print("========ywj_dg_add request irq [%d]==============\n",ret); + disable_irq(sensor_vysnc_cfg->gpio_irq); + } + //初始化工作队列函数 + INIT_WORK(&sensor_vysnc_cfg->s_sensor_switch_change_task, __s_sensor_switch_change_handle); + return 0; +} + +static int sensor_init_with_switch(struct v4l2_subdev *sd) +{ + struct sensor_info *info = to_state(sd); + unsigned int switch_choice = 0; + unsigned int sensor_num = 0; + int ret; + struct sensor_switch_cfg_t *sensor_switch_config; + + + + sensor_switch_config = sensor_mipi_switch_get_cfg(sd); + if (!sensor_switch_config) { + sensor_err("sensor_switch_config is NULL\n"); + return -1; + } + + for (switch_choice = SWITCH_SENSOR_A; switch_choice < SWITCH_SENSOR_MAX; switch_choice++) { + sensor_print("sensor_detect 0x%x\n", sensor_switch_config->i2c_addr_container[switch_choice]); + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[switch_choice]); + /*Make sure it is a target sensor */ + ret = sensor_detect(sd); + if (ret) { + sensor_err("chip found is not an target chip, iic_addr = 0x%x\n", + sensor_switch_config->i2c_addr_container[switch_choice]); + sensor_switch_config->sensor_detect_flag[switch_choice] = false; + } else { + sensor_print("[0:A, 1:B] detect sensor%d i2c_addr = 0x%x\n", switch_choice, sensor_switch_config->i2c_addr_container[switch_choice]); + sensor_switch_config->sensor_detect_flag[switch_choice] = true; + sensor_num++; + } + } + sensor_print("detect sensor num : %d\n", sensor_num); + if (sensor_num == 0) { + sensor_switch_config->sensor_is_detected = false; + return -ENODEV; + } else if (sensor_num >= 1 && sensor_switch_config->sensor_detect_flag[SWITCH_SENSOR_A]) { + sensor_switch_config->sensor_with_switch_en = true; + sensor_print("maybe with mipi switch, so sensor_with_switch_en = %d\n", sensor_switch_config->sensor_with_switch_en); + } else { + sensor_switch_config->sensor_with_switch_en = false; + sensor_print("without mipi switch, so sensor_with_switch_en = %d\n", sensor_switch_config->sensor_with_switch_en); + } + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[SWITCH_SENSOR_A]); + sensor_switch_config->sensor_is_detected = true; + if (sensor_num > SWITCH_SENSOR_MAX) { + sensor_switch_config->sensor_num = SWITCH_SENSOR_MAX; + sensor_err("sensor_num is %d, which is greater than SWITCH_SENSOR_MAX, please check the config\n", sensor_num); + } else { + sensor_switch_config->sensor_num = sensor_num; + } + sensor_print("sensor_switch_config->sensor_num333 = %d\n", sensor_switch_config->sensor_num); + // control_gpio(GPIO_SWITCH_SENSOR_A_STATUS); + info->focus_status = 0; + info->low_speed = 0; + info->width = 1600; + info->height = 1200; + info->hflip = 0; + info->vflip = 0; + info->gain = 0; + info->exp = 0; + info->tpf.numerator = 1; + info->tpf.denominator = 30; + + + + return 0; +} +#endif + +static int sensor_init(struct v4l2_subdev *sd, u32 val) +{ + int ret; + struct sensor_info *info = to_state(sd); + printk("<<<<sensor_is_detected) { + ret = sensor_init_with_switch(sd); + if (ret) { + sensor_err("chip found is not an target chip.\n"); + return ret; + } + } else { + sensor_print("sensor is detected and will not detect repeatedly\n"); + } + control_gpio(GPIO_SWITCH_SENSOR_B_STATUS); +#else + ret = sensor_detect(sd); + if (ret) { + printk("<<<<focus_status = 0; + info->low_speed = 0; + info->width = 1600; + info->height = 1200; + info->hflip = 0; + info->vflip = 0; + info->gain = 0; + info->exp = 0; + + info->tpf.numerator = 1; + info->tpf.denominator = 30; +#endif + return 0; +} + +static long sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) +{ + int ret = 0; + struct sensor_info *info = to_state(sd); + + switch (cmd) { + case GET_CURRENT_WIN_CFG: + if (info->current_wins != NULL) { + memcpy(arg, info->current_wins, sizeof(struct sensor_win_size)); + ret = 0; + } else { + sensor_err("empyt wins!\n"); + ret = -1; + } + break; + case SET_FPS: + break; + case VIDIOC_VIN_SENSOR_EXP_GAIN: + sensor_s_exp_gain(sd, (struct sensor_exp_gain *)arg); + break; + case VIDIOC_VIN_SENSOR_CFG_REQ: + sensor_cfg_req(sd, (struct sensor_config *)arg); + break; + case VIDIOC_VIN_GET_SENSOR_CODE: + sensor_get_fmt_mbus_core(sd, (int *)arg); + break; + default: + return -EINVAL; + } + + return ret; +} + +static struct sensor_format_struct sensor_formats[] = { + { + .desc = "Raw RGB Bayer", + .mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, /*.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, */ + .regs = sensor_fmt_raw, + .regs_size = ARRAY_SIZE(sensor_fmt_raw), + .bpp = 1 + }, +}; +#define N_FMTS ARRAY_SIZE(sensor_formats) + +static struct sensor_win_size sensor_win_sizes[] = { +#ifdef SC2356_800X600_30FPS + { + .width = 800, + .height = 600, + .hoffset = 0, + .voffset = 0, + .hts = 1920, + .vts = 1250, + .pclk = 72000000, + .mipi_bps = 297 * 1000 * 1000, + .fps_fixed = 30, + .bin_factor = 1, + .intg_min = 1 << 4, + .intg_max = 1125 << 4, + .gain_min = 1 << 4, + .gain_max = 1370, + .regs = sensor_800x600_30_regs, + .regs_size = ARRAY_SIZE(sensor_800x600_30_regs), + .set_size = NULL, + }, +#endif + +#ifdef SC2356_1600X1200_30FPS + { + .width = 1600, + .height = 1200, + .hoffset = 0, + .voffset = 0, + .hts = 1900, + .vts = 1250, + .pclk = 71250000, + .mipi_bps = 297 * 1000 * 1000, + .fps_fixed = 15, + .bin_factor = 1, + .intg_min = 1 << 4, + .intg_max = 1250 << 4, + .gain_min = 1 << 4, + .gain_max = 16 << 4, + .regs = sensor_1600x1200_30_regs, + .regs_size = ARRAY_SIZE(sensor_1600x1200_30_regs), + .set_size = NULL, + }, +#endif +}; + +#define N_WIN_SIZES ARRAY_SIZE(sensor_win_sizes) + +static int sensor_g_mbus_config(struct v4l2_subdev *sd, struct v4l2_mbus_config *cfg) +{ + cfg->type = V4L2_MBUS_CSI2; +#if MIPI_SWITCH_EN + cfg->flags = 0 | V4L2_MBUS_CSI2_1_LANE | V4L2_MBUS_CSI2_CHANNEL_0 | V4L2_MBUS_CSI2_CHANNEL_1; +#else + cfg->flags = 0 | V4L2_MBUS_CSI2_1_LANE | V4L2_MBUS_CSI2_CHANNEL_0; +#endif + return 0; +} + +static int sensor_g_ctrl(struct v4l2_ctrl *ctrl) +{ + struct sensor_info *info = container_of(ctrl->handler, struct sensor_info, handler); + struct v4l2_subdev *sd = &info->sd; + + switch (ctrl->id) { + case V4L2_CID_GAIN: + return sensor_g_gain(sd, &ctrl->val); + case V4L2_CID_EXPOSURE: + return sensor_g_exp(sd, &ctrl->val); + } + return -EINVAL; +} + +static int sensor_s_ctrl(struct v4l2_ctrl *ctrl) +{ + struct sensor_info *info = container_of(ctrl->handler, struct sensor_info, handler); + struct v4l2_subdev *sd = &info->sd; + + switch (ctrl->id) { + case V4L2_CID_GAIN: + return sensor_s_gain(sd, ctrl->val); + break; + case V4L2_CID_EXPOSURE: + return sensor_s_exp(sd, ctrl->val); + break; + case V4L2_CID_HFLIP: + return sensor_s_hflip(sd, ctrl->val); + break; + case V4L2_CID_VFLIP: + return sensor_s_vflip(sd, ctrl->val); + break; + } + return -EINVAL; +} + +static int sensor_reg_init(struct sensor_info *info) +{ + int ret; + struct v4l2_subdev *sd = &info->sd; + struct sensor_win_size *wsize = info->current_wins; + + int switch_choice; + struct sensor_switch_cfg_t *sensor_switch_config; + sensor_switch_config = sensor_mipi_switch_get_cfg(sd); + sensor_switch_config->vsync_cnt = 0; + +#if defined CONFIG_VIN_INIT_MELIS + + if (info->preview_first_flag) { + info->preview_first_flag = 0; + } else { + for (switch_choice = SWITCH_SENSOR_A; switch_choice < 2; switch_choice++) { + + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[switch_choice]); + ret = sensor_write_array(sd, sensor_default_regs, + ARRAY_SIZE(sensor_default_regs)); + if (ret < 0) { + sensor_err("write sensor_default_regs error\n"); + return ret; + } + + if (wsize->regs) { + sensor_print("ready to write regs for i2c_addr:0x%x\n", sensor_switch_config->i2c_addr_container[switch_choice]); + sensor_write_array(sd, wsize->regs, wsize->regs_size); + } + + if(switch_choice == SWITCH_SENSOR_A){ + sensor_print("ready to write master regs for i2c_addr:0x%x\n", sensor_switch_config->i2c_addr_container[switch_choice]); + ret = sensor_write_array(sd, sensor_master_regs, ARRAY_SIZE(sensor_master_regs)); + } + else + { + sensor_print("ready to write slave regs for i2c_addr:0x%x\n", sensor_switch_config->i2c_addr_container[switch_choice]); + ret = sensor_write_array(sd, sensor_slave_regs, ARRAY_SIZE(sensor_slave_regs)); + } + + } + sensor_switch_config->frame_length_save[switch_choice] = wsize->vts; + sensor_switch_config->exp_val_save[switch_choice] = 16; + sensor_switch_config->gain_val_save[switch_choice] = 16; + } +#else + for (switch_choice = SWITCH_SENSOR_A; switch_choice < 2; switch_choice++) { + + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[switch_choice]); + ret = sensor_write_array(sd, sensor_default_regs, + ARRAY_SIZE(sensor_default_regs)); + if (ret < 0) { + sensor_err("write sensor_default_regs error\n"); + return ret; + } + + if (wsize->regs) { + sensor_print("ready to write regs for i2c_addr:0x%x\n", sensor_switch_config->i2c_addr_container[switch_choice]); + sensor_write_array(sd, wsize->regs, wsize->regs_size); + } + + if(switch_choice == SWITCH_SENSOR_A){ + sensor_print("ready to write master regs for i2c_addr:0x%x\n", sensor_switch_config->i2c_addr_container[switch_choice]); + ret = sensor_write_array(sd, sensor_master_regs, ARRAY_SIZE(sensor_master_regs)); + } + else + { + sensor_print("ready to write slave regs for i2c_addr:0x%x\n", sensor_switch_config->i2c_addr_container[switch_choice]); + ret = sensor_write_array(sd, sensor_slave_regs, ARRAY_SIZE(sensor_slave_regs)); + } + + } + sensor_switch_config->frame_length_save[switch_choice] = wsize->vts; + sensor_switch_config->exp_val_save[switch_choice] = 16; + sensor_switch_config->gain_val_save[switch_choice] = 16; +#endif + if (wsize->set_size) + wsize->set_size(sd); + + info->width = wsize->width; + info->height = wsize->height; + sensor_flip_status = 0x0; + sc2356_sensor_vts = wsize->vts; + sensor_print("sc2356_sensor_vts = %d\n", sc2356_sensor_vts); + sensor_print("s_fmt set width = %d, height = %d\n", wsize->width, wsize->height); + + + + return 0; +} + +static int sensor_s_sw_stby(struct v4l2_subdev *sd, int on_off) +{ +int ret; +#if MIPI_SWITCH_EN + unsigned int switch_choice; + struct sensor_switch_cfg_t *sensor_switch_config; + int use_count; + data_type rdval; + + sensor_switch_config = sensor_mipi_switch_get_cfg(sd); + use_count = sd->entity.use_count; + if (on_off && use_count) + return 0; + else if (!on_off && --use_count > 0) + return 0; + + ret = sensor_read(sd, 0x0100, &rdval); + + if (ret != 0) + return ret; + for (switch_choice = SWITCH_SENSOR_A; switch_choice < sensor_switch_config->sensor_num; switch_choice++) { + sensor_i2c_addr_set(sd, sensor_switch_config->i2c_addr_container[switch_choice]); + if (on_off == STBY_ON) + ret = sensor_write(sd, 0x0100, 0x01); + else + ret = sensor_write(sd, 0x0100, 0x00); + } +#endif + return ret; +} + + +static int sensor_s_stream(struct v4l2_subdev *sd, int enable) +{ + struct sensor_info *info = to_state(sd); + struct sensor_vysnc_config *sensor_vysnc_cfg = &info->sensor_vysnc_cfg; + struct sensor_switch_cfg_t *sensor_switch_config; + int ret; + sensor_print("%s on = %d, %d*%d fps: %d code: %x\n", __func__, enable, info->current_wins->width, info->current_wins->height, info->current_wins->fps_fixed, info->fmt->mbus_code); + + if (!enable) { + ret = sensor_s_sw_stby(sd, 0); + if (ret < 0) + sensor_err("soft stby off falied!\n"); + if (sensor_vysnc_cfg->gpio_irq > 0) + disable_irq(sensor_vysnc_cfg->gpio_irq); + cancel_work_sync(&sensor_vysnc_cfg->s_sensor_switch_change_task); + return 0; + } + sensor_switch_config = sensor_mipi_switch_get_cfg(sd); + sensor_reg_init(info); + if (sensor_vysnc_cfg->gpio_irq > 0){ + sensor_print("========ywj_dg_add enable irq func,gio is [%d]==============",sensor_vysnc_cfg->gpio_irq); + enable_irq(sensor_vysnc_cfg->gpio_irq); + } + return 0; +} + +static const struct v4l2_ctrl_ops sensor_ctrl_ops = { + .g_volatile_ctrl = sensor_g_ctrl, + .s_ctrl = sensor_s_ctrl, + .try_ctrl = sensor_try_ctrl, +}; + +static const struct v4l2_subdev_core_ops sensor_core_ops = { + .reset = sensor_reset, + .init = sensor_init, + .s_power = sensor_power, + .ioctl = sensor_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl32 = sensor_compat_ioctl32, +#endif +}; + +static const struct v4l2_subdev_video_ops sensor_video_ops = { + .s_parm = sensor_s_parm, + .g_parm = sensor_g_parm, + .s_stream = sensor_s_stream, + .g_mbus_config = sensor_g_mbus_config, +}; + +static const struct v4l2_subdev_pad_ops sensor_pad_ops = { + .enum_mbus_code = sensor_enum_mbus_code, + .enum_frame_size = sensor_enum_frame_size, + .get_fmt = sensor_get_fmt, + .set_fmt = sensor_set_fmt, +}; + +static const struct v4l2_subdev_ops sensor_ops = { + .core = &sensor_core_ops, + .video = &sensor_video_ops, + .pad = &sensor_pad_ops, +}; + +static struct cci_driver cci_drv[] = { + { + .name = SENSOR_NAME, + .addr_width = CCI_BITS_16, + .data_width = CCI_BITS_8, + }, + { + .name = SENSOR_NAME_2, + .addr_width = CCI_BITS_16, + .data_width = CCI_BITS_8, + }, +}; + +static int sensor_init_controls(struct v4l2_subdev *sd, const struct v4l2_ctrl_ops *ops) +{ + struct sensor_info *info = to_state(sd); + struct v4l2_ctrl_handler *handler = &info->handler; + struct v4l2_ctrl *ctrl; + int ret = 0; + + v4l2_ctrl_handler_init(handler, 4); + + ctrl = v4l2_ctrl_new_std(handler, ops, V4L2_CID_GAIN, 1 * 1600, 256 * 1600, 1, 1 * 1600); + + if (ctrl != NULL) + ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE; + + ctrl = v4l2_ctrl_new_std(handler, ops, V4L2_CID_EXPOSURE, 1, 65536 * 16, 1, 1); + + v4l2_ctrl_new_std(handler, ops, V4L2_CID_HFLIP, 0, 1, 1, 0); + v4l2_ctrl_new_std(handler, ops, V4L2_CID_VFLIP, 0, 1, 1, 0); + + if (ctrl != NULL) + ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE; + + if (handler->error) { + ret = handler->error; + v4l2_ctrl_handler_free(handler); + } + + sd->ctrl_handler = handler; + + return ret; +} + +static int sensor_dev_id; + +static int sensor_probe(struct i2c_client *client, const struct i2c_device_id *id) +{ + struct v4l2_subdev *sd; + struct sensor_info *info; + int i = 0; + printk("===========xxxxx client name:%s, slave:0x%x\n", client->name, client->addr); + info = kzalloc(sizeof(struct sensor_info), GFP_KERNEL); + if (info == NULL) + return -ENOMEM; + sd = &info->sd; + + if (client) { + for (i = 0; i < SENSOR_NUM; i++) { + printk("===========num:%d cci_driver name:%s, client name:%s, slave:0x%x\n", i, cci_drv[i].name, client->name, client->addr); + if (!strcmp(cci_drv[i].name, client->name)) + break; + } + cci_dev_probe_helper(sd, client, &sensor_ops, &cci_drv[i]); + } else { + cci_dev_probe_helper(sd, client, &sensor_ops, &cci_drv[sensor_dev_id++]); + } + + sensor_init_controls(sd, &sensor_ctrl_ops); + + mutex_init(&info->lock); + + sensor_print("========ywj_dg_add==============\n"); +#if MIPI_SWITCH_EN + sensor_i2c_switch_lock_init(); + init_gpio(); + sensor_vysnc_init(sd); +#endif + + info->fmt = &sensor_formats[0]; + info->fmt_pt = &sensor_formats[0]; + info->win_pt = &sensor_win_sizes[0]; + info->fmt_num = N_FMTS; + info->win_size_num = N_WIN_SIZES; + info->sensor_field = V4L2_FIELD_NONE; + //use CMB_PHYA_OFFSET2 also ok + info->combo_mode = CMB_TERMINAL_RES | CMB_PHYA_OFFSET3 | MIPI_NORMAL_MODE; + //info->combo_mode = CMB_PHYA_OFFSET2 | MIPI_NORMAL_MODE; + info->stream_seq = MIPI_BEFORE_SENSOR; + info->af_first_flag = 1; + info->time_hs = 0x11; + info->deskew = 0x02; + info->exp = 0; + info->gain = 0; + info->preview_first_flag = 1; + info->first_power_flag = 1; + + return 0; +} + +static int sensor_remove(struct i2c_client *client) +{ + struct v4l2_subdev *sd; + int i; + + if (client) { + for (i = 0; i < SENSOR_NUM; i++) { + if (!strcmp(cci_drv[i].name, client->name)) + break; + } + sd = cci_dev_remove_helper(client, &cci_drv[i]); + } else { + sd = cci_dev_remove_helper(client, &cci_drv[sensor_dev_id++]); + } + + kfree(to_state(sd)); + return 0; +} + +static const struct i2c_device_id sensor_id[] = { + {SENSOR_NAME, 0}, + {} +}; + +static const struct i2c_device_id sensor_id_2[] = { + {SENSOR_NAME_2, 0}, + {} +}; + +MODULE_DEVICE_TABLE(i2c, sensor_id); +MODULE_DEVICE_TABLE(i2c, sensor_id_2); + +static struct i2c_driver sensor_driver[] = { + { + .driver = { + .owner = THIS_MODULE, + .name = SENSOR_NAME, + }, + .probe = sensor_probe, + .remove = sensor_remove, + .id_table = sensor_id, + }, + { + .driver = { + .owner = THIS_MODULE, + .name = SENSOR_NAME_2, + }, + .probe = sensor_probe, + .remove = sensor_remove, + .id_table = sensor_id_2, + }, +}; + +static __init int init_sensor(void) +{ + int i, ret = 0; + sensor_dev_id = 0; + + mutex_init(&light_lock); + + for (i = 0; i < SENSOR_NUM; i++) + ret = cci_dev_init_helper(&sensor_driver[i]); + return ret; +} + +static __exit void exit_sensor(void) +{ + int i; + sensor_dev_id = 0; + for (i = 0; i < SENSOR_NUM; i++) + cci_dev_exit_helper(&sensor_driver[i]); +} + +#ifdef CONFIG_SUNXI_FASTBOOT +subsys_initcall_sync(init_sensor); +#else +module_init(init_sensor); +#endif +module_exit(exit_sensor); + diff --git a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/vin-video/vin_video.c b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/vin-video/vin_video.c index b45c23b1b..605332721 100644 --- a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/vin-video/vin_video.c +++ b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/vin-video/vin_video.c @@ -2584,6 +2584,10 @@ static int __vin_s_input(struct vin_core *vinc, unsigned int i) vinc->exp_gain.exp_val = info->exp; vinc->exp_gain.gain_val = info->gain; vinc->stream_idx = info->stream_seq + 2; + /*check link of isp and mipi-vc when mipi-vc enable*/ + if ((vinc->csi_ch != 0xff) && (vinc->csi_ch & 0x10)) { + info->isp_id[vinc->csi_ch & 0xf] = vinc->isp_sel; + } } if (cap->pipe.sd[VIN_IND_MIPI] != NULL) { @@ -4309,8 +4313,28 @@ int sensor_flip_option(struct vin_vid_cap *cap, struct v4l2_control c) int input_seq; int sensor_fmt_code; int ret, i; + struct sensor_vc_flip sensor_set_flip; + + /*It need sent isp_id to sensor when enable mipi-vc, so filp cmd + * need to sent by v4l2_subdev_call not v4l2_s_ctrl*/ + if ((cap->vinc->csi_ch != 0xff) && (cap->vinc->csi_ch & 0x10)) { + sensor_set_flip.isp_id = cap->vinc->isp_sel; + sensor_set_flip.value = c.value; + switch (c.id) { + case V4L2_CID_VFLIP: + ret = v4l2_subdev_call(sensor, core, + ioctl, SET_VFLIP, &sensor_set_flip); + break; + case V4L2_CID_HFLIP: + ret = v4l2_subdev_call(sensor, core, + ioctl, SET_HFLIP, &sensor_set_flip); + break; + } + } else { + /*not mipi-vc mode*/ + ret = v4l2_s_ctrl(NULL, sensor->ctrl_handler, &c); + } - ret = v4l2_s_ctrl(NULL, sensor->ctrl_handler, &c); ret = v4l2_subdev_call(sensor, core, ioctl, VIDIOC_VIN_GET_SENSOR_CODE, &sensor_fmt_code); if (ret < 0) { vin_err("get sensor mbus code fail"); diff --git a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/vin.c b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/vin.c index 355af02fd..0464b3ff3 100644 --- a/lichee/linux-4.9/drivers/media/platform/sunxi-vin/vin.c +++ b/lichee/linux-4.9/drivers/media/platform/sunxi-vin/vin.c @@ -1029,8 +1029,9 @@ static int __vin_pipeline_s_stream(struct vin_pipeline *p, int on_idx) else vin_warn("large image mode not support isp%d\n", vinc->isp_sel); } else { - if ((vinc->csi_ch != 0xff) && (vinc->csi_ch & 0x10)) + if ((vinc->csi_ch != 0xff) && (vinc->csi_ch & 0x10)){ csic_isp_input_select(vind->id, vinc->isp_sel/ISP_VIRT_NUM, vinc->isp_sel%ISP_VIRT_NUM + 0, vinc->csi_sel, vinc->csi_ch & 0xf); + } else { for (i = 0; i < vinc->total_rx_ch; i++) csic_isp_input_select(vind->id, vinc->isp_sel/ISP_VIRT_NUM, vinc->isp_sel%ISP_VIRT_NUM + i, vinc->csi_sel, i); @@ -1710,6 +1711,7 @@ static int vin_create_media_links(struct vin_md *vind) vin_log(VIN_LOG_MD, "created link [%s] %c> [%s]\n", source->name, '=', sink->name); } else { +#if defined CONFIG_MIPI_VC source = &csi->entity; sink = &isp->entity; ret = media_create_pad_link(source, SCALER_PAD_SOURCE, @@ -1717,6 +1719,7 @@ static int vin_create_media_links(struct vin_md *vind) MEDIA_LNK_FL_ENABLED); vin_log(VIN_LOG_MD, "created link [%s] %c> [%s]\n", source->name, '=', sink->name); +#endif } #endif cap_sd = &vinc->vid_cap.subdev; @@ -1753,7 +1756,7 @@ static int vin_create_media_links(struct vin_md *vind) vin_log(VIN_LOG_MD, "created link [%s] %c> [%s]\n", source->name, '=', sink->name); } - +#if !defined CONFIG_MIPI_VC for (i = 0; i < VIN_MAX_CSI; i++) { #ifdef SUPPORT_ISP_TDM struct vin_core *vinc = NULL; @@ -1780,7 +1783,7 @@ static int vin_create_media_links(struct vin_md *vind) source->name, '-', sink->name); } } - +#endif for (i = 0; i < VIN_MAX_ISP; i++) { isp = vind->isp[i].sd; if (isp == NULL) diff --git a/lichee/linux-4.9/include/media/sunxi_camera_v2.h b/lichee/linux-4.9/include/media/sunxi_camera_v2.h index 0439e0589..c557c6f1a 100644 --- a/lichee/linux-4.9/include/media/sunxi_camera_v2.h +++ b/lichee/linux-4.9/include/media/sunxi_camera_v2.h @@ -311,6 +311,11 @@ struct sensor_isp_cfg { __u8 large_image; }; +struct sensor_vc_flip { + int isp_id; + __s32 value; +}; + enum dma_buffer_num { BK_MUL_BUFFER = 0, BK_ONE_BUFFER, diff --git a/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/configs/defconfig b/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/configs/defconfig index 43805e307..1abc3cdd8 100755 --- a/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/configs/defconfig +++ b/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/configs/defconfig @@ -28,8 +28,7 @@ CONFIG_FPU_DOUBLE=y # Sunxi Platform Support # # CONFIG_CPUFREQ_SUPPORT is not set -CONFIG_PANIC_CLI=y -CONFIG_PANIC_CLI_PWD=y +# CONFIG_PANIC_CLI is not set # # RTOS Kernel Setup @@ -213,7 +212,8 @@ CONFIG_ISP_READ_THRESHOLD=y # CONFIG_ISP_FAST_CONVERGENCE is not set # CONFIG_ISP_ONLY_HARD_LIGHTADC is not set # CONFIG_ISP_HARD_LIGHTADC is not set -CONFIG_ISP_NUMBER=2 +CONFIG_ISP_NUMBER=3 +CONFIG_SUPPORT_THREE_CAMERA=y # # sensor driver select @@ -224,6 +224,7 @@ CONFIG_ISP_NUMBER=2 CONFIG_SENSOR_GC2083_MIPI=y # CONFIG_SENSOR_GC4663_MIPI is not set # CONFIG_SENSOR_SC2355_MIPI is not set +CONFIG_SENSOR_SC2356_MIPI=y # CONFIG_SENSOR_SC2336_MIPI is not set # CONFIG_SENSOR_SC3336_MIPI is not set # CONFIG_SENSOR_SC500AI_MIPI is not set @@ -242,7 +243,7 @@ CONFIG_SENSOR_GC2083_MIPI=y # CONFIG_SENSOR_F355P_DVP is not set # CONFIG_SENSOR_F37P_DVP is not set # CONFIG_SENSOR_F37P_MIPI is not set -CONFIG_SENSOR_OV02B10_MIPI=y +# CONFIG_SENSOR_OV02B10_MIPI is not set # # Osal Setup @@ -286,7 +287,7 @@ CONFIG_RPMSG_NOTIFY=y # CONFIG_RPMSG_SPEEDTEST is not set CONFIG_AMP_SHARE_IRQ=y CONFIG_RPMSG_CLIENT=y -# CONFIG_RPMSG_CLIENT_TEST is not set +CONFIG_RPMSG_CLIENT_TEST=y CONFIG_RPMSG_CLIENT_QUEUE_SIZE=16 # CONFIG_RPMSG_CLIENT_DEBUG is not set CONFIG_RPMSG_HEARBEAT=y @@ -427,7 +428,7 @@ CONFIG_MODVERSIONS=y # CONFIG_SHOW_FULL_VERSION is not set CONFIG_CROSS_COMPILE="riscv64-unknown-elf-" # CONFIG_INIT_CARD_PRODUCT is not set -CONFIG_LOG_DEFAULT_LEVEL=1 +CONFIG_LOG_DEFAULT_LEVEL=4 # CONFIG_CC_STACKPROTECTOR_STRONG is not set # CONFIG_LOG_RELEASE is not set # CONFIG_BOOTUP_TURBO is not set @@ -436,7 +437,7 @@ CONFIG_LOG_DEFAULT_LEVEL=1 CONFIG_DYNAMIC_LOG_LEVEL_SUPPORT=y CONFIG_LOG_LEVEL_STORAGE_NONE=y # CONFIG_LOG_LEVEL_STORAGE_RTC is not set -CONFIG_DYNAMIC_LOG_DEFAULT_LEVEL=2 +CONFIG_DYNAMIC_LOG_DEFAULT_LEVEL=4 # CONFIG_FRAME_POINTER is not set CONFIG_FRAME_WARN=8192 CONFIG_UART_CLI_USE_NONE=y @@ -473,9 +474,9 @@ CONFIG_SOC_SUN20I=y # CONFIG_ARCH_SUN8IW19 is not set CONFIG_SOC_SUN20IW3=y CONFIG_ARCH_SUN20IW3=y -CONFIG_DRAM_PHYBASE=0x43c00000 -CONFIG_DRAM_VIRTBASE=0x43c00000 -CONFIG_DRAM_SIZE=0x0400000 +CONFIG_DRAM_PHYBASE=0x45010000 +CONFIG_DRAM_VIRTBASE=0x45010000 +CONFIG_DRAM_SIZE=0x0530000 CONFIG_COHERENT_SIZE=0x00c00000 CONFIG_COHERENT_START_ADDR=0xa0000000 CONFIG_LOAD_DATA_TO_MEM_FROM_STORAGE=y diff --git a/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/configs/sys_config.fex b/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/configs/sys_config.fex index d38fe1c48..751cb1b7a 100755 --- a/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/configs/sys_config.fex +++ b/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/configs/sys_config.fex @@ -7,12 +7,12 @@ ;i2c configuration ;---------------------------------------------------------------------------------- [twi0] -twi0_scl = port:PE04<8><1> -twi0_sda = port:PE05<8><1> +twi0_scl = port:PE04<8><1><0> +twi0_sda = port:PE05<8><1><0> [twi1] -twi1_scl = port:PE02<8><1> -twi1_sda = port:PE03<8><1> +twi1_scl = port:PE02<8><1><0> +twi1_sda = port:PE03<8><1><0> ;[twi2] ;twi2_scl = port:PH05<4><1> @@ -54,5 +54,5 @@ mclk0 = port:PE12<5><1> [sensor1] used1 = 1 reset1 = port:PE06<1><1> -pwdn1 = port:PE09<1><1> +pwdn1 = port:PE07<1><1> mclk1 = port:PE13<5><1> diff --git a/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/kernel.lds b/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/kernel.lds index 57945f5c6..5642137a5 100755 --- a/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/kernel.lds +++ b/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/kernel.lds @@ -8,7 +8,7 @@ OUTPUT_FORMAT("elf32-littleriscv","elf64-littleriscv","elf32-littleriscv") MEMORY { /*DRAM_KERNEL: 4M */ - DRAM_SEG_KRN (rwx) : ORIGIN = 0x43c00000, LENGTH = 0x00400000 + DRAM_SEG_KRN (rwx) : ORIGIN = 0x45010000, LENGTH = 0x00530000 } PHDRS diff --git a/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/src/main.c b/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/src/main.c index bf6ce9895..9c10d8cb8 100755 --- a/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/src/main.c +++ b/lichee/melis-v3.0/source/projects/v851s3-e907-sl100-front-board/src/main.c @@ -21,22 +21,31 @@ int app_entry(void *param) rpmsg_notify("tdm0", NULL, 0); rpmsg_notify("isp0", NULL, 0); rpmsg_notify("isp1", NULL, 0); + rpmsg_notify("isp2", NULL, 0); rpmsg_notify("scaler0", NULL, 0); rpmsg_notify("scaler1", NULL, 0); + rpmsg_notify("scaler2", NULL, 0); rpmsg_notify("scaler4", NULL, 0); rpmsg_notify("scaler5", NULL, 0); + rpmsg_notify("scaler6", NULL, 0); rpmsg_notify("scaler8", NULL, 0); rpmsg_notify("scaler9", NULL, 0); + rpmsg_notify("scaler10", NULL, 0); rpmsg_notify("scaler12", NULL, 0); rpmsg_notify("scaler13", NULL, 0); + rpmsg_notify("scaler14", NULL, 0); rpmsg_notify("vinc0", NULL, 0); rpmsg_notify("vinc1", NULL, 0); + rpmsg_notify("vinc2", NULL, 0); rpmsg_notify("vinc4", NULL, 0); rpmsg_notify("vinc5", NULL, 0); + rpmsg_notify("vinc6", NULL, 0); rpmsg_notify("vinc8", NULL, 0); rpmsg_notify("vinc9", NULL, 0); + rpmsg_notify("vinc10", NULL, 0); rpmsg_notify("vinc12", NULL, 0); rpmsg_notify("vinc13", NULL, 0); + rpmsg_notify("vinc14", NULL, 0); #endif #else hal_msleep(200); diff --git a/lichee/rtos-hal/hal/source/vin/modules/sensor/Kconfig b/lichee/rtos-hal/hal/source/vin/modules/sensor/Kconfig index a4b8eb9a6..ece04e3fe 100755 --- a/lichee/rtos-hal/hal/source/vin/modules/sensor/Kconfig +++ b/lichee/rtos-hal/hal/source/vin/modules/sensor/Kconfig @@ -32,6 +32,10 @@ config SENSOR_SC2355_MIPI bool "use sc2355_mipi driver" default n +config SENSOR_SC2356_MIPI + bool "use sc2356_mipi driver" + default n + config SENSOR_SC2336_MIPI bool "use sc2336_mipi driver" default n diff --git a/lichee/rtos-hal/hal/source/vin/modules/sensor/Makefile b/lichee/rtos-hal/hal/source/vin/modules/sensor/Makefile index ec774f6c6..14bc686fe 100755 --- a/lichee/rtos-hal/hal/source/vin/modules/sensor/Makefile +++ b/lichee/rtos-hal/hal/source/vin/modules/sensor/Makefile @@ -4,6 +4,7 @@ obj-$(CONFIG_SENSOR_GC2053_MIPI) += gc2053_mipi.o obj-$(CONFIG_SENSOR_GC2083_MIPI) += gc2083_mipi.o obj-$(CONFIG_SENSOR_GC4663_MIPI) += gc4663_mipi.o obj-$(CONFIG_SENSOR_SC2355_MIPI) += sc2355_mipi.o +obj-$(CONFIG_SENSOR_SC2356_MIPI) += sc2356_mipi.o obj-$(CONFIG_SENSOR_SC2336_MIPI) += sc2336_mipi.o obj-$(CONFIG_SENSOR_SC3336_MIPI) += sc3336_mipi.o obj-$(CONFIG_SENSOR_SC500AI_MIPI) += sc500ai_mipi.o diff --git a/lichee/rtos-hal/hal/source/vin/modules/sensor/camera.h b/lichee/rtos-hal/hal/source/vin/modules/sensor/camera.h index 5a36ce7d3..fa4d1ea27 100755 --- a/lichee/rtos-hal/hal/source/vin/modules/sensor/camera.h +++ b/lichee/rtos-hal/hal/source/vin/modules/sensor/camera.h @@ -156,6 +156,7 @@ extern struct sensor_fuc_core gc4663_core; extern struct sensor_fuc_core gc2053_core; extern struct sensor_fuc_core gc2083_core; extern struct sensor_fuc_core sc2355_core; +extern struct sensor_fuc_core sc2356_core; extern struct sensor_fuc_core sc2336_core; extern struct sensor_fuc_core sc3336_core; extern struct sensor_fuc_core sc500ai_core; diff --git a/lichee/rtos-hal/hal/source/vin/modules/sensor/sc2356_mipi.c b/lichee/rtos-hal/hal/source/vin/modules/sensor/sc2356_mipi.c new file mode 100755 index 000000000..7b71d0490 --- /dev/null +++ b/lichee/rtos-hal/hal/source/vin/modules/sensor/sc2356_mipi.c @@ -0,0 +1,969 @@ +/* + * A V4L2 driver for Raw cameras. + * + * Copyright (c) 2017 by Allwinnertech Co., Ltd. http://www.allwinnertech.com + * + * Authors: Zhao Wei + * Liang WeiJie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include + +#include "../../vin_mipi/combo_common.h" +#include "camera.h" +#include "../../utility/sunxi_camera_v2.h" +#include "../../utility/media-bus-format.h" +#include "../../utility/vin_supply.h" + +#define MCLK (24*1000*1000) +#define V4L2_IDENT_SENSOR 0x2356 + +//define the registers +#define EXP_HIGH 0x3e00 +#define EXP_MID 0x3e01 +#define EXP_LOW 0x3e02 +#define DIG_GAIN 0x3e06 +#define DIG_FINE_GAIN 0x3e07 +#define ANA_GAIN 0x3e09 +#define GAIN_STEP_BASE 128 + +#define ID_REG_HIGH 0x3e07 +#define ID_REG_LOW 0x3e08 +#define ID_VAL_HIGH 0x80 +#define ID_VAL_LOW 0x00 +#define SENSOR_FRAME_RATE 30 + +#define I2C_ADDR 0x6C +//#define I2C_ADDR_2 0x32 + +#define SENSOR_NUM 0x2 +#define SENSOR_NAME "sc2356_mipi" +#define SENSOR_NAME_2 "sc2356_mipi_2" + +#if 1 +#define SC2356_1600X1200_30FPS +#else +#define SC2356_800X600_30FPS +#endif + +static int sensor_power_count[2]; +static int sensor_stream_count[2]; +static struct sensor_format_struct *current_win[2]; + +/* + * The default register settings + */ +#define A_I2C_ADDR 0x6c +#define B_I2C_ADDR 0x20 + +struct sensor_switch_cfg_t { + bool sensor_is_detected; + bool sensor_with_switch_en; + unsigned int sensor_num; + unsigned int switch_status; + unsigned int i2c_addr_container[2]; + unsigned int frame_length_save[2]; + unsigned int exp_val_save[2]; + unsigned int gain_val_save[2]; + bool set_expgain_flags[2]; + bool sensor_detect_flag[2]; + int sensor_hflip_status[2]; + int sensor_vflip_status[2]; + unsigned int vsync_cnt; +}; + +typedef enum _sensor_switch_choice_type { + SWITCH_SENSOR_A = 0, + SWITCH_SENSOR_B = 1, + SWITCH_SENSOR_MAX, +} sensor_switch_choice_type; + +static struct sensor_switch_cfg_t sensor_switch_cfg[2] = { + [0] = { + .i2c_addr_container = {A_I2C_ADDR, B_I2C_ADDR}, + .switch_status = 0, + }, +}; + +static struct regval_list sensor_default_regs[] = { + +}; + +#ifdef SC2356_800X600_30FPS +static struct regval_list sensor_800x600_30_regs[] = { +#if 0 + {0x0103, 0x01}, + {0x0100, 0x00}, + {0x36e9, 0x80}, + {0x36ea, 0x0f}, + {0x36eb, 0x24}, + {0x36ed, 0x14}, + {0x36e9, 0x01}, + {0x301f, 0x0c}, + {0x303f, 0x82}, + {0x3208, 0x03}, + {0x3209, 0x20}, + {0x320a, 0x02}, + {0x320b, 0x58}, + {0x320c, 0x07},//hts=1920 + {0x320d, 0x80}, + {0x320e, 0x04},//vts=1250 1920*1250*30=72 + {0x320f, 0xe2}, + {0x3211, 0x02}, + {0x3213, 0x02}, + {0x3215, 0x31}, + {0x3220, 0x01}, + {0x3221, 0x60}, + {0x3248, 0x02}, + {0x3253, 0x0a}, + {0x3301, 0xff}, + {0x3302, 0xff}, + {0x3303, 0x10}, + {0x3306, 0x28}, + {0x3307, 0x02}, + {0x330a, 0x00}, + {0x330b, 0xb0}, + {0x3318, 0x02}, + {0x3320, 0x06}, + {0x3321, 0x02}, + {0x3326, 0x12}, + {0x3327, 0x0e}, + {0x3328, 0x03}, + {0x3329, 0x0f}, + {0x3364, 0x4f}, + {0x33b3, 0x40}, + {0x33f9, 0x2c}, + {0x33fb, 0x38}, + {0x33fc, 0x0f}, + {0x33fd, 0x1f}, + {0x349f, 0x03}, + {0x34a6, 0x01}, + {0x34a7, 0x1f}, + {0x34a8, 0x40}, + {0x34a9, 0x30}, + {0x34ab, 0xa6}, + {0x34ad, 0xa6}, + {0x3622, 0x60}, + {0x3623, 0x40}, + {0x3624, 0x61}, + {0x3625, 0x08}, + {0x3626, 0x03}, + {0x3630, 0xa8}, + {0x3631, 0x84}, + {0x3632, 0x90}, + {0x3633, 0x43}, + {0x3634, 0x09}, + {0x3635, 0x82}, + {0x3636, 0x48}, + {0x3637, 0xe4}, + {0x3641, 0x22}, + {0x3670, 0x0f}, + {0x3674, 0xc0}, + {0x3675, 0xc0}, + {0x3676, 0xc0}, + {0x3677, 0x86}, + {0x3678, 0x88}, + {0x3679, 0x8c}, + {0x367c, 0x01}, + {0x367d, 0x0f}, + {0x367e, 0x01}, + {0x367f, 0x0f}, + {0x3690, 0x63}, + {0x3691, 0x63}, + {0x3692, 0x73}, + {0x369c, 0x01}, + {0x369d, 0x1f}, + {0x369e, 0x8a}, + {0x369f, 0x9e}, + {0x36a0, 0xda}, + {0x36a1, 0x01}, + {0x36a2, 0x03}, + {0x3900, 0x0d}, + {0x3904, 0x04}, + {0x3905, 0x98}, + {0x391b, 0x81}, + {0x391c, 0x10}, + {0x391d, 0x19}, + {0x3933, 0x01}, + {0x3934, 0x82}, + {0x3940, 0x5d}, + {0x3942, 0x01}, + {0x3943, 0x82}, + {0x3949, 0xc8}, + {0x394b, 0x64}, + {0x3952, 0x02}, + {0x3e00, 0x00}, + {0x3e01, 0x4d}, + {0x3e02, 0xe0}, + {0x4502, 0x34}, + {0x4509, 0x30}, + {0x450a, 0x71}, + {0x4819, 0x09}, + {0x481b, 0x05}, + {0x481d, 0x13}, + {0x481f, 0x04}, + {0x4821, 0x0a}, + {0x4823, 0x05}, + {0x4825, 0x04}, + {0x4827, 0x05}, + {0x4829, 0x08}, + {0x5000, 0x46}, + {0x5900, 0x01}, + {0x5901, 0x04}, + {0x0100, 0x01}, +#endif + {0x0103,0x01}, + {0x0100,0x00}, + {0x3221,0x06},//hflip:0x06 vflip:0x60 + {0x36e9,0x80}, + {0x36e9,0x24}, + {0x301f,0x01}, + + {0x3208, 0x03}, + {0x3209, 0x20}, + {0x320a, 0x02}, + {0x320b, 0x58}, + {0x3211, 0x02}, + {0x3213, 0x02}, + + {0x3301,0xff}, + {0x3304,0x68}, + {0x3306,0x40}, + {0x3308,0x08}, + {0x3309,0xa8}, + {0x330b,0xb0}, + {0x330c,0x18}, + {0x330d,0xff}, + {0x330e,0x20}, + {0x331e,0x59}, + {0x331f,0x99}, + {0x3333,0x10}, + {0x335e,0x06}, + {0x335f,0x08}, + {0x3364,0x1f}, + {0x337c,0x02}, + {0x337d,0x0a}, + {0x338f,0xa0}, + {0x3390,0x01}, + {0x3391,0x03}, + {0x3392,0x1f}, + {0x3393,0xff}, + {0x3394,0xff}, + {0x3395,0xff}, + {0x33a2,0x04}, + {0x33ad,0x0c}, + {0x33b1,0x20}, + {0x33b3,0x38}, + {0x33f9,0x40}, + {0x33fb,0x48}, + {0x33fc,0x0f}, + {0x33fd,0x1f}, + {0x349f,0x03}, + {0x34a6,0x03}, + {0x34a7,0x1f}, + {0x34a8,0x38}, + {0x34a9,0x30}, + {0x34ab,0xb0}, + {0x34ad,0xb0}, + {0x34f8,0x1f}, + {0x34f9,0x20}, + {0x3630,0xa0}, + {0x3631,0x92}, + {0x3632,0x64}, + {0x3633,0x43}, + {0x3637,0x49}, + {0x363a,0x85}, + {0x363c,0x0f}, + {0x3650,0x31}, + {0x3670,0x0d}, + {0x3674,0xc0}, + {0x3675,0xa0}, + {0x3676,0xa0}, + {0x3677,0x92}, + {0x3678,0x96}, + {0x3679,0x9a}, + {0x367c,0x03}, + {0x367d,0x0f}, + {0x367e,0x01}, + {0x367f,0x0f}, + {0x3698,0x83}, + {0x3699,0x86}, + {0x369a,0x8c}, + {0x369b,0x94}, + {0x36a2,0x01}, + {0x36a3,0x03}, + {0x36a4,0x07}, + {0x36ae,0x0f}, + {0x36af,0x1f}, + {0x36bd,0x22}, + {0x36be,0x22}, + {0x36bf,0x22}, + {0x36d0,0x01}, + {0x370f,0x02}, + {0x3721,0x6c}, + {0x3722,0x8d}, + {0x3725,0xc5}, + {0x3727,0x14}, + {0x3728,0x04}, + {0x37b7,0x04}, + {0x37b8,0x04}, + {0x37b9,0x06}, + {0x37bd,0x07}, + {0x37be,0x0f}, + {0x3901,0x02}, + {0x3903,0x40}, + {0x3905,0x8d}, + {0x3907,0x00}, + {0x3908,0x41}, + {0x391f,0x41}, + {0x3933,0x80}, + {0x3934,0x02}, + {0x3937,0x6f}, + {0x393a,0x01}, + {0x393d,0x01}, + {0x393e,0xc0}, + {0x39dd,0x41}, + {0x3e00,0x00}, + {0x3e01,0x4d}, + {0x3e02,0xc0}, + {0x3e09,0x00}, + {0x4509,0x28}, + {0x450d,0x61}, +}; +#endif + +#ifdef SC2356_1600X1200_30FPS +static struct regval_list sensor_1600x1200_30_regs[] = { + {0x0103,0x01}, + {0x0100,0x00}, + {0x3221,0x06},//hflip:0x06 vflip:0x60 + {0x36e9,0x80}, + {0x36e9,0x24}, + {0x301f,0x01}, + {0x3301,0xff}, + {0x3304,0x68}, + {0x3306,0x40}, + {0x3308,0x08}, + {0x3309,0xa8}, + {0x330b,0xb0}, + {0x330c,0x18}, + {0x330d,0xff}, + {0x330e,0x20}, + {0x331e,0x59}, + {0x331f,0x99}, + {0x3333,0x10}, + {0x335e,0x06}, + {0x335f,0x08}, + {0x3364,0x1f}, + {0x337c,0x02}, + {0x337d,0x0a}, + {0x338f,0xa0}, + {0x3390,0x01}, + {0x3391,0x03}, + {0x3392,0x1f}, + {0x3393,0xff}, + {0x3394,0xff}, + {0x3395,0xff}, + {0x33a2,0x04}, + {0x33ad,0x0c}, + {0x33b1,0x20}, + {0x33b3,0x38}, + {0x33f9,0x40}, + {0x33fb,0x48}, + {0x33fc,0x0f}, + {0x33fd,0x1f}, + {0x349f,0x03}, + {0x34a6,0x03}, + {0x34a7,0x1f}, + {0x34a8,0x38}, + {0x34a9,0x30}, + {0x34ab,0xb0}, + {0x34ad,0xb0}, + {0x34f8,0x1f}, + {0x34f9,0x20}, + {0x3630,0xa0}, + {0x3631,0x92}, + {0x3632,0x64}, + {0x3633,0x43}, + {0x3637,0x49}, + {0x363a,0x85}, + {0x363c,0x0f}, + {0x3650,0x31}, + {0x3670,0x0d}, + {0x3674,0xc0}, + {0x3675,0xa0}, + {0x3676,0xa0}, + {0x3677,0x92}, + {0x3678,0x96}, + {0x3679,0x9a}, + {0x367c,0x03}, + {0x367d,0x0f}, + {0x367e,0x01}, + {0x367f,0x0f}, + {0x3698,0x83}, + {0x3699,0x86}, + {0x369a,0x8c}, + {0x369b,0x94}, + {0x36a2,0x01}, + {0x36a3,0x03}, + {0x36a4,0x07}, + {0x36ae,0x0f}, + {0x36af,0x1f}, + {0x36bd,0x22}, + {0x36be,0x22}, + {0x36bf,0x22}, + {0x36d0,0x01}, + {0x370f,0x02}, + {0x3721,0x6c}, + {0x3722,0x8d}, + {0x3725,0xc5}, + {0x3727,0x14}, + {0x3728,0x04}, + {0x37b7,0x04}, + {0x37b8,0x04}, + {0x37b9,0x06}, + {0x37bd,0x07}, + {0x37be,0x0f}, + {0x3901,0x02}, + {0x3903,0x40}, + {0x3905,0x8d}, + {0x3907,0x00}, + {0x3908,0x41}, + {0x391f,0x41}, + {0x3933,0x80}, + {0x3934,0x02}, + {0x3937,0x6f}, + {0x393a,0x01}, + {0x393d,0x01}, + {0x393e,0xc0}, + {0x39dd,0x41}, + {0x3e00,0x00}, + {0x3e01,0x4d}, + {0x3e02,0xc0}, + {0x3e09,0x00}, + {0x4509,0x28}, + {0x450d,0x61}, + + // {0x4816,0x61},//{0x4816,0x65}, //vc ch1 + // {0x3222,0x00}, + // {0x3224,0x92}, + // {0x300a,0x40}, + // {0x0100,0x01}, +}; +#endif +static struct regval_list sensor_master_regs[] = { + + {0x4816,0x61},//vc ch0 + + {0x300a,0x40},//bit[6]:fsync output + {0x3032,0xa0},//bit[7]:output fsync + + {0x0100,0x01}, + +}; + +static struct regval_list sensor_slave_regs[] = { + + {0x4816,0x65},//vc ch1 + + {0x3222,0x02},//slave (0x00 :master) + {0x3224,0x83}, + + {0x0100,0x01}, + +}; + + +/* + * Here we'll try to encapsulate the changes for just the output + * video format. + * + */ + +static struct sensor_switch_cfg_t* sensor_mipi_switch_get_cfg(int id) +{ + return (&sensor_switch_cfg[0]); + +} + +static struct regval_list sensor_fmt_raw[] = { + +}; + +static int sensor_s_exp(int id, unsigned int exp_val) +{ + unsigned int tmp_exp_val = exp_val; + + sensor_write(id, EXP_HIGH, (tmp_exp_val >> 12) & 0x0f); + sensor_write(id, EXP_MID, (tmp_exp_val >> 4) & 0xFF); + sensor_write(id, EXP_LOW, (tmp_exp_val << 4) & 0xf0); + + return 0; +} + + +#define GPIO_SWITCH_NUM 163 //PF3 +// 初始化GPIO +static int init_gpio(void) { + // 设置GPIO引脚为输出模式 + hal_gpio_set_direction(GPIOF(3), GPIO_DIRECTION_OUTPUT); + + return 0; +} + +static void control_gpio(int value) { + + hal_gpio_set_data(GPIOF(3), value); + +} + +unsigned char analog_Gain_Reg[] = + {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f}; + +static int setSensorGain(int id, int gain) +{ + int ana_gain = gain / GAIN_STEP_BASE; + int gain_flag = 1; + + if(ana_gain >= 32 * 2) { + gain_flag = 5; + } else if(ana_gain >= 32) { + gain_flag = 5; + } else if(ana_gain >= 16) { + gain_flag = 4; + } else if(ana_gain >= 8) { + gain_flag = 3; + } else if(ana_gain >= 4) { + gain_flag = 2; + } else if(ana_gain >= 2) { + gain_flag = 1; + } else { + gain_flag = 0; + } + + sensor_write(id, ANA_GAIN, analog_Gain_Reg[gain_flag]); + int dig_Gain = gain >> gain_flag; + if(dig_Gain < 2 * GAIN_STEP_BASE) { + //1/128 + sensor_write(id, DIG_GAIN, 0x00); + sensor_write(id, DIG_FINE_GAIN, dig_Gain - 128 + 0x80); + //sensor_print("sensor set analog_gain:0x%02x, dig_gain:0x%02x, dig_fine_gain:0x%02x", analog_Gain_Reg[gain_flag], 0x00, dig_Gain - 128 + 0x80); + } else if(dig_Gain < 4 * GAIN_STEP_BASE) { + //1/64 + sensor_write(id, DIG_GAIN, 0x01); + sensor_write(id, DIG_FINE_GAIN, (dig_Gain - 128 * 2) / 2 + 0x80); + //sensor_print("sensor set analog_gain:0x%02x, dig_gain:0x%02x, dig_fine_gain:0x%02x", analog_Gain_Reg[gain_flag], 0x01, (dig_Gain - 128 * 2) / 2 + 0x80); + } else if(dig_Gain < 8 * GAIN_STEP_BASE) { + //1/32 + sensor_write(id, DIG_GAIN, 0x03); + sensor_write(id, DIG_FINE_GAIN, (dig_Gain - 128 * 4) / 4 + 0x80); + //sensor_print("sensor set analog_gain:0x%02x, dig_gain:0x%02x, dig_fine_gain:0x%02x", analog_Gain_Reg[gain_flag], 0x03, (dig_Gain - 128 * 4) / 4 + 0x80); + } else { + sensor_write(id, DIG_GAIN, 0x03); + sensor_write(id, DIG_FINE_GAIN, 0xfe); + } + + return 0; +} + +static int sensor_s_gain(int id, int gain_val) +{ + sensor_dbg("gain_val:%d\n", gain_val); + setSensorGain(id, gain_val); + + return 0; +} + +static int sc2356_sensor_vts; +static int sensor_s_exp_gain(int id, struct sensor_exp_gain *exp_gain) +{ + int exp_val,gain_val; + int shutter = 0, frame_length = 0; + + //sensor_print("sensor_s_exp_gain exp:%d gain:%d\n", exp_gain->gain_val, exp_gain->exp_val); + if((exp_gain->exp_val - exp_gain->exp_val / 16 * 16) > 0) { + exp_val = exp_gain->exp_val / 16 + 1; + } else { + exp_val = exp_gain->exp_val / 16; + } + exp_val = exp_val & 0xffff; + + gain_val = exp_gain->gain_val * GAIN_STEP_BASE; + if((gain_val - gain_val / 16 * 16) > 0) { + gain_val = gain_val / 16 + 1; + } else { + gain_val = gain_val / 16; + } + if (exp_val > 1250){ + exp_val = 1250; + } + sensor_s_exp(id, exp_val); + sensor_s_gain(id, gain_val); + + return 0; +} + +static int sensor_power(int id, int on) +{ + if (on && (sensor_power_count[id])++ > 0) { + return 0; + } else if (!on && (sensor_power_count[id] == 0 || --(sensor_power_count[id]) > 0)) { + return 0; + } + switch(on){ + case PWR_ON: + sensor_print("PWR_ON!\n"); + vin_set_mclk_freq(id, MCLK); + hal_usleep(1200); + vin_set_mclk(id, 1); + vin_gpio_set_status(id, RESET, 1); + vin_gpio_set_status(id, PWDN, 1); + vin_gpio_write(id, PWDN, CSI_GPIO_LOW); + vin_gpio_write(id, RESET, CSI_GPIO_LOW); + hal_usleep(3000); + vin_gpio_write(id, PWDN, CSI_GPIO_HIGH); + vin_gpio_write(id, RESET, CSI_GPIO_HIGH); + hal_usleep(30000); + break; + case PWR_OFF: + sensor_print("PWR_OFF!do nothing\n"); + vin_set_mclk(id, 0); + hal_usleep(1000); + vin_gpio_set_status(id, PWDN, 1); + vin_gpio_set_status(id, RESET, 1); + vin_gpio_write(id, PWDN, CSI_GPIO_LOW); + vin_gpio_write(id, RESET, CSI_GPIO_LOW); + break; + default: + return -EINVAL; + } + + return 0; +} + +static int sensor_detect(int id){ + data_type rdval; + int eRet; + int times_out = 3; + + do{ + eRet = sensor_read(id, ID_REG_HIGH, &rdval); + sensor_print("eRet:%d, ID_VAL_HIGH:0x%x,times_out:%d\n", eRet, rdval, times_out); + hal_usleep(200); + times_out--; + }while(eRet < 0 && times_out > 0); + + sensor_read(id, ID_REG_HIGH, &rdval); + sensor_print("ID_VAL_HIGH = %2x, Done!\n", rdval); + + if(rdval != ID_VAL_HIGH) + return -ENODEV; + + sensor_read(id, ID_REG_LOW, &rdval); + sensor_print("ID_VAL_LOW = %2x, Done!\n", rdval); + if(rdval != ID_VAL_LOW) + return -ENODEV; + sensor_print("sc2356 id is 0x2356!\n"); + + return 0; +} + +static int sensor_init(int id) +{ + int ret; + + sensor_detect("sensor_init\n"); + ret = sensor_detect(id); + if(ret) { + sensor_err("chip found is not an target chip.\n"); + return ret; + } + + init_gpio(); + control_gpio(1); + + return 0; +} + +/* + * Store information about the video data format. + */ +static struct sensor_format_struct sensor_formats[] = { +#ifdef SC2356_800X600_30FPS + { + .mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, /*.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, */ + .width = 800, + .height = 600,//1080, + .hoffset = 0, + .voffset = 0, + .hts = 1920, + .vts = 1250, + .pclk = 72000000, + .mipi_bps = 297 * 1000 * 1000, + .fps_fixed = 30, + .bin_factor = 1, + .intg_min = 1 << 4, + .intg_max = 1125 << 4, + .gain_min = 1 << 4, + .gain_max = 16 << 4, + .offs_h = 0, + .offs_v = 0, + .regs = sensor_800x600_30_regs, + .regs_size = ARRAY_SIZE(sensor_800x600_30_regs), + }, +#endif + +#ifdef SC2356_1600X1200_30FPS + { + .mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, /*.mbus_code = MEDIA_BUS_FMT_SBGGR10_1X10, */ + .width = 1600, + .height = 1200,//1080, + .hoffset = 0, + .voffset = 0, + .hts = 1920, + .vts = 1250, + .pclk = 71250000, + .mipi_bps = 297 * 1000 * 1000, + .fps_fixed = 15, + .bin_factor = 1, + .intg_min = 1 << 4, + .intg_max = 1250 << 4, + .gain_min = 1 << 4, + .gain_max = 16 << 4, + .offs_h = 0, + .offs_v = 0, + .regs = sensor_1600x1200_30_regs, + .regs_size = ARRAY_SIZE(sensor_1600x1200_30_regs), + }, +#endif +}; + +static struct sensor_format_struct *sensor_get_format(int id, int isp_id) +{ + int ispid = clamp(isp_id, 0, ISP_GET_CFG_NUM - 1); + struct sensor_format_struct *sensor_format = NULL; + int wdr_on = isp_get_cfg[ispid].sensor_wdr_on; + int fps = isp_get_cfg[ispid].sensor_get_fps; + int i; + + if (current_win[id]) + return current_win[id]; + + for (i = 0; i < ARRAY_SIZE(sensor_formats); i++) { + if (sensor_formats[i].wdr_mode == wdr_on) { + if (sensor_formats[i].fps_fixed == fps) { + sensor_format = &sensor_formats[i]; + sensor_print("fine wdr is %d, fine fps is %d\n", wdr_on, fps); + goto done; + } + } + } + + if (sensor_format == NULL) { + for (i = 0; i < ARRAY_SIZE(sensor_formats); i++) { + if (sensor_formats[i].wdr_mode == wdr_on) { + sensor_format = &sensor_formats[i]; + isp_get_cfg[ispid].sensor_get_fps = sensor_format->fps_fixed; + sensor_print("fine wdr is %d, use fps is %d\n", wdr_on, sensor_format->fps_fixed); + goto done; + } + } + } + + if (sensor_format == NULL) { + sensor_format = &sensor_formats[0]; + isp_get_cfg[ispid].sensor_wdr_on = sensor_format->wdr_mode; + isp_get_cfg[ispid].sensor_get_fps = sensor_format->fps_fixed; + sensor_print("use wdr is %d, use fps is %d\n", sensor_format->wdr_mode, sensor_format->fps_fixed); + } + +done: + current_win[id] = sensor_format; + return sensor_format; +} + +static int sensor_g_mbus_config(int id, struct v4l2_mbus_config *cfg, struct mbus_framefmt_res *res) +{ + cfg->type = V4L2_MBUS_CSI2; + cfg->flags = 0 | V4L2_MBUS_CSI2_1_LANE | V4L2_MBUS_CSI2_CHANNEL_0 | V4L2_MBUS_CSI2_CHANNEL_1; + res->res_time_hs = 0x11; + return 0; +} + +static int sensor_reg_init_vc(int id, int isp_id) +{ + int ret; + struct sensor_exp_gain exp_gain; + int ispid = clamp(isp_id, 0, ISP_GET_CFG_NUM - 1); + int switch_choice; + struct sensor_switch_cfg_t *sensor_switch_config; + sensor_switch_config = sensor_mipi_switch_get_cfg(id); + sensor_switch_config->vsync_cnt = 0; + + for (switch_choice = SWITCH_SENSOR_A; switch_choice < 2; switch_choice++) + { + sensor_set_twi_addr(id,sensor_switch_config->i2c_addr_container[switch_choice]); + ret = sensor_write_array(id, sensor_default_regs, ARRAY_SIZE(sensor_default_regs)); + if (ret < 0) { + sensor_err("write sensor_default_regs error\n"); + return ret; + } + if (current_win[id]->regs) + ret = sensor_write_array(id, current_win[id]->regs, current_win[id]->regs_size); + if (ret < 0) + return ret; + + if(switch_choice == SWITCH_SENSOR_A){ + sensor_print("ready to write master regs for i2c_addr:0x%x\n", sensor_switch_config->i2c_addr_container[switch_choice]); + ret = sensor_write_array(id, sensor_master_regs, ARRAY_SIZE(sensor_master_regs)); + } + else + { + sensor_print("ready to write slave regs for i2c_addr:0x%x\n", sensor_switch_config->i2c_addr_container[switch_choice]); + ret = sensor_write_array(id, sensor_slave_regs, ARRAY_SIZE(sensor_slave_regs)); + } + } +sensor_set_twi_addr(id,sensor_switch_config->i2c_addr_container[0]); +#ifndef CONFIG_ISP_READ_THRESHOLD + exp_gain.exp_val = 1088; + exp_gain.gain_val = 16; +#else + if (ispid == 0) { + exp_gain.exp_val = clamp(*((unsigned int *)ISP0_NORFLASH_SAVE + 2), 16, 1125 << 4); + exp_gain.gain_val = clamp(*((unsigned int *)ISP0_NORFLASH_SAVE + 1), 16, 110 << 4); + printk("isp0 read gain is %d,exp is %d \n",*((unsigned int *)ISP0_NORFLASH_SAVE + 1),*((unsigned int *)ISP0_NORFLASH_SAVE + 2)); + } else { + exp_gain.exp_val = clamp(*((unsigned int *)ISP1_NORFLASH_SAVE + 2), 16, 1125 << 4); + exp_gain.gain_val = clamp(*((unsigned int *)ISP1_NORFLASH_SAVE + 1), 16, 110 << 4); + printk("isp1 read gain is %d,exp is %d \n",*((unsigned int *)ISP1_NORFLASH_SAVE + 1),*((unsigned int *)ISP1_NORFLASH_SAVE + 2)); + } + printk("<<regs) + ret = sensor_write_array(id, current_win[id]->regs, current_win[id]->regs_size); + if (ret < 0) + return ret; + +#ifndef CONFIG_ISP_READ_THRESHOLD + exp_gain.exp_val = 1088; + exp_gain.gain_val = 16; +#else + if (ispid == 0) { + exp_gain.exp_val = clamp(*((unsigned int *)ISP0_NORFLASH_SAVE + 2), 16, 1125 << 4); + exp_gain.gain_val = clamp(*((unsigned int *)ISP0_NORFLASH_SAVE + 1), 16, 110 << 4); + printk("isp0 read gain is %d,exp is %d \n",*((unsigned int *)ISP0_NORFLASH_SAVE + 1),*((unsigned int *)ISP0_NORFLASH_SAVE + 2)); + } else { + exp_gain.exp_val = clamp(*((unsigned int *)ISP1_NORFLASH_SAVE + 2), 16, 1125 << 4); + exp_gain.gain_val = clamp(*((unsigned int *)ISP1_NORFLASH_SAVE + 1), 16, 110 << 4); + printk("isp1 read gain is %d,exp is %d \n",*((unsigned int *)ISP1_NORFLASH_SAVE + 1),*((unsigned int *)ISP1_NORFLASH_SAVE + 2)); + } + printk("<<i2c_addr_container[switch_choice]); + sensor_print("Get i2c addr is 0x%x\n",sensor_switch_config->i2c_addr_container[switch_choice]); + + ret = sensor_detect(id); + if (ret) { + sensor_print("chip found is not an target chip, iic_addr = 0x%x\n", + sensor_switch_config->i2c_addr_container[switch_choice]); + sensor_switch_config->sensor_detect_flag[switch_choice] = false; + } else { + sensor_print("[0:A, 1:B] detect sensor%d i2c_addr = 0x%x\n", switch_choice, sensor_switch_config->i2c_addr_container[switch_choice]); + sensor_switch_config->sensor_detect_flag[switch_choice] = true; + sensor_num++; + } + } + sensor_print("detect sensor num : %d\n", sensor_num); + return sensor_num; +} + + +static int sensor_s_stream(int id, int isp_id, int enable) +{ + int sensor_num; + sensor_dbg("step sensor_s_stream\n"); + if (enable && sensor_stream_count[id]++ > 0) + return 0; + else if (!enable && (sensor_stream_count[id] == 0 || --sensor_stream_count[id] > 0)) + return 0; + + if (!enable) + return 0; + + sensor_num = sensor_init_with_switch(id); + + if (sensor_num == 2){ + return sensor_reg_init_vc(id, isp_id); + } + else{ + return sensor_reg_init(id, isp_id); + } +} + +static int sensor_test_i2c(int id) +{ + int ret; + sensor_power(id, PWR_ON); + ret = sensor_init(id); + sensor_power(id, PWR_OFF); + + return ret; +} + +struct sensor_fuc_core sc2356_core = { + .g_mbus_config = sensor_g_mbus_config, + .sensor_test_i2c = sensor_test_i2c, + .sensor_power = sensor_power, + .s_stream = sensor_s_stream, + .s_exp_gain = sensor_s_exp_gain, + .sensor_g_format = sensor_get_format, +}; diff --git a/lichee/rtos-hal/hal/source/vin/modules/sensor/sensor_register.c b/lichee/rtos-hal/hal/source/vin/modules/sensor/sensor_register.c index 165154f2e..9d74d6553 100755 --- a/lichee/rtos-hal/hal/source/vin/modules/sensor/sensor_register.c +++ b/lichee/rtos-hal/hal/source/vin/modules/sensor/sensor_register.c @@ -10,6 +10,9 @@ struct sensor_cfg_array sensor_array[] = { #ifdef CONFIG_SENSOR_SC2355_MIPI {"sc2355_mipi", &sc2355_core}, #endif +#ifdef CONFIG_SENSOR_SC2356_MIPI + {"sc2356_mipi", &sc2356_core}, +#endif #ifdef CONFIG_SENSOR_SC5336_MIPI {"sc5336_mipi", &sc5336_core}, #endif diff --git a/lichee/rtos-hal/hal/source/vin/platform/vin_config_sun8iw21p1.c b/lichee/rtos-hal/hal/source/vin/platform/vin_config_sun8iw21p1.c index 2e9895762..aa8691a83 100755 --- a/lichee/rtos-hal/hal/source/vin/platform/vin_config_sun8iw21p1.c +++ b/lichee/rtos-hal/hal/source/vin/platform/vin_config_sun8iw21p1.c @@ -54,7 +54,7 @@ unsigned int vin_vipp_irq[VIN_MAX_SCALER/DEV_VIRT_NUM] = { struct vin_clk_info vind_default_clk[VIN_MAX_CLK] = { [VIN_TOP_CLK] = { .clock = HAL_CLK_PERIPH_CSI_TOP, - .frequency = 340000000, + .frequency = 300000000, }, [VIN_TOP_CLK_SRC] = { .clock = HAL_CLK_PLL_CSIX4, @@ -590,16 +590,16 @@ struct vin_mclk_info vind_default_mclk[VIN_MAX_CCI] = { { .mclk = HAL_CLK_PERIPH_CSI_MASTER0, .clk_24m = HAL_CLK_SRC_HOSC, - .clk_pll = HAL_CLK_PLL_CSIX4, - .pin = GPIOA(12), - .pin_func = {0x4, 0xf}, + .clk_pll = HAL_CLK_PLL_CSI, + .pin = GPIOE(12), + .pin_func = {0x5, 0xf}, }, { .mclk = HAL_CLK_PERIPH_CSI_MASTER1, .clk_24m = HAL_CLK_SRC_HOSC, - .clk_pll = HAL_CLK_PLL_CSIX4, - .pin = GPIOA(13), - .pin_func = {0x4, 0xf}, + .clk_pll = HAL_CLK_PLL_CSI, + .pin = GPIOE(13), + .pin_func = {0x5, 0xf}, }, { .mclk = HAL_CLK_PERIPH_CSI_MASTER2, @@ -721,23 +721,115 @@ struct sensor_list global_sensors[VIN_MAX_CSI] = { .ir_led_gpio = 0xffff, }, #endif +#if defined(CONFIG_SENSOR_SC2356_MIPI) +#if 1 + /*mipi0 parser0*/ + [0] = { + .used = 1, + .sensor_name = "gc2083_mipi", + .sensor_twi_addr = 0x6e, + .sensor_twi_id = 0, + .mclk_id = 0, + .use_isp = 1, + .id = 0, + .addr_width = 16, + .data_width = 8, + .reset_gpio = GPIOF(5), + .pwdn_gpio = GPIOE(8), + .ir_cut_gpio[0] = GPIOF(1),/*-cut*/ + .ir_cut_gpio[1] = GPIOF(2),/*+cut*/ + .ir_led_gpio = 0xffff, + }, + /*mipi1 parser1*/ + [1] = { + .used = 1, + .sensor_name = "sc2356_mipi", + .sensor_twi_addr = 0x6c, + .sensor_twi_id = 1, + .mclk_id = 1, + .use_isp = 1, + .id = 1, + .addr_width = 16, + .data_width = 8, + .reset_gpio = GPIOE(6), + .pwdn_gpio = GPIOE(7), + .ir_cut_gpio[0] = 0xffff, /*-cut*/ + .ir_cut_gpio[1] =0xffff, /*+cut*/ + .ir_led_gpio = 0xffff, //GPIOE(10) + }, +#else + /*mipi0 parser0*/ + [0] = { + .used = 1, + .sensor_name = "sc2356_mipi", + .sensor_twi_addr = 0x6c, + .sensor_twi_id = 1, + .mclk_id = 1, + .use_isp = 1, + .id = 0, + .addr_width = 16, + .data_width = 8, + .reset_gpio = GPIOE(6), + .pwdn_gpio = GPIOE(7), + .ir_cut_gpio[0] = 0xffff, /*-cut*/ + .ir_cut_gpio[1] =0xffff, /*+cut*/ + .ir_led_gpio = 0xffff, //GPIOE(10) + }, + /*mipi1 parser1*/ + [1] = { + .used = 1, + .sensor_name = "gc2083_mipi", + .sensor_twi_addr = 0x6e, + .sensor_twi_id = 0, + .mclk_id = 0, + .use_isp = 1, + .id = 1, + .addr_width = 16, + .data_width = 8, + .reset_gpio = GPIOF(5), + .pwdn_gpio = GPIOE(8), + .ir_cut_gpio[0] = GPIOF(1),/*-cut*/ + .ir_cut_gpio[1] = GPIOF(2),/*+cut*/ + .ir_led_gpio = 0xffff, + }, +#endif +#endif +#if defined(CONFIG_SENSOR_F355P_DVP) + /*dvp*/ + [2] = { + .used = 1, + .sensor_name = "f355p_dvp", + .sensor_twi_addr = 0x80, + .sensor_twi_id = 4, + .mclk_id = 2, + .use_isp = 1, + .id = 2, + .addr_width = 8, + .data_width = 8, + .reset_gpio = GPIOI(4), + .pwdn_gpio = 0xffff, + .ir_cut_gpio[0] = 0xffff,/*-cut*/ + .ir_cut_gpio[1] = 0xffff,/*+cut*/ + .ir_led_gpio = 0xffff, + }, +#endif }; struct vin_core global_video[VIN_MAX_VIDEO] = { [0] = { .used = 1, .id = 0, - .rear_sensor = 2, + .rear_sensor = 0, .front_sensor = 0, - .csi_sel = 2, - .mipi_sel = 0xff, + .csi_sel = 0, + .mipi_sel = 0, .isp_sel = 0, .tdm_rx_sel = 0, .isp_tx_ch = 0, .base = CSI_DMA0_REG_BASE, .irq = SUNXI_IRQ_CSIC_DMA0, - .o_width = 512, - .o_height = 288, + .o_width = 1920, + .o_height = 1080, //.fourcc = V4L2_PIX_FMT_LBC_2_5X, .fourcc = V4L2_PIX_FMT_NV12, .use_sensor_list = 0, @@ -745,17 +837,18 @@ struct vin_core global_video[VIN_MAX_VIDEO] = { [1] = { .used = 1, .id = 1, - .rear_sensor = 0, - .front_sensor = 0, - .csi_sel = 0, - .mipi_sel = 0, + .rear_sensor = 1, + .front_sensor = 1, + .csi_sel = 1, + .mipi_sel = 1, + .csi_ch = 0x10, .isp_sel = 1, .tdm_rx_sel = 1, .isp_tx_ch = 0, .base = CSI_DMA0_REG_BASE, .irq = SUNXI_IRQ_CSIC_DMA0, - .o_width = 512, - .o_height = 288, + .o_width = 1600, + .o_height = 1200, //.fourcc = V4L2_PIX_FMT_LBC_2_5X, .fourcc = V4L2_PIX_FMT_NV12, .use_sensor_list = 0, @@ -764,16 +857,17 @@ struct vin_core global_video[VIN_MAX_VIDEO] = { .used = 1, .id = 2, .rear_sensor = 1, - .front_sensor = 0, - .csi_sel = 1, + .front_sensor = 1, + .csi_sel =1, .mipi_sel = 1, + .csi_ch = 0x11, .isp_sel = 2, .tdm_rx_sel = 2, .isp_tx_ch = 0, .base = CSI_DMA0_REG_BASE, .irq = SUNXI_IRQ_CSIC_DMA0, - .o_width = 512, - .o_height = 288, + .o_width = 1600, + .o_height = 1200, //.fourcc = V4L2_PIX_FMT_LBC_2_5X, .fourcc = V4L2_PIX_FMT_NV12, .use_sensor_list = 0, diff --git a/lichee/rtos-hal/hal/source/vin/vin.c b/lichee/rtos-hal/hal/source/vin/vin.c index ea4012fb7..f0b868d4e 100755 --- a/lichee/rtos-hal/hal/source/vin/vin.c +++ b/lichee/rtos-hal/hal/source/vin/vin.c @@ -582,24 +582,6 @@ static int vin_g_config(void) vind_default_mclk[i].pin = (gpio_cfg.port - 1) * 32 + gpio_cfg.port_num; vind_default_mclk[i].pin_func[0] = gpio_cfg.mul_sel; vind_default_mclk[i].pin_func[1] = 0xf; - sprintf(sub_name, "twi_id%d", i); - ret = Hal_Cfg_GetSubKeyValue(main_name, sub_name, (void*)&ivalue, 1); - if(0 == ret) { - vin_err("%s is %d ok, default:%d\n", sub_name, ivalue, global_sensors[i].sensor_twi_id); - global_sensors[i].sensor_twi_id = ivalue; - }else{ - vin_err("%s is %d faill, default:%d\n", sub_name, ivalue, global_sensors[i].sensor_twi_id); - } - - sprintf(sub_name, "twi_addr%d", i); - ret = Hal_Cfg_GetSubKeyValue(main_name, sub_name, (void*)&ivalue, 1); - if(0 == ret) { - vin_err("%s is %d ok, default:0x%x\n", sub_name, ivalue, global_sensors[i].sensor_twi_addr); - global_sensors[i].sensor_twi_addr = ivalue; - }else{ - vin_err("%s is %d faill, default:0x%x\n", sub_name, ivalue, global_sensors[i].sensor_twi_addr); - } - } return 0; } @@ -774,8 +756,16 @@ int csi_init(int argc, const char **argv) vin_subdev_ccu_en(i, PWR_ON); vin_pipeline_set_mbus_config(i); - for (j = 0; j < vinc->total_rx_ch; j++) { - csic_isp_input_select(vinc->isp_sel/ISP_VIRT_NUM, vinc->isp_sel%ISP_VIRT_NUM + j, vinc->csi_sel, j); + + if ((vinc->csi_ch != 0xff) && (vinc->csi_ch & 0x10)) + { + csic_isp_input_select(vinc->isp_sel/ISP_VIRT_NUM, vinc->isp_sel%ISP_VIRT_NUM + 0, vinc->csi_sel, vinc->csi_ch & 0xf); + } + else + { + for (j = 0; j < vinc->total_rx_ch; j++) { + csic_isp_input_select(vinc->isp_sel/ISP_VIRT_NUM, vinc->isp_sel%ISP_VIRT_NUM + j, vinc->csi_sel, j); + } } csic_vipp_input_select(vinc->vipp_sel/VIPP_VIRT_NUM, vinc->isp_sel/ISP_VIRT_NUM, vinc->isp_tx_ch); diff --git a/lichee/rtos-hal/hal/source/vin/vin.h b/lichee/rtos-hal/hal/source/vin/vin.h index bf12bd2a1..eb35cb530 100755 --- a/lichee/rtos-hal/hal/source/vin/vin.h +++ b/lichee/rtos-hal/hal/source/vin/vin.h @@ -37,12 +37,12 @@ #define VIN_PLL_CSI_RATE (2376UL*1000*1000) #ifdef CONFIG_SUPPORT_THREE_CAMERA -#define MEMRESERVE 0x421FE000 -#define MEMRESERVE_SIZE (0xe00000 - 0x3000) //0x2000 reserved for boot0 read flash and write to it +#define MEMRESERVE 0x43210000 +#define MEMRESERVE_SIZE (0x01E00000 - 0x3000) //0x2000 reserved for boot0 read flash and write to it #else // #define MEMRESERVE 0x5f700000 #define MEMRESERVE 0x43200000 -#define MEMRESERVE_SIZE (0xa00000 - 0x2000) //0x2000 reserved for boot0 read flash and write to it +#define MEMRESERVE_SIZE (0x1400000 - 0x2000) //0x2000 reserved for boot0 read flash and write to it #endif extern struct rt_memheap isp_mempool; diff --git a/lichee/rtos-hal/hal/source/vin/vin_cci/cci_helper.c b/lichee/rtos-hal/hal/source/vin/vin_cci/cci_helper.c index 1cffbfa2f..0b7556347 100755 --- a/lichee/rtos-hal/hal/source/vin/vin_cci/cci_helper.c +++ b/lichee/rtos-hal/hal/source/vin/vin_cci/cci_helper.c @@ -22,6 +22,19 @@ // //} +int sensor_set_twi_addr(int id, int addr) +{ + + global_sensors[id].sensor_twi_addr = addr; + + return 0; +} + +int sensor_get_twi_addr(int id) +{ + return global_sensors[id].sensor_twi_addr; +} + static int cci_read_a8_d8(int id, unsigned char addr, unsigned char *value) { unsigned char data[2]; diff --git a/lichee/rtos-hal/hal/source/vin/vin_cci/cci_helper.h b/lichee/rtos-hal/hal/source/vin/vin_cci/cci_helper.h index 48a6fc1f0..6f69438ab 100755 --- a/lichee/rtos-hal/hal/source/vin/vin_cci/cci_helper.h +++ b/lichee/rtos-hal/hal/source/vin/vin_cci/cci_helper.h @@ -25,6 +25,8 @@ struct regval_list { }; //u64 v4l2_get_timestamp(void); +int sensor_set_twi_addr(int id, int addr); +int sensor_get_twi_addr(int id); int sensor_read(int id, addr_type reg, data_type *value); int sensor_write(int id, addr_type reg, data_type value); int sensor_write_array(int id, struct regval_list *regs, int array_size); diff --git a/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H/gc2083_mipi_isp600_20241112_color.h b/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H/gc2083_mipi_isp600_20241112_color.h index f3545274e..0199f1d37 100755 --- a/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H/gc2083_mipi_isp600_20241112_color.h +++ b/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H/gc2083_mipi_isp600_20241112_color.h @@ -68,7 +68,7 @@ struct isp_test_param gc2083_mipi_isp_test_settings = { .gtm_en = 1, .gamma_en = 1, .cem_en = 1, - .encpp_en = 1, + .encpp_en = 0, .enc_3dnr_en = 0, .enc_2dnr_en = 0 }; diff --git a/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H/sc2356_mipi_isp600_20241226_141139.h b/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H/sc2356_mipi_isp600_20241226_141139.h new file mode 100755 index 000000000..5ebd762a1 --- /dev/null +++ b/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H/sc2356_mipi_isp600_20241226_141139.h @@ -0,0 +1,8607 @@ +/* + ***************************************************************************** + * sc2356_mipi + * 1600x1200@20fps, wdr: 0 + * Hawkview ISP - sc2356_mipi config module + * Copyright (c) 2024 by Allwinnertech Co., Ltd. http://www.allwinnertech.com + * Version | Author | Date | Description + * 2.0 | Hawkview Tool | 2024/12/26 | Automatic generation. + * + ***************************************************************************** + */ + +#ifndef _SC2356_MIPI_DEFAULT_H_V853_ +#define _SC2356_MIPI_DEFAULT_H_V853_ + +#include "../../include/isp_ini_parse.h" + +struct isp_test_param sc2356_mipi_isp_test_settings = { + .isp_test_mode = 0, + .isp_test_exptime = 0, + .exp_line_start = 1000, + .exp_line_step = 1000, + .exp_line_end = 32000, + .exp_change_interval = 5, + .isp_test_gain = 0, + .gain_start = 256, + .gain_step = 64, + .gain_end = 8064, + .gain_change_interval = 5, + .isp_test_focus = 0, + .focus_start = 10, + .focus_step = 10, + .focus_end = 800, + .focus_change_interval = 5, + .isp_log_param = 0, + .isp_gain = 512, + .isp_exp_line = 19904, + .isp_color_temp = 5500, + .ae_forced = 0, + .lum_forced = 30, + .manual_en = 0, + .afs_en = 0, + .ae_en = 1, + .af_en = 0, + .awb_en = 0, + .hist_en = 0, + .wdr_split_en = 0, + .wdr_stitch_en = 0, + .otf_dpc_en = 0, + .ctc_en = 0, + .gca_en = 0, + .nrp_en = 0, + .denoise_en = 1, + .tdf_en = 1, + .blc_en = 0, + .wb_en = 0, + .dig_gain_en = 1, + .lsc_en = 0, + .msc_en = 0, + .pltm_en = 0, + .cfa_en = 0, + .lca_en = 0, + .sharp_en = 1, + .ccm_en = 0, + .defog_en = 0, + .cnr_en = 0, + .drc_en = 0, + .gtm_en = 0, + .gamma_en = 1, + .cem_en = 0, + .encpp_en = 0, + .enc_3dnr_en = 0, + .enc_2dnr_en = 0 +}; +struct isp_3a_param sc2356_mipi_isp_3a_settings = { + .define_ae_table = 1, + .ae_max_lv = 1650, + .ae_table_preview_length = 4, + .ae_table_preview = { + 22000, 30, 256, 256, 266, 266, + 30, 30, 256, 768, 266, 266, + 30, 15, 768, 768, 266, 266, + 15, 15, 768, 8000, 266, 266 + }, + .ae_table_capture_length = 4, + .ae_table_capture = { + 22000, 30, 256, 256, 266, 266, + 30, 30, 256, 768, 266, 266, + 30, 8, 768, 768, 266, 266, + 8, 8, 768, 6000, 266, 266 + }, + .ae_table_video_length = 4, + .ae_table_video = { + 22000, 30, 256, 256, 266, 266, + 30, 30, 256, 768, 266, 266, + 30, 8, 768, 768, 266, 266, + 8, 8, 768, 6000, 266, 266 + }, + .ae_win_weight = { + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1 + }, + .ae_hist_mod_en = 1, + .ae_hist0_sel = 0, + .ae_hist1_sel = 1, + .ae_stat_sel = 1, + .ae_ev_step = 40, + .ae_ConvDataIndex = 3, + .ae_blowout_pre_en = 0, + .ae_blowout_attr = 0, + .ae_reserve_0 = 11, + .ae_reserve_1 = 22, + .ae_reserve_2 = 33, + .ae_reserve_3 = 44, + .ae_reserve_4 = 55, + .ae_delay_frame = 0, + .exp_delay_frame = 0, + .gain_delay_frame = 0, + .exp_comp_step = 4, + .ae_touch_dist_ind = 0, + .ae_iso2gain_ratio = 16, + .ae_fno_step = { + 141, 145, 152, 163, 175, 190, 209, 233, + 266, 311, 379, 487, 657, 971, 1825, 3794 + }, + .wdr_split_cfg = { + 0, 0, 1, 12, 16, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 + }, + .wdr_comm_cfg = { + 0, 1, 32, 32, 0, 1, 0, 0, + 0, 1, 0, 0, 0 + }, + .awb_interval = 0, + .awb_speed = 46, + .awb_stat_sel = 1, + .awb_color_temper_low = 1800, + .awb_color_temper_high = 8000, + .awb_base_temper = 6500, + .awb_green_zone_dist = 66, + .awb_blue_sky_dist = 66, + .awb_light_num = 8, + .awb_light_info = { + 243, 256, 79, 256, 256, 256, 33, 1900, 32, 100, + 234, 256, 83, 256, 256, 256, 33, 2500, 32, 100, + 219, 256, 86, 256, 256, 256, 33, 2800, 32, 100, + 183, 256, 100, 256, 256, 256, 33, 4000, 55, 100, + 152, 256, 102, 256, 256, 256, 33, 4500, 33, 100, + 145, 256, 128, 256, 256, 256, 33, 5000, 55, 100, + 128, 256, 152, 256, 256, 256, 33, 6500, 33, 100, + 116, 256, 174, 256, 256, 256, 15, 7500, 33, 70 + }, + .awb_ext_light_num = 0, + .awb_ext_light_info = { + 0 + }, + .awb_skin_color_num = 0, + .awb_skin_color_info = { + 0 + }, + .awb_special_color_num = 0, + .awb_special_color_info = { + 0 + }, + .awb_preset_gain = { + 256, 256, 256, 256, 151, 405, 210, 340, 210, 340, + 145, 480, 265, 256, 256, 256, 285, 245, 280, 235, + 140, 480 + }, + .awb_rgain_favor = 256, + .awb_bgain_favor = 252, + .af_use_otp = 0, + .vcm_min_code = 380, + .vcm_max_code = 800, + .af_interval_time = 136, + .af_speed_ind = 20, + .af_auto_fine_en = 0, + .af_single_fine_en = 0, + .af_fine_step = 10, + .af_reserve_0 = 0, + .af_reserve_1 = 0, + .af_reserve_2 = 0, + .af_reserve_3 = 0, + .af_move_cnt = 4, + .af_still_cnt = 2, + .af_move_monitor_cnt = 6, + .af_still_monitor_cnt = 3, + .af_stable_min = 245, + .af_stable_max = 265, + .af_low_light_lv = 10, + .af_near_tolerance = 15, + .af_far_tolerance = 25, + .af_tolerance_off = 0, + .af_peak_th = 100, + .af_dir_th = 10, + .af_change_ratio = 30, + .af_move_minus = 2, + .af_still_minus = 1, + .af_scene_motion_th = 280, + .af_tolerance_tbl_len = 10, + .af_std_code_tbl = { + 0, 100, 200, 245, 280, 320, 350, 500, 800, 1024, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + .af_tolerance_value_tbl = { + 33, 33, 33, 26, 22, 18, 15, 13, 10, 10, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + } +}; +struct isp_dynamic_param sc2356_mipi_isp_iso_settings = { + .triger = { + .sharp_triger = 1, + .encpp_sharp_triger = 1, + .encoder_denoise_triger = 1, + .denoise_triger = 1, + .black_level_triger = 1, + .dpc_triger = 1, + .defog_value_triger = 1, + .pltm_dynamic_triger = 1, + .brightness_triger = 1, + .gcontrast_triger = 1, + .cem_triger = 1, + .tdf_triger = 1, + .color_denoise_triger = 1, + .ae_cfg_triger = 0, + .gtm_cfg_triger = 0, + .lca_cfg_triger = 1, + .wdr_cfg_triger = 1, + .cfa_triger = 1, + .shading_triger = 1 + }, + .isp_lum_mapping_point = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 + }, + .isp_gain_mapping_point = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 + }, + .isp_dynamic_cfg[0] = { + .sharp_cfg = { + 192, 192, 128, 255, 22, 22, 0, 0, 192, 192, 255, 255, 22, 22, 0, 0, 0, 64, 64, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 222, 255, 800, 750, 0, 9, 0, 0, 181, 255, 3200, 2530, 16, 32, 32, 256, 256, 16, 2, 195, 390, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 104, 366, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 20, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 0, 0, 0, 0, 200, 180, 160, 150, 16, 256, 256, 16, 16, 0, 256, 256, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -16, -16, -16, -16 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 111, 0, 333, 26, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 33, 225, 205, -44 + }, + .tdf_cfg = { + 0, 0, 0, 128, 255, 128, 255, 1024, 0, 128, 255, 128, 255, 0, 32, 10, 128, 4095, 4095, 128, 32, 32, 32, 255, 255, 255, 8, 128, 128, 1, 0, 8, 0, 64, 261 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 333, 256, 333, 11, 24, 24, 24, 3, 100, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 0, 0 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[1] = { + .sharp_cfg = { + 192, 192, 128, 255, 22, 22, 0, 0, 192, 192, 255, 255, 22, 22, 0, 0, 0, 64, 64, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 222, 255, 800, 750, 0, 9, 0, 0, 181, 255, 3200, 2530, 16, 32, 32, 256, 256, 16, 2, 195, 390, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 104, 366, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 20, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 0, 0, 0, 0, 200, 180, 160, 150, 16, 256, 256, 16, 16, 0, 256, 256, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -16, -16, -16, -16 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 111, 0, 333, 26, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 33, 225, 205, -44 + }, + .tdf_cfg = { + 0, 0, 0, 128, 255, 128, 255, 1024, 0, 128, 255, 128, 255, 0, 32, 10, 128, 4095, 4095, 128, 32, 32, 32, 255, 255, 255, 8, 128, 128, 1, 0, 8, 0, 64, 261 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 333, 256, 333, 11, 24, 24, 24, 3, 85, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 0, 0 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[2] = { + .sharp_cfg = { + 192, 192, 128, 255, 22, 22, 0, 0, 192, 192, 255, 255, 22, 22, 0, 0, 0, 64, 64, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 222, 255, 800, 750, 0, 9, 0, 0, 181, 255, 3200, 2530, 16, 32, 32, 256, 256, 16, 2, 195, 390, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 104, 366, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 20, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 4, 0, 4, 0, 200, 180, 160, 150, 16, 256, 256, 16, 16, 0, 256, 256, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -16, -16, -16, -16 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 111, 0, 333, 26, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 33, 225, 205, -44 + }, + .tdf_cfg = { + 83, 83, 1024, 128, 255, 128, 255, 1024, 0, 128, 255, 128, 255, 0, 32, 10, 128, 4095, 4095, 128, 32, 32, 32, 255, 255, 255, 8, 128, 128, 1, 0, 8, 0, 64, 261 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 333, 256, 333, 11, 24, 24, 24, 3, 70, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 0, 0 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[3] = { + .sharp_cfg = { + 192, 192, 128, 255, 22, 22, 255, 16, 192, 192, 255, 255, 22, 22, 32, 16, 0, 64, 64, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 222, 255, 800, 750, 0, 9, 0, 0, 181, 255, 3200, 2530, 16, 32, 32, 256, 256, 16, 2, 195, 390, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 104, 366, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 20, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 16, 0, 16, 0, 200, 180, 160, 150, 16, 256, 256, 16, 16, 0, 256, 256, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -16, -16, -16, -16 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 111, 0, 333, 26, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 33, 225, 205, -44 + }, + .tdf_cfg = { + 128, 128, 2048, 128, 255, 128, 255, 1024, 0, 128, 255, 128, 255, 0, 32, 10, 128, 4095, 4095, 128, 32, 32, 32, 255, 255, 255, 8, 128, 128, 1, 0, 8, 0, 64, 261 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 333, 256, 333, 11, 24, 24, 24, 3, 55, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 0, 0 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[4] = { + .sharp_cfg = { + 192, 192, 128, 255, 22, 22, 255, 16, 192, 192, 255, 255, 22, 22, 32, 16, 0, 64, 64, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 1, 0, 222, 255, 800, 750, 0, 10, 0, 0, 181, 255, 3200, 2530, 16, 16, 16, 256, 256, 16, 2, 195, 390, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 106, 370, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 21, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 16, 0, 16, 0, 255, 180, 160, 40, 16, 256, 256, 16, 16, 0, 256, 256, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -16, -16, -16, -16 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 121, 0, 111, 30, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 33, 220, 200, -44 + }, + .tdf_cfg = { + 128, 128, 2048, 128, 255, 128, 255, 1024, 0, 128, 255, 128, 255, 0, 32, 10, 128, 4095, 4095, 128, 32, 32, 32, 255, 255, 255, 8, 128, 128, 1, 0, 8, 0, 64, 261 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 333, 256, 333, 11, 24, 24, 24, 3, 40, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 0, 0 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[5] = { + .sharp_cfg = { + 2, 30, 128, 255, 2048, 1024, 64, 16, 1, 1, 1, 128, 2048, 1024, 16, 0, 0, 0, 768, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 128, 255, 581, 454, 0, 2, 0, 0, 120, 255, 1435, 952, 16, 128, 128, 320, 320, 16, 2, 32, 128, 16, 48, 1, 1, 1, 1, 0, 0, 0, 0, 90, 340, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 13, 8, 13, 16, 192, 192, 3, 2 + }, + .denoise_cfg = { + 16, 0, 16, 0, 255, 180, 160, 40, 16, 256, 256, 16, 16, 0, 256, 256, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -16, -16, -16, -16 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 95, 0, 2699, 22, 6, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 22, 235, 215, -44 + }, + .tdf_cfg = { + 128, 128, 2048, 128, 255, 128, 255, 1024, 0, 128, 255, 128, 255, 0, 32, 10, 128, 4095, 4095, 128, 32, 32, 32, 255, 255, 255, 8, 128, 128, 1, 0, 8, 0, 64, 261 + }, + .color_denoise = 80, + .ae_cfg = { + 256, 256, 333, 256, 11, 30, 30, 30, 3, 30, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 12, 0 + }, + .shading_comp = 64, + .d2d_lp0_th = { + 753, 655, 576, 515, 470, 440, 424, 420, 426, 441, 464, 494, 528, 566, 606, 647, 687, 725, 759, 788, 810, 825, 831, 825, 808, 777, 731, 669, 589, 489, 369, 227, 61 + }, + .d2d_lp1_th = { + 1804, 1460, 1161, 905, 690, 512, 368, 257, 174, 118, 85, 73, 79, 100, 134, 178, 228, 283, 339, 393, 444, 487, 521, 542, 548, 537, 504, 448, 365, 254, 110, 0, 0 + }, + .d2d_lp2_th = { + 1058, 873, 713, 574, 457, 358, 278, 215, 167, 133, 111, 101, 100, 107, 121, 141, 165, 191, 219, 246, 272, 295, 314, 327, 333, 331, 318, 294, 258, 207, 141, 57, 0 + }, + .d2d_lp3_th = { + 704, 595, 501, 420, 352, 296, 250, 215, 189, 172, 161, 157, 159, 165, 174, 187, 201, 216, 231, 245, 257, 267, 272, 273, 269, 258, 240, 213, 177, 131, 74, 5, 0 + }, + .d3d_flt0_thr_vc = { + 93, 103, 112, 122, 132, 142, 151, 161, 171, 180, 189, 198, 206, 214, 221, 228, 233, 238, 243, 246, 248, 249, 249, 248, 246, 242, 237, 230, 222, 212, 200, 187, 172 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[6] = { + .sharp_cfg = { + 2, 30, 128, 255, 2048, 1024, 64, 16, 1, 1, 1, 128, 2048, 1024, 16, 0, 0, 0, 768, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 180, 255, 551, 422, 0, 3, 0, 0, 120, 255, 1406, 952, 16, 64, 64, 256, 256, 16, 2, 32, 128, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 92, 344, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 14, 8, 13, 16, 224, 224, 3, 2 + }, + .denoise_cfg = { + 1, 0, 1, 0, 160, 140, 55, 66, 16, 256, 0, 16, 16, 8, 256, 0, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -32, -32, -32, -32 + }, + .dpc_cfg = { + 10, 160, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 101, 0, 2607, 22, 8, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 11, 250, 215, -44 + }, + .tdf_cfg = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + .color_denoise = 96, + .ae_cfg = { + 256, 256, 333, 256, 11, 30, 30, 30, 3, 28, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 15, 4 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 1033, 949, 888, 846, 823, 816, 824, 845, 876, 916, 964, 1017, 1073, 1132, 1190, 1246, 1298, 1345, 1384, 1414, 1432, 1438, 1428, 1402, 1358, 1293, 1206, 1095, 957, 793, 598, 372, 113 + }, + .d2d_lp1_th = { + 917, 728, 573, 450, 356, 289, 247, 226, 225, 241, 272, 315, 368, 428, 493, 560, 628, 693, 753, 806, 850, 881, 898, 898, 878, 837, 771, 678, 556, 403, 216, 0, 0 + }, + .d2d_lp2_th = { + 1065, 840, 650, 495, 370, 275, 206, 161, 139, 135, 149, 178, 219, 270, 328, 392, 459, 526, 592, 653, 708, 753, 788, 809, 813, 800, 765, 708, 624, 513, 372, 198, 0 + }, + .d2d_lp3_th = { + 866, 695, 551, 434, 341, 272, 222, 192, 179, 180, 195, 222, 258, 301, 351, 404, 459, 514, 568, 618, 663, 700, 728, 745, 749, 738, 710, 664, 598, 509, 396, 256, 89 + }, + .d3d_flt0_thr_vc = { + 333, 292, 259, 235, 219, 209, 205, 207, 213, 224, 237, 253, 271, 290, 310, 330, 348, 365, 380, 391, 399, 402, 400, 393, 379, 357, 328, 290, 243, 186, 118, 38, 0 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[7] = { + .sharp_cfg = { + 2, 30, 128, 255, 2048, 1024, 64, 16, 1, 1, 1, 128, 2048, 1024, 16, 0, 0, 0, 768, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 192, 255, 572, 437, 0, 4, 0, 0, 129, 255, 1437, 952, 16, 64, 64, 256, 256, 16, 2, 32, 128, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 94, 348, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 15, 8, 13, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 1, 0, 1, 0, 160, 140, 55, 66, 16, 256, 0, 16, 16, 8, 256, 0, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -32, -32, -32, -32 + }, + .dpc_cfg = { + 10, 160, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 101, 0, 2505, 22, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 11, 245, 215, -44 + }, + .tdf_cfg = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + .color_denoise = 112, + .ae_cfg = { + 256, 256, 333, 256, 11, 28, 28, 28, 3, 26, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 15, 6 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[8] = { + .sharp_cfg = { + 2, 30, 128, 255, 2048, 1024, 64, 16, 1, 1, 1, 128, 2048, 1024, 16, 0, 0, 0, 768, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 192, 255, 662, 612, 0, 5, 0, 0, 135, 255, 1552, 1025, 16, 64, 64, 256, 256, 16, 2, 32, 128, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 96, 352, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 16, 8, 13, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 3, 0, 3, 0, 160, 140, 55, 66, 16, 256, 0, 16, 16, 8, 256, 0, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -23, -23, -23, -23 + }, + .dpc_cfg = { + 10, 160, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 101, 0, 2322, 24, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 11, 235, 215, -44 + }, + .tdf_cfg = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 256, 333, 256, 11, 28, 28, 28, 3, 26, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 15, 8 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[9] = { + .sharp_cfg = { + 2, 30, 128, 255, 1024, 1024, 64, 16, 1, 1, 1, 128, 1024, 1024, 16, 0, 0, 0, 768, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 212, 255, 662, 600, 0, 6, 0, 0, 161, 255, 1800, 1250, 16, 80, 80, 256, 256, 16, 2, 64, 190, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 98, 354, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 17, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 3, 0, 3, 0, 160, 140, 55, 66, 16, 256, 0, 16, 16, 8, 256, 0, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -23, -23, -23, -23 + }, + .dpc_cfg = { + 10, 160, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 101, 0, 1999, 26, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 22, 235, 215, -44 + }, + .tdf_cfg = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 256, 333, 256, 11, 26, 26, 26, 3, 26, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 15, 10 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[10] = { + .sharp_cfg = { + 2, 30, 128, 255, 1024, 1024, 64, 16, 1, 1, 1, 128, 1024, 1024, 16, 0, 0, 0, 768, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 222, 255, 726, 675, 0, 7, 0, 0, 161, 255, 2100, 1700, 16, 64, 64, 256, 256, 16, 2, 96, 390, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 100, 358, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 18, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 3, 0, 3, 0, 160, 140, 55, 66, 16, 256, 0, 16, 16, 8, 256, 0, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -23, -23, -23, -23 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 101, 0, 999, 26, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 22, 235, 215, -44 + }, + .tdf_cfg = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 256, 333, 256, 11, 26, 26, 26, 3, 26, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 15, 12 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[11] = { + .sharp_cfg = { + 2, 30, 96, 255, 22, 22, 0, 0, 0, 0, 0, 64, 22, 22, 6, 0, 128, 64, 64, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 222, 255, 800, 750, 0, 8, 0, 0, 181, 255, 2800, 2230, 16, 48, 48, 256, 256, 16, 2, 195, 390, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 102, 362, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 19, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 20, 0, 20, 0, 200, 180, 160, 150, 16, 256, 256, 16, 16, 0, 256, 256, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -16, -16, -16, -16 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 111, 0, 666, 26, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 33, 235, 215, -44 + }, + .tdf_cfg = { + 83, 83, 1024, 0, 255, 0, 255, 1024, 0, 340, 44, 32, 10, 0, 32, 10, 8, 4095, 4095, 2, 128, 128, 128, 128, 0, 0, 8, 32, 255, 1, 0, 0, 0, 192, 261 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 256, 333, 256, 11, 24, 24, 24, 3, 26, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 15, 15 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[12] = { + .sharp_cfg = { + 2, 30, 96, 255, 22, 22, 0, 0, 0, 0, 0, 64, 22, 22, 6, 0, 128, 64, 64, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 0, 0, 222, 255, 800, 750, 0, 9, 0, 0, 181, 255, 3200, 2530, 16, 32, 32, 256, 256, 16, 2, 195, 390, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 104, 366, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 20, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 20, 0, 20, 0, 200, 180, 160, 150, 16, 256, 256, 16, 16, 0, 256, 256, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -16, -16, -16, -16 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 111, 0, 333, 26, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 33, 225, 205, -44 + }, + .tdf_cfg = { + 83, 83, 1024, 0, 255, 0, 255, 1024, 0, 340, 44, 32, 10, 0, 32, 10, 8, 4095, 4095, 2, 128, 128, 128, 128, 0, 0, 8, 32, 255, 1, 0, 0, 0, 192, 261 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 256, 333, 256, 11, 24, 24, 24, 3, 26, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 15, 15 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + }, + .isp_dynamic_cfg[13] = { + .sharp_cfg = { + 2, 30, 96, 255, 22, 22, 0, 0, 0, 0, 0, 64, 22, 22, 6, 0, 128, 64, 64, 0, 0, 16, 8, 16, 32, 64, 32, 16, 128, 0, 32, 32, 14, 14, 32, 32, 0, 0, 0, 0, 666, 777, 0, 0, 1 + }, + .encpp_sharp_cfg = { + 1, 0, 222, 255, 800, 750, 0, 10, 0, 0, 181, 255, 3200, 2530, 16, 16, 16, 256, 256, 16, 2, 195, 390, 16, 32, 1, 1, 1, 1, 1, 1, 1, 1, 106, 370, 0, 0, 64 + }, + .encoder_denoise_cfg = { + 0, 1, 6, 21, 8, 6, 16, 254, 254, 3, 2 + }, + .denoise_cfg = { + 20, 0, 20, 0, 200, 180, 160, 150, 16, 256, 256, 16, 16, 0, 256, 256, 16, 16, 4, 1024, 1024, 1024, 1024, 0, 0, 0, 0 + }, + .black_level = { + -16, -16, -16, -16 + }, + .dpc_cfg = { + 10, 144, 160, 164, 64, 2048, 6, -18 + }, + .pltm_dynamic_cfg = { + 0, 60, 15, 0, 121, 0, 111, 30, 10, 640, 16, 100 + }, + .defog_value = 5, + .brightness = 0, + .contrast = 0, + .cem_cfg = { + 0, 33, 220, 200, -44 + }, + .tdf_cfg = { + 83, 83, 1024, 0, 255, 0, 255, 1024, 0, 340, 44, 32, 10, 0, 32, 10, 8, 4095, 4095, 2, 128, 128, 128, 128, 0, 0, 8, 32, 255, 1, 0, 0, 0, 192, 261 + }, + .color_denoise = 128, + .ae_cfg = { + 256, 256, 333, 256, 11, 24, 24, 24, 3, 26, 4, 30, 2, 25, 31, 10, 20, 30, 40 + }, + .gtm_cfg = { + 224, 10, 10, 33, 166, 2, 2, 0, 0 + }, + .lca_cfg = { + 256, 512, 320, 96, 512, 9, 280, 32, 11, 15, 15 + }, + .wdr_cfg = { + 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048, 512, 3840, 64, 259, 3840, 3845, 1024, 64, 2048, 16, 2048, 4095, 1024, 2048 + }, + .cfa_cfg = { + 0, 15, 15 + }, + .shading_comp = 0, + .d2d_lp0_th = { + 521, 584, 641, 694, 741, 784, 822, 856, 886, 913, 936, 955, 972, 986, 998, 1007, 1015, 1021, 1025, 1028, 1031, 1032, 1034, 1035, 1036, 1038, 1040, 1044, 1048, 1054, 1061, 1071, 1082 + }, + .d2d_lp1_th = { + 138, 234, 319, 393, 456, 510, 555, 592, 621, 643, 659, 669, 673, 673, 670, 663, 653, 641, 629, 615, 601, 588, 576, 566, 558, 553, 552, 555, 564, 577, 598, 625, 659 + }, + .d2d_lp2_th = { + 96, 136, 175, 213, 249, 283, 315, 346, 374, 400, 425, 447, 467, 484, 499, 512, 522, 530, 535, 537, 537, 533, 527, 518, 505, 490, 471, 449, 423, 394, 362, 326, 286 + }, + .d2d_lp3_th = { + 21, 83, 141, 195, 245, 290, 332, 370, 404, 434, 461, 484, 503, 519, 531, 541, 546, 549, 549, 545, 538, 529, 517, 501, 483, 463, 440, 414, 386, 355, 322, 287, 250 + }, + .d3d_flt0_thr_vc = { + 76, 120, 157, 189, 216, 239, 256, 271, 282, 290, 295, 299, 301, 302, 303, 304, 305, 307, 310, 316, 323, 333, 346, 363, 384, 404, 410, 431, 470, 537, 568, 600, 615 + }, + .sharp_edge_lum = { + 266, 252, 250, 265, 286, 299, 308, 318, 324, 323, 318, 313, 302, 280, 260, 256, 263, 276, 294, 320, 357, 409, 481, 573, 663, 735, 790, 837, 869, 882, 901, 949, 1012 + }, + .encpp_sharp_edge_lum = { + 0, 14, 25, 32, 39, 51, 65, 80, 99, 124, 152, 179, 203, 224, 237, 245, 271, 336, 428, 526, 623, 709, 767, 782, 772, 761, 783, 858, 941, 988, 1006, 1016, 1023 + } + } +}; +struct isp_tunning_param sc2356_mipi_isp_tuning_settings = { + .flash_gain = 80, + .flash_delay_frame = 16, + .flicker_type = 1, + .flicker_ratio = 15, + .hor_visual_angle = 60, + .ver_visual_angle = 40, + .focus_length = 300, + .gamma_num = 5, + .rolloff_ratio = 0, + .gtm_hist_sel = 1, + .gtm_type = 1, + .gamma_type = 0, + .auto_alpha_en = 0, + .hist_pix_cnt = 0, + .dark_minval = 255, + .bright_minval = 255, + .plum_var = { + {128, 128, 128, 128, 128, 128, 128, 128, 128}, + {128, 128, 128, 128, 128, 128, 128, 128, 128}, + {140, 140, 132, 130, 128, 128, 128, 128, 128}, + {400, 380, 360, 333, 315, 279, 233, 168, 133}, + {430, 415, 395, 385, 375, 300, 220, 199, 152}, + {455, 400, 384, 384, 355, 290, 256, 175, 167}, + {512, 512, 469, 432, 417, 399, 333, 210, 180}, + {512, 512, 492, 488, 471, 406, 359, 226, 196}, + {512, 512, 492, 488, 471, 406, 359, 226, 196} + }, + .grad_th = 0, + .dir_v_th = 0, + .dir_h_th = 0, + .res_smth_high = 32, + .res_smth_low = 32, + .res_high_th = 4095, + .res_low_th = 4095, + .res_dir_a = 0, + .res_dir_d = 0, + .res_dir_v = 0, + .res_dir_h = 0, + .dpc_remove_mode = 1, + .dpc_sup_twinkle_en = 1, + .ctc_th_max = 262, + .ctc_th_min = 6, + .ctc_th_slope = 256, + .ctc_dir_wt = 170, + .ctc_dir_th = 512, + .bayer_gain = { + 1024, 1024, 1024, 1024 + }, + .ff_mod = 2, + .lsc_mode = 0, + .lsc_center_x = 2048, + .lsc_center_y = 2048, + .lsc_trig_cfg = { + 2200, 2800, 3000, 4000, 4200, 6500 + }, + .mff_mod = 2, + .msc_mode = 1, + .msc_trig_cfg = { + 2200, 2800, 3000, 4000, 4200, 6500 + }, + .msc_blw_lut = { + 100, 100, 100, 100, 100, 100, 100, 100, 0, 0, 0 + }, + .msc_blh_lut = { + 74, 74, 74, 74, 74, 74, 74, 82, 0, 0, 0 + }, + .gamma_trig_cfg = { + 1300, 1100, 900, 600, 300 + }, + .color_matrix_ini[0] = { + .matrix = { { 85, 86, 85 }, { 85, 86, 85 }, + { 85, 86, 85 } }, + .offset = { 0, 0, 0 } + }, + .color_matrix_ini[1] = { + .matrix = { { 85, 86, 85 }, { 85, 86, 85 }, + { 85, 86, 85 } }, + .offset = { 0, 0, 0 } + }, + .color_matrix_ini[2] = { + .matrix = { { 85, 86, 85 }, { 85, 86, 85 }, + { 85, 86, 85 } }, + .offset = { 0, 0, 0 } + }, + .ccm_trig_cfg = { + 2700, 4000, 6500 + }, + .gca_cfg = { + 960, 540, 0, 0, 0, 30, 0, 0, 255 + }, + .lca_pf_satu_lut = { + 0, 1, 3, 7, 11, 17, 26, 39, + 55, 77, 102, 135, 176, 221, 249, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255 + }, + .lca_gf_satu_lut = { + 0, 0, 1, 2, 4, 8, 12, 17, + 24, 31, 41, 52, 64, 78, 94, 111, + 130, 149, 167, 183, 198, 211, 223, 233, + 242, 249, 253, 255, 255, 255, 255, 255, + 255 + }, + .pltm_cfg = { + 0, 32, 54, 555, 444, 666, 0, 1, + 1, 0, 32, 256, 1, 0, 64, 256, + 160, 128, 128, 128, 128, 15, 15, 15, + 15, 512, 512, 512, 512, 64, 64, 64, + 64, 32, 32, 32, 32, 255, 255, 255, + 255, 5, 128, 384, 0 + }, + .sharp_comm_cfg = { + 0, 64, 256, 16, 0, 255, 64, 64, + 1, 1 + }, + .encpp_sharp_comm_cfg = { + 0, 64, 0, 16, 0, 255, 64, 64, + 1, 1 + }, + .sensor_temp = { + 256, 256, 256, 256, 0, 0, 0, 0, + 256, 256, 256, 256, 256, 256, 256, 256, + 0, 0, 0, 0, 256, 256, 256, 256, + 256, 256, 256, 256, 0, 0, 0, 0, + 256, 256, 256, 256, 256, 256, 256, 256, + 0, 0, 0, 0, 256, 256, 256, 256, + 256, 256, 256, 256, 0, 0, 0, 0, + 256, 256, 256, 256, 256, 256, 256, 256, + 0, 0, 0, 0, 256, 256, 256, 256, + 256, 256, 256, 256, 0, 0, 0, 0, + 256, 256, 256, 256, 256, 256, 256, 256, + 0, 0, 0, 0, 256, 256, 256, 256, + 256, 256, 256, 256, 0, 0, 0, 0, + 256, 256, 256, 256, 256, 256, 256, 256, + 0, 0, 0, 0, 256, 256, 256, 256, + 256, 256, 256, 256, 0, 0, 0, 0, + 256, 256, 256, 256, 256, 256, 256, 256, + 0, 0, 0, 0, 256, 256, 256, 256, + 256, 256, 256, 256, 0, 0, 0, 0, + 256, 256, 256, 256, 256, 256, 256, 256, + 0, 0, 0, 0, 256, 256, 256, 256 + }, + .denoise_comm_cfg = { + 28, 36, 24, 28, 64, 48, 32, 24, + 256, 256, 256, 256, 0, 1, 1, 1, + 7, 2, 6, 12, 9, 6, 4, 1, + 0, 0, 0, 0, 0, 0, 15, 3, + 12 + }, + .tdf_comm_cfg = { + 32, 208, 128, 32, 32, 0, 0, 0, + 0, 0, 0, 15, 0, 1, 1, 1, + 1, 1, 1, 1, 192, 224, 232, 240, + 248, 250, 252, 255, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 16, 24, 32, + 44, 56, 60, 63, 2 + }, + .isp_tdnf_df_shape = { + 0, 0, 2, 7, 16, 31, 54, 85, + 128, 177, 200, 217, 230, 240, 247, 252, + 255 + }, + .isp_tdnf_ratio_amp = { + 0, 16, 32, 48, 64, 80, 96, 112, + 128, 144, 160, 176, 192, 208, 224, 240, + 255 + }, + .isp_tdnf_k_dlt_bk = { + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 224, 192, 160, 128, 96, 64, 32, + 0 + }, + .isp_tdnf_ct_rt_bk = { + 0, 15, 31, 47, 63, 79, 95, 111, + 127, 143, 159, 175, 191, 207, 223, 239, + 255 + }, + .isp_tdnf_dtc_hf_bk = { + 0, 0, 3, 8, 15, 24, 35, 48, + 63, 80, 99, 120, 143, 168, 195, 224, + 255 + }, + .isp_tdnf_dtc_mf_bk = { + 0, 0, 3, 8, 15, 24, 35, 48, + 63, 80, 99, 120, 143, 168, 195, 224, + 255 + }, + .isp_tdnf_lay0_d2d0_rt_br = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 32, 64, 80, 143, + 255 + }, + .isp_tdnf_lay1_d2d0_rt_br = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 32, 64, 80, 143, + 255 + }, + .isp_tdnf_lay0_nrd_rt_br = { + 32, 32, 32, 32, 32, 32, 35, 48, + 63, 80, 99, 120, 143, 168, 195, 224, + 255 + }, + .isp_tdnf_lay1_nrd_rt_br = { + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 145, 165, 186, 208, 231, + 255 + }, + .isp_sharp_ss_value = { + 248, 253, 256, 255, 248, 232, 213, 195, + 185, 185, 187, 182, 177, 180, 182, 174, + 165, 164, 165, 159, 157, 169, 187, 202, + 208, 203, 200, 209, 223, 234, 241, 245, + 248 + }, + .isp_sharp_ls_value = { + 310, 451, 516, 457, 327, 197, 104, 67, + 62, 58, 48, 34, 20, 12, 8, 3, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0 + }, + .isp_sharp_hsv = { + 260, 215, 103, 189, 243, 256, 263, 276, + 295, 314, 330, 346, 371, 407, 446, 477, + 491, 487, 463, 422, 374, 336, 316, 310, + 307, 300, 290, 281, 275, 268, 258, 242, + 227, 220, 227, 243, 256, 261, 259, 256, + 255, 255, 256, 257, 258, 260 + }, + .encpp_sharp_ss_value = { + 262, 360, 411, 384, 316, 252, 206, 179, + 158, 132, 107, 91, 79, 67, 56, 50, + 39, 18, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0 + }, + .encpp_sharp_ls_value = { + 341, 451, 515, 497, 395, 231, 90, 46, + 54, 57, 51, 46, 42, 36, 31, 28, + 23, 11, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0 + }, + .encpp_sharp_hsv = { + 287, 286, 283, 276, 266, 257, 256, 268, + 289, 314, 339, 365, 397, 435, 469, 486, + 475, 446, 411, 380, 355, 336, 323, 314, + 307, 299, 290, 281, 272, 261, 247, 230, + 215, 209, 215, 229, 243, 252, 257, 258, + 257, 256, 256, 260, 266, 289 + }, + .isp_wdr_de_purpl_hsv_tbl = { + 63, 63, 63, 48, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 32, 48, + 63, 63, 63, 63, 63, 63, 63, 63 + }, + .isp_pltm_stat_gd_cv = { + { + 0, 0, 4, 11, 23, 44, 67, 101, + 151, 186, 196, 202, 208, 218, 253 + }, + { + 0, 0, 4, 11, 23, 44, 67, 101, + 151, 186, 196, 202, 208, 218, 253 + }, + { + 0, 0, 4, 11, 23, 44, 67, 101, + 151, 186, 196, 202, 208, 218, 253 + }, + { + 0, 0, 4, 11, 23, 44, 67, 101, + 151, 186, 196, 202, 208, 218, 253 + } + }, + .isp_pltm_df_cv = { + { + 0, 1, 1, 3, 4, 6, 9, 13, + 18, 24, 33, 43, 56, 71, 89, 108, + 128, 148, 167, 184, 200, 212, 223, 231, + 238, 243, 246, 249, 251, 253, 254, 255, + 255 + }, + { + 0, 1, 1, 3, 4, 6, 9, 13, + 18, 24, 33, 43, 56, 71, 89, 108, + 128, 148, 167, 184, 200, 212, 223, 231, + 238, 243, 246, 249, 251, 253, 254, 255, + 255 + }, + { + 0, 1, 1, 3, 4, 6, 9, 13, + 18, 24, 33, 43, 56, 71, 89, 108, + 128, 148, 167, 184, 200, 212, 223, 231, + 238, 243, 246, 249, 251, 253, 254, 255, + 255 + }, + { + 0, 1, 1, 3, 4, 6, 9, 13, + 18, 24, 33, 43, 56, 71, 89, 108, + 128, 148, 167, 184, 200, 212, 223, 231, + 238, 243, 246, 249, 251, 253, 254, 255, + 255 + } + }, + .isp_pltm_lum_map_cv = { + { + 255, 236, 218, 200, 182, 167, 152, 140, + 130, 122, 116, 112, 110, 108, 107, 106, + 105, 104, 103, 101, 98, 96, 94, 91, + 89, 87, 85, 83, 82, 80, 79, 78, + 76, 75, 74, 72, 71, 70, 68, 67, + 66, 65, 63, 62, 61, 60, 59, 58, + 57, 56, 55, 54, 53, 52, 51, 50, + 49, 48, 47, 46, 45, 44, 43, 42, + 42, 41, 40, 39, 38, 37, 37, 36, + 35, 34, 33, 33, 32, 31, 30, 30, + 29, 28, 28, 27, 26, 25, 25, 24, + 23, 23, 22, 21, 21, 20, 19, 19, + 18, 17, 17, 16, 16, 15, 14, 14, + 13, 13, 12, 11, 11, 10, 10, 9, + 9, 8, 7, 7, 6, 6, 5, 5, + 4, 4, 3, 3, 2, 2, 1, 1 + }, + { + 255, 234, 214, 194, 175, 158, 143, 129, + 118, 110, 104, 100, 98, 97, 96, 96, + 95, 94, 93, 91, 89, 87, 84, 82, + 80, 78, 76, 75, 73, 72, 71, 69, + 68, 67, 66, 65, 63, 62, 61, 60, + 59, 58, 56, 55, 54, 53, 52, 51, + 50, 49, 49, 48, 47, 46, 45, 44, + 43, 42, 42, 41, 40, 39, 38, 38, + 37, 36, 35, 35, 34, 33, 32, 32, + 31, 30, 30, 29, 28, 28, 27, 26, + 26, 25, 24, 24, 23, 22, 22, 21, + 21, 20, 19, 19, 18, 18, 17, 17, + 16, 15, 15, 14, 14, 13, 13, 12, + 12, 11, 11, 10, 10, 9, 9, 8, + 8, 7, 7, 6, 6, 5, 5, 4, + 4, 3, 3, 2, 2, 2, 1, 1 + }, + { + 255, 232, 210, 188, 168, 149, 132, 117, + 106, 97, 91, 87, 85, 84, 84, 84, + 84, 84, 82, 81, 79, 77, 75, 72, + 70, 68, 67, 65, 64, 63, 62, 61, + 60, 59, 58, 57, 55, 54, 53, 52, + 51, 50, 49, 48, 47, 47, 46, 45, + 44, 43, 42, 41, 41, 40, 39, 38, + 38, 37, 36, 35, 35, 34, 33, 33, + 32, 31, 31, 30, 29, 29, 28, 27, + 27, 26, 26, 25, 24, 24, 23, 23, + 22, 22, 21, 20, 20, 19, 19, 18, + 18, 17, 17, 16, 16, 15, 15, 14, + 14, 13, 13, 12, 12, 11, 11, 11, + 10, 10, 9, 9, 8, 8, 7, 7, + 7, 6, 6, 5, 5, 4, 4, 4, + 3, 3, 3, 2, 2, 1, 1, 1 + }, + { + 255, 230, 205, 181, 159, 138, 120, 104, + 92, 82, 76, 73, 71, 71, 71, 72, + 72, 72, 71, 70, 68, 66, 64, 62, + 60, 58, 57, 56, 55, 54, 53, 52, + 51, 50, 49, 48, 47, 46, 45, 44, + 44, 43, 42, 41, 40, 39, 39, 38, + 37, 37, 36, 35, 34, 34, 33, 32, + 32, 31, 31, 30, 29, 29, 28, 28, + 27, 26, 26, 25, 25, 24, 24, 23, + 23, 22, 22, 21, 21, 20, 20, 19, + 19, 18, 18, 17, 17, 16, 16, 15, + 15, 15, 14, 14, 13, 13, 12, 12, + 12, 11, 11, 10, 10, 10, 9, 9, + 9, 8, 8, 7, 7, 7, 6, 6, + 6, 5, 5, 4, 4, 4, 3, 3, + 3, 2, 2, 2, 2, 1, 1, 1 + } + }, + .isp_pltm_gtm_tbl = { + 0, 128, 256, 384, 512, 640, 768, 896, + 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, + 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, + 3072, 3200, 3328, 3456, 3584, 3712, 3840, 3968, + 4096, 4224, 4352, 4480, 4608, 4736, 4864, 4992, + 5120, 5248, 5376, 5504, 5632, 5760, 5888, 6016, + 6144, 6272, 6400, 6528, 6656, 6784, 6912, 7040, + 7168, 7296, 7424, 7552, 7680, 7808, 7936, 8064, + 8192, 8320, 8448, 8576, 8704, 8832, 8960, 9088, + 9216, 9344, 9472, 9600, 9728, 9856, 9984, 10112, + 10240, 10368, 10496, 10624, 10752, 10880, 11008, 11136, + 11264, 11392, 11520, 11648, 11776, 11904, 12032, 12160, + 12288, 12416, 12544, 12672, 12800, 12928, 13056, 13184, + 13312, 13440, 13568, 13696, 13824, 13952, 14080, 14208, + 14336, 14464, 14592, 14720, 14848, 14976, 15104, 15232, + 15360, 15488, 15616, 15744, 15872, 16000, 16128, 16256, + 16384, 16512, 16640, 16768, 16896, 17024, 17152, 17280, + 17408, 17536, 17664, 17792, 17920, 18048, 18176, 18304, + 18432, 18560, 18688, 18816, 18944, 19072, 19200, 19328, + 19456, 19584, 19712, 19840, 19968, 20096, 20224, 20352, + 20480, 20608, 20736, 20864, 20992, 21120, 21248, 21376, + 21504, 21632, 21760, 21888, 22016, 22144, 22272, 22400, + 22528, 22656, 22784, 22912, 23040, 23168, 23296, 23424, + 23552, 23680, 23808, 23936, 24064, 24192, 24320, 24448, + 24576, 24704, 24832, 24960, 25088, 25216, 25344, 25472, + 25600, 25728, 25856, 25984, 26112, 26240, 26368, 26496, + 26624, 26752, 26880, 27008, 27136, 27264, 27392, 27520, + 27648, 27776, 27904, 28032, 28160, 28288, 28416, 28544, + 28672, 28800, 28928, 29056, 29184, 29312, 29440, 29568, + 29696, 29824, 29952, 30080, 30208, 30336, 30464, 30592, + 30720, 30848, 30976, 31104, 31232, 31360, 31488, 31616, + 31744, 31872, 32000, 32128, 32256, 32384, 32512, 32640, + 32768, 32896, 33024, 33152, 33280, 33408, 33536, 33664, + 33792, 33920, 34048, 34176, 34304, 34432, 34560, 34688, + 34816, 34944, 35072, 35200, 35328, 35456, 35584, 35712, + 35840, 35968, 36096, 36224, 36352, 36480, 36608, 36736, + 36864, 36992, 37120, 37248, 37376, 37504, 37632, 37760, + 37888, 38016, 38144, 38272, 38400, 38528, 38656, 38784, + 38912, 39040, 39168, 39296, 39424, 39552, 39680, 39808, + 39936, 40064, 40192, 40320, 40448, 40576, 40704, 40832, + 40960, 41088, 41216, 41344, 41472, 41600, 41728, 41856, + 41984, 42112, 42240, 42368, 42496, 42624, 42752, 42880, + 43008, 43136, 43264, 43392, 43520, 43648, 43776, 43904, + 44032, 44160, 44288, 44416, 44544, 44672, 44800, 44928, + 45056, 45184, 45312, 45440, 45568, 45696, 45824, 45952, + 46080, 46208, 46336, 46464, 46592, 46720, 46848, 46976, + 47104, 47232, 47360, 47488, 47616, 47744, 47872, 48000, + 48128, 48256, 48384, 48512, 48640, 48768, 48896, 49024, + 49152, 49280, 49408, 49536, 49664, 49792, 49920, 50048, + 50176, 50304, 50432, 50560, 50688, 50816, 50944, 51072, + 51200, 51328, 51456, 51584, 51712, 51840, 51968, 52096, + 52224, 52352, 52480, 52608, 52736, 52864, 52992, 53120, + 53248, 53376, 53504, 53632, 53760, 53888, 54016, 54144, + 54272, 54400, 54528, 54656, 54784, 54912, 55040, 55168, + 55296, 55424, 55552, 55680, 55808, 55936, 56064, 56192, + 56320, 56448, 56576, 56704, 56832, 56960, 57088, 57216, + 57344, 57472, 57600, 57728, 57856, 57984, 58112, 58240, + 58368, 58496, 58624, 58752, 58880, 59008, 59136, 59264, + 59392, 59520, 59648, 59776, 59904, 60032, 60160, 60288, + 60416, 60544, 60672, 60800, 60928, 61056, 61184, 61312, + 61440, 61568, 61696, 61824, 61952, 62080, 62208, 62336, + 62464, 62592, 62720, 62848, 62976, 63104, 63232, 63360, + 63488, 63616, 63744, 63872, 64000, 64128, 64256, 64384, + 64512, 64640, 64768, 64896, 65024, 65152, 65280, 65535 + }, + .gamma_tbl_ini = { + { + /* gamma - 0 */ + /* R */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* G */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* B */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093 + }, + { + /* gamma - 1 */ + /* R */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* G */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* B */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093 + }, + { + /* gamma - 2 */ + /* R */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* G */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* B */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093 + }, + { + /* gamma - 3 */ + /* R */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* G */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* B */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093 + }, + { + /* gamma - 4 */ + /* R */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* G */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, + /* B */ + 0, 2, 3, 5, 6, 8, 9, 11, + 12, 14, 15, 17, 19, 20, 22, 24, + 26, 27, 29, 31, 33, 35, 37, 38, + 40, 43, 45, 47, 49, 51, 53, 56, + 58, 61, 63, 66, 68, 71, 74, 76, + 79, 82, 85, 88, 92, 95, 98, 101, + 105, 108, 112, 116, 120, 124, 128, 132, + 136, 140, 145, 149, 154, 158, 163, 168, + 173, 178, 183, 189, 194, 200, 205, 211, + 217, 223, 229, 235, 241, 247, 254, 260, + 267, 273, 280, 287, 294, 301, 307, 314, + 322, 329, 336, 343, 350, 358, 365, 373, + 380, 388, 395, 403, 410, 418, 426, 434, + 441, 449, 457, 465, 473, 480, 488, 496, + 504, 512, 520, 528, 536, 544, 552, 559, + 567, 575, 583, 591, 599, 607, 614, 622, + 630, 638, 645, 653, 661, 668, 676, 684, + 691, 699, 706, 714, 721, 728, 736, 743, + 751, 758, 765, 772, 780, 787, 794, 801, + 809, 816, 823, 830, 837, 844, 851, 858, + 865, 872, 879, 886, 893, 900, 907, 914, + 921, 928, 935, 942, 949, 955, 962, 969, + 976, 983, 989, 996, 1003, 1010, 1016, 1023, + 1030, 1036, 1043, 1050, 1056, 1063, 1070, 1076, + 1083, 1090, 1096, 1103, 1109, 1116, 1123, 1129, + 1136, 1142, 1149, 1155, 1162, 1168, 1175, 1181, + 1188, 1194, 1201, 1207, 1213, 1220, 1226, 1232, + 1239, 1245, 1251, 1257, 1264, 1270, 1276, 1282, + 1288, 1294, 1300, 1306, 1312, 1318, 1324, 1330, + 1336, 1342, 1348, 1354, 1359, 1365, 1371, 1376, + 1382, 1388, 1393, 1399, 1404, 1410, 1415, 1420, + 1426, 1431, 1436, 1442, 1447, 1452, 1457, 1462, + 1467, 1472, 1477, 1482, 1487, 1491, 1496, 1501, + 1506, 1510, 1515, 1519, 1524, 1528, 1533, 1537, + 1542, 1546, 1550, 1555, 1559, 1563, 1567, 1572, + 1576, 1580, 1584, 1588, 1592, 1596, 1600, 1604, + 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1636, + 1640, 1644, 1647, 1651, 1655, 1659, 1663, 1667, + 1670, 1674, 1678, 1682, 1686, 1689, 1693, 1697, + 1701, 1704, 1708, 1712, 1716, 1720, 1723, 1727, + 1731, 1735, 1739, 1742, 1746, 1750, 1754, 1758, + 1762, 1766, 1769, 1773, 1777, 1781, 1785, 1789, + 1793, 1797, 1801, 1804, 1808, 1812, 1816, 1820, + 1824, 1828, 1832, 1836, 1840, 1844, 1848, 1852, + 1856, 1860, 1863, 1867, 1871, 1875, 1879, 1883, + 1887, 1891, 1895, 1899, 1903, 1907, 1911, 1915, + 1919, 1923, 1926, 1930, 1934, 1938, 1942, 1946, + 1950, 1954, 1958, 1962, 1965, 1969, 1973, 1977, + 1981, 1985, 1989, 1993, 1996, 2000, 2004, 2008, + 2012, 2016, 2019, 2023, 2027, 2031, 2035, 2038, + 2042, 2046, 2050, 2054, 2057, 2061, 2065, 2069, + 2072, 2076, 2080, 2084, 2087, 2091, 2095, 2098, + 2102, 2106, 2110, 2113, 2117, 2121, 2124, 2128, + 2132, 2136, 2139, 2143, 2147, 2150, 2154, 2158, + 2161, 2165, 2169, 2172, 2176, 2180, 2183, 2187, + 2191, 2194, 2198, 2202, 2205, 2209, 2213, 2216, + 2220, 2224, 2227, 2231, 2235, 2238, 2242, 2246, + 2249, 2253, 2256, 2260, 2264, 2267, 2271, 2275, + 2278, 2282, 2286, 2289, 2293, 2296, 2300, 2304, + 2307, 2311, 2315, 2318, 2322, 2325, 2329, 2333, + 2336, 2340, 2343, 2347, 2351, 2354, 2358, 2361, + 2365, 2369, 2372, 2376, 2379, 2383, 2387, 2390, + 2394, 2397, 2401, 2405, 2408, 2412, 2415, 2419, + 2422, 2426, 2430, 2433, 2437, 2440, 2444, 2447, + 2451, 2455, 2458, 2462, 2465, 2469, 2472, 2476, + 2479, 2483, 2486, 2490, 2494, 2497, 2501, 2504, + 2508, 2511, 2515, 2518, 2522, 2525, 2529, 2532, + 2536, 2539, 2543, 2546, 2550, 2553, 2557, 2560, + 2564, 2567, 2571, 2574, 2578, 2581, 2585, 2588, + 2592, 2595, 2599, 2602, 2606, 2609, 2613, 2616, + 2620, 2623, 2627, 2630, 2634, 2637, 2640, 2644, + 2647, 2651, 2654, 2658, 2661, 2665, 2668, 2672, + 2675, 2678, 2682, 2685, 2689, 2692, 2696, 2699, + 2702, 2706, 2709, 2713, 2716, 2720, 2723, 2726, + 2730, 2733, 2737, 2740, 2744, 2747, 2750, 2754, + 2757, 2761, 2764, 2767, 2771, 2774, 2778, 2781, + 2784, 2788, 2791, 2795, 2798, 2801, 2805, 2808, + 2811, 2815, 2818, 2822, 2825, 2828, 2832, 2835, + 2838, 2842, 2845, 2848, 2852, 2855, 2859, 2862, + 2865, 2869, 2872, 2875, 2879, 2882, 2885, 2889, + 2892, 2895, 2899, 2902, 2905, 2909, 2912, 2915, + 2919, 2922, 2925, 2929, 2932, 2935, 2939, 2942, + 2945, 2949, 2952, 2955, 2958, 2962, 2965, 2968, + 2972, 2975, 2978, 2982, 2985, 2988, 2991, 2995, + 2998, 3001, 3005, 3008, 3011, 3015, 3018, 3021, + 3024, 3028, 3031, 3034, 3038, 3041, 3044, 3047, + 3051, 3054, 3057, 3060, 3064, 3067, 3070, 3074, + 3077, 3080, 3083, 3087, 3090, 3093, 3096, 3100, + 3103, 3106, 3110, 3113, 3116, 3119, 3123, 3126, + 3129, 3132, 3136, 3139, 3142, 3145, 3149, 3152, + 3155, 3158, 3162, 3165, 3168, 3171, 3175, 3178, + 3181, 3184, 3188, 3191, 3194, 3197, 3201, 3204, + 3207, 3210, 3214, 3217, 3220, 3223, 3226, 3230, + 3233, 3236, 3239, 3243, 3246, 3249, 3252, 3255, + 3259, 3262, 3265, 3268, 3272, 3275, 3278, 3281, + 3284, 3288, 3291, 3294, 3297, 3300, 3304, 3307, + 3310, 3313, 3316, 3320, 3323, 3326, 3329, 3332, + 3336, 3339, 3342, 3345, 3348, 3351, 3355, 3358, + 3361, 3364, 3367, 3370, 3374, 3377, 3380, 3383, + 3386, 3389, 3393, 3396, 3399, 3402, 3405, 3408, + 3412, 3415, 3418, 3421, 3424, 3427, 3431, 3434, + 3437, 3440, 3443, 3446, 3449, 3453, 3456, 3459, + 3462, 3465, 3468, 3471, 3474, 3478, 3481, 3484, + 3487, 3490, 3493, 3496, 3500, 3503, 3506, 3509, + 3512, 3515, 3518, 3521, 3524, 3528, 3531, 3534, + 3537, 3540, 3543, 3546, 3549, 3552, 3556, 3559, + 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3584, + 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, + 3611, 3614, 3618, 3621, 3624, 3627, 3630, 3633, + 3636, 3639, 3642, 3645, 3648, 3652, 3655, 3658, + 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, + 3685, 3688, 3692, 3695, 3698, 3701, 3704, 3707, + 3710, 3713, 3716, 3719, 3722, 3725, 3728, 3731, + 3735, 3738, 3741, 3744, 3747, 3750, 3753, 3756, + 3759, 3762, 3765, 3768, 3771, 3774, 3777, 3780, + 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, + 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, + 3832, 3835, 3838, 3841, 3844, 3848, 3851, 3854, + 3857, 3860, 3863, 3866, 3869, 3872, 3875, 3878, + 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902, + 3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, + 3929, 3932, 3935, 3938, 3941, 3944, 3947, 3950, + 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974, + 3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, + 4001, 4004, 4007, 4010, 4013, 4016, 4019, 4022, + 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4045, + 4048, 4051, 4054, 4057, 4060, 4063, 4066, 4069, + 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093 + } + }, + .lsc_tbl = { + { + /* lsc - 0 */ + /* R */ + 1023, 1026, 1030, 1032, 1031, 1030, 1030, 1031, + 1034, 1038, 1041, 1046, 1052, 1058, 1063, 1068, + 1075, 1080, 1086, 1091, 1097, 1103, 1109, 1115, + 1121, 1127, 1133, 1140, 1146, 1152, 1158, 1164, + 1169, 1175, 1181, 1188, 1194, 1200, 1205, 1211, + 1217, 1223, 1228, 1235, 1241, 1247, 1253, 1260, + 1268, 1274, 1280, 1285, 1292, 1298, 1305, 1312, + 1319, 1326, 1332, 1339, 1346, 1354, 1360, 1367, + 1373, 1380, 1388, 1395, 1403, 1410, 1416, 1422, + 1430, 1438, 1445, 1452, 1459, 1466, 1473, 1481, + 1490, 1498, 1505, 1513, 1521, 1529, 1537, 1543, + 1551, 1558, 1567, 1577, 1586, 1595, 1603, 1612, + 1620, 1627, 1634, 1643, 1653, 1661, 1670, 1681, + 1691, 1698, 1706, 1716, 1725, 1735, 1742, 1750, + 1758, 1769, 1778, 1789, 1799, 1811, 1820, 1829, + 1838, 1849, 1859, 1869, 1878, 1887, 1897, 1911, + 1924, 1938, 1950, 1960, 1970, 1980, 1995, 2008, + 2020, 2030, 2038, 2051, 2065, 2080, 2090, 2098, + 2111, 2129, 2147, 2147, 2156, 2165, 2174, 2182, + 2191, 2199, 2207, 2214, 2222, 2230, 2237, 2244, + 2251, 2258, 2264, 2271, 2277, 2283, 2289, 2295, + 2301, 2306, 2312, 2317, 2322, 2327, 2331, 2336, + 2340, 2344, 2348, 2352, 2356, 2359, 2363, 2366, + 2369, 2372, 2375, 2377, 2379, 2382, 2384, 2386, + 2387, 2389, 2390, 2391, 2392, 2393, 2394, 2395, + 2395, 2395, 2395, 2395, 2395, 2395, 2394, 2393, + 2392, 2391, 2390, 2388, 2387, 2385, 2383, 2381, + 2379, 2376, 2374, 2371, 2368, 2365, 2362, 2359, + 2355, 2351, 2347, 2343, 2339, 2335, 2330, 2326, + 2321, 2316, 2310, 2305, 2299, 2294, 2288, 2282, + 2276, 2269, 2263, 2256, 2249, 2242, 2235, 2228, + 2220, 2213, 2205, 2197, 2189, 2180, 2172, 2163, + /* G */ + 1023, 1026, 1030, 1031, 1029, 1028, 1027, 1027, + 1029, 1032, 1036, 1040, 1045, 1050, 1054, 1060, + 1065, 1070, 1075, 1080, 1086, 1091, 1096, 1101, + 1107, 1113, 1118, 1123, 1129, 1135, 1140, 1145, + 1150, 1156, 1161, 1167, 1172, 1178, 1183, 1189, + 1195, 1200, 1205, 1210, 1215, 1221, 1227, 1233, + 1240, 1246, 1251, 1255, 1260, 1266, 1272, 1278, + 1284, 1291, 1297, 1303, 1308, 1315, 1320, 1326, + 1331, 1338, 1345, 1351, 1357, 1363, 1368, 1374, + 1380, 1388, 1394, 1401, 1407, 1414, 1420, 1426, + 1432, 1439, 1445, 1452, 1459, 1466, 1472, 1479, + 1486, 1493, 1501, 1508, 1515, 1521, 1528, 1535, + 1543, 1550, 1557, 1564, 1572, 1580, 1587, 1595, + 1602, 1608, 1615, 1623, 1630, 1638, 1645, 1654, + 1660, 1669, 1676, 1685, 1693, 1702, 1709, 1717, + 1726, 1736, 1745, 1754, 1762, 1771, 1781, 1793, + 1801, 1810, 1820, 1828, 1837, 1847, 1858, 1869, + 1883, 1895, 1903, 1914, 1925, 1932, 1941, 1947, + 1961, 1976, 1998, 2001, 2010, 2020, 2029, 2038, + 2047, 2056, 2064, 2073, 2081, 2089, 2097, 2105, + 2113, 2120, 2127, 2134, 2141, 2148, 2155, 2161, + 2168, 2174, 2180, 2186, 2191, 2197, 2202, 2207, + 2212, 2217, 2222, 2226, 2231, 2235, 2239, 2243, + 2246, 2250, 2253, 2256, 2259, 2262, 2265, 2267, + 2270, 2272, 2274, 2276, 2278, 2279, 2280, 2282, + 2283, 2284, 2284, 2285, 2285, 2285, 2285, 2285, + 2285, 2285, 2284, 2283, 2282, 2281, 2280, 2279, + 2277, 2275, 2273, 2271, 2269, 2267, 2264, 2261, + 2258, 2255, 2252, 2249, 2245, 2241, 2237, 2233, + 2229, 2225, 2220, 2215, 2211, 2206, 2200, 2195, + 2189, 2184, 2178, 2172, 2166, 2159, 2153, 2146, + 2139, 2132, 2125, 2118, 2110, 2102, 2095, 2087, + /* B */ + 1021, 1034, 1047, 1055, 1055, 1054, 1054, 1055, + 1059, 1063, 1065, 1069, 1077, 1084, 1087, 1092, + 1100, 1106, 1111, 1117, 1121, 1125, 1130, 1136, + 1142, 1147, 1153, 1161, 1168, 1174, 1177, 1183, + 1188, 1195, 1199, 1207, 1215, 1221, 1226, 1232, + 1238, 1243, 1248, 1253, 1257, 1264, 1271, 1278, + 1286, 1292, 1299, 1303, 1308, 1310, 1317, 1323, + 1329, 1335, 1342, 1351, 1358, 1368, 1374, 1381, + 1384, 1391, 1398, 1404, 1409, 1413, 1418, 1426, + 1437, 1449, 1459, 1467, 1473, 1482, 1486, 1487, + 1489, 1496, 1499, 1504, 1512, 1520, 1527, 1536, + 1549, 1558, 1568, 1576, 1587, 1593, 1598, 1602, + 1608, 1609, 1612, 1618, 1627, 1631, 1637, 1645, + 1658, 1670, 1683, 1698, 1707, 1715, 1719, 1724, + 1722, 1728, 1736, 1741, 1745, 1755, 1763, 1769, + 1778, 1792, 1802, 1814, 1827, 1837, 1844, 1857, + 1869, 1880, 1890, 1891, 1899, 1911, 1924, 1936, + 1940, 1942, 1937, 1955, 1964, 1966, 1971, 1968, + 1990, 2032, 2079, 2015, 2024, 2034, 2043, 2052, + 2061, 2070, 2078, 2087, 2095, 2103, 2111, 2118, + 2126, 2133, 2141, 2148, 2155, 2161, 2168, 2174, + 2181, 2187, 2193, 2198, 2204, 2209, 2215, 2220, + 2225, 2229, 2234, 2238, 2243, 2247, 2251, 2255, + 2258, 2262, 2265, 2268, 2271, 2274, 2276, 2279, + 2281, 2283, 2285, 2287, 2289, 2290, 2291, 2293, + 2294, 2294, 2295, 2296, 2296, 2296, 2296, 2296, + 2296, 2295, 2294, 2294, 2293, 2291, 2290, 2289, + 2287, 2285, 2283, 2281, 2279, 2276, 2274, 2271, + 2268, 2265, 2261, 2258, 2254, 2250, 2246, 2242, + 2238, 2234, 2229, 2224, 2219, 2214, 2209, 2203, + 2198, 2192, 2186, 2180, 2174, 2167, 2161, 2154, + 2147, 2140, 2133, 2125, 2118, 2110, 2102, 2094 + }, + { + /* lsc - 1 */ + /* R */ + 1018, 1023, 1030, 1036, 1038, 1038, 1038, 1039, + 1039, 1041, 1044, 1047, 1050, 1054, 1059, 1063, + 1068, 1074, 1080, 1086, 1092, 1097, 1103, 1111, + 1118, 1125, 1132, 1138, 1145, 1151, 1158, 1165, + 1171, 1177, 1185, 1191, 1196, 1200, 1207, 1213, + 1220, 1226, 1231, 1237, 1243, 1249, 1255, 1261, + 1269, 1276, 1282, 1287, 1293, 1299, 1306, 1314, + 1321, 1329, 1335, 1342, 1348, 1354, 1361, 1368, + 1374, 1382, 1390, 1396, 1402, 1410, 1419, 1425, + 1431, 1438, 1446, 1453, 1461, 1470, 1478, 1486, + 1491, 1498, 1506, 1514, 1522, 1531, 1540, 1548, + 1557, 1564, 1572, 1579, 1588, 1597, 1607, 1613, + 1620, 1627, 1637, 1648, 1659, 1667, 1676, 1684, + 1693, 1703, 1711, 1719, 1727, 1737, 1746, 1755, + 1765, 1778, 1789, 1800, 1808, 1815, 1822, 1831, + 1841, 1851, 1860, 1872, 1883, 1898, 1911, 1930, + 1946, 1963, 1975, 1986, 1996, 2011, 2025, 2041, + 2060, 2081, 2094, 2105, 2119, 2132, 2147, 2156, + 2164, 2179, 2205, 2219, 2230, 2241, 2251, 2261, + 2271, 2281, 2290, 2300, 2309, 2318, 2327, 2335, + 2344, 2352, 2360, 2368, 2376, 2384, 2391, 2398, + 2405, 2412, 2419, 2425, 2432, 2438, 2444, 2449, + 2455, 2460, 2465, 2470, 2475, 2480, 2484, 2489, + 2493, 2497, 2500, 2504, 2507, 2511, 2514, 2516, + 2519, 2521, 2524, 2526, 2528, 2529, 2531, 2532, + 2533, 2534, 2535, 2536, 2536, 2537, 2537, 2537, + 2536, 2536, 2535, 2534, 2533, 2532, 2531, 2529, + 2527, 2525, 2523, 2521, 2519, 2516, 2513, 2510, + 2507, 2503, 2500, 2496, 2492, 2488, 2484, 2479, + 2474, 2470, 2465, 2459, 2454, 2448, 2443, 2437, + 2430, 2424, 2418, 2411, 2404, 2397, 2390, 2382, + 2375, 2367, 2359, 2351, 2342, 2334, 2325, 2316, + /* G */ + 1018, 1023, 1031, 1037, 1038, 1038, 1037, 1036, + 1037, 1038, 1040, 1042, 1044, 1048, 1052, 1056, + 1061, 1066, 1071, 1076, 1082, 1087, 1093, 1100, + 1107, 1113, 1120, 1126, 1132, 1138, 1144, 1150, + 1156, 1162, 1168, 1174, 1179, 1183, 1188, 1194, + 1199, 1204, 1209, 1215, 1221, 1226, 1231, 1237, + 1243, 1249, 1255, 1260, 1265, 1271, 1277, 1283, + 1289, 1295, 1301, 1307, 1312, 1318, 1324, 1330, + 1336, 1341, 1348, 1353, 1359, 1366, 1373, 1378, + 1385, 1391, 1398, 1404, 1411, 1418, 1424, 1430, + 1436, 1443, 1449, 1457, 1463, 1471, 1477, 1486, + 1493, 1498, 1505, 1512, 1520, 1528, 1536, 1542, + 1548, 1555, 1563, 1572, 1579, 1586, 1593, 1601, + 1608, 1616, 1625, 1633, 1641, 1648, 1655, 1663, + 1672, 1682, 1691, 1698, 1703, 1709, 1717, 1725, + 1733, 1743, 1754, 1766, 1776, 1786, 1794, 1807, + 1820, 1834, 1846, 1858, 1871, 1884, 1897, 1910, + 1926, 1939, 1951, 1959, 1970, 1980, 1994, 1998, + 2010, 2026, 2049, 2057, 2068, 2079, 2090, 2101, + 2112, 2122, 2133, 2143, 2153, 2162, 2172, 2181, + 2191, 2200, 2208, 2217, 2226, 2234, 2242, 2250, + 2258, 2265, 2273, 2280, 2287, 2294, 2300, 2307, + 2313, 2319, 2325, 2331, 2336, 2342, 2347, 2352, + 2357, 2361, 2366, 2370, 2374, 2378, 2382, 2385, + 2389, 2392, 2395, 2398, 2400, 2403, 2405, 2407, + 2409, 2411, 2412, 2414, 2415, 2416, 2417, 2417, + 2418, 2418, 2418, 2418, 2417, 2417, 2416, 2415, + 2414, 2413, 2412, 2410, 2408, 2407, 2404, 2402, + 2400, 2397, 2394, 2391, 2388, 2384, 2381, 2377, + 2373, 2369, 2365, 2360, 2355, 2351, 2346, 2340, + 2335, 2329, 2323, 2317, 2311, 2305, 2298, 2292, + 2285, 2278, 2271, 2263, 2256, 2248, 2240, 2232, + /* B */ + 1017, 1020, 1035, 1047, 1050, 1050, 1050, 1049, + 1051, 1052, 1053, 1054, 1057, 1061, 1066, 1069, + 1073, 1079, 1085, 1090, 1096, 1101, 1107, 1114, + 1123, 1129, 1136, 1143, 1151, 1157, 1162, 1171, + 1177, 1182, 1186, 1191, 1195, 1199, 1207, 1215, + 1219, 1223, 1227, 1235, 1240, 1247, 1253, 1258, + 1263, 1269, 1278, 1286, 1291, 1297, 1305, 1313, + 1316, 1321, 1329, 1337, 1342, 1346, 1353, 1360, + 1369, 1377, 1385, 1390, 1396, 1402, 1410, 1413, + 1419, 1424, 1430, 1435, 1442, 1451, 1458, 1465, + 1469, 1478, 1487, 1499, 1504, 1511, 1515, 1523, + 1530, 1533, 1535, 1540, 1549, 1557, 1567, 1575, + 1581, 1589, 1604, 1620, 1631, 1636, 1641, 1645, + 1649, 1651, 1658, 1664, 1672, 1678, 1686, 1688, + 1696, 1707, 1719, 1730, 1739, 1749, 1757, 1766, + 1771, 1786, 1800, 1809, 1811, 1820, 1826, 1836, + 1843, 1854, 1860, 1872, 1889, 1902, 1912, 1924, + 1954, 1978, 1997, 1995, 2005, 2016, 2034, 2032, + 2031, 2036, 2068, 2130, 2141, 2152, 2163, 2173, + 2183, 2194, 2204, 2213, 2223, 2232, 2242, 2251, + 2260, 2268, 2277, 2285, 2293, 2301, 2309, 2317, + 2324, 2331, 2338, 2345, 2352, 2358, 2365, 2371, + 2377, 2383, 2388, 2394, 2399, 2404, 2409, 2413, + 2418, 2422, 2426, 2430, 2434, 2438, 2441, 2444, + 2447, 2450, 2453, 2455, 2458, 2460, 2462, 2463, + 2465, 2466, 2468, 2469, 2469, 2470, 2471, 2471, + 2471, 2471, 2471, 2470, 2470, 2469, 2468, 2467, + 2465, 2464, 2462, 2460, 2458, 2456, 2453, 2451, + 2448, 2445, 2442, 2438, 2435, 2431, 2427, 2423, + 2419, 2414, 2410, 2405, 2400, 2395, 2389, 2384, + 2378, 2372, 2366, 2360, 2353, 2346, 2340, 2333, + 2325, 2318, 2310, 2303, 2295, 2287, 2278, 2270 + }, + { + /* lsc - 2 */ + /* R */ + 1024, 1021, 1018, 1016, 1015, 1014, 1013, 1014, + 1015, 1018, 1022, 1028, 1033, 1038, 1043, 1048, + 1054, 1059, 1064, 1070, 1075, 1080, 1085, 1090, + 1096, 1101, 1107, 1113, 1118, 1123, 1128, 1133, + 1139, 1144, 1150, 1156, 1161, 1166, 1172, 1178, + 1184, 1189, 1194, 1199, 1204, 1210, 1215, 1222, + 1229, 1235, 1240, 1245, 1250, 1256, 1262, 1268, + 1273, 1280, 1287, 1292, 1298, 1303, 1310, 1315, + 1322, 1329, 1336, 1341, 1348, 1355, 1360, 1365, + 1371, 1377, 1384, 1392, 1399, 1406, 1412, 1418, + 1423, 1429, 1437, 1444, 1452, 1458, 1466, 1473, + 1481, 1487, 1494, 1500, 1508, 1514, 1520, 1526, + 1534, 1544, 1552, 1560, 1567, 1576, 1583, 1589, + 1596, 1604, 1612, 1620, 1629, 1637, 1645, 1652, + 1662, 1669, 1677, 1683, 1694, 1702, 1710, 1718, + 1729, 1740, 1750, 1759, 1768, 1778, 1789, 1801, + 1808, 1814, 1823, 1835, 1845, 1852, 1866, 1885, + 1900, 1908, 1914, 1924, 1937, 1946, 1960, 1976, + 1996, 2004, 2007, 2011, 2019, 2026, 2034, 2041, + 2048, 2056, 2062, 2069, 2076, 2082, 2088, 2095, + 2101, 2106, 2112, 2118, 2123, 2128, 2133, 2138, + 2143, 2148, 2152, 2157, 2161, 2165, 2169, 2173, + 2176, 2180, 2183, 2186, 2189, 2192, 2195, 2197, + 2200, 2202, 2204, 2206, 2208, 2210, 2211, 2213, + 2214, 2215, 2216, 2217, 2217, 2218, 2218, 2218, + 2218, 2218, 2218, 2218, 2217, 2216, 2216, 2215, + 2213, 2212, 2211, 2209, 2207, 2205, 2203, 2201, + 2199, 2196, 2194, 2191, 2188, 2185, 2182, 2178, + 2175, 2171, 2167, 2163, 2159, 2155, 2151, 2146, + 2141, 2136, 2131, 2126, 2121, 2116, 2110, 2104, + 2098, 2092, 2086, 2080, 2073, 2066, 2060, 2053, + 2046, 2038, 2031, 2023, 2016, 2008, 2000, 1992, + /* G */ + 1025, 1021, 1019, 1017, 1014, 1013, 1012, 1013, + 1015, 1017, 1020, 1025, 1031, 1035, 1040, 1045, + 1051, 1056, 1060, 1065, 1071, 1077, 1082, 1086, + 1091, 1096, 1102, 1107, 1112, 1118, 1123, 1128, + 1133, 1137, 1142, 1148, 1154, 1159, 1164, 1170, + 1176, 1180, 1185, 1190, 1195, 1200, 1206, 1211, + 1217, 1223, 1228, 1233, 1238, 1244, 1248, 1253, + 1258, 1265, 1270, 1276, 1282, 1288, 1293, 1298, + 1304, 1310, 1315, 1320, 1327, 1333, 1339, 1344, + 1351, 1357, 1363, 1369, 1375, 1381, 1387, 1393, + 1398, 1405, 1412, 1418, 1425, 1431, 1436, 1442, + 1449, 1455, 1462, 1468, 1476, 1482, 1489, 1494, + 1501, 1509, 1516, 1522, 1529, 1537, 1544, 1551, + 1559, 1566, 1573, 1580, 1586, 1591, 1597, 1604, + 1612, 1618, 1627, 1636, 1645, 1654, 1664, 1673, + 1679, 1685, 1695, 1705, 1713, 1721, 1732, 1742, + 1752, 1758, 1766, 1776, 1787, 1794, 1801, 1812, + 1826, 1838, 1848, 1859, 1868, 1879, 1890, 1899, + 1915, 1928, 1937, 1939, 1947, 1955, 1962, 1970, + 1978, 1985, 1992, 1999, 2006, 2013, 2020, 2026, + 2032, 2038, 2044, 2050, 2056, 2062, 2067, 2072, + 2077, 2082, 2087, 2092, 2096, 2101, 2105, 2109, + 2113, 2117, 2121, 2124, 2127, 2131, 2134, 2137, + 2139, 2142, 2144, 2147, 2149, 2151, 2153, 2154, + 2156, 2157, 2159, 2160, 2161, 2161, 2162, 2163, + 2163, 2163, 2163, 2163, 2163, 2163, 2162, 2161, + 2161, 2160, 2158, 2157, 2156, 2154, 2153, 2151, + 2149, 2146, 2144, 2142, 2139, 2136, 2133, 2130, + 2127, 2124, 2120, 2117, 2113, 2109, 2105, 2101, + 2096, 2092, 2087, 2082, 2077, 2072, 2067, 2061, + 2056, 2050, 2044, 2038, 2032, 2025, 2019, 2012, + 2006, 1999, 1992, 1984, 1977, 1969, 1962, 1954, + /* B */ + 1024, 1021, 1020, 1019, 1015, 1013, 1012, 1014, + 1015, 1016, 1018, 1025, 1032, 1036, 1040, 1048, + 1053, 1057, 1060, 1065, 1070, 1076, 1080, 1085, + 1092, 1097, 1101, 1105, 1111, 1118, 1124, 1130, + 1134, 1140, 1144, 1149, 1155, 1161, 1168, 1173, + 1180, 1184, 1187, 1192, 1199, 1204, 1209, 1217, + 1224, 1229, 1232, 1237, 1241, 1247, 1250, 1255, + 1262, 1271, 1279, 1286, 1294, 1302, 1307, 1311, + 1316, 1320, 1324, 1328, 1336, 1344, 1351, 1358, + 1369, 1377, 1384, 1393, 1399, 1405, 1405, 1408, + 1411, 1418, 1425, 1431, 1437, 1444, 1451, 1459, + 1469, 1478, 1484, 1490, 1500, 1509, 1513, 1513, + 1518, 1524, 1531, 1533, 1538, 1546, 1555, 1563, + 1572, 1587, 1598, 1609, 1617, 1624, 1629, 1633, + 1637, 1642, 1650, 1654, 1656, 1666, 1677, 1687, + 1687, 1696, 1708, 1723, 1729, 1736, 1753, 1768, + 1781, 1790, 1800, 1813, 1819, 1816, 1808, 1823, + 1835, 1850, 1854, 1861, 1859, 1861, 1883, 1906, + 1937, 1928, 1921, 1945, 1953, 1961, 1968, 1976, + 1984, 1991, 1998, 2005, 2012, 2019, 2025, 2032, + 2038, 2044, 2050, 2056, 2062, 2067, 2073, 2078, + 2083, 2088, 2093, 2097, 2102, 2106, 2111, 2115, + 2118, 2122, 2126, 2129, 2133, 2136, 2139, 2142, + 2144, 2147, 2149, 2152, 2154, 2156, 2158, 2159, + 2161, 2162, 2163, 2165, 2165, 2166, 2167, 2167, + 2168, 2168, 2168, 2168, 2168, 2167, 2167, 2166, + 2165, 2164, 2163, 2162, 2160, 2159, 2157, 2155, + 2153, 2151, 2148, 2146, 2143, 2140, 2138, 2134, + 2131, 2128, 2124, 2121, 2117, 2113, 2109, 2104, + 2100, 2095, 2091, 2086, 2081, 2076, 2070, 2065, + 2059, 2053, 2048, 2042, 2035, 2029, 2022, 2016, + 2009, 2002, 1995, 1988, 1980, 1973, 1965, 1957 + }, + { + /* lsc - 3 */ + /* R */ + 1021, 1022, 1022, 1022, 1020, 1019, 1019, 1021, + 1022, 1026, 1028, 1033, 1038, 1044, 1049, 1054, + 1060, 1066, 1071, 1076, 1082, 1088, 1094, 1100, + 1106, 1112, 1117, 1122, 1127, 1133, 1139, 1145, + 1150, 1156, 1162, 1168, 1174, 1179, 1184, 1189, + 1196, 1201, 1206, 1211, 1217, 1222, 1228, 1235, + 1241, 1247, 1253, 1259, 1263, 1268, 1275, 1282, + 1287, 1294, 1302, 1309, 1315, 1321, 1327, 1333, + 1339, 1346, 1354, 1360, 1368, 1375, 1383, 1389, + 1396, 1401, 1406, 1411, 1419, 1426, 1434, 1442, + 1450, 1456, 1463, 1470, 1475, 1481, 1489, 1496, + 1503, 1510, 1517, 1524, 1532, 1541, 1550, 1556, + 1563, 1570, 1577, 1583, 1590, 1598, 1608, 1614, + 1622, 1630, 1642, 1651, 1658, 1666, 1675, 1684, + 1691, 1700, 1706, 1717, 1726, 1736, 1745, 1756, + 1765, 1773, 1784, 1794, 1804, 1816, 1825, 1835, + 1844, 1859, 1872, 1885, 1895, 1906, 1923, 1936, + 1945, 1949, 1965, 1981, 1995, 2009, 2013, 2014, + 2030, 2042, 2052, 2086, 2097, 2107, 2117, 2128, + 2137, 2147, 2157, 2166, 2175, 2184, 2193, 2202, + 2210, 2219, 2227, 2235, 2243, 2250, 2258, 2265, + 2272, 2279, 2285, 2292, 2298, 2305, 2311, 2316, + 2322, 2328, 2333, 2338, 2343, 2348, 2352, 2357, + 2361, 2365, 2369, 2373, 2376, 2380, 2383, 2386, + 2389, 2391, 2394, 2396, 2398, 2400, 2402, 2403, + 2405, 2406, 2407, 2408, 2409, 2409, 2410, 2410, + 2410, 2410, 2409, 2409, 2408, 2407, 2406, 2405, + 2403, 2402, 2400, 2398, 2396, 2394, 2391, 2388, + 2386, 2383, 2379, 2376, 2372, 2369, 2365, 2361, + 2357, 2352, 2347, 2343, 2338, 2333, 2327, 2322, + 2316, 2310, 2304, 2298, 2292, 2285, 2278, 2271, + 2264, 2257, 2250, 2242, 2234, 2226, 2218, 2210, + /* G */ + 1022, 1021, 1021, 1019, 1018, 1016, 1016, 1017, + 1018, 1021, 1024, 1029, 1033, 1039, 1043, 1048, + 1053, 1058, 1062, 1067, 1073, 1079, 1084, 1089, + 1094, 1100, 1105, 1110, 1115, 1120, 1125, 1131, + 1136, 1141, 1147, 1152, 1156, 1162, 1166, 1172, + 1177, 1182, 1187, 1192, 1197, 1202, 1208, 1213, + 1218, 1225, 1230, 1236, 1240, 1246, 1251, 1257, + 1261, 1267, 1273, 1279, 1285, 1292, 1297, 1303, + 1309, 1314, 1320, 1324, 1331, 1336, 1343, 1349, + 1355, 1361, 1367, 1372, 1379, 1386, 1392, 1398, + 1404, 1409, 1416, 1423, 1429, 1434, 1441, 1448, + 1454, 1459, 1466, 1472, 1479, 1486, 1493, 1499, + 1506, 1513, 1520, 1527, 1534, 1542, 1550, 1555, + 1561, 1568, 1576, 1583, 1589, 1597, 1606, 1614, + 1620, 1629, 1635, 1644, 1651, 1660, 1667, 1676, + 1683, 1690, 1702, 1712, 1719, 1725, 1735, 1746, + 1756, 1766, 1775, 1787, 1799, 1810, 1820, 1826, + 1833, 1844, 1857, 1867, 1879, 1892, 1902, 1908, + 1919, 1928, 1934, 1941, 1952, 1963, 1974, 1985, + 1996, 2006, 2016, 2026, 2036, 2046, 2055, 2064, + 2074, 2083, 2091, 2100, 2108, 2117, 2125, 2133, + 2140, 2148, 2155, 2162, 2169, 2176, 2183, 2189, + 2196, 2202, 2208, 2213, 2219, 2224, 2230, 2235, + 2240, 2244, 2249, 2253, 2257, 2261, 2265, 2269, + 2272, 2276, 2279, 2282, 2285, 2287, 2290, 2292, + 2294, 2296, 2297, 2299, 2300, 2301, 2302, 2303, + 2304, 2304, 2305, 2305, 2305, 2304, 2304, 2303, + 2303, 2302, 2301, 2299, 2298, 2296, 2294, 2292, + 2290, 2288, 2285, 2282, 2279, 2276, 2273, 2270, + 2266, 2262, 2258, 2254, 2250, 2245, 2241, 2236, + 2231, 2226, 2220, 2215, 2209, 2203, 2197, 2191, + 2184, 2178, 2171, 2164, 2157, 2149, 2142, 2134, + /* B */ + 1022, 1025, 1025, 1021, 1017, 1015, 1014, 1015, + 1016, 1019, 1022, 1027, 1032, 1038, 1043, 1047, + 1053, 1058, 1062, 1067, 1072, 1078, 1083, 1088, + 1094, 1101, 1106, 1111, 1115, 1120, 1126, 1133, + 1139, 1144, 1149, 1152, 1158, 1164, 1171, 1177, + 1182, 1186, 1191, 1199, 1204, 1209, 1215, 1221, + 1225, 1231, 1236, 1242, 1244, 1251, 1257, 1264, + 1267, 1273, 1280, 1288, 1293, 1298, 1303, 1309, + 1315, 1320, 1325, 1330, 1338, 1345, 1354, 1361, + 1369, 1374, 1380, 1387, 1394, 1400, 1406, 1414, + 1420, 1424, 1429, 1436, 1442, 1448, 1453, 1461, + 1467, 1473, 1479, 1486, 1493, 1501, 1507, 1512, + 1521, 1528, 1536, 1543, 1552, 1560, 1568, 1573, + 1578, 1583, 1588, 1594, 1598, 1605, 1613, 1620, + 1626, 1636, 1643, 1653, 1663, 1677, 1686, 1698, + 1705, 1711, 1724, 1734, 1740, 1749, 1759, 1765, + 1769, 1776, 1785, 1796, 1804, 1810, 1819, 1826, + 1838, 1850, 1860, 1870, 1886, 1905, 1916, 1918, + 1931, 1933, 1919, 1895, 1906, 1917, 1929, 1939, + 1950, 1961, 1971, 1981, 1991, 2001, 2011, 2021, + 2030, 2039, 2048, 2057, 2065, 2074, 2082, 2090, + 2098, 2106, 2114, 2121, 2128, 2135, 2142, 2149, + 2155, 2162, 2168, 2174, 2180, 2185, 2191, 2196, + 2201, 2206, 2211, 2215, 2220, 2224, 2228, 2232, + 2235, 2239, 2242, 2245, 2248, 2251, 2254, 2256, + 2258, 2260, 2262, 2264, 2266, 2267, 2268, 2269, + 2270, 2271, 2271, 2272, 2272, 2272, 2271, 2271, + 2270, 2270, 2269, 2268, 2266, 2265, 2263, 2261, + 2259, 2257, 2255, 2252, 2250, 2247, 2244, 2241, + 2237, 2234, 2230, 2226, 2222, 2218, 2213, 2208, + 2204, 2199, 2193, 2188, 2183, 2177, 2171, 2165, + 2159, 2152, 2146, 2139, 2132, 2125, 2118, 2110 + }, + { + /* lsc - 4 */ + /* R */ + 1023, 1022, 1022, 1020, 1017, 1015, 1015, 1016, + 1019, 1022, 1026, 1030, 1036, 1039, 1043, 1049, + 1056, 1062, 1067, 1072, 1077, 1083, 1088, 1094, + 1101, 1108, 1114, 1119, 1125, 1130, 1137, 1142, + 1148, 1153, 1158, 1164, 1171, 1177, 1182, 1187, + 1193, 1198, 1205, 1210, 1217, 1222, 1228, 1234, + 1240, 1246, 1252, 1259, 1264, 1270, 1277, 1284, + 1291, 1296, 1304, 1312, 1319, 1324, 1329, 1335, + 1343, 1351, 1357, 1364, 1370, 1375, 1383, 1390, + 1396, 1403, 1411, 1417, 1423, 1431, 1438, 1446, + 1451, 1456, 1463, 1471, 1479, 1487, 1495, 1504, + 1512, 1517, 1523, 1530, 1538, 1545, 1554, 1563, + 1574, 1583, 1591, 1598, 1606, 1612, 1620, 1627, + 1636, 1645, 1655, 1664, 1674, 1683, 1692, 1700, + 1706, 1712, 1722, 1734, 1744, 1752, 1756, 1766, + 1776, 1787, 1795, 1808, 1819, 1827, 1838, 1847, + 1854, 1867, 1881, 1890, 1900, 1916, 1932, 1943, + 1953, 1960, 1972, 1982, 1995, 2012, 2019, 2029, + 2046, 2077, 2088, 2075, 2084, 2093, 2101, 2110, + 2118, 2126, 2134, 2141, 2149, 2156, 2163, 2170, + 2177, 2184, 2190, 2197, 2203, 2209, 2215, 2221, + 2226, 2232, 2237, 2242, 2247, 2252, 2256, 2261, + 2265, 2269, 2273, 2277, 2281, 2284, 2287, 2291, + 2294, 2296, 2299, 2302, 2304, 2306, 2308, 2310, + 2312, 2313, 2315, 2316, 2317, 2318, 2319, 2320, + 2320, 2320, 2320, 2320, 2320, 2320, 2319, 2319, + 2318, 2317, 2316, 2314, 2313, 2311, 2309, 2307, + 2305, 2303, 2301, 2298, 2295, 2292, 2289, 2286, + 2283, 2279, 2275, 2272, 2267, 2263, 2259, 2254, + 2250, 2245, 2240, 2235, 2229, 2224, 2218, 2212, + 2207, 2200, 2194, 2188, 2181, 2174, 2167, 2160, + 2153, 2146, 2138, 2130, 2122, 2114, 2106, 2098, + /* G */ + 1022, 1022, 1021, 1019, 1017, 1015, 1015, 1015, + 1018, 1020, 1023, 1027, 1033, 1037, 1042, 1047, + 1052, 1057, 1062, 1067, 1072, 1077, 1082, 1087, + 1093, 1099, 1104, 1109, 1114, 1120, 1125, 1130, + 1135, 1140, 1145, 1151, 1157, 1163, 1168, 1173, + 1178, 1183, 1189, 1194, 1199, 1204, 1210, 1215, + 1221, 1227, 1232, 1237, 1243, 1249, 1254, 1259, + 1264, 1270, 1277, 1283, 1288, 1294, 1299, 1305, + 1311, 1316, 1322, 1328, 1335, 1340, 1347, 1353, + 1359, 1365, 1370, 1376, 1382, 1389, 1396, 1402, + 1408, 1414, 1420, 1426, 1432, 1438, 1445, 1452, + 1458, 1464, 1470, 1477, 1484, 1491, 1499, 1506, + 1513, 1520, 1527, 1535, 1542, 1549, 1557, 1564, + 1572, 1578, 1585, 1592, 1600, 1607, 1613, 1622, + 1630, 1638, 1645, 1655, 1664, 1671, 1678, 1688, + 1695, 1701, 1708, 1718, 1728, 1738, 1748, 1758, + 1767, 1777, 1788, 1796, 1806, 1817, 1828, 1835, + 1844, 1853, 1865, 1874, 1884, 1897, 1909, 1918, + 1931, 1953, 1968, 1962, 1972, 1981, 1990, 1998, + 2007, 2016, 2024, 2032, 2040, 2048, 2056, 2063, + 2070, 2078, 2085, 2092, 2098, 2105, 2111, 2117, + 2124, 2129, 2135, 2141, 2146, 2152, 2157, 2162, + 2166, 2171, 2175, 2180, 2184, 2188, 2192, 2195, + 2199, 2202, 2206, 2209, 2211, 2214, 2217, 2219, + 2221, 2223, 2225, 2227, 2229, 2230, 2231, 2232, + 2233, 2234, 2235, 2235, 2236, 2236, 2236, 2236, + 2235, 2235, 2234, 2233, 2232, 2231, 2230, 2228, + 2227, 2225, 2223, 2221, 2219, 2216, 2214, 2211, + 2208, 2205, 2202, 2198, 2195, 2191, 2187, 2183, + 2179, 2175, 2170, 2166, 2161, 2156, 2151, 2145, + 2140, 2134, 2129, 2123, 2117, 2110, 2104, 2097, + 2091, 2084, 2077, 2069, 2062, 2054, 2047, 2039, + /* B */ + 1022, 1022, 1023, 1021, 1018, 1015, 1014, 1014, + 1017, 1020, 1024, 1027, 1034, 1039, 1043, 1048, + 1054, 1059, 1064, 1068, 1074, 1079, 1085, 1090, + 1096, 1103, 1110, 1114, 1118, 1124, 1129, 1134, + 1138, 1143, 1146, 1152, 1159, 1165, 1170, 1175, + 1180, 1186, 1192, 1197, 1202, 1208, 1216, 1222, + 1229, 1234, 1240, 1246, 1252, 1258, 1262, 1267, + 1272, 1278, 1286, 1294, 1299, 1303, 1308, 1314, + 1320, 1326, 1333, 1339, 1346, 1351, 1357, 1362, + 1368, 1375, 1378, 1384, 1390, 1396, 1402, 1410, + 1419, 1424, 1432, 1439, 1449, 1457, 1466, 1473, + 1480, 1484, 1487, 1494, 1499, 1504, 1508, 1516, + 1522, 1531, 1540, 1550, 1561, 1570, 1581, 1590, + 1597, 1605, 1613, 1616, 1619, 1624, 1630, 1637, + 1643, 1648, 1655, 1664, 1677, 1684, 1693, 1701, + 1707, 1715, 1723, 1737, 1746, 1755, 1763, 1772, + 1781, 1793, 1807, 1814, 1823, 1833, 1842, 1847, + 1854, 1855, 1861, 1878, 1888, 1902, 1906, 1921, + 1929, 1948, 1944, 1902, 1912, 1921, 1930, 1940, + 1948, 1957, 1966, 1974, 1982, 1991, 1998, 2006, + 2014, 2021, 2029, 2036, 2043, 2050, 2056, 2063, + 2069, 2075, 2081, 2087, 2093, 2098, 2104, 2109, + 2114, 2119, 2124, 2128, 2133, 2137, 2141, 2145, + 2149, 2152, 2156, 2159, 2162, 2165, 2168, 2171, + 2173, 2176, 2178, 2180, 2182, 2183, 2185, 2186, + 2188, 2189, 2189, 2190, 2191, 2191, 2191, 2192, + 2191, 2191, 2191, 2190, 2190, 2189, 2188, 2187, + 2185, 2184, 2182, 2180, 2178, 2176, 2174, 2171, + 2169, 2166, 2163, 2160, 2156, 2153, 2149, 2146, + 2142, 2138, 2134, 2129, 2125, 2120, 2115, 2110, + 2105, 2099, 2094, 2088, 2082, 2076, 2070, 2064, + 2057, 2051, 2044, 2037, 2030, 2023, 2015, 2008 + }, + { + /* lsc - 5 */ + /* R */ + 1022, 1022, 1021, 1020, 1019, 1019, 1019, 1020, + 1021, 1025, 1029, 1033, 1037, 1043, 1048, 1055, + 1061, 1068, 1073, 1078, 1084, 1090, 1097, 1103, + 1109, 1114, 1120, 1126, 1132, 1138, 1143, 1149, + 1155, 1160, 1165, 1172, 1179, 1184, 1191, 1198, + 1205, 1211, 1218, 1223, 1229, 1236, 1241, 1248, + 1256, 1263, 1269, 1275, 1281, 1288, 1294, 1300, + 1305, 1312, 1320, 1327, 1333, 1338, 1346, 1353, + 1362, 1367, 1374, 1382, 1391, 1396, 1402, 1410, + 1419, 1424, 1431, 1439, 1447, 1454, 1461, 1470, + 1478, 1485, 1490, 1497, 1505, 1513, 1520, 1527, + 1536, 1544, 1554, 1561, 1568, 1576, 1583, 1592, + 1599, 1609, 1615, 1624, 1634, 1642, 1651, 1662, + 1674, 1680, 1689, 1699, 1709, 1715, 1725, 1734, + 1740, 1744, 1755, 1762, 1771, 1780, 1790, 1798, + 1812, 1828, 1841, 1852, 1863, 1871, 1883, 1894, + 1901, 1908, 1920, 1926, 1928, 1938, 1959, 1977, + 1988, 1996, 2007, 2016, 2031, 2050, 2068, 2080, + 2098, 2105, 2108, 2137, 2148, 2159, 2170, 2180, + 2191, 2201, 2211, 2220, 2230, 2239, 2249, 2258, + 2266, 2275, 2284, 2292, 2300, 2308, 2316, 2323, + 2330, 2338, 2345, 2351, 2358, 2365, 2371, 2377, + 2383, 2389, 2394, 2399, 2405, 2410, 2414, 2419, + 2423, 2428, 2432, 2436, 2439, 2443, 2446, 2449, + 2452, 2455, 2458, 2460, 2463, 2465, 2466, 2468, + 2470, 2471, 2472, 2473, 2474, 2475, 2475, 2475, + 2475, 2475, 2475, 2474, 2474, 2473, 2472, 2471, + 2469, 2468, 2466, 2464, 2462, 2459, 2457, 2454, + 2451, 2448, 2445, 2442, 2438, 2434, 2430, 2426, + 2422, 2417, 2413, 2408, 2403, 2398, 2392, 2387, + 2381, 2375, 2369, 2362, 2356, 2349, 2342, 2335, + 2328, 2321, 2313, 2305, 2297, 2289, 2281, 2272, + /* G */ + 1022, 1021, 1020, 1018, 1016, 1015, 1015, 1015, + 1017, 1020, 1023, 1027, 1032, 1037, 1042, 1047, + 1052, 1058, 1063, 1068, 1072, 1078, 1083, 1089, + 1094, 1100, 1104, 1109, 1114, 1120, 1125, 1130, + 1135, 1140, 1145, 1150, 1156, 1161, 1166, 1171, + 1177, 1183, 1188, 1193, 1198, 1204, 1210, 1216, + 1222, 1228, 1233, 1237, 1242, 1248, 1254, 1259, + 1264, 1269, 1276, 1281, 1287, 1291, 1298, 1304, + 1310, 1314, 1320, 1327, 1333, 1337, 1342, 1349, + 1356, 1362, 1369, 1375, 1381, 1387, 1394, 1400, + 1406, 1412, 1418, 1424, 1430, 1437, 1444, 1450, + 1457, 1463, 1469, 1476, 1484, 1491, 1497, 1502, + 1509, 1517, 1524, 1530, 1538, 1544, 1551, 1558, + 1566, 1572, 1579, 1587, 1595, 1601, 1609, 1617, + 1626, 1632, 1639, 1647, 1656, 1664, 1670, 1677, + 1687, 1698, 1706, 1712, 1720, 1729, 1741, 1750, + 1760, 1769, 1780, 1787, 1795, 1805, 1817, 1830, + 1842, 1848, 1855, 1865, 1874, 1883, 1895, 1906, + 1917, 1931, 1945, 1946, 1957, 1969, 1981, 1992, + 2003, 2014, 2025, 2035, 2046, 2056, 2066, 2076, + 2086, 2095, 2104, 2114, 2123, 2131, 2140, 2148, + 2156, 2165, 2172, 2180, 2188, 2195, 2202, 2209, + 2216, 2222, 2229, 2235, 2241, 2247, 2252, 2258, + 2263, 2268, 2273, 2278, 2282, 2287, 2291, 2295, + 2299, 2303, 2306, 2309, 2312, 2315, 2318, 2321, + 2323, 2325, 2327, 2329, 2331, 2332, 2333, 2334, + 2335, 2336, 2337, 2337, 2337, 2337, 2337, 2337, + 2336, 2335, 2334, 2333, 2332, 2331, 2329, 2327, + 2325, 2323, 2321, 2318, 2315, 2312, 2309, 2306, + 2302, 2299, 2295, 2291, 2287, 2282, 2278, 2273, + 2268, 2263, 2258, 2252, 2247, 2241, 2235, 2228, + 2222, 2216, 2209, 2202, 2195, 2187, 2180, 2172, + /* B */ + 1021, 1022, 1021, 1019, 1018, 1017, 1016, 1016, + 1018, 1021, 1024, 1027, 1032, 1037, 1041, 1045, + 1051, 1056, 1060, 1064, 1069, 1074, 1080, 1085, + 1090, 1096, 1101, 1106, 1112, 1117, 1122, 1127, + 1132, 1136, 1141, 1146, 1151, 1156, 1160, 1166, + 1172, 1177, 1182, 1186, 1190, 1196, 1202, 1208, + 1213, 1219, 1225, 1229, 1234, 1240, 1247, 1252, + 1257, 1262, 1269, 1276, 1282, 1286, 1292, 1299, + 1305, 1310, 1316, 1322, 1329, 1334, 1339, 1345, + 1353, 1358, 1364, 1372, 1379, 1383, 1388, 1395, + 1401, 1408, 1414, 1420, 1427, 1435, 1441, 1449, + 1455, 1462, 1468, 1475, 1482, 1489, 1495, 1501, + 1509, 1517, 1525, 1532, 1539, 1546, 1552, 1560, + 1568, 1575, 1582, 1589, 1595, 1601, 1608, 1615, + 1620, 1625, 1631, 1639, 1649, 1657, 1662, 1666, + 1675, 1687, 1698, 1704, 1710, 1718, 1731, 1739, + 1744, 1752, 1765, 1776, 1783, 1790, 1804, 1818, + 1833, 1834, 1840, 1846, 1855, 1862, 1872, 1880, + 1892, 1891, 1887, 1916, 1928, 1940, 1952, 1963, + 1975, 1986, 1997, 2007, 2018, 2028, 2038, 2048, + 2058, 2068, 2077, 2086, 2096, 2104, 2113, 2122, + 2130, 2138, 2146, 2154, 2162, 2169, 2176, 2183, + 2190, 2197, 2203, 2210, 2216, 2222, 2228, 2233, + 2239, 2244, 2249, 2254, 2259, 2263, 2267, 2272, + 2276, 2279, 2283, 2286, 2290, 2293, 2295, 2298, + 2301, 2303, 2305, 2307, 2309, 2310, 2312, 2313, + 2314, 2315, 2316, 2316, 2316, 2317, 2316, 2316, + 2316, 2315, 2314, 2313, 2312, 2311, 2309, 2308, + 2306, 2304, 2302, 2299, 2297, 2294, 2291, 2288, + 2284, 2281, 2277, 2273, 2269, 2265, 2260, 2256, + 2251, 2246, 2241, 2235, 2230, 2224, 2218, 2212, + 2206, 2200, 2193, 2186, 2179, 2172, 2165, 2157 + }, + { + /* lsc - 6 */ + /* R */ + 1023, 1026, 1030, 1032, 1031, 1030, 1030, 1031, + 1034, 1038, 1041, 1046, 1052, 1058, 1063, 1068, + 1075, 1080, 1086, 1091, 1097, 1103, 1109, 1115, + 1121, 1127, 1133, 1140, 1146, 1152, 1158, 1164, + 1169, 1175, 1181, 1188, 1194, 1200, 1205, 1211, + 1217, 1223, 1228, 1235, 1241, 1247, 1253, 1260, + 1268, 1274, 1280, 1285, 1292, 1298, 1305, 1312, + 1319, 1326, 1332, 1339, 1346, 1354, 1360, 1367, + 1373, 1380, 1388, 1395, 1403, 1410, 1416, 1422, + 1430, 1438, 1445, 1452, 1459, 1466, 1473, 1481, + 1490, 1498, 1505, 1513, 1521, 1529, 1537, 1543, + 1551, 1558, 1567, 1577, 1586, 1595, 1603, 1612, + 1620, 1627, 1634, 1643, 1653, 1661, 1670, 1681, + 1691, 1698, 1706, 1716, 1725, 1735, 1742, 1750, + 1758, 1769, 1778, 1789, 1799, 1811, 1820, 1829, + 1838, 1849, 1859, 1869, 1878, 1887, 1897, 1911, + 1924, 1938, 1950, 1960, 1970, 1980, 1995, 2008, + 2020, 2030, 2038, 2051, 2065, 2080, 2090, 2098, + 2111, 2129, 2147, 2147, 2156, 2165, 2174, 2182, + 2191, 2199, 2207, 2214, 2222, 2230, 2237, 2244, + 2251, 2258, 2264, 2271, 2277, 2283, 2289, 2295, + 2301, 2306, 2312, 2317, 2322, 2327, 2331, 2336, + 2340, 2344, 2348, 2352, 2356, 2359, 2363, 2366, + 2369, 2372, 2375, 2377, 2379, 2382, 2384, 2386, + 2387, 2389, 2390, 2391, 2392, 2393, 2394, 2395, + 2395, 2395, 2395, 2395, 2395, 2395, 2394, 2393, + 2392, 2391, 2390, 2388, 2387, 2385, 2383, 2381, + 2379, 2376, 2374, 2371, 2368, 2365, 2362, 2359, + 2355, 2351, 2347, 2343, 2339, 2335, 2330, 2326, + 2321, 2316, 2310, 2305, 2299, 2294, 2288, 2282, + 2276, 2269, 2263, 2256, 2249, 2242, 2235, 2228, + 2220, 2213, 2205, 2197, 2189, 2180, 2172, 2163, + /* G */ + 1023, 1026, 1030, 1031, 1029, 1028, 1027, 1027, + 1029, 1032, 1036, 1040, 1045, 1050, 1054, 1060, + 1065, 1070, 1075, 1080, 1086, 1091, 1096, 1101, + 1107, 1113, 1118, 1123, 1129, 1135, 1140, 1145, + 1150, 1156, 1161, 1167, 1172, 1178, 1183, 1189, + 1195, 1200, 1205, 1210, 1215, 1221, 1227, 1233, + 1240, 1246, 1251, 1255, 1260, 1266, 1272, 1278, + 1284, 1291, 1297, 1303, 1308, 1315, 1320, 1326, + 1331, 1338, 1345, 1351, 1357, 1363, 1368, 1374, + 1380, 1388, 1394, 1401, 1407, 1414, 1420, 1426, + 1432, 1439, 1445, 1452, 1459, 1466, 1472, 1479, + 1486, 1493, 1501, 1508, 1515, 1521, 1528, 1535, + 1543, 1550, 1557, 1564, 1572, 1580, 1587, 1595, + 1602, 1608, 1615, 1623, 1630, 1638, 1645, 1654, + 1660, 1669, 1676, 1685, 1693, 1702, 1709, 1717, + 1726, 1736, 1745, 1754, 1762, 1771, 1781, 1793, + 1801, 1810, 1820, 1828, 1837, 1847, 1858, 1869, + 1883, 1895, 1903, 1914, 1925, 1932, 1941, 1947, + 1961, 1976, 1998, 2001, 2010, 2020, 2029, 2038, + 2047, 2056, 2064, 2073, 2081, 2089, 2097, 2105, + 2113, 2120, 2127, 2134, 2141, 2148, 2155, 2161, + 2168, 2174, 2180, 2186, 2191, 2197, 2202, 2207, + 2212, 2217, 2222, 2226, 2231, 2235, 2239, 2243, + 2246, 2250, 2253, 2256, 2259, 2262, 2265, 2267, + 2270, 2272, 2274, 2276, 2278, 2279, 2280, 2282, + 2283, 2284, 2284, 2285, 2285, 2285, 2285, 2285, + 2285, 2285, 2284, 2283, 2282, 2281, 2280, 2279, + 2277, 2275, 2273, 2271, 2269, 2267, 2264, 2261, + 2258, 2255, 2252, 2249, 2245, 2241, 2237, 2233, + 2229, 2225, 2220, 2215, 2211, 2206, 2200, 2195, + 2189, 2184, 2178, 2172, 2166, 2159, 2153, 2146, + 2139, 2132, 2125, 2118, 2110, 2102, 2095, 2087, + /* B */ + 1021, 1034, 1047, 1055, 1055, 1054, 1054, 1055, + 1059, 1063, 1065, 1069, 1077, 1084, 1087, 1092, + 1100, 1106, 1111, 1117, 1121, 1125, 1130, 1136, + 1142, 1147, 1153, 1161, 1168, 1174, 1177, 1183, + 1188, 1195, 1199, 1207, 1215, 1221, 1226, 1232, + 1238, 1243, 1248, 1253, 1257, 1264, 1271, 1278, + 1286, 1292, 1299, 1303, 1308, 1310, 1317, 1323, + 1329, 1335, 1342, 1351, 1358, 1368, 1374, 1381, + 1384, 1391, 1398, 1404, 1409, 1413, 1418, 1426, + 1437, 1449, 1459, 1467, 1473, 1482, 1486, 1487, + 1489, 1496, 1499, 1504, 1512, 1520, 1527, 1536, + 1549, 1558, 1568, 1576, 1587, 1593, 1598, 1602, + 1608, 1609, 1612, 1618, 1627, 1631, 1637, 1645, + 1658, 1670, 1683, 1698, 1707, 1715, 1719, 1724, + 1722, 1728, 1736, 1741, 1745, 1755, 1763, 1769, + 1778, 1792, 1802, 1814, 1827, 1837, 1844, 1857, + 1869, 1880, 1890, 1891, 1899, 1911, 1924, 1936, + 1940, 1942, 1937, 1955, 1964, 1966, 1971, 1968, + 1990, 2032, 2079, 2015, 2024, 2034, 2043, 2052, + 2061, 2070, 2078, 2087, 2095, 2103, 2111, 2118, + 2126, 2133, 2141, 2148, 2155, 2161, 2168, 2174, + 2181, 2187, 2193, 2198, 2204, 2209, 2215, 2220, + 2225, 2229, 2234, 2238, 2243, 2247, 2251, 2255, + 2258, 2262, 2265, 2268, 2271, 2274, 2276, 2279, + 2281, 2283, 2285, 2287, 2289, 2290, 2291, 2293, + 2294, 2294, 2295, 2296, 2296, 2296, 2296, 2296, + 2296, 2295, 2294, 2294, 2293, 2291, 2290, 2289, + 2287, 2285, 2283, 2281, 2279, 2276, 2274, 2271, + 2268, 2265, 2261, 2258, 2254, 2250, 2246, 2242, + 2238, 2234, 2229, 2224, 2219, 2214, 2209, 2203, + 2198, 2192, 2186, 2180, 2174, 2167, 2161, 2154, + 2147, 2140, 2133, 2125, 2118, 2110, 2102, 2094 + }, + { + /* lsc - 7 */ + /* R */ + 1018, 1023, 1030, 1036, 1038, 1038, 1038, 1039, + 1039, 1041, 1044, 1047, 1050, 1054, 1059, 1063, + 1068, 1074, 1080, 1086, 1092, 1097, 1103, 1111, + 1118, 1125, 1132, 1138, 1145, 1151, 1158, 1165, + 1171, 1177, 1185, 1191, 1196, 1200, 1207, 1213, + 1220, 1226, 1231, 1237, 1243, 1249, 1255, 1261, + 1269, 1276, 1282, 1287, 1293, 1299, 1306, 1314, + 1321, 1329, 1335, 1342, 1348, 1354, 1361, 1368, + 1374, 1382, 1390, 1396, 1402, 1410, 1419, 1425, + 1431, 1438, 1446, 1453, 1461, 1470, 1478, 1486, + 1491, 1498, 1506, 1514, 1522, 1531, 1540, 1548, + 1557, 1564, 1572, 1579, 1588, 1597, 1607, 1613, + 1620, 1627, 1637, 1648, 1659, 1667, 1676, 1684, + 1693, 1703, 1711, 1719, 1727, 1737, 1746, 1755, + 1765, 1778, 1789, 1800, 1808, 1815, 1822, 1831, + 1841, 1851, 1860, 1872, 1883, 1898, 1911, 1930, + 1946, 1963, 1975, 1986, 1996, 2011, 2025, 2041, + 2060, 2081, 2094, 2105, 2119, 2132, 2147, 2156, + 2164, 2179, 2205, 2219, 2230, 2241, 2251, 2261, + 2271, 2281, 2290, 2300, 2309, 2318, 2327, 2335, + 2344, 2352, 2360, 2368, 2376, 2384, 2391, 2398, + 2405, 2412, 2419, 2425, 2432, 2438, 2444, 2449, + 2455, 2460, 2465, 2470, 2475, 2480, 2484, 2489, + 2493, 2497, 2500, 2504, 2507, 2511, 2514, 2516, + 2519, 2521, 2524, 2526, 2528, 2529, 2531, 2532, + 2533, 2534, 2535, 2536, 2536, 2537, 2537, 2537, + 2536, 2536, 2535, 2534, 2533, 2532, 2531, 2529, + 2527, 2525, 2523, 2521, 2519, 2516, 2513, 2510, + 2507, 2503, 2500, 2496, 2492, 2488, 2484, 2479, + 2474, 2470, 2465, 2459, 2454, 2448, 2443, 2437, + 2430, 2424, 2418, 2411, 2404, 2397, 2390, 2382, + 2375, 2367, 2359, 2351, 2342, 2334, 2325, 2316, + /* G */ + 1018, 1023, 1031, 1037, 1038, 1038, 1037, 1036, + 1037, 1038, 1040, 1042, 1044, 1048, 1052, 1056, + 1061, 1066, 1071, 1076, 1082, 1087, 1093, 1100, + 1107, 1113, 1120, 1126, 1132, 1138, 1144, 1150, + 1156, 1162, 1168, 1174, 1179, 1183, 1188, 1194, + 1199, 1204, 1209, 1215, 1221, 1226, 1231, 1237, + 1243, 1249, 1255, 1260, 1265, 1271, 1277, 1283, + 1289, 1295, 1301, 1307, 1312, 1318, 1324, 1330, + 1336, 1341, 1348, 1353, 1359, 1366, 1373, 1378, + 1385, 1391, 1398, 1404, 1411, 1418, 1424, 1430, + 1436, 1443, 1449, 1457, 1463, 1471, 1477, 1486, + 1493, 1498, 1505, 1512, 1520, 1528, 1536, 1542, + 1548, 1555, 1563, 1572, 1579, 1586, 1593, 1601, + 1608, 1616, 1625, 1633, 1641, 1648, 1655, 1663, + 1672, 1682, 1691, 1698, 1703, 1709, 1717, 1725, + 1733, 1743, 1754, 1766, 1776, 1786, 1794, 1807, + 1820, 1834, 1846, 1858, 1871, 1884, 1897, 1910, + 1926, 1939, 1951, 1959, 1970, 1980, 1994, 1998, + 2010, 2026, 2049, 2057, 2068, 2079, 2090, 2101, + 2112, 2122, 2133, 2143, 2153, 2162, 2172, 2181, + 2191, 2200, 2208, 2217, 2226, 2234, 2242, 2250, + 2258, 2265, 2273, 2280, 2287, 2294, 2300, 2307, + 2313, 2319, 2325, 2331, 2336, 2342, 2347, 2352, + 2357, 2361, 2366, 2370, 2374, 2378, 2382, 2385, + 2389, 2392, 2395, 2398, 2400, 2403, 2405, 2407, + 2409, 2411, 2412, 2414, 2415, 2416, 2417, 2417, + 2418, 2418, 2418, 2418, 2417, 2417, 2416, 2415, + 2414, 2413, 2412, 2410, 2408, 2407, 2404, 2402, + 2400, 2397, 2394, 2391, 2388, 2384, 2381, 2377, + 2373, 2369, 2365, 2360, 2355, 2351, 2346, 2340, + 2335, 2329, 2323, 2317, 2311, 2305, 2298, 2292, + 2285, 2278, 2271, 2263, 2256, 2248, 2240, 2232, + /* B */ + 1017, 1020, 1035, 1047, 1050, 1050, 1050, 1049, + 1051, 1052, 1053, 1054, 1057, 1061, 1066, 1069, + 1073, 1079, 1085, 1090, 1096, 1101, 1107, 1114, + 1123, 1129, 1136, 1143, 1151, 1157, 1162, 1171, + 1177, 1182, 1186, 1191, 1195, 1199, 1207, 1215, + 1219, 1223, 1227, 1235, 1240, 1247, 1253, 1258, + 1263, 1269, 1278, 1286, 1291, 1297, 1305, 1313, + 1316, 1321, 1329, 1337, 1342, 1346, 1353, 1360, + 1369, 1377, 1385, 1390, 1396, 1402, 1410, 1413, + 1419, 1424, 1430, 1435, 1442, 1451, 1458, 1465, + 1469, 1478, 1487, 1499, 1504, 1511, 1515, 1523, + 1530, 1533, 1535, 1540, 1549, 1557, 1567, 1575, + 1581, 1589, 1604, 1620, 1631, 1636, 1641, 1645, + 1649, 1651, 1658, 1664, 1672, 1678, 1686, 1688, + 1696, 1707, 1719, 1730, 1739, 1749, 1757, 1766, + 1771, 1786, 1800, 1809, 1811, 1820, 1826, 1836, + 1843, 1854, 1860, 1872, 1889, 1902, 1912, 1924, + 1954, 1978, 1997, 1995, 2005, 2016, 2034, 2032, + 2031, 2036, 2068, 2130, 2141, 2152, 2163, 2173, + 2183, 2194, 2204, 2213, 2223, 2232, 2242, 2251, + 2260, 2268, 2277, 2285, 2293, 2301, 2309, 2317, + 2324, 2331, 2338, 2345, 2352, 2358, 2365, 2371, + 2377, 2383, 2388, 2394, 2399, 2404, 2409, 2413, + 2418, 2422, 2426, 2430, 2434, 2438, 2441, 2444, + 2447, 2450, 2453, 2455, 2458, 2460, 2462, 2463, + 2465, 2466, 2468, 2469, 2469, 2470, 2471, 2471, + 2471, 2471, 2471, 2470, 2470, 2469, 2468, 2467, + 2465, 2464, 2462, 2460, 2458, 2456, 2453, 2451, + 2448, 2445, 2442, 2438, 2435, 2431, 2427, 2423, + 2419, 2414, 2410, 2405, 2400, 2395, 2389, 2384, + 2378, 2372, 2366, 2360, 2353, 2346, 2340, 2333, + 2325, 2318, 2310, 2303, 2295, 2287, 2278, 2270 + }, + { + /* lsc - 8 */ + /* R */ + 1024, 1021, 1018, 1016, 1015, 1014, 1013, 1014, + 1015, 1018, 1022, 1028, 1033, 1038, 1043, 1048, + 1054, 1059, 1064, 1070, 1075, 1080, 1085, 1090, + 1096, 1101, 1107, 1113, 1118, 1123, 1128, 1133, + 1139, 1144, 1150, 1156, 1161, 1166, 1172, 1178, + 1184, 1189, 1194, 1199, 1204, 1210, 1215, 1222, + 1229, 1235, 1240, 1245, 1250, 1256, 1262, 1268, + 1273, 1280, 1287, 1292, 1298, 1303, 1310, 1315, + 1322, 1329, 1336, 1341, 1348, 1355, 1360, 1365, + 1371, 1377, 1384, 1392, 1399, 1406, 1412, 1418, + 1423, 1429, 1437, 1444, 1452, 1458, 1466, 1473, + 1481, 1487, 1494, 1500, 1508, 1514, 1520, 1526, + 1534, 1544, 1552, 1560, 1567, 1576, 1583, 1589, + 1596, 1604, 1612, 1620, 1629, 1637, 1645, 1652, + 1662, 1669, 1677, 1683, 1694, 1702, 1710, 1718, + 1729, 1740, 1750, 1759, 1768, 1778, 1789, 1801, + 1808, 1814, 1823, 1835, 1845, 1852, 1866, 1885, + 1900, 1908, 1914, 1924, 1937, 1946, 1960, 1976, + 1996, 2004, 2007, 2011, 2019, 2026, 2034, 2041, + 2048, 2056, 2062, 2069, 2076, 2082, 2088, 2095, + 2101, 2106, 2112, 2118, 2123, 2128, 2133, 2138, + 2143, 2148, 2152, 2157, 2161, 2165, 2169, 2173, + 2176, 2180, 2183, 2186, 2189, 2192, 2195, 2197, + 2200, 2202, 2204, 2206, 2208, 2210, 2211, 2213, + 2214, 2215, 2216, 2217, 2217, 2218, 2218, 2218, + 2218, 2218, 2218, 2218, 2217, 2216, 2216, 2215, + 2213, 2212, 2211, 2209, 2207, 2205, 2203, 2201, + 2199, 2196, 2194, 2191, 2188, 2185, 2182, 2178, + 2175, 2171, 2167, 2163, 2159, 2155, 2151, 2146, + 2141, 2136, 2131, 2126, 2121, 2116, 2110, 2104, + 2098, 2092, 2086, 2080, 2073, 2066, 2060, 2053, + 2046, 2038, 2031, 2023, 2016, 2008, 2000, 1992, + /* G */ + 1025, 1021, 1019, 1017, 1014, 1013, 1012, 1013, + 1015, 1017, 1020, 1025, 1031, 1035, 1040, 1045, + 1051, 1056, 1060, 1065, 1071, 1077, 1082, 1086, + 1091, 1096, 1102, 1107, 1112, 1118, 1123, 1128, + 1133, 1137, 1142, 1148, 1154, 1159, 1164, 1170, + 1176, 1180, 1185, 1190, 1195, 1200, 1206, 1211, + 1217, 1223, 1228, 1233, 1238, 1244, 1248, 1253, + 1258, 1265, 1270, 1276, 1282, 1288, 1293, 1298, + 1304, 1310, 1315, 1320, 1327, 1333, 1339, 1344, + 1351, 1357, 1363, 1369, 1375, 1381, 1387, 1393, + 1398, 1405, 1412, 1418, 1425, 1431, 1436, 1442, + 1449, 1455, 1462, 1468, 1476, 1482, 1489, 1494, + 1501, 1509, 1516, 1522, 1529, 1537, 1544, 1551, + 1559, 1566, 1573, 1580, 1586, 1591, 1597, 1604, + 1612, 1618, 1627, 1636, 1645, 1654, 1664, 1673, + 1679, 1685, 1695, 1705, 1713, 1721, 1732, 1742, + 1752, 1758, 1766, 1776, 1787, 1794, 1801, 1812, + 1826, 1838, 1848, 1859, 1868, 1879, 1890, 1899, + 1915, 1928, 1937, 1939, 1947, 1955, 1962, 1970, + 1978, 1985, 1992, 1999, 2006, 2013, 2020, 2026, + 2032, 2038, 2044, 2050, 2056, 2062, 2067, 2072, + 2077, 2082, 2087, 2092, 2096, 2101, 2105, 2109, + 2113, 2117, 2121, 2124, 2127, 2131, 2134, 2137, + 2139, 2142, 2144, 2147, 2149, 2151, 2153, 2154, + 2156, 2157, 2159, 2160, 2161, 2161, 2162, 2163, + 2163, 2163, 2163, 2163, 2163, 2163, 2162, 2161, + 2161, 2160, 2158, 2157, 2156, 2154, 2153, 2151, + 2149, 2146, 2144, 2142, 2139, 2136, 2133, 2130, + 2127, 2124, 2120, 2117, 2113, 2109, 2105, 2101, + 2096, 2092, 2087, 2082, 2077, 2072, 2067, 2061, + 2056, 2050, 2044, 2038, 2032, 2025, 2019, 2012, + 2006, 1999, 1992, 1984, 1977, 1969, 1962, 1954, + /* B */ + 1024, 1021, 1020, 1019, 1015, 1013, 1012, 1014, + 1015, 1016, 1018, 1025, 1032, 1036, 1040, 1048, + 1053, 1057, 1060, 1065, 1070, 1076, 1080, 1085, + 1092, 1097, 1101, 1105, 1111, 1118, 1124, 1130, + 1134, 1140, 1144, 1149, 1155, 1161, 1168, 1173, + 1180, 1184, 1187, 1192, 1199, 1204, 1209, 1217, + 1224, 1229, 1232, 1237, 1241, 1247, 1250, 1255, + 1262, 1271, 1279, 1286, 1294, 1302, 1307, 1311, + 1316, 1320, 1324, 1328, 1336, 1344, 1351, 1358, + 1369, 1377, 1384, 1393, 1399, 1405, 1405, 1408, + 1411, 1418, 1425, 1431, 1437, 1444, 1451, 1459, + 1469, 1478, 1484, 1490, 1500, 1509, 1513, 1513, + 1518, 1524, 1531, 1533, 1538, 1546, 1555, 1563, + 1572, 1587, 1598, 1609, 1617, 1624, 1629, 1633, + 1637, 1642, 1650, 1654, 1656, 1666, 1677, 1687, + 1687, 1696, 1708, 1723, 1729, 1736, 1753, 1768, + 1781, 1790, 1800, 1813, 1819, 1816, 1808, 1823, + 1835, 1850, 1854, 1861, 1859, 1861, 1883, 1906, + 1937, 1928, 1921, 1945, 1953, 1961, 1968, 1976, + 1984, 1991, 1998, 2005, 2012, 2019, 2025, 2032, + 2038, 2044, 2050, 2056, 2062, 2067, 2073, 2078, + 2083, 2088, 2093, 2097, 2102, 2106, 2111, 2115, + 2118, 2122, 2126, 2129, 2133, 2136, 2139, 2142, + 2144, 2147, 2149, 2152, 2154, 2156, 2158, 2159, + 2161, 2162, 2163, 2165, 2165, 2166, 2167, 2167, + 2168, 2168, 2168, 2168, 2168, 2167, 2167, 2166, + 2165, 2164, 2163, 2162, 2160, 2159, 2157, 2155, + 2153, 2151, 2148, 2146, 2143, 2140, 2138, 2134, + 2131, 2128, 2124, 2121, 2117, 2113, 2109, 2104, + 2100, 2095, 2091, 2086, 2081, 2076, 2070, 2065, + 2059, 2053, 2048, 2042, 2035, 2029, 2022, 2016, + 2009, 2002, 1995, 1988, 1980, 1973, 1965, 1957 + }, + { + /* lsc - 9 */ + /* R */ + 1021, 1022, 1022, 1022, 1020, 1019, 1019, 1021, + 1022, 1026, 1028, 1033, 1038, 1044, 1049, 1054, + 1060, 1066, 1071, 1076, 1082, 1088, 1094, 1100, + 1106, 1112, 1117, 1122, 1127, 1133, 1139, 1145, + 1150, 1156, 1162, 1168, 1174, 1179, 1184, 1189, + 1196, 1201, 1206, 1211, 1217, 1222, 1228, 1235, + 1241, 1247, 1253, 1259, 1263, 1268, 1275, 1282, + 1287, 1294, 1302, 1309, 1315, 1321, 1327, 1333, + 1339, 1346, 1354, 1360, 1368, 1375, 1383, 1389, + 1396, 1401, 1406, 1411, 1419, 1426, 1434, 1442, + 1450, 1456, 1463, 1470, 1475, 1481, 1489, 1496, + 1503, 1510, 1517, 1524, 1532, 1541, 1550, 1556, + 1563, 1570, 1577, 1583, 1590, 1598, 1608, 1614, + 1622, 1630, 1642, 1651, 1658, 1666, 1675, 1684, + 1691, 1700, 1706, 1717, 1726, 1736, 1745, 1756, + 1765, 1773, 1784, 1794, 1804, 1816, 1825, 1835, + 1844, 1859, 1872, 1885, 1895, 1906, 1923, 1936, + 1945, 1949, 1965, 1981, 1995, 2009, 2013, 2014, + 2030, 2042, 2052, 2086, 2097, 2107, 2117, 2128, + 2137, 2147, 2157, 2166, 2175, 2184, 2193, 2202, + 2210, 2219, 2227, 2235, 2243, 2250, 2258, 2265, + 2272, 2279, 2285, 2292, 2298, 2305, 2311, 2316, + 2322, 2328, 2333, 2338, 2343, 2348, 2352, 2357, + 2361, 2365, 2369, 2373, 2376, 2380, 2383, 2386, + 2389, 2391, 2394, 2396, 2398, 2400, 2402, 2403, + 2405, 2406, 2407, 2408, 2409, 2409, 2410, 2410, + 2410, 2410, 2409, 2409, 2408, 2407, 2406, 2405, + 2403, 2402, 2400, 2398, 2396, 2394, 2391, 2388, + 2386, 2383, 2379, 2376, 2372, 2369, 2365, 2361, + 2357, 2352, 2347, 2343, 2338, 2333, 2327, 2322, + 2316, 2310, 2304, 2298, 2292, 2285, 2278, 2271, + 2264, 2257, 2250, 2242, 2234, 2226, 2218, 2210, + /* G */ + 1022, 1021, 1021, 1019, 1018, 1016, 1016, 1017, + 1018, 1021, 1024, 1029, 1033, 1039, 1043, 1048, + 1053, 1058, 1062, 1067, 1073, 1079, 1084, 1089, + 1094, 1100, 1105, 1110, 1115, 1120, 1125, 1131, + 1136, 1141, 1147, 1152, 1156, 1162, 1166, 1172, + 1177, 1182, 1187, 1192, 1197, 1202, 1208, 1213, + 1218, 1225, 1230, 1236, 1240, 1246, 1251, 1257, + 1261, 1267, 1273, 1279, 1285, 1292, 1297, 1303, + 1309, 1314, 1320, 1324, 1331, 1336, 1343, 1349, + 1355, 1361, 1367, 1372, 1379, 1386, 1392, 1398, + 1404, 1409, 1416, 1423, 1429, 1434, 1441, 1448, + 1454, 1459, 1466, 1472, 1479, 1486, 1493, 1499, + 1506, 1513, 1520, 1527, 1534, 1542, 1550, 1555, + 1561, 1568, 1576, 1583, 1589, 1597, 1606, 1614, + 1620, 1629, 1635, 1644, 1651, 1660, 1667, 1676, + 1683, 1690, 1702, 1712, 1719, 1725, 1735, 1746, + 1756, 1766, 1775, 1787, 1799, 1810, 1820, 1826, + 1833, 1844, 1857, 1867, 1879, 1892, 1902, 1908, + 1919, 1928, 1934, 1941, 1952, 1963, 1974, 1985, + 1996, 2006, 2016, 2026, 2036, 2046, 2055, 2064, + 2074, 2083, 2091, 2100, 2108, 2117, 2125, 2133, + 2140, 2148, 2155, 2162, 2169, 2176, 2183, 2189, + 2196, 2202, 2208, 2213, 2219, 2224, 2230, 2235, + 2240, 2244, 2249, 2253, 2257, 2261, 2265, 2269, + 2272, 2276, 2279, 2282, 2285, 2287, 2290, 2292, + 2294, 2296, 2297, 2299, 2300, 2301, 2302, 2303, + 2304, 2304, 2305, 2305, 2305, 2304, 2304, 2303, + 2303, 2302, 2301, 2299, 2298, 2296, 2294, 2292, + 2290, 2288, 2285, 2282, 2279, 2276, 2273, 2270, + 2266, 2262, 2258, 2254, 2250, 2245, 2241, 2236, + 2231, 2226, 2220, 2215, 2209, 2203, 2197, 2191, + 2184, 2178, 2171, 2164, 2157, 2149, 2142, 2134, + /* B */ + 1022, 1025, 1025, 1021, 1017, 1015, 1014, 1015, + 1016, 1019, 1022, 1027, 1032, 1038, 1043, 1047, + 1053, 1058, 1062, 1067, 1072, 1078, 1083, 1088, + 1094, 1101, 1106, 1111, 1115, 1120, 1126, 1133, + 1139, 1144, 1149, 1152, 1158, 1164, 1171, 1177, + 1182, 1186, 1191, 1199, 1204, 1209, 1215, 1221, + 1225, 1231, 1236, 1242, 1244, 1251, 1257, 1264, + 1267, 1273, 1280, 1288, 1293, 1298, 1303, 1309, + 1315, 1320, 1325, 1330, 1338, 1345, 1354, 1361, + 1369, 1374, 1380, 1387, 1394, 1400, 1406, 1414, + 1420, 1424, 1429, 1436, 1442, 1448, 1453, 1461, + 1467, 1473, 1479, 1486, 1493, 1501, 1507, 1512, + 1521, 1528, 1536, 1543, 1552, 1560, 1568, 1573, + 1578, 1583, 1588, 1594, 1598, 1605, 1613, 1620, + 1626, 1636, 1643, 1653, 1663, 1677, 1686, 1698, + 1705, 1711, 1724, 1734, 1740, 1749, 1759, 1765, + 1769, 1776, 1785, 1796, 1804, 1810, 1819, 1826, + 1838, 1850, 1860, 1870, 1886, 1905, 1916, 1918, + 1931, 1933, 1919, 1895, 1906, 1917, 1929, 1939, + 1950, 1961, 1971, 1981, 1991, 2001, 2011, 2021, + 2030, 2039, 2048, 2057, 2065, 2074, 2082, 2090, + 2098, 2106, 2114, 2121, 2128, 2135, 2142, 2149, + 2155, 2162, 2168, 2174, 2180, 2185, 2191, 2196, + 2201, 2206, 2211, 2215, 2220, 2224, 2228, 2232, + 2235, 2239, 2242, 2245, 2248, 2251, 2254, 2256, + 2258, 2260, 2262, 2264, 2266, 2267, 2268, 2269, + 2270, 2271, 2271, 2272, 2272, 2272, 2271, 2271, + 2270, 2270, 2269, 2268, 2266, 2265, 2263, 2261, + 2259, 2257, 2255, 2252, 2250, 2247, 2244, 2241, + 2237, 2234, 2230, 2226, 2222, 2218, 2213, 2208, + 2204, 2199, 2193, 2188, 2183, 2177, 2171, 2165, + 2159, 2152, 2146, 2139, 2132, 2125, 2118, 2110 + }, + { + /* lsc - 10 */ + /* R */ + 1023, 1022, 1022, 1020, 1017, 1015, 1015, 1016, + 1019, 1022, 1026, 1030, 1036, 1039, 1043, 1049, + 1056, 1062, 1067, 1072, 1077, 1083, 1088, 1094, + 1101, 1108, 1114, 1119, 1125, 1130, 1137, 1142, + 1148, 1153, 1158, 1164, 1171, 1177, 1182, 1187, + 1193, 1198, 1205, 1210, 1217, 1222, 1228, 1234, + 1240, 1246, 1252, 1259, 1264, 1270, 1277, 1284, + 1291, 1296, 1304, 1312, 1319, 1324, 1329, 1335, + 1343, 1351, 1357, 1364, 1370, 1375, 1383, 1390, + 1396, 1403, 1411, 1417, 1423, 1431, 1438, 1446, + 1451, 1456, 1463, 1471, 1479, 1487, 1495, 1504, + 1512, 1517, 1523, 1530, 1538, 1545, 1554, 1563, + 1574, 1583, 1591, 1598, 1606, 1612, 1620, 1627, + 1636, 1645, 1655, 1664, 1674, 1683, 1692, 1700, + 1706, 1712, 1722, 1734, 1744, 1752, 1756, 1766, + 1776, 1787, 1795, 1808, 1819, 1827, 1838, 1847, + 1854, 1867, 1881, 1890, 1900, 1916, 1932, 1943, + 1953, 1960, 1972, 1982, 1995, 2012, 2019, 2029, + 2046, 2077, 2088, 2075, 2084, 2093, 2101, 2110, + 2118, 2126, 2134, 2141, 2149, 2156, 2163, 2170, + 2177, 2184, 2190, 2197, 2203, 2209, 2215, 2221, + 2226, 2232, 2237, 2242, 2247, 2252, 2256, 2261, + 2265, 2269, 2273, 2277, 2281, 2284, 2287, 2291, + 2294, 2296, 2299, 2302, 2304, 2306, 2308, 2310, + 2312, 2313, 2315, 2316, 2317, 2318, 2319, 2320, + 2320, 2320, 2320, 2320, 2320, 2320, 2319, 2319, + 2318, 2317, 2316, 2314, 2313, 2311, 2309, 2307, + 2305, 2303, 2301, 2298, 2295, 2292, 2289, 2286, + 2283, 2279, 2275, 2272, 2267, 2263, 2259, 2254, + 2250, 2245, 2240, 2235, 2229, 2224, 2218, 2212, + 2207, 2200, 2194, 2188, 2181, 2174, 2167, 2160, + 2153, 2146, 2138, 2130, 2122, 2114, 2106, 2098, + /* G */ + 1022, 1022, 1021, 1019, 1017, 1015, 1015, 1015, + 1018, 1020, 1023, 1027, 1033, 1037, 1042, 1047, + 1052, 1057, 1062, 1067, 1072, 1077, 1082, 1087, + 1093, 1099, 1104, 1109, 1114, 1120, 1125, 1130, + 1135, 1140, 1145, 1151, 1157, 1163, 1168, 1173, + 1178, 1183, 1189, 1194, 1199, 1204, 1210, 1215, + 1221, 1227, 1232, 1237, 1243, 1249, 1254, 1259, + 1264, 1270, 1277, 1283, 1288, 1294, 1299, 1305, + 1311, 1316, 1322, 1328, 1335, 1340, 1347, 1353, + 1359, 1365, 1370, 1376, 1382, 1389, 1396, 1402, + 1408, 1414, 1420, 1426, 1432, 1438, 1445, 1452, + 1458, 1464, 1470, 1477, 1484, 1491, 1499, 1506, + 1513, 1520, 1527, 1535, 1542, 1549, 1557, 1564, + 1572, 1578, 1585, 1592, 1600, 1607, 1613, 1622, + 1630, 1638, 1645, 1655, 1664, 1671, 1678, 1688, + 1695, 1701, 1708, 1718, 1728, 1738, 1748, 1758, + 1767, 1777, 1788, 1796, 1806, 1817, 1828, 1835, + 1844, 1853, 1865, 1874, 1884, 1897, 1909, 1918, + 1931, 1953, 1968, 1962, 1972, 1981, 1990, 1998, + 2007, 2016, 2024, 2032, 2040, 2048, 2056, 2063, + 2070, 2078, 2085, 2092, 2098, 2105, 2111, 2117, + 2124, 2129, 2135, 2141, 2146, 2152, 2157, 2162, + 2166, 2171, 2175, 2180, 2184, 2188, 2192, 2195, + 2199, 2202, 2206, 2209, 2211, 2214, 2217, 2219, + 2221, 2223, 2225, 2227, 2229, 2230, 2231, 2232, + 2233, 2234, 2235, 2235, 2236, 2236, 2236, 2236, + 2235, 2235, 2234, 2233, 2232, 2231, 2230, 2228, + 2227, 2225, 2223, 2221, 2219, 2216, 2214, 2211, + 2208, 2205, 2202, 2198, 2195, 2191, 2187, 2183, + 2179, 2175, 2170, 2166, 2161, 2156, 2151, 2145, + 2140, 2134, 2129, 2123, 2117, 2110, 2104, 2097, + 2091, 2084, 2077, 2069, 2062, 2054, 2047, 2039, + /* B */ + 1022, 1022, 1023, 1021, 1018, 1015, 1014, 1014, + 1017, 1020, 1024, 1027, 1034, 1039, 1043, 1048, + 1054, 1059, 1064, 1068, 1074, 1079, 1085, 1090, + 1096, 1103, 1110, 1114, 1118, 1124, 1129, 1134, + 1138, 1143, 1146, 1152, 1159, 1165, 1170, 1175, + 1180, 1186, 1192, 1197, 1202, 1208, 1216, 1222, + 1229, 1234, 1240, 1246, 1252, 1258, 1262, 1267, + 1272, 1278, 1286, 1294, 1299, 1303, 1308, 1314, + 1320, 1326, 1333, 1339, 1346, 1351, 1357, 1362, + 1368, 1375, 1378, 1384, 1390, 1396, 1402, 1410, + 1419, 1424, 1432, 1439, 1449, 1457, 1466, 1473, + 1480, 1484, 1487, 1494, 1499, 1504, 1508, 1516, + 1522, 1531, 1540, 1550, 1561, 1570, 1581, 1590, + 1597, 1605, 1613, 1616, 1619, 1624, 1630, 1637, + 1643, 1648, 1655, 1664, 1677, 1684, 1693, 1701, + 1707, 1715, 1723, 1737, 1746, 1755, 1763, 1772, + 1781, 1793, 1807, 1814, 1823, 1833, 1842, 1847, + 1854, 1855, 1861, 1878, 1888, 1902, 1906, 1921, + 1929, 1948, 1944, 1902, 1912, 1921, 1930, 1940, + 1948, 1957, 1966, 1974, 1982, 1991, 1998, 2006, + 2014, 2021, 2029, 2036, 2043, 2050, 2056, 2063, + 2069, 2075, 2081, 2087, 2093, 2098, 2104, 2109, + 2114, 2119, 2124, 2128, 2133, 2137, 2141, 2145, + 2149, 2152, 2156, 2159, 2162, 2165, 2168, 2171, + 2173, 2176, 2178, 2180, 2182, 2183, 2185, 2186, + 2188, 2189, 2189, 2190, 2191, 2191, 2191, 2192, + 2191, 2191, 2191, 2190, 2190, 2189, 2188, 2187, + 2185, 2184, 2182, 2180, 2178, 2176, 2174, 2171, + 2169, 2166, 2163, 2160, 2156, 2153, 2149, 2146, + 2142, 2138, 2134, 2129, 2125, 2120, 2115, 2110, + 2105, 2099, 2094, 2088, 2082, 2076, 2070, 2064, + 2057, 2051, 2044, 2037, 2030, 2023, 2015, 2008 + }, + { + /* lsc - 11 */ + /* R */ + 1022, 1022, 1021, 1020, 1019, 1019, 1019, 1020, + 1021, 1025, 1029, 1033, 1037, 1043, 1048, 1055, + 1061, 1068, 1073, 1078, 1084, 1090, 1097, 1103, + 1109, 1114, 1120, 1126, 1132, 1138, 1143, 1149, + 1155, 1160, 1165, 1172, 1179, 1184, 1191, 1198, + 1205, 1211, 1218, 1223, 1229, 1236, 1241, 1248, + 1256, 1263, 1269, 1275, 1281, 1288, 1294, 1300, + 1305, 1312, 1320, 1327, 1333, 1338, 1346, 1353, + 1362, 1367, 1374, 1382, 1391, 1396, 1402, 1410, + 1419, 1424, 1431, 1439, 1447, 1454, 1461, 1470, + 1478, 1485, 1490, 1497, 1505, 1513, 1520, 1527, + 1536, 1544, 1554, 1561, 1568, 1576, 1583, 1592, + 1599, 1609, 1615, 1624, 1634, 1642, 1651, 1662, + 1674, 1680, 1689, 1699, 1709, 1715, 1725, 1734, + 1740, 1744, 1755, 1762, 1771, 1780, 1790, 1798, + 1812, 1828, 1841, 1852, 1863, 1871, 1883, 1894, + 1901, 1908, 1920, 1926, 1928, 1938, 1959, 1977, + 1988, 1996, 2007, 2016, 2031, 2050, 2068, 2080, + 2098, 2105, 2108, 2137, 2148, 2159, 2170, 2180, + 2191, 2201, 2211, 2220, 2230, 2239, 2249, 2258, + 2266, 2275, 2284, 2292, 2300, 2308, 2316, 2323, + 2330, 2338, 2345, 2351, 2358, 2365, 2371, 2377, + 2383, 2389, 2394, 2399, 2405, 2410, 2414, 2419, + 2423, 2428, 2432, 2436, 2439, 2443, 2446, 2449, + 2452, 2455, 2458, 2460, 2463, 2465, 2466, 2468, + 2470, 2471, 2472, 2473, 2474, 2475, 2475, 2475, + 2475, 2475, 2475, 2474, 2474, 2473, 2472, 2471, + 2469, 2468, 2466, 2464, 2462, 2459, 2457, 2454, + 2451, 2448, 2445, 2442, 2438, 2434, 2430, 2426, + 2422, 2417, 2413, 2408, 2403, 2398, 2392, 2387, + 2381, 2375, 2369, 2362, 2356, 2349, 2342, 2335, + 2328, 2321, 2313, 2305, 2297, 2289, 2281, 2272, + /* G */ + 1022, 1021, 1020, 1018, 1016, 1015, 1015, 1015, + 1017, 1020, 1023, 1027, 1032, 1037, 1042, 1047, + 1052, 1058, 1063, 1068, 1072, 1078, 1083, 1089, + 1094, 1100, 1104, 1109, 1114, 1120, 1125, 1130, + 1135, 1140, 1145, 1150, 1156, 1161, 1166, 1171, + 1177, 1183, 1188, 1193, 1198, 1204, 1210, 1216, + 1222, 1228, 1233, 1237, 1242, 1248, 1254, 1259, + 1264, 1269, 1276, 1281, 1287, 1291, 1298, 1304, + 1310, 1314, 1320, 1327, 1333, 1337, 1342, 1349, + 1356, 1362, 1369, 1375, 1381, 1387, 1394, 1400, + 1406, 1412, 1418, 1424, 1430, 1437, 1444, 1450, + 1457, 1463, 1469, 1476, 1484, 1491, 1497, 1502, + 1509, 1517, 1524, 1530, 1538, 1544, 1551, 1558, + 1566, 1572, 1579, 1587, 1595, 1601, 1609, 1617, + 1626, 1632, 1639, 1647, 1656, 1664, 1670, 1677, + 1687, 1698, 1706, 1712, 1720, 1729, 1741, 1750, + 1760, 1769, 1780, 1787, 1795, 1805, 1817, 1830, + 1842, 1848, 1855, 1865, 1874, 1883, 1895, 1906, + 1917, 1931, 1945, 1946, 1957, 1969, 1981, 1992, + 2003, 2014, 2025, 2035, 2046, 2056, 2066, 2076, + 2086, 2095, 2104, 2114, 2123, 2131, 2140, 2148, + 2156, 2165, 2172, 2180, 2188, 2195, 2202, 2209, + 2216, 2222, 2229, 2235, 2241, 2247, 2252, 2258, + 2263, 2268, 2273, 2278, 2282, 2287, 2291, 2295, + 2299, 2303, 2306, 2309, 2312, 2315, 2318, 2321, + 2323, 2325, 2327, 2329, 2331, 2332, 2333, 2334, + 2335, 2336, 2337, 2337, 2337, 2337, 2337, 2337, + 2336, 2335, 2334, 2333, 2332, 2331, 2329, 2327, + 2325, 2323, 2321, 2318, 2315, 2312, 2309, 2306, + 2302, 2299, 2295, 2291, 2287, 2282, 2278, 2273, + 2268, 2263, 2258, 2252, 2247, 2241, 2235, 2228, + 2222, 2216, 2209, 2202, 2195, 2187, 2180, 2172, + /* B */ + 1021, 1022, 1021, 1019, 1018, 1017, 1016, 1016, + 1018, 1021, 1024, 1027, 1032, 1037, 1041, 1045, + 1051, 1056, 1060, 1064, 1069, 1074, 1080, 1085, + 1090, 1096, 1101, 1106, 1112, 1117, 1122, 1127, + 1132, 1136, 1141, 1146, 1151, 1156, 1160, 1166, + 1172, 1177, 1182, 1186, 1190, 1196, 1202, 1208, + 1213, 1219, 1225, 1229, 1234, 1240, 1247, 1252, + 1257, 1262, 1269, 1276, 1282, 1286, 1292, 1299, + 1305, 1310, 1316, 1322, 1329, 1334, 1339, 1345, + 1353, 1358, 1364, 1372, 1379, 1383, 1388, 1395, + 1401, 1408, 1414, 1420, 1427, 1435, 1441, 1449, + 1455, 1462, 1468, 1475, 1482, 1489, 1495, 1501, + 1509, 1517, 1525, 1532, 1539, 1546, 1552, 1560, + 1568, 1575, 1582, 1589, 1595, 1601, 1608, 1615, + 1620, 1625, 1631, 1639, 1649, 1657, 1662, 1666, + 1675, 1687, 1698, 1704, 1710, 1718, 1731, 1739, + 1744, 1752, 1765, 1776, 1783, 1790, 1804, 1818, + 1833, 1834, 1840, 1846, 1855, 1862, 1872, 1880, + 1892, 1891, 1887, 1916, 1928, 1940, 1952, 1963, + 1975, 1986, 1997, 2007, 2018, 2028, 2038, 2048, + 2058, 2068, 2077, 2086, 2096, 2104, 2113, 2122, + 2130, 2138, 2146, 2154, 2162, 2169, 2176, 2183, + 2190, 2197, 2203, 2210, 2216, 2222, 2228, 2233, + 2239, 2244, 2249, 2254, 2259, 2263, 2267, 2272, + 2276, 2279, 2283, 2286, 2290, 2293, 2295, 2298, + 2301, 2303, 2305, 2307, 2309, 2310, 2312, 2313, + 2314, 2315, 2316, 2316, 2316, 2317, 2316, 2316, + 2316, 2315, 2314, 2313, 2312, 2311, 2309, 2308, + 2306, 2304, 2302, 2299, 2297, 2294, 2291, 2288, + 2284, 2281, 2277, 2273, 2269, 2265, 2260, 2256, + 2251, 2246, 2241, 2235, 2230, 2224, 2218, 2212, + 2206, 2200, 2193, 2186, 2179, 2172, 2165, 2157 + } + }, + .msc_tbl = { + { + /* msc - 0 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 1 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 2 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 3 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 4 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 5 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 6 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 7 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 8 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 9 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 10 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + }, + { + /* msc - 11 */ + /* R */ + 3309, 2803, 2297, 1912, 1648, 1475, 1377, 1331, + 1336, 1409, 1547, 1752, 2081, 2548, 3143, 3688, + 0, 0, 0, 0, 0, 0, 2926, 2348, + 1871, 1541, 1318, 1181, 1103, 1068, 1079, 1132, + 1236, 1405, 1677, 2093, 2663, 3288, 0, 0, + 0, 0, 0, 0, 2558, 1991, 1559, 1270, + 1089, 985, 932, 904, 914, 955, 1026, 1159, + 1386, 1747, 2272, 2904, 0, 0, 0, 0, + 0, 0, 2243, 1711, 1325, 1079, 932, 855, + 818, 800, 805, 834, 887, 989, 1179, 1489, + 1952, 2566, 0, 0, 0, 0, 0, 0, + 1980, 1488, 1157, 948, 827, 772, 745, 734, + 736, 755, 795, 877, 1033, 1297, 1713, 2264, + 0, 0, 0, 0, 0, 0, 1766, 1323, + 1032, 855, 761, 716, 699, 689, 690, 705, + 735, 799, 928, 1157, 1519, 2034, 0, 0, + 0, 0, 0, 0, 1613, 1206, 941, 787, + 706, 672, 663, 655, 656, 668, 689, 742, + 854, 1055, 1381, 1858, 0, 0, 0, 0, + 0, 0, 1500, 1119, 872, 730, 659, 632, + 623, 628, 629, 631, 647, 692, 790, 977, + 1279, 1724, 0, 0, 0, 0, 0, 0, + 1424, 1059, 827, 690, 623, 594, 588, 590, + 592, 594, 609, 655, 750, 929, 1220, 1649, + 0, 0, 0, 0, 0, 0, 1384, 1031, + 804, 667, 593, 562, 555, 553, 554, 558, + 577, 628, 727, 907, 1191, 1613, 0, 0, + 0, 0, 0, 0, 1371, 1024, 795, 652, + 571, 534, 521, 519, 519, 527, 552, 607, + 715, 900, 1188, 1605, 0, 0, 0, 0, + 0, 0, 1385, 1040, 798, 647, 558, 517, + 498, 492, 493, 506, 536, 599, 718, 913, + 1215, 1625, 0, 0, 0, 0, 0, 0, + 1416, 1073, 822, 661, 566, 516, 492, 480, + 482, 501, 537, 609, 736, 947, 1263, 1665, + 0, 0, 0, 0, 0, 0, 1454, 1122, + 872, 700, 596, 535, 501, 487, 490, 514, + 558, 642, 780, 1004, 1326, 1701, 0, 0, + 0, 0, 0, 0, 1482, 1189, 938, 759, + 644, 574, 531, 512, 518, 546, 603, 698, + 848, 1080, 1395, 1720, 0, 0, 0, 0, + 0, 0, 1495, 1268, 1036, 852, 722, 639, + 590, 570, 575, 611, 677, 788, 948, 1179, + 1459, 1720, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* G */ + 3256, 2747, 2243, 1861, 1594, 1424, 1324, 1280, + 1291, 1366, 1496, 1708, 2026, 2495, 3073, 3638, + 0, 0, 0, 0, 0, 0, 2859, 2304, + 1825, 1494, 1276, 1141, 1063, 1028, 1041, 1095, + 1200, 1363, 1633, 2045, 2619, 3241, 0, 0, + 0, 0, 0, 0, 2505, 1947, 1520, 1238, + 1056, 954, 896, 869, 878, 920, 997, 1128, + 1354, 1705, 2216, 2856, 0, 0, 0, 0, + 0, 0, 2206, 1676, 1301, 1052, 903, 825, + 786, 769, 775, 805, 858, 964, 1152, 1457, + 1912, 2518, 0, 0, 0, 0, 0, 0, + 1954, 1467, 1134, 925, 803, 745, 717, 706, + 710, 730, 772, 854, 1010, 1271, 1676, 2232, + 0, 0, 0, 0, 0, 0, 1742, 1305, + 1012, 836, 738, 692, 674, 663, 666, 684, + 713, 778, 907, 1134, 1493, 2007, 0, 0, + 0, 0, 0, 0, 1591, 1186, 923, 769, + 686, 652, 639, 631, 634, 648, 670, 723, + 834, 1035, 1359, 1832, 0, 0, 0, 0, + 0, 0, 1480, 1102, 859, 715, 643, 614, + 603, 607, 608, 614, 632, 677, 774, 961, + 1260, 1707, 0, 0, 0, 0, 0, 0, + 1407, 1047, 816, 679, 610, 581, 574, 575, + 578, 582, 598, 643, 737, 915, 1200, 1628, + 0, 0, 0, 0, 0, 0, 1376, 1024, + 798, 660, 586, 553, 547, 542, 544, 549, + 569, 619, 718, 893, 1180, 1595, 0, 0, + 0, 0, 0, 0, 1368, 1023, 793, 650, + 568, 530, 518, 513, 514, 523, 548, 605, + 710, 893, 1179, 1593, 0, 0, 0, 0, + 0, 0, 1385, 1042, 802, 648, 559, 516, + 496, 490, 492, 506, 536, 598, 717, 909, + 1208, 1616, 0, 0, 0, 0, 0, 0, + 1421, 1076, 828, 667, 570, 518, 492, 480, + 483, 503, 541, 611, 738, 949, 1258, 1658, + 0, 0, 0, 0, 0, 0, 1457, 1131, + 877, 707, 601, 540, 505, 488, 492, 517, + 563, 647, 783, 1003, 1324, 1696, 0, 0, + 0, 0, 0, 0, 1492, 1202, 948, 767, + 653, 579, 536, 515, 522, 551, 610, 705, + 855, 1087, 1401, 1724, 0, 0, 0, 0, + 0, 0, 1513, 1281, 1049, 861, 732, 649, + 598, 575, 581, 616, 685, 795, 958, 1192, + 1470, 1728, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, + /* B */ + 3146, 2655, 2171, 1798, 1537, 1365, 1268, 1223, + 1243, 1311, 1440, 1645, 1950, 2403, 2965, 3473, + 0, 0, 0, 0, 0, 0, 2780, 2229, + 1766, 1443, 1229, 1094, 1023, 989, 1001, 1053, + 1152, 1312, 1580, 1977, 2523, 3121, 0, 0, + 0, 0, 0, 0, 2455, 1903, 1475, 1191, + 1014, 915, 862, 838, 845, 883, 956, 1083, + 1304, 1652, 2160, 2779, 0, 0, 0, 0, + 0, 0, 2166, 1646, 1259, 1013, 868, 796, + 756, 741, 748, 775, 825, 928, 1111, 1419, + 1875, 2464, 0, 0, 0, 0, 0, 0, + 1927, 1441, 1104, 897, 778, 722, 694, 682, + 687, 708, 745, 826, 979, 1240, 1647, 2190, + 0, 0, 0, 0, 0, 0, 1727, 1286, + 990, 814, 718, 672, 654, 642, 648, 665, + 694, 757, 885, 1108, 1472, 1974, 0, 0, + 0, 0, 0, 0, 1587, 1177, 909, 754, + 672, 637, 621, 613, 617, 633, 655, 704, + 814, 1016, 1342, 1814, 0, 0, 0, 0, + 0, 0, 1480, 1099, 848, 705, 632, 602, + 588, 589, 592, 600, 618, 661, 759, 947, + 1249, 1691, 0, 0, 0, 0, 0, 0, + 1413, 1048, 809, 671, 602, 573, 563, 561, + 564, 570, 587, 630, 724, 902, 1192, 1613, + 0, 0, 0, 0, 0, 0, 1378, 1023, + 794, 655, 581, 549, 541, 534, 536, 543, + 560, 609, 705, 882, 1168, 1580, 0, 0, + 0, 0, 0, 0, 1371, 1022, 792, 646, + 566, 529, 516, 510, 510, 517, 541, 594, + 698, 881, 1169, 1580, 0, 0, 0, 0, + 0, 0, 1390, 1042, 800, 647, 559, 516, + 496, 488, 490, 503, 528, 588, 704, 897, + 1196, 1602, 0, 0, 0, 0, 0, 0, + 1429, 1080, 830, 667, 570, 519, 494, 483, + 484, 499, 534, 601, 726, 933, 1246, 1638, + 0, 0, 0, 0, 0, 0, 1465, 1134, + 880, 709, 602, 541, 510, 492, 494, 515, + 558, 637, 772, 991, 1306, 1675, 0, 0, + 0, 0, 0, 0, 1498, 1207, 953, 774, + 658, 585, 542, 521, 526, 553, 607, 697, + 846, 1072, 1378, 1698, 0, 0, 0, 0, + 0, 0, 1524, 1292, 1063, 875, 743, 660, + 609, 587, 592, 623, 689, 795, 956, 1183, + 1454, 1705, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + } + }, + .isp_cem_table = { + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 + }, + .isp_cem_table1 = { + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 + } +}; +struct isp_cfg_pt sc2356_mipi_isp_cfg = { + .isp_test_settings = &sc2356_mipi_isp_test_settings, + .isp_3a_settings = &sc2356_mipi_isp_3a_settings, + .isp_tunning_settings = &sc2356_mipi_isp_tuning_settings, + .isp_iso_settings = &sc2356_mipi_isp_iso_settings +}; + + +#endif /* end of _SC2356_MIPI_H_V853_ */ \ No newline at end of file diff --git a/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/isp_ini_parse.c b/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/isp_ini_parse.c index 5e8b5c117..47399f0bd 100755 --- a/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/isp_ini_parse.c +++ b/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/isp_ini_parse.c @@ -37,7 +37,7 @@ #if (ISP_VERSION >= 600) #if defined CONFIG_SENSOR_GC2053_MIPI || defined CONFIG_SENSOR_GC4663_MIPI || defined CONFIG_SENSOR_SC5336_MIPI || \ defined CONFIG_SENSOR_GC1084_MIPI || CONFIG_SENSOR_BF2257CS_MIPI || CONFIG_SENSOR_SC2355_MIPI || CONFIG_SENSOR_F37P_MIPI || \ - defined CONFIG_SENSOR_F355P_MIPI || CONFIG_SENSOR_OV02B10_MIPI || CONFIG_SENSOR_GC2083_MIPI + defined CONFIG_SENSOR_F355P_MIPI || CONFIG_SENSOR_OV02B10_MIPI || CONFIG_SENSOR_GC2083_MIPI || CONFIG_SENSOR_SC2356_MIPI #ifdef CONFIG_SENSOR_GC4663_MIPI #include "SENSOR_H/gc4663_mipi_default_ini_v853.h" #include "SENSOR_H/gc4663_120fps_mipi_default_ini_v853.h" @@ -116,6 +116,10 @@ #include "SENSOR_H/gc2083_mipi_isp600_20240911_ir.h" #endif +#ifdef CONFIG_SENSOR_SC2356_MIPI +#include "SENSOR_H/sc2356_mipi_isp600_20241226_141139.h" +#endif + #else #include "SENSOR_H/gc2053_mipi_default_ini_v853.h" #endif @@ -130,7 +134,7 @@ struct isp_cfg_array cfg_arr[] = { #if (ISP_VERSION >= 600) #if defined CONFIG_SENSOR_GC2053_MIPI || defined CONFIG_SENSOR_GC4663_MIPI || defined CONFIG_SENSOR_SC5336_MIPI || \ defined CONFIG_SENSOR_GC1084_MIPI || CONFIG_SENSOR_BF2257CS_MIPI || CONFIG_SENSOR_SC2355_MIPI || CONFIG_SENSOR_F37P_MIPI || \ - defined CONFIG_SENSOR_F355P_MIPI || CONFIG_SENSOR_OV02B10_MIPI || CONFIG_SENSOR_GC2083_MIPI + defined CONFIG_SENSOR_F355P_MIPI || CONFIG_SENSOR_OV02B10_MIPI || CONFIG_SENSOR_GC2083_MIPI || CONFIG_SENSOR_SC2356_MIPI #ifdef CONFIG_SENSOR_GC2053_MIPI {"gc2053_mipi", "gc2053_mipi_isp600_20231212_111630_day", 1920, 1088, 20, 0, 0, &gc2053_mipi_v853_isp_cfg}, @@ -199,6 +203,11 @@ struct isp_cfg_array cfg_arr[] = { {"gc2083_mipi", "gc2083_mipi_isp600_20240911_ir", 1920, 1088, 15, 0, 1, &gc2083_mipi_ir_isp_cfg}, #endif +#ifdef CONFIG_SENSOR_SC2356_MIPI + {"sc2356_mipi", "sc2356_mipi_isp600_20241226_141139", 1600, 1200, 15, 0, 0, &sc2356_mipi_isp_cfg}, + {"sc2356_mipi", "sc2356_mipi_isp600_20241220_143956", 1600, 1200, 15, 1, 0, &sc2356_mipi_isp_cfg}, +#endif + #ifdef CONFIG_SENSOR_GC1084_MIPI {"gc1084_mipi", "gc1084_mipi_v853_20230410_164555_day", 1280, 720, 15, 0, 0, &gc1084_mipi_v853_isp_cfg}, #ifdef CONFIG_ENABLE_AIISP diff --git a/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_server.c b/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_server.c index a8cdd6cbf..3e6cb4f49 100755 --- a/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_server.c +++ b/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_server.c @@ -2126,6 +2126,9 @@ static int isp_rpbuf_buffer_rx_cb(struct rpbuf_buffer *buffer, rpmsg_data[5] = awb_result->wb_gain_output.r_gain * 256 / awb_result->wb_gain_output.gr_gain; rpmsg_data[6] = awb_result->wb_gain_output.b_gain * 256 / awb_result->wb_gain_output.gb_gain; } + + rpmsg_data[5] |= (hw_isp->id << 16); + rpmsg_data[6] |= (hw_isp->id << 16); isp_rpmsg_ept_send(hw_isp->ept, rpmsg_data, 7*4); isp_rpmsg_encpp_send(hw_isp); diff --git a/lichee/rtos-hal/hal/source/vin/vin_video/vin_core.h b/lichee/rtos-hal/hal/source/vin/vin_video/vin_core.h index 132bd9891..b796310bf 100755 --- a/lichee/rtos-hal/hal/source/vin/vin_video/vin_core.h +++ b/lichee/rtos-hal/hal/source/vin/vin_video/vin_core.h @@ -41,6 +41,7 @@ struct vin_core { int sensor_sel; int csi_sel; int mipi_sel; + int csi_ch; int isp_sel; int vipp_sel; int tdm_rx_sel; diff --git a/target/allwinner/v851s3-fastboot_sl100_front/busybox-init-base-files/APP/SL100FRONTPANEL b/target/allwinner/v851s3-fastboot_sl100_front/busybox-init-base-files/APP/SL100FRONTPANEL index 77ae2ed1a..fefb1b900 100755 Binary files a/target/allwinner/v851s3-fastboot_sl100_front/busybox-init-base-files/APP/SL100FRONTPANEL and b/target/allwinner/v851s3-fastboot_sl100_front/busybox-init-base-files/APP/SL100FRONTPANEL differ